| java.lang.Object org.apache.derby.impl.sql.compile.QueryTreeNode org.apache.derby.impl.sql.compile.ValueNode org.apache.derby.impl.sql.compile.BinaryOperatorNode org.apache.derby.impl.sql.compile.BinaryComparisonOperatorNode org.apache.derby.impl.sql.compile.BinaryRelationalOperatorNode
BinaryRelationalOperatorNode | public class BinaryRelationalOperatorNode extends BinaryComparisonOperatorNode implements RelationalOperator(Code) | | This class represents the 6 binary operators: LessThan, LessThanEquals,
Equals, NotEquals, GreaterThan and GreaterThanEquals.
author: Manish Khettry |
Method Summary | |
protected double | booleanSelectivity(Optimizable optTable) Return 50% if this is a comparison with a boolean column, a negative
selectivity otherwise. | protected int | columnOnOneSide(Optimizable optTable) | public boolean | compareWithKnownConstant(Optimizable optTable, boolean considerParameters) | public boolean | equalsComparisonWithConstantExpression(Optimizable optTable) | public ValueNode | genSQLJavaSQLTree() | public void | generateAbsoluteColumnId(MethodBuilder mb, Optimizable optTable) | public void | generateExpressionOperand(Optimizable optTable, int columnPosition, ExpressionClassBuilder acb, MethodBuilder mb) | public void | generateNegate(MethodBuilder mb, Optimizable optTable) | public void | generateOperator(MethodBuilder mb, Optimizable optTable) | public void | generateOrderedNulls(MethodBuilder mb) | public void | generateQualMethod(ExpressionClassBuilder acb, MethodBuilder mb, Optimizable optTable) | public void | generateRelativeColumnId(MethodBuilder mb, Optimizable optTable) | public ColumnReference | getColumnOperand(Optimizable optTable, int columnPosition) | public ColumnReference | getColumnOperand(Optimizable optTable) | public DataValueDescriptor | getCompareValue(Optimizable optTable) | public ValueNode | getExpressionOperand(int tableNumber, int columnPosition, FromTable ft) | BinaryOperatorNode | getNegation(ValueNode leftOperand, ValueNode rightOperand) Returns the negation of this operator; negation of Equals is NotEquals. | public ValueNode | getOperand(ColumnReference cRef, int refSetSize, boolean otherSide) | public int | getOperator() | public int | getOrderableVariantType(Optimizable optTable) | public String | getReceiverInterfaceName() The methods generated for this node all are on Orderable. | public ValueNode | getScopedOperand(int whichSide, JBitSet parentRSNsTables, ResultSetNode childRSN, int[] whichRC) Take a ResultSetNode and return a column reference that is scoped for
for the received ResultSetNode, where "scoped" means that the column
reference points to a specific column in the RSN. | public int | getStartOperator(Optimizable optTable) | public int | getStopOperator(Optimizable optTable) | public RelationalOperator | getTransitiveSearchClause(ColumnReference otherCR) | public void | init(Object leftOperand, Object rightOperand) | public boolean | isBinaryEqualsOperatorNode() | public boolean | isQualifier(Optimizable optTable, boolean forPush) | public boolean | isRelationalOperator() | protected boolean | keyColumnOnLeft(Optimizable optTable) Return true if a key column for the given table is found on the
left side of this operator, false if it is found on the right
side of this operator.
NOTE: This method assumes that a key column will be found on one
side or the other. | public boolean | optimizableEqualityNode(Optimizable optTable, int columnNumber, boolean isNullOkay) | public boolean | orderedNulls() | public double | selectivity(Optimizable optTable) return the selectivity of this predicate. | public boolean | selfComparison(ColumnReference cr) | public boolean | usefulStartKey(Optimizable optTable) | protected boolean | usefulStartKey(boolean columnOnLeft) is this is useful start key? for example a predicate of the from
column Lessthan 5 is not a useful start key but is a useful stop
key. | public boolean | usefulStopKey(Optimizable optTable) | protected boolean | usefulStopKey(boolean columnOnLeft) |
LEFT | final protected static int LEFT(Code) | | |
NEITHER | final protected static int NEITHER(Code) | | |
RIGHT | final protected static int RIGHT(Code) | | |
booleanSelectivity | protected double booleanSelectivity(Optimizable optTable) throws StandardException(Code) | | Return 50% if this is a comparison with a boolean column, a negative
selectivity otherwise.
|
columnOnOneSide | protected int columnOnOneSide(Optimizable optTable)(Code) | | Determine whether there is a column from the given table on one side
of this operator, and if so, which side is it on?
Parameters: optTable - The Optimizable table that we're looking for a keycolumn on. LEFT if there is a column on the left, RIGHT if there isa column on the right, NEITHER if no column found on eitherside. |
equalsComparisonWithConstantExpression | public boolean equalsComparisonWithConstantExpression(Optimizable optTable)(Code) | | |
getReceiverInterfaceName | public String getReceiverInterfaceName()(Code) | | The methods generated for this node all are on Orderable.
Overrides this method
in BooleanOperatorNode for code generation purposes.
|
getScopedOperand | public ValueNode getScopedOperand(int whichSide, JBitSet parentRSNsTables, ResultSetNode childRSN, int[] whichRC) throws StandardException(Code) | | Take a ResultSetNode and return a column reference that is scoped for
for the received ResultSetNode, where "scoped" means that the column
reference points to a specific column in the RSN. This is used for
remapping predicates from an outer query down to a subquery.
For example, assume we have the following query:
select * from
(select i,j from t1 union select i,j from t2) X1,
(select a,b from t3 union select a,b from t4) X2
where X1.j = X2.b;
Then assume that this BinaryRelationalOperatorNode represents the
"X1.j = X2.b" predicate 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 what we want to do in this method is map one of the operands
X1.j or X2.b (depending on the 'whichSide' parameter) to the childRSN,
if possible. Note that in our example, "X2.b" should _NOT_ be mapped
because it doesn't apply to the childRSN for the subquery "select i,j
from t1"; thus we should leave it as it is. "X1.j", however, _does_
need to be scoped, and so this method will return a ColumnReference
pointing to "T1.j" (or whatever the corresponding column in T1 is).
ASSUMPTION: We should only get to this method if we know that
exactly one operand in the predicate to which this operator belongs
can and should be mapped to the received childRSN.
Parameters: whichSide - The operand are we trying to scope (LEFT or RIGHT) 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 operand to aResultSetNode to which it doesn't apply. Parameters: childRSN - The result set node to 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 column reference scoped to the received childRSN, if possible.If the operand is a ColumnReference that is not supposed to be scoped,we return a _clone_ of the reference--this is necessary because thereference is going to be pushed to two places (left and right childrenof the parentRSN) and if both children are referencing the sameinstance of the column reference, they'll interfere with each otherduring optimization. |
isBinaryEqualsOperatorNode | public boolean isBinaryEqualsOperatorNode()(Code) | | |
keyColumnOnLeft | protected boolean keyColumnOnLeft(Optimizable optTable)(Code) | | Return true if a key column for the given table is found on the
left side of this operator, false if it is found on the right
side of this operator.
NOTE: This method assumes that a key column will be found on one
side or the other. If you don't know whether a key column exists,
use the columnOnOneSide() method (below).
Parameters: optTable - The Optimizable table that we're looking for a keycolumn on. true if a key column for the given table is on the leftside of this operator, false if one is found on the rightside of this operator. |
usefulStartKey | protected boolean usefulStartKey(boolean columnOnLeft)(Code) | | is this is useful start key? for example a predicate of the from
column Lessthan 5 is not a useful start key but is a useful stop
key. However 5 Lessthan column is a useful start key.
Parameters: columnOnLeft - is true if the column is the left hand side of thebinary operator. |
Methods inherited from org.apache.derby.impl.sql.compile.BinaryOperatorNode | public Visitable accept(Visitor v) throws StandardException(Code)(Java Doc) public ValueNode bindExpression(FromList fromList, SubqueryList subqueryList, Vector aggregateVector) throws StandardException(Code)(Java Doc) public ValueNode bindXMLQuery() throws StandardException(Code)(Java Doc) public boolean categorize(JBitSet referencedTabs, boolean simplePredsOnly) throws StandardException(Code)(Java Doc) public boolean constantExpression(PredicateList whereClause)(Code)(Java Doc) public ValueNode genSQLJavaSQLTree() throws StandardException(Code)(Java Doc) public void generateExpression(ExpressionClassBuilder acb, MethodBuilder mb) throws StandardException(Code)(Java Doc) public ValueNode getLeftOperand()(Code)(Java Doc) protected int getOrderableVariantType() throws StandardException(Code)(Java Doc) public String getReceiverInterfaceName() throws StandardException(Code)(Java Doc) public ValueNode getRightOperand()(Code)(Java Doc) public void init(Object leftOperand, Object rightOperand, Object operator, Object methodName, Object leftInterfaceType, Object rightInterfaceType)(Code)(Java Doc) public void init(Object leftOperand, Object rightOperand, Object leftInterfaceType, Object rightInterfaceType)(Code)(Java Doc) public void init(Object leftOperand, Object rightOperand, Object opType)(Code)(Java Doc) protected void initializeResultField(ExpressionClassBuilder acb, MethodBuilder mb, LocalField resultField) throws StandardException(Code)(Java Doc) public boolean isConstantExpression()(Code)(Java Doc) protected boolean isEquivalent(ValueNode o) throws StandardException(Code)(Java Doc) public ValueNode preprocess(int numTables, FromList outerFromList, SubqueryList outerSubqueryList, PredicateList outerPredicateList) throws StandardException(Code)(Java Doc) public void printSubNodes(int depth)(Code)(Java Doc) public ValueNode remapColumnReferencesToExpressions() throws StandardException(Code)(Java Doc) public void setClause(int clause)(Code)(Java Doc) public void setLeftOperand(ValueNode newLeftOperand)(Code)(Java Doc) public void setLeftRightInterfaceType(String iType)(Code)(Java Doc) void setMethodName(String methodName)(Code)(Java Doc) void setOperator(String operator)(Code)(Java Doc) public void setRightOperand(ValueNode newRightOperand)(Code)(Java Doc) void swapOperands()(Code)(Java Doc) public String toString()(Code)(Java Doc)
|
Methods inherited from org.apache.derby.impl.sql.compile.ValueNode | public ValueNode bindExpression(FromList fromList, SubqueryList subqueryList, Vector aggregateVector) throws StandardException(Code)(Java Doc) public ValueNode bindExpression(FromList fromList, SubqueryList subqueryList, Vector aggregateVector, boolean forQueryRewrite) throws StandardException(Code)(Java Doc) public boolean categorize(JBitSet referencedTabs, boolean simplePredsOnly) throws StandardException(Code)(Java Doc) public ValueNode changeToCNF(boolean underTopAndNode) throws StandardException(Code)(Java Doc) public ValueNode checkIsBoolean() throws StandardException(Code)(Java Doc) public void checkReliability(String fragmentType, int fragmentBitMask) throws StandardException(Code)(Java Doc) public void checkReliability(int fragmentBitMask, String fragmentType) throws StandardException(Code)(Java Doc) void checkTopPredicatesForEqualsConditions(int tableNumber, boolean[] eqOuterCols, int[] tableNumbers, JBitSet[] tableColMap, boolean resultColTable) throws StandardException(Code)(Java Doc) public boolean constantExpression(PredicateList whereClause)(Code)(Java Doc) public void copyFields(ValueNode oldVN) throws StandardException(Code)(Java Doc) ValueNode eliminateNots(boolean underNotNode) throws StandardException(Code)(Java Doc) public ValueNode genEqualsFalseTree() throws StandardException(Code)(Java Doc) public ValueNode genIsNullTree() throws StandardException(Code)(Java Doc) public ValueNode genSQLJavaSQLTree() throws StandardException(Code)(Java Doc) final protected void generate(ActivationClassBuilder acb, MethodBuilder mb) throws StandardException(Code)(Java Doc) public void generateExpression(ExpressionClassBuilder acb, MethodBuilder mb) throws StandardException(Code)(Java Doc) public void generateFilter(ExpressionClassBuilder ecb, MethodBuilder mb) throws StandardException(Code)(Java Doc) public int getClause()(Code)(Java Doc) public ValueNode getClone() throws StandardException(Code)(Java Doc) public String getColumnName()(Code)(Java Doc) Object getConstantValueAsObject() throws StandardException(Code)(Java Doc) final protected DataValueFactory getDataValueFactory()(Code)(Java Doc) protected int getOrderableVariantType() throws StandardException(Code)(Java Doc) public String getSchemaName() throws StandardException(Code)(Java Doc) public ResultColumn getSourceResultColumn()(Code)(Java Doc) public String getTableName()(Code)(Java Doc) JBitSet getTablesReferenced() throws StandardException(Code)(Java Doc) boolean getTransformed()(Code)(Java Doc) public TypeCompiler getTypeCompiler() throws StandardException(Code)(Java Doc) public TypeId getTypeId() throws StandardException(Code)(Java Doc) public DataTypeDescriptor getTypeServices() throws StandardException(Code)(Java Doc) public void init(Object typeId, Object precision, Object scale, Object isNullable, Object maximumWidth) throws StandardException(Code)(Java Doc) public boolean isBinaryEqualsOperatorNode()(Code)(Java Doc) boolean isBooleanFalse()(Code)(Java Doc) boolean isBooleanTrue()(Code)(Java Doc) public boolean isCloneable()(Code)(Java Doc) public boolean isConstantExpression()(Code)(Java Doc) abstract protected boolean isEquivalent(ValueNode other) throws StandardException(Code)(Java Doc) public boolean isParameterNode()(Code)(Java Doc) public boolean isRelationalOperator()(Code)(Java Doc) final protected boolean isSameNodeType(ValueNode other)(Code)(Java Doc) public boolean optimizableEqualityNode(Optimizable optTable, int columnNumber, boolean isNullOkay) throws StandardException(Code)(Java Doc) public ValueNode preprocess(int numTables, FromList outerFromList, SubqueryList outerSubqueryList, PredicateList outerPredicateList) throws StandardException(Code)(Java Doc) public ValueNode putAndsOnTop() throws StandardException(Code)(Java Doc) public ValueNode remapColumnReferencesToExpressions() throws StandardException(Code)(Java Doc) public boolean requiresTypeFromContext()(Code)(Java Doc) public double selectivity(Optimizable optTable) throws StandardException(Code)(Java Doc) public void setClause(int clause)(Code)(Java Doc) void setTransformed()(Code)(Java Doc) public void setType(DataTypeDescriptor dataTypeServices) throws StandardException(Code)(Java Doc) public String toString()(Code)(Java Doc) public boolean updatableByCursor()(Code)(Java Doc) public boolean verifyChangeToCNF()(Code)(Java Doc) boolean verifyEliminateNots()(Code)(Java Doc) public boolean verifyPutAndsOnTop()(Code)(Java Doc)
|
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)
|
|
|