| java.lang.Object org.apache.derby.impl.sql.compile.QueryTreeNode org.apache.derby.impl.sql.compile.Predicate
Method Summary | |
public Visitable | accept(Visitor v) Accept a visitor, and call v.visit()
on child nodes as necessary. | public String | binaryRelOpColRefsToString() Get a string version of the column references for this predicate
IF it's a binary relational operator. | public void | categorize() Categorize this predicate. | void | clearQualifierFlag() Clear the qualifier flag. | void | clearScanFlags() | public int | compareTo(Object other) | public boolean | compareWithKnownConstant(Optimizable optTable, boolean considerParameters) | public void | copyFields(Predicate otherPred) Copy all fields of this Predicate (except the two that
are set from 'init'). | public boolean | equalsComparisonWithConstantExpression(Optimizable optTable) | void | generateAbsoluteColumnId(MethodBuilder mb, Optimizable optTable) | void | generateExpressionOperand(Optimizable optTable, int columnPosition, ExpressionClassBuilder acb, MethodBuilder mb) | void | generateNegate(MethodBuilder mb, Optimizable optTable) | void | generateOperator(MethodBuilder mb, Optimizable optTable) | void | generateOrderableVariantType(MethodBuilder mb, Optimizable optTable) | void | generateOrderedNulls(MethodBuilder mb) | void | generateQualMethod(ExpressionClassBuilder acb, MethodBuilder mb, Optimizable optTable) | void | generateRelativeColumnId(MethodBuilder mb, Optimizable optTable) | public AndNode | getAndNode() Return the andNode. | public DataValueDescriptor | getCompareValue(Optimizable optTable) | int | getEquivalenceClass() Get the equivalenceClass for this predicate. | public int | getIndexPosition() | protected Predicate | getPredScopedForResultSet(JBitSet parentRSNsTables, ResultSetNode childRSN, int[] whichRC) If this predicate's operator is a BinaryRelationalOperatorNode,
then look at the operands and return a new, equivalent predicate
that is "scoped" to the received ResultSetNode. | public boolean | getPushable() Return the pushable. | public JBitSet | getReferencedMap() | public JBitSet | getReferencedSet() Return the referencedSet. | public RelationalOperator | getRelop() Get the RelationalOperator on the left side of the AND node, if
there is one. | public Hashtable | getSearchClauseHT() Get the search clause Hash Table. | int | getStartOperator(Optimizable optTable) Get the start operator for this predicate for a scan. | int | getStopOperator(Optimizable optTable) | public int | hasEqualOnColumnList(int[] baseColumnPositions, Optimizable optTable) | public boolean | hasMethodCall() | public boolean | hasSubquery() | public void | init(Object andNode, Object referencedSet) Initializer. | protected boolean | isJoinPredicate() Is this predicate a join predicate? In order to be so,
it must be a binary relational operator node that has
a column reference on both sides. | final public boolean | isOrList() | final public boolean | isPushableOrClause(Optimizable optTable) Is this predicate an pushable OR list?
Does the predicate represent a AND'd list of OR term's, all of which
are pushable. | public boolean | isQualifier() | protected boolean | isScopedForPush() Return whether or not this predicate is a scoped copy of
another predicate. | protected boolean | isScopedToSourceResultSet() Return true if this predicate is scoped AND the scoped
operand is a ColumnReference that points to a source result
set. | public boolean | isStartKey() | public boolean | isStopKey() | final public boolean | isStoreQualifier() Is this predicate a possible Qualifier for store?
Current 2 types of predicates can be pushed to store:
1) RelationalOperator -
represented with by left operand as instance of RelationalOperator.
2) A single And'd term of a list of OR terms
represented by left operand as instance of OrNode.
More checking specific operator's terms to see if they are finally
pushable to store. | protected void | markAsScopedForPush() Indicate that this predicate is a scoped copy of some other
predicate (i.e. | public void | markQualifier() | public void | markStartKey() | public void | markStopKey() | public void | printSubNodes(int depth) Prints the sub-nodes of this object. | protected boolean | pushableToSubqueries() Determine whether or not this predicate is eligible for
push-down into subqueries. | protected boolean | remapScopedPred() When remapping a "normal" (i.e. | public double | selectivity(Optimizable optTable) | public void | setAndNode(AndNode andNode) Set the andNode. | void | setEquivalenceClass(int equivalenceClass) Set the equivalence class, if any, for this predicate. | void | setIndexPosition(int indexPosition) | public void | setPushable(boolean pushable) Set whether or not this predicate is pushable. | void | setTransitiveSearchClauseAdded(RelationalOperator ro) Mark this predicate as having been used to add a new predicate
of the specified type via transitive closure on search clauses. | public String | toString() Convert this object to a String. | boolean | transitiveSearchClauseAdded(RelationalOperator ro) Return whether or not this predicate has been used
to add a new search clause of the specified type via transitive closure. |
equivalenceClass | int equivalenceClass(Code) | | |
indexPosition | int indexPosition(Code) | | |
isQualifier | protected boolean isQualifier(Code) | | |
pushable | boolean pushable(Code) | | |
startKey | protected boolean startKey(Code) | | |
stopKey | protected boolean stopKey(Code) | | |
binaryRelOpColRefsToString | public String binaryRelOpColRefsToString()(Code) | | Get a string version of the column references for this predicate
IF it's a binary relational operator. We only print out the
names of the operands if they are column references; otherwise
we just print a dummy value. This is for debugging purposes
only--it's a convenient way to see what columns the predicate
is referencing, especially when tracing through code and printing
assert failure.
|
categorize | public void categorize() throws StandardException(Code) | | Categorize this predicate. Initially, this means
building a bit map of the referenced tables for each predicate.
exception: StandardException - Thrown on error |
clearQualifierFlag | void clearQualifierFlag()(Code) | | Clear the qualifier flag.
|
clearScanFlags | void clearScanFlags()(Code) | | Clear the start/stop position and qualifier flags
|
copyFields | public void copyFields(Predicate otherPred)(Code) | | Copy all fields of this Predicate (except the two that
are set from 'init').
|
getAndNode | public AndNode getAndNode()(Code) | | Return the andNode.
AndNode The andNode. |
getEquivalenceClass | int getEquivalenceClass()(Code) | | Get the equivalenceClass for this predicate.
The equivalenceClass for this predicate. |
getPredScopedForResultSet | protected Predicate getPredScopedForResultSet(JBitSet parentRSNsTables, ResultSetNode childRSN, int[] whichRC) throws StandardException(Code) | | If this predicate's operator is a BinaryRelationalOperatorNode,
then look at the operands and return a new, equivalent predicate
that is "scoped" to the received ResultSetNode. By "scoped" we
mean that the operands, which shold be column references, have been
mapped to the appropriate result columns in the received RSN.
This is useful for pushing predicates from outer queries down
into inner queries, in which case the column references need
to be remapped.
For example, let V1 represent
select i,j from t1 UNION select i,j from t2
and V2 represent
select a,b from t3 UNION select a,b from t4
Then assume we have the following query:
select * from V1, V2 where V1.j = V2.b
Let's further assume that this Predicate object represents the
"V1.j = V2.b" operator and that the childRSN we received
as a parameter represents one of the subqueries to which we
want to push the predicate; let's say it's:
select i,j from t1
Then this method will return a new predicate whose binary
operator represents the expression "T1.j = V2.b" (that is, V1.j
will be mapped to the corresponding column in T1). For more on
how that mapping is made, see the "getScopedOperand()" method
in BinaryRelationalOperatorNode.java.
ASSUMPTION: We should only get to this method if we know that
at least one operand in this predicate can and should be mapped
to the received childRSN. For an example of where that check is
made, see the pushOptPredicate() method in SetOperatorNode.java.
Parameters: parentRSNsTables - Set of all table numbers referenced bythe ResultSetNode that is _parent_ to the received childRSN.We need this to make sure we don't scope the operands to aResultSetNode to which they don't apply. Parameters: childRSN - The result set node for which we want to createa scoped predicate. Parameters: whichRC - If not -1 then this tells us which ResultColumnin the received childRSN we need to use for the scoped predicate;if -1 then the column position of the scoped column referencewill be stored in this array and passed back to the caller. A new predicate whose operands have been scoped to thereceived childRSN. |
getPushable | public boolean getPushable()(Code) | | Return the pushable.
boolean Whether or not the predicate is pushable. |
getReferencedSet | public JBitSet getReferencedSet()(Code) | | Return the referencedSet.
JBitSet The referencedSet. |
getRelop | public RelationalOperator getRelop()(Code) | | Get the RelationalOperator on the left side of the AND node, if
there is one. If the left side is not a RelationalOperator, return
null.
The RelationalOperator on the left side of the AND node,if any. |
getSearchClauseHT | public Hashtable getSearchClauseHT()(Code) | | Get the search clause Hash Table.
|
getStartOperator | int getStartOperator(Optimizable optTable)(Code) | | Get the start operator for this predicate for a scan.
Parameters: optTable - The optimizable table, so we can tell which side ofthe operator the search column is on. The start operator for a start key on this column. |
init | public void init(Object andNode, Object referencedSet)(Code) | | Initializer.
Parameters: andNode - The top of the predicate Parameters: referencedSet - Bit map of referenced tables |
isJoinPredicate | protected boolean isJoinPredicate()(Code) | | Is this predicate a join predicate? In order to be so,
it must be a binary relational operator node that has
a column reference on both sides.
Whether or not this is a join predicate. |
isOrList | final public boolean isOrList()(Code) | | |
isPushableOrClause | final public boolean isPushableOrClause(Optimizable optTable) throws StandardException(Code) | | Is this predicate an pushable OR list?
Does the predicate represent a AND'd list of OR term's, all of which
are pushable. To be pushable each of OR terms must be a legal
qualifier, which is a column reference on one side of a Relational
operator and a constant on the other.
true if the predicate is a pushable set of OR clauses. exception: StandardException - Standard exception policy. |
isScopedForPush | protected boolean isScopedForPush()(Code) | | Return whether or not this predicate is a scoped copy of
another predicate.
|
isScopedToSourceResultSet | protected boolean isScopedToSourceResultSet() throws StandardException(Code) | | Return true if this predicate is scoped AND the scoped
operand is a ColumnReference that points to a source result
set. If the scoped operand is not a ColumnReference that
points to a source result set then it must be pointing to
some kind of expression, such as a literal (ex. 'strlit'),
an aggregate value (ex. "count(*)"), or the result of a
function (ex. "sin(i)") or operator (ex. "i+1").
This method is used when pushing predicates to determine how
far down the query tree a scoped predicate needs to be pushed
to allow for successful evaluation of the scoped operand. If
the scoped operand is not pointing to a source result set
then it should not be pushed any further down tree. The reason
is that evaluation of the expression to which the operand is
pointing may depend on other values from the current level
in the tree (ex. "sin(i)" depends on the value of "i", which
could be a column at the predicate's current level). If we
pushed the predicate further down, those values could become
inaccessible, leading to execution-time errors.
If, on the other hand, the scoped operand *is* pointing to
a source result set, then we want to push it further down
the tree until it reaches that result set, which allows
evaluation of this predicate to occur as close to store as
possible. This method doesn't actually do the push, it just
returns "true" and then the caller can push as appropriate.
|
isStoreQualifier | final public boolean isStoreQualifier()(Code) | | Is this predicate a possible Qualifier for store?
Current 2 types of predicates can be pushed to store:
1) RelationalOperator -
represented with by left operand as instance of RelationalOperator.
2) A single And'd term of a list of OR terms
represented by left operand as instance of OrNode.
More checking specific operator's terms to see if they are finally
pushable to store. In the final push at execution each term of the AND
or OR must be a Relational operator with a column reference on one side
and a constant on the other.
true if term is wither a AND of a RelationalOperator, or anOR of one or more Relational Operators. exception: StandardException - Standard exception policy. |
markAsScopedForPush | protected void markAsScopedForPush()(Code) | | Indicate that this predicate is a scoped copy of some other
predicate (i.e. it was created as the result of a call to
getPredScopedForResultSet() on some other predicate).
|
printSubNodes | public void printSubNodes(int depth)(Code) | | Prints the sub-nodes of this object. See QueryTreeNode.java for
how tree printing is supposed to work.
Parameters: depth - The depth of this node in the tree |
pushableToSubqueries | protected boolean pushableToSubqueries() throws StandardException(Code) | | Determine whether or not this predicate is eligible for
push-down into subqueries. Right now the only predicates
we consider to be eligible are those which 1) are Binary
Relational operator nodes and 2) have a column reference
on BOTH sides, each of which has a reference to a base
table somewhere beneath it.
Whether or not this predicate is eligible to bepushed into subqueries. |
remapScopedPred | protected boolean remapScopedPred()(Code) | | When remapping a "normal" (i.e. non-scoped) predicate both
of the predicate's operands are remapped and that's it.
But when remapping a scoped predicate, things are slightly
different. This method handles remapping of scoped predicates.
We know that, for a scoped predicate, exactly one operand has
been scoped for a specific target result set; the other operand
is pointing to some other instance of FromTable with which the
target result set is to be joined (see getScopedOperand() in
BinaryRelationalOperatorNode.java). For every level of the
query through which the scoped predicate is pushed, we have
to perform a remap operation of the scoped operand. We do
not*, however, remap the non-scoped operand. The reason
is that the non-scoped operand is already pointing to the
result set against which it must be evaluated. As the scoped
predicate is pushed down the query tree, the non-scoped
operand should not change where it's pointing and thus should
not be remapped. For example, assume we have a query whose
tree has the following form:
SELECT[0]
/ \
PRN PRN
| |
SELECT[4] UNION
| / \
PRN SELECT[1] SELECT[2]
| | |
PRN PRN
| |
SELECT[3]
|
PRN
|
Assume also that we have some predicate "SELECT[4].i = .j".
If the optimizer decides to push the predicate to the UNION
node, it (the predicate) will be scoped to the UNION's children,
yielding something like "SELECT[4].i = SELECT[1].j" for the
left child and "SELECT[4].i = SELECT[2].j" for the right child.
These scoped predicates will then be pushed to the PRNs above
SELECT[3] and T2, respectively. As part of that pushing
process a call to PRN.pushOptPredicate() will occur, which
brings us to this method. So let's assume we're here for
the scoped predicate "SELECT[4].i = SELECT[1].j". Then we want
to remap the scoped operand, "SELECT[1].j", so that it will
point to the correct column in "SELECT[3]". We do NOT, however,
want to remap the non-scoped operand "SELECT[4].i" because that
operand is already pointing to the correct result set--namely,
to a column in SELECT[4]. That non-scoped operand should not
change regardless of how far down the UNION subtree the scoped
predicate is pushed.
If we did try to remap the non-scoped operand, it would end up
pointing to result sets too low in the tree, which could lead to
execution-time errors. So when we remap a scoped predicate, we
have to make sure we only remap the scoped operand. That's what
this method does.
True if this predicate is a scoped predicate, in whichcase we performed a one-sided remap. False if the predicate isnot scoped; the caller can then make the calls to perform a"normal" remap on this predicate. |
setAndNode | public void setAndNode(AndNode andNode)(Code) | | Set the andNode.
Parameters: andNode - The new andNode. |
setEquivalenceClass | void setEquivalenceClass(int equivalenceClass)(Code) | | Set the equivalence class, if any, for this predicate.
Parameters: equivalenceClass - The equivalence class for this predicate. |
setIndexPosition | void setIndexPosition(int indexPosition)(Code) | | Set the position of the index column that this predicate restricts
Parameters: indexPosition - The position of the index column that thispredicate restricts. |
setPushable | public void setPushable(boolean pushable)(Code) | | Set whether or not this predicate is pushable. This method
is intended for use when creating a copy of the predicate, ex
for predicate pushdown. We choose not to add this assignment
to copyFields() because the comments for that method say that
it should copy all fields _except_ the two specified at init
time; "pushable" is one of the two specified at init time.
Parameters: pushable - Whether or not the predicate is pushable. |
setTransitiveSearchClauseAdded | void setTransitiveSearchClauseAdded(RelationalOperator ro)(Code) | | Mark this predicate as having been used to add a new predicate
of the specified type via transitive closure on search clauses.
Parameters: ro - The search clause that we are currently consideringas the source for transitive closure |
toString | public String toString()(Code) | | Convert this object to a String. See comments in QueryTreeNode.java
for how this should be done for tree printing.
This object as a String |
transitiveSearchClauseAdded | boolean transitiveSearchClauseAdded(RelationalOperator ro)(Code) | | Return whether or not this predicate has been used
to add a new search clause of the specified type via transitive closure.
NOTE: This can only be true if this is an equijoin
between 2 column references.
Parameters: ro - The search clause that we are currently consideringas the source for transitive closure Whether or not this predicate has been usedto add a new search clause of the specified type via transitive closure. |
Methods inherited from org.apache.derby.impl.sql.compile.QueryTreeNode | public Visitable accept(Visitor v) throws StandardException(Code)(Java Doc) public QueryTreeNode bind() throws StandardException(Code)(Java Doc) public DataValueDescriptor convertDefaultNode(DataTypeDescriptor typeDescriptor) throws StandardException(Code)(Java Doc) protected static void debugFlush()(Code)(Java Doc) public static void debugPrint(String outputString)(Code)(Java Doc) public void disablePrivilegeCollection()(Code)(Java Doc) public String executeSchemaName()(Code)(Java Doc) public String executeStatementName()(Code)(Java Doc) public static String formatNodeString(String nodeString, int depth)(Code)(Java Doc) public boolean foundString(String[] list, String search)(Code)(Java Doc) public GeneratedClass generate(ByteArray ignored) throws StandardException(Code)(Java Doc) protected void generate(ActivationClassBuilder acb, MethodBuilder mb) throws StandardException(Code)(Java Doc) void generateAuthorizeCheck(ActivationClassBuilder acb, MethodBuilder mb, int sqlOperation)(Code)(Java Doc) public int getBeginOffset()(Code)(Java Doc) final protected ClassFactory getClassFactory()(Code)(Java Doc) final protected CompilerContext getCompilerContext()(Code)(Java Doc) final public ContextManager getContextManager()(Code)(Java Doc) public Object getCursorInfo() throws StandardException(Code)(Java Doc) final public DataDictionary getDataDictionary()(Code)(Java Doc) final public DependencyManager getDependencyManager()(Code)(Java Doc) public int getEndOffset()(Code)(Java Doc) final public ExecutionFactory getExecutionFactory()(Code)(Java Doc) final public GenericConstantActionFactory getGenericConstantActionFactory()(Code)(Java Doc) protected int getIntProperty(String value, String key) throws StandardException(Code)(Java Doc) final protected LanguageConnectionContext getLanguageConnectionContext()(Code)(Java Doc) final public NodeFactory getNodeFactory()(Code)(Java Doc) protected int getNodeType()(Code)(Java Doc) public ConstantNode getNullNode(TypeId typeId, ContextManager cm) throws StandardException(Code)(Java Doc) public DataTypeDescriptor[] getParameterTypes() throws StandardException(Code)(Java Doc) public long getRowEstimate()(Code)(Java Doc) public String getSPSName()(Code)(Java Doc) final SchemaDescriptor getSchemaDescriptor(String schemaName) throws StandardException(Code)(Java Doc) final SchemaDescriptor getSchemaDescriptor(String schemaName, boolean raiseError) throws StandardException(Code)(Java Doc) protected int getStatementType()(Code)(Java Doc) final protected TableDescriptor getTableDescriptor(String tableName, SchemaDescriptor schema) throws StandardException(Code)(Java Doc) final protected TypeCompiler getTypeCompiler(TypeId typeId)(Code)(Java Doc) public void init(Object arg1) throws StandardException(Code)(Java Doc) public void init(Object arg1, Object arg2) throws StandardException(Code)(Java Doc) public void init(Object arg1, Object arg2, Object arg3) throws StandardException(Code)(Java Doc) public void init(Object arg1, Object arg2, Object arg3, Object arg4) throws StandardException(Code)(Java Doc) public void init(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5) throws StandardException(Code)(Java Doc) public void init(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6) throws StandardException(Code)(Java Doc) public void init(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7) throws StandardException(Code)(Java Doc) public void init(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, Object arg8) throws StandardException(Code)(Java Doc) public void init(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, Object arg8, Object arg9) throws StandardException(Code)(Java Doc) public void init(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, Object arg8, Object arg9, Object arg10) throws StandardException(Code)(Java Doc) public void init(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, Object arg8, Object arg9, Object arg10, Object arg11) throws StandardException(Code)(Java Doc) public void init(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, Object arg8, Object arg9, Object arg10, Object arg11, Object arg12) throws StandardException(Code)(Java Doc) public void init(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13) throws StandardException(Code)(Java Doc) public void init(Object arg1, Object arg2, Object arg3, Object arg4, Object arg5, Object arg6, Object arg7, Object arg8, Object arg9, Object arg10, Object arg11, Object arg12, Object arg13, Object arg14) throws StandardException(Code)(Java Doc) public boolean isAtomic() throws StandardException(Code)(Java Doc) protected boolean isInstanceOf(int nodeType)(Code)(Java Doc) public boolean isPrivilegeCollectionRequired()(Code)(Java Doc) final boolean isSessionSchema(SchemaDescriptor sd)(Code)(Java Doc) final boolean isSessionSchema(String schemaName)(Code)(Java Doc) public ConstantAction makeConstantAction() throws StandardException(Code)(Java Doc) public ResultDescription makeResultDescription() throws StandardException(Code)(Java Doc) public TableName makeTableName(String schemaName, String flatName) throws StandardException(Code)(Java Doc) public boolean needsSavepoint()(Code)(Java Doc) protected String nodeHeader()(Code)(Java Doc) public QueryTreeNode optimize() throws StandardException(Code)(Java Doc) public static QueryTreeNode parseQueryText(CompilerContext compilerContext, String queryText, Object[] paramDefaults, LanguageConnectionContext lcc) throws StandardException(Code)(Java Doc) public void printLabel(int depth, String label)(Code)(Java Doc) public void printSubNodes(int depth)(Code)(Java Doc) public boolean referencesSessionSchema() throws StandardException(Code)(Java Doc) public TableName resolveTableToSynonym(TableName tabName) throws StandardException(Code)(Java Doc) public void setBeginOffset(int beginOffset)(Code)(Java Doc) public void setContextManager(ContextManager cm)(Code)(Java Doc) public void setEndOffset(int endOffset)(Code)(Java Doc) public void setNodeType(int nodeType)(Code)(Java Doc) public void setRefActionInfo(long fkIndexConglomId, int[] fkColArray, String parentResultSetId, boolean dependentScan)(Code)(Java Doc) public String toString()(Code)(Java Doc) public void treePrint()(Code)(Java Doc) public void treePrint(int depth)(Code)(Java Doc) String verifyClassExist(String javaClassName, boolean convertCase) throws StandardException(Code)(Java Doc)
|
|
|