|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectorg.apache.derby.impl.sql.compile.QueryTreeNode
org.apache.derby.impl.sql.compile.ResultSetNode
org.apache.derby.impl.sql.compile.FromTable
org.apache.derby.impl.sql.compile.SingleChildResultSetNode
org.apache.derby.impl.sql.compile.ProjectRestrictNode
public class ProjectRestrictNode
A ProjectRestrictNode represents a result set for any of the basic DML operations: SELECT, INSERT, UPDATE, and DELETE. For INSERT with a VALUES clause, restriction will be null. For both INSERT and UPDATE, the resultColumns in the selectList will contain the names of the columns being inserted into or updated. NOTE: A ProjectRestrictNode extends FromTable since it can exist in a FromList.
| Field Summary | |
|---|---|
private boolean |
accessPathConsidered
|
private boolean |
accessPathModified
|
private boolean |
childResultOptimized
|
(package private) ValueNode |
constantRestriction
Constant expressions to be evaluated here. |
private boolean |
getTableNumberHere
|
private boolean |
materialize
|
(package private) SubqueryList |
projectSubquerys
List of subqueries in projection |
ValueNode |
restriction
The ValueNode for the restriction to be evaluated here. |
PredicateList |
restrictionList
Restriction as a PredicateList |
(package private) SubqueryList |
restrictSubquerys
List of subqueries in restriction |
| Fields inherited from class org.apache.derby.impl.sql.compile.SingleChildResultSetNode |
|---|
childResult, hasTrulyTheBestAccessPath |
| Fields inherited from class org.apache.derby.impl.sql.compile.FromTable |
|---|
ADD_PLAN, bestAccessPath, bestCostEstimate, bestSortAvoidancePath, correlationName, corrTableName, currentAccessPath, hashKeyColumns, initialCapacity, level, LOAD_PLAN, loadFactor, maxCapacity, origTableName, REMOVE_PLAN, tableNumber, tableProperties, trulyTheBestAccessPath, userSpecifiedJoinStrategy |
| Fields inherited from class org.apache.derby.impl.sql.compile.ResultSetNode |
|---|
costEstimate, cursorTargetTable, finalCostEstimate, insertSource, optimizer, referencedTableMap, resultColumns, resultSetNumber, scratchCostEstimate, statementResultSet |
| Fields inherited from class org.apache.derby.impl.sql.compile.QueryTreeNode |
|---|
AUTOINCREMENT_CREATE_MODIFY, AUTOINCREMENT_INC_INDEX, AUTOINCREMENT_IS_AUTOINCREMENT_INDEX, AUTOINCREMENT_START_INDEX, isPrivilegeCollectionRequired |
| Constructor Summary | |
|---|---|
ProjectRestrictNode()
|
|
| Method Summary | |
|---|---|
(package private) void |
acceptChildren(Visitor v)
Accept the visitor for all visitable children of this node. |
ResultSetNode |
addNewPredicate(Predicate predicate)
Add a new predicate to the list. |
ResultSetNode |
considerMaterialization(JBitSet outerTables)
Consider materialization for this ResultSet tree if it is valid and cost effective (It is not valid if incorrect results would be returned.) |
boolean |
considerSortAvoidancePath()
Check whether this optimizable's sort avoidance path should be considered. |
ResultSetNode |
ensurePredicateList(int numTables)
Ensure that the top of the RSN tree has a PredicateList. |
boolean |
feasibleJoinStrategy(OptimizablePredicateList predList,
Optimizer optimizer)
Is the current proposed join strategy for this optimizable feasible given the predicate list? |
boolean |
flattenableInFromSubquery(FromList fromList)
Evaluate whether or not the subquery in a FromSubquery is flattenable. |
void |
generate(ActivationClassBuilder acb,
MethodBuilder mb)
For joins, the tree will be (nodes are left out if the clauses are empty): ProjectRestrictResultSet -- for the having and the select list SortResultSet -- for the group by list ProjectRestrictResultSet -- for the where and the select list (if no group or having) the result set for the fromList |
private void |
generateMinion(ExpressionClassBuilder acb,
MethodBuilder mb,
boolean genChildResultSet)
Logic shared by generate() and generateResultSet(). |
void |
generateNOPProjectRestrict()
Bypass the generation of this No-Op ProjectRestrict, and just generate its child result set. |
void |
generateResultSet(ExpressionClassBuilder acb,
MethodBuilder mb)
General logic shared by Core compilation. |
AccessPath |
getBestAccessPath()
Get the best access path for this Optimizable. |
AccessPath |
getBestSortAvoidancePath()
Get the best sort-avoidance path for this Optimizable. |
CostEstimate |
getCostEstimate()
Get the CostEstimate for this ProjectRestrictNode. |
AccessPath |
getCurrentAccessPath()
Get the current access path under consideration for this Optimizable |
CostEstimate |
getFinalCostEstimate()
Get the final CostEstimate for this ProjectRestrictNode. |
protected FromTable |
getFromTableByName(java.lang.String name,
java.lang.String schemaName,
boolean exactMatch)
Determine whether or not the specified name is an exposed name in the current query block. |
(package private) PredicateList |
getRestrictionList()
Return the restriction list from this node. |
int |
getTableNumber()
Get this Optimizable's table number |
AccessPath |
getTrulyTheBestAccessPath()
Get the best access path overall for this Optimizable. |
(package private) java.lang.String |
getUserSpecifiedJoinStrategy()
Return the user specified join strategy, if any for this table. |
void |
init(java.lang.Object childResult,
java.lang.Object projection,
java.lang.Object restriction,
java.lang.Object restrictionList,
java.lang.Object projectSubquerys,
java.lang.Object restrictSubquerys,
java.lang.Object tableProperties)
Initializer for a ProjectRestrictNode. |
(package private) boolean |
isPossibleDistinctScan(java.util.Set distinctColumns)
Is it possible to do a distinct scan on this ResultSet tree. |
boolean |
legalJoinOrder(JBitSet assignedTableMap)
Can this Optimizable appear at the current location in the join order. |
(package private) void |
markForDistinctScan()
Mark the underlying scan as a distinct scan. |
Optimizable |
modifyAccessPath(JBitSet outerTables)
Modify the access path for this Optimizable, as necessary. |
boolean |
nextAccessPath(Optimizer optimizer,
OptimizablePredicateList predList,
RowOrdering rowOrdering)
Choose the next access path to evaluate for this Optimizable. |
(package private) boolean |
nopProjectRestrict()
Determine whether this ProjectRestrict does anything. |
ResultSetNode |
optimize(DataDictionary dataDictionary,
PredicateList predicates,
double outerRows)
Optimize this ProjectRestrictNode. |
CostEstimate |
optimizeIt(Optimizer optimizer,
OptimizablePredicateList predList,
CostEstimate outerCost,
RowOrdering rowOrdering)
Choose the best access path for this Optimizable. |
ResultSetNode |
preprocess(int numTables,
GroupByList gbl,
FromList fromList)
Put a ProjectRestrictNode on top of each FromTable in the FromList. |
(package private) void |
printRememberingBestAccessPath(int planType,
AccessPath bestPath)
|
void |
printSubNodes(int depth)
Prints the sub-nodes of this object. |
void |
pullOptPredicates(OptimizablePredicateList optimizablePredicates)
Pull all the OptimizablePredicates from this Optimizable and put them in the given OptimizablePredicateList. |
void |
pushExpressions(PredicateList predicateList)
Push expressions down to the first ResultSetNode which can do expression evaluation and has the same referenced table map. |
(package private) void |
pushOffsetFetchFirst(ValueNode offset,
ValueNode fetchFirst,
boolean hasJDBClimitClause)
Push down the offset and fetch first parameters, if any, to the underlying child result set. |
boolean |
pushOptPredicate(OptimizablePredicate optimizablePredicate)
Push an OptimizablePredicate down, if this node accepts it. |
(package private) void |
pushOrderByList(OrderByList orderByList)
Push the order by list down from InsertNode into its child result set so that the optimizer has all of the information that it needs to consider sort avoidance. |
void |
rememberAsBest(int planType,
Optimizer optimizer)
Remember the current access path as the best one (so far). |
void |
rememberSortAvoidancePath()
Mark this optimizable so that its sort avoidance path will be considered. |
private Optimizable |
replaceWithHashTableNode()
This method creates a HashTableNode between the PRN and it's child when the optimizer chooses hash join on an arbitrary (non-FBT) result set tree. |
void |
setRefActionInfo(long fkIndexConglomId,
int[] fkColArray,
java.lang.String parentResultSetId,
boolean dependentScan)
set the Information gathered from the parent table that is required to peform a referential action on dependent table. |
void |
setRestriction(ValueNode restriction)
|
void |
startOptimizing(Optimizer optimizer,
RowOrdering rowOrdering)
Begin the optimization process for this Optimizable. |
double |
uniqueJoin(OptimizablePredicateList predList)
Does this optimizable have a uniqueness condition on the given predicate list, and if so, how many unique keys will be returned per scan. |
int |
updateTargetLockMode()
Get the lock mode for the target of an update statement (a delete or update). |
void |
verifyProperties(DataDictionary dDictionary)
Verify that the Properties list with optimizer overrides, if specified, is valid |
| Methods inherited from class org.apache.derby.impl.sql.compile.SingleChildResultSetNode |
|---|
adjustForSortElimination, adjustForSortElimination, changeAccessPath, decrementLevel, forUpdate, getChildResult, init, initAccessPaths, isNotExists, isOneRowResultSet, isOrderedOn, modifyAccessPaths, referencesSessionSchema, referencesTarget, reflectionNeededForProjection, setChildResult, setLevel, subqueryReferencesTarget, updateBestPlanMap |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Methods inherited from interface org.apache.derby.iapi.sql.compile.Optimizable |
|---|
getDataDictionary, getReferencedTableMap, getResultSetNumber |
| Field Detail |
|---|
public ValueNode restriction
ValueNode constantRestriction
public PredicateList restrictionList
SubqueryList projectSubquerys
SubqueryList restrictSubquerys
private boolean accessPathModified
private boolean accessPathConsidered
private boolean childResultOptimized
private boolean materialize
private boolean getTableNumberHere
| Constructor Detail |
|---|
public ProjectRestrictNode()
| Method Detail |
|---|
public void init(java.lang.Object childResult,
java.lang.Object projection,
java.lang.Object restriction,
java.lang.Object restrictionList,
java.lang.Object projectSubquerys,
java.lang.Object restrictSubquerys,
java.lang.Object tableProperties)
init in interface Nodeinit in class QueryTreeNodechildResult - The child ResultSetNodeprojection - The result column list for the projectionrestriction - An expression representing the restriction to be
evaluated here.restrictionList - Restriction as a PredicateListprojectSubquerys - List of subqueries in the projectionrestrictSubquerys - List of subqueries in the restrictiontableProperties - Properties list associated with the table
public boolean nextAccessPath(Optimizer optimizer,
OptimizablePredicateList predList,
RowOrdering rowOrdering)
throws StandardException
Optimizable
nextAccessPath in interface OptimizablenextAccessPath in class FromTableoptimizer - Optimizer to use.predList - The predicate list for this optimizable.
The optimizer always passes null, and it is up
to the optimizable object to pass along its
own predicate list, if appropriate, when delegating
this method.rowOrdering - The row ordering for all the outer tables in
the join order. This method will add the ordering
of the next access path to the given RowOrdering.
StandardException - Thrown on errorOptimizable.nextAccessPath(org.apache.derby.iapi.sql.compile.Optimizer, org.apache.derby.iapi.sql.compile.OptimizablePredicateList, org.apache.derby.iapi.sql.compile.RowOrdering)
public void rememberAsBest(int planType,
Optimizer optimizer)
throws StandardException
Optimizable
rememberAsBest in interface OptimizablerememberAsBest in class FromTableplanType - The type of plan (one of Optimizer.NORMAL_PLAN
or Optimizer.SORT_AVOIDANCE_PLAN)optimizer - The OptimizerImpl that is telling this Optimizable
to remember its current path as "truly the best".
StandardException - Thrown on errorOptimizable.rememberAsBest(int, org.apache.derby.iapi.sql.compile.Optimizer)
void printRememberingBestAccessPath(int planType,
AccessPath bestPath)
public void startOptimizing(Optimizer optimizer,
RowOrdering rowOrdering)
Optimizable
startOptimizing in interface OptimizablestartOptimizing in class FromTableOptimizable.startOptimizing(org.apache.derby.iapi.sql.compile.Optimizer, org.apache.derby.iapi.sql.compile.RowOrdering)public int getTableNumber()
Optimizable
getTableNumber in interface OptimizablegetTableNumber in class FromTableOptimizable.getTableNumber()
public CostEstimate optimizeIt(Optimizer optimizer,
OptimizablePredicateList predList,
CostEstimate outerCost,
RowOrdering rowOrdering)
throws StandardException
Optimizable
optimizeIt in interface OptimizableoptimizeIt in class FromTableoptimizer - Optimizer to use.predList - The predicate list to optimize againstouterCost - The CostEstimate for the outer tables in the join order,
telling how many times this Optimizable will be scanned.rowOrdering - The row ordering for all the tables in the
join order, including this one.
StandardException - Thrown on errorOptimizable.optimizeIt(org.apache.derby.iapi.sql.compile.Optimizer, org.apache.derby.iapi.sql.compile.OptimizablePredicateList, org.apache.derby.iapi.sql.compile.CostEstimate, org.apache.derby.iapi.sql.compile.RowOrdering)
public boolean feasibleJoinStrategy(OptimizablePredicateList predList,
Optimizer optimizer)
throws StandardException
Optimizable
feasibleJoinStrategy in interface OptimizablefeasibleJoinStrategy in class FromTablepredList - The predicate list that has been pushed down to
this optimizableoptimizer - The optimizer to use.
StandardException - Thrown on errorOptimizable.feasibleJoinStrategy(org.apache.derby.iapi.sql.compile.OptimizablePredicateList, org.apache.derby.iapi.sql.compile.Optimizer)public AccessPath getCurrentAccessPath()
Optimizable
getCurrentAccessPath in interface OptimizablegetCurrentAccessPath in class FromTableOptimizable.getCurrentAccessPath()public AccessPath getBestAccessPath()
Optimizable
getBestAccessPath in interface OptimizablegetBestAccessPath in class FromTableOptimizable.getBestAccessPath()public AccessPath getBestSortAvoidancePath()
Optimizable
getBestSortAvoidancePath in interface OptimizablegetBestSortAvoidancePath in class FromTableOptimizable.getBestSortAvoidancePath()public AccessPath getTrulyTheBestAccessPath()
Optimizable
getTrulyTheBestAccessPath in interface OptimizablegetTrulyTheBestAccessPath in class SingleChildResultSetNodeOptimizable.getTrulyTheBestAccessPath()public void rememberSortAvoidancePath()
Optimizable
rememberSortAvoidancePath in interface OptimizablerememberSortAvoidancePath in class FromTableOptimizable.rememberSortAvoidancePath()public boolean considerSortAvoidancePath()
Optimizable
considerSortAvoidancePath in interface OptimizableconsiderSortAvoidancePath in class FromTableOptimizable.considerSortAvoidancePath()
public boolean pushOptPredicate(OptimizablePredicate optimizablePredicate)
throws StandardException
Optimizable
pushOptPredicate in interface OptimizablepushOptPredicate in class FromTableoptimizablePredicate - OptimizablePredicate to push down.
StandardException - Thrown on errorOptimizable.pushOptPredicate(org.apache.derby.iapi.sql.compile.OptimizablePredicate)
public void pullOptPredicates(OptimizablePredicateList optimizablePredicates)
throws StandardException
Optimizable
pullOptPredicates in interface OptimizablepullOptPredicates in class SingleChildResultSetNodeoptimizablePredicates - The list to put the pulled predicates
in.
StandardException - Thrown on errorOptimizable.pullOptPredicates(org.apache.derby.iapi.sql.compile.OptimizablePredicateList)
public Optimizable modifyAccessPath(JBitSet outerTables)
throws StandardException
Optimizable
modifyAccessPath in interface OptimizablemodifyAccessPath in class FromTableouterTables - Bit map of the tables that are outer to this one
in the join order.
StandardException - Thrown on errorOptimizable.modifyAccessPath(org.apache.derby.iapi.util.JBitSet)
private Optimizable replaceWithHashTableNode()
throws StandardException
StandardException - Thrown on error
public void verifyProperties(DataDictionary dDictionary)
throws StandardException
Optimizable
verifyProperties in interface OptimizableverifyProperties in class FromTabledDictionary - The DataDictionary to use.
StandardException - Thrown on errorOptimizable.verifyProperties(org.apache.derby.iapi.sql.dictionary.DataDictionary)public boolean legalJoinOrder(JBitSet assignedTableMap)
Optimizable
legalJoinOrder in interface OptimizablelegalJoinOrder in class FromTableassignedTableMap - The tables that have been placed so far in the join order.
Optimizable.legalJoinOrder(org.apache.derby.iapi.util.JBitSet)
public double uniqueJoin(OptimizablePredicateList predList)
throws StandardException
Optimizable
uniqueJoin in interface OptimizableuniqueJoin in class FromTablepredList - The predicate list to check
StandardException - Thrown on errorOptimizable.uniqueJoin(org.apache.derby.iapi.sql.compile.OptimizablePredicateList)PredicateList getRestrictionList()
java.lang.String getUserSpecifiedJoinStrategy()
getUserSpecifiedJoinStrategy in class FromTablepublic void printSubNodes(int depth)
printSubNodes in class SingleChildResultSetNodedepth - The depth of this node in the tree
public ResultSetNode preprocess(int numTables,
GroupByList gbl,
FromList fromList)
throws StandardException
preprocess in class SingleChildResultSetNodenumTables - Number of tables in the DML Statementgbl - The group by list, if anyfromList - The from list, if any
StandardException - Thrown on error
public void pushExpressions(PredicateList predicateList)
throws StandardException
pushExpressions in class SingleChildResultSetNodepredicateList - The PredicateList.
StandardException - Thrown on error
public ResultSetNode addNewPredicate(Predicate predicate)
throws StandardException
addNewPredicate in class SingleChildResultSetNodepredicate - The predicate to add
StandardException - Thrown on errorpublic boolean flattenableInFromSubquery(FromList fromList)
flattenableInFromSubquery in class SingleChildResultSetNodefromList - The outer from list
public ResultSetNode ensurePredicateList(int numTables)
throws StandardException
ensurePredicateList in class SingleChildResultSetNodenumTables - The number of tables in the query.
StandardException - Thrown on error
public ResultSetNode optimize(DataDictionary dataDictionary,
PredicateList predicates,
double outerRows)
throws StandardException
optimize in class SingleChildResultSetNodedataDictionary - The DataDictionary to use for optimizationpredicates - The PredicateList to optimize. This should
be a join predicate.outerRows - The number of outer joining rows
StandardException - Thrown on errorpublic CostEstimate getCostEstimate()
getCostEstimate in class ResultSetNode
public CostEstimate getFinalCostEstimate()
throws StandardException
getFinalCostEstimate in class SingleChildResultSetNodeStandardException
public void generate(ActivationClassBuilder acb,
MethodBuilder mb)
throws StandardException
generate in class QueryTreeNodeacb - The ActivationClassBuilder for the class being builtmb - The method for the generated code to go into
StandardException - Thrown on error
public void generateResultSet(ExpressionClassBuilder acb,
MethodBuilder mb)
throws StandardException
generateResultSet in class ResultSetNodeacb - The ExpressionClassBuilder for the class being builtmb - The method the expression will go into
StandardException - Thrown on error
private void generateMinion(ExpressionClassBuilder acb,
MethodBuilder mb,
boolean genChildResultSet)
throws StandardException
acb - The ExpressionClassBuilder for the class being builtmb - The method the expression will go into
StandardException - Thrown on errorboolean nopProjectRestrict()
public void generateNOPProjectRestrict()
throws StandardException
StandardException - Thrown on error
public ResultSetNode considerMaterialization(JBitSet outerTables)
throws StandardException
considerMaterialization in class ResultSetNodeStandardException - Thrown on error
protected FromTable getFromTableByName(java.lang.String name,
java.lang.String schemaName,
boolean exactMatch)
throws StandardException
getFromTableByName in class SingleChildResultSetNodename - The specified name to search for as an exposed name.schemaName - Schema name, if non-null.exactMatch - Whether or not we need an exact match on specified schema and table
names or match on table id.
StandardException - Thrown on errorpublic int updateTargetLockMode()
updateTargetLockMode in class SingleChildResultSetNodeTransactionControllerboolean isPossibleDistinctScan(java.util.Set distinctColumns)
isPossibleDistinctScan in class ResultSetNodedistinctColumns - the set of distinct columns
void markForDistinctScan()
markForDistinctScan in class ResultSetNode
void acceptChildren(Visitor v)
throws StandardException
acceptChildren in class SingleChildResultSetNodev - the visitor
StandardException - on error
public void setRefActionInfo(long fkIndexConglomId,
int[] fkColArray,
java.lang.String parentResultSetId,
boolean dependentScan)
setRefActionInfo in class QueryTreeNodepublic void setRestriction(ValueNode restriction)
void pushOrderByList(OrderByList orderByList)
pushOrderByList in class ResultSetNodeorderByList - The order by list
void pushOffsetFetchFirst(ValueNode offset,
ValueNode fetchFirst,
boolean hasJDBClimitClause)
pushOffsetFetchFirst in class ResultSetNodeoffset - the OFFSET, if anyfetchFirst - the OFFSET FIRST, if anyhasJDBClimitClause - true if the clauses were added by (and have the semantics of) a JDBC limit clause
|
Built on Wed 2013-06-12 15:21:56+0000, from revision ??? | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||