org.apache.derby.impl.sql.compile
Class BinaryComparisonOperatorNode

java.lang.Object
  extended by org.apache.derby.impl.sql.compile.QueryTreeNode
      extended by org.apache.derby.impl.sql.compile.ValueNode
          extended by org.apache.derby.impl.sql.compile.BinaryOperatorNode
              extended by org.apache.derby.impl.sql.compile.BinaryComparisonOperatorNode
All Implemented Interfaces:
Visitable
Direct Known Subclasses:
BinaryRelationalOperatorNode

public abstract class BinaryComparisonOperatorNode
extends BinaryOperatorNode

This node is the superclass for all binary comparison operators, such as =, <>, <, etc.


Field Summary
private  boolean betweenSelectivity
           
private  boolean forQueryRewrite
           
 
Fields inherited from class org.apache.derby.impl.sql.compile.BinaryOperatorNode
AND, BinaryArgTypes, BinaryMethodNames, BinaryOperators, BinaryResultTypes, CONCATENATE, DIVIDE, EQ, GE, GT, LE, leftInterfaceType, leftOperand, LIKE, LT, methodName, MINUS, NE, operator, operatorType, OR, PLUS, receiver, resultInterfaceType, rightInterfaceType, rightOperand, TIMES, XMLEXISTS_OP, XMLQUERY_OP
 
Fields inherited from class org.apache.derby.impl.sql.compile.ValueNode
transformed
 
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
BinaryComparisonOperatorNode()
           
 
Method Summary
 void bindComparisonOperator()
          Test the type compatability of the operands and set the type info for this node.
 ValueNode bindExpression(FromList fromList, SubqueryList subqueryList, java.util.Vector aggregateVector)
          Bind this comparison operator.
 ValueNode changeToCNF(boolean underTopAndNode)
          Finish putting an expression into conjunctive normal form.
(package private)  ValueNode eliminateNots(boolean underNotNode)
          Eliminate NotNodes in the current query block.
 ValueNode genSQLJavaSQLTree()
          generate a SQL->Java->SQL conversion tree above the left and right operand of this Binary Operator Node if needed.
(package private)  boolean getBetweenSelectivity()
          Return whether or not to use the between selectivity for this node.
 boolean getForQueryRewrite()
          Was this node generated in a query rewrite?
(package private) abstract  BinaryOperatorNode getNegation(ValueNode leftOperand, ValueNode rightOperand)
          Negate the comparison.
(package private) abstract  BinaryOperatorNode getSwappedEquivalent()
           Return a node equivalent to this node, but with the left and right operands swapped.
 void init(java.lang.Object leftOperand, java.lang.Object rightOperand, java.lang.Object operator, java.lang.Object methodName)
          Initializer for a BinaryComparisonOperatorNode
 ValueNode preprocess(int numTables, FromList outerFromList, SubqueryList outerSubqueryList, PredicateList outerPredicateList)
          Preprocess an expression tree.
(package private)  void setBetweenSelectivity()
          Use between selectivity when calculating the selectivity.
 void setForQueryRewrite(boolean val)
          This node was generated as part of a query rewrite.
 
Methods inherited from class org.apache.derby.impl.sql.compile.BinaryOperatorNode
acceptChildren, bindXMLQuery, categorize, constantExpression, generateExpression, getLeftOperand, getOrderableVariantType, getReceiverInterfaceName, getRightOperand, init, init, initializeResultField, isConstantExpression, isEquivalent, printSubNodes, remapColumnReferencesToExpressions, setLeftOperand, setLeftRightInterfaceType, setMethodName, setOperator, setRightOperand, toString
 
Methods inherited from class org.apache.derby.impl.sql.compile.ValueNode
bindExpression, checkIsBoolean, checkTopPredicatesForEqualsConditions, copyFields, evaluateConstantExpressions, genEqualsFalseTree, generate, generateFilter, genIsNullTree, getClone, getColumnName, getConstantValueAsObject, getDataValueFactory, getSchemaName, getSourceResultColumn, getTableName, getTablesReferenced, getTransformed, getTypeCompiler, getTypeId, getTypeServices, init, isBinaryEqualsOperatorNode, isBooleanFalse, isBooleanTrue, isCloneable, isInListProbeNode, isParameterNode, isRelationalOperator, isSameNodeType, optimizableEqualityNode, putAndsOnTop, requiresTypeFromContext, selectivity, setCollationInfo, setCollationInfo, setCollationUsingCompilationSchema, setCollationUsingCompilationSchema, setNullability, setTransformed, setType, setType, setType, updatableByCursor, verifyChangeToCNF, verifyEliminateNots, verifyPutAndsOnTop
 
Methods inherited from class org.apache.derby.impl.sql.compile.QueryTreeNode
accept, bindOffsetFetch, bindRowMultiSet, bindUserType, checkReliability, checkReliability, convertDefaultNode, createTypeDependency, debugFlush, debugPrint, disablePrivilegeCollection, formatNodeString, foundString, generateAuthorizeCheck, getBeginOffset, getClassFactory, getCompilerContext, getContextManager, getCursorInfo, getDataDictionary, getDependencyManager, getEndOffset, getExecutionFactory, getGenericConstantActionFactory, getIntProperty, getLanguageConnectionContext, getNodeFactory, getNodeType, getNullNode, getParameterTypes, getRowEstimate, getSchemaDescriptor, getSchemaDescriptor, getStatementType, getTableDescriptor, getTypeCompiler, init, init, init, init, init, init, init, init, init, init, isAtomic, isInstanceOf, isPrivilegeCollectionRequired, isSessionSchema, isSessionSchema, makeConstantAction, makeTableName, makeTableName, nodeHeader, orReliability, parseStatement, printLabel, referencesSessionSchema, resolveTableToSynonym, setBeginOffset, setContextManager, setEndOffset, setNodeType, setRefActionInfo, stackPrint, treePrint, treePrint, verifyClassExist
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

forQueryRewrite

private boolean forQueryRewrite

betweenSelectivity

private boolean betweenSelectivity
Constructor Detail

BinaryComparisonOperatorNode

public BinaryComparisonOperatorNode()
Method Detail

init

public void init(java.lang.Object leftOperand,
                 java.lang.Object rightOperand,
                 java.lang.Object operator,
                 java.lang.Object methodName)
Initializer for a BinaryComparisonOperatorNode

Overrides:
init in class BinaryOperatorNode
Parameters:
leftOperand - The left operand of the comparison
rightOperand - The right operand of the comparison
operator - The name of the operator
methodName - The name of the method to call in the generated class

setForQueryRewrite

public void setForQueryRewrite(boolean val)
This node was generated as part of a query rewrite. Bypass the normal comparability checks.

Parameters:
val - true if this was for a query rewrite

getForQueryRewrite

public boolean getForQueryRewrite()
Was this node generated in a query rewrite?

Returns:
true if it was generated in a query rewrite.

setBetweenSelectivity

void setBetweenSelectivity()
Use between selectivity when calculating the selectivity.


getBetweenSelectivity

boolean getBetweenSelectivity()
Return whether or not to use the between selectivity for this node.

Returns:
Whether or not to use the between selectivity for this node.

bindExpression

public ValueNode bindExpression(FromList fromList,
                                SubqueryList subqueryList,
                                java.util.Vector aggregateVector)
                         throws StandardException
Bind this comparison operator. All that has to be done for binding a comparison operator is to bind the operands, check the compatibility of the types, and set the result type to SQLBoolean.

Overrides:
bindExpression in class BinaryOperatorNode
Parameters:
fromList - The query's FROM list
subqueryList - The subquery list being built as we find SubqueryNodes
aggregateVector - The aggregate vector being built as we find AggregateNodes
Returns:
The new top of the expression tree.
Throws:
StandardException - Thrown on error

bindComparisonOperator

public void bindComparisonOperator()
                            throws StandardException
Test the type compatability of the operands and set the type info for this node. This method is useful both during binding and when we generate nodes within the language module outside of the parser.

Throws:
StandardException - Thrown on error

preprocess

public ValueNode preprocess(int numTables,
                            FromList outerFromList,
                            SubqueryList outerSubqueryList,
                            PredicateList outerPredicateList)
                     throws StandardException
Preprocess an expression tree. We do a number of transformations here (including subqueries, IN lists, LIKE and BETWEEN) plus subquery flattening. NOTE: This is done before the outer ResultSetNode is preprocessed.

Overrides:
preprocess in class BinaryOperatorNode
Parameters:
numTables - Number of tables in the DML Statement
outerFromList - FromList from outer query block
outerSubqueryList - SubqueryList from outer query block
outerPredicateList - PredicateList from outer query block
Returns:
The modified expression
Throws:
StandardException - Thrown on error

eliminateNots

ValueNode eliminateNots(boolean underNotNode)
                  throws StandardException
Eliminate NotNodes in the current query block. We traverse the tree, inverting ANDs and ORs and eliminating NOTs as we go. We stop at ComparisonOperators and boolean expressions. We invert ComparisonOperators and replace boolean expressions with boolean expression = false. NOTE: Since we do not recurse under ComparisonOperators, there still could be NotNodes left in the tree.

Overrides:
eliminateNots in class ValueNode
Parameters:
underNotNode - Whether or not we are under a NotNode.
Returns:
The modified expression
Throws:
StandardException - Thrown on error

getNegation

abstract BinaryOperatorNode getNegation(ValueNode leftOperand,
                                        ValueNode rightOperand)
                                 throws StandardException
Negate the comparison.

Parameters:
leftOperand - The left operand of the comparison operator
rightOperand - The right operand of the comparison operator
Returns:
BinaryOperatorNode The negated expression
Throws:
StandardException - Thrown on error

getSwappedEquivalent

abstract BinaryOperatorNode getSwappedEquivalent()
                                          throws StandardException

Return a node equivalent to this node, but with the left and right operands swapped. The node type may also be changed if the operator is not symmetric.

This method may for instance be used to normalize a predicate by moving constants to the right-hand side of the comparison. Example: 1 = A will be transformed to A = 1, and 10 < B will be transformed to B > 10.

Returns:
an equivalent expression with the operands swapped
Throws:
StandardException - if an error occurs

changeToCNF

public ValueNode changeToCNF(boolean underTopAndNode)
                      throws StandardException
Finish putting an expression into conjunctive normal form. An expression tree in conjunctive normal form meets the following criteria: o If the expression tree is not null, the top level will be a chain of AndNodes terminating in a true BooleanConstantNode. o The left child of an AndNode will never be an AndNode. o Any right-linked chain that includes an AndNode will be entirely composed of AndNodes terminated by a true BooleanConstantNode. o The left child of an OrNode will never be an OrNode. o Any right-linked chain that includes an OrNode will be entirely composed of OrNodes terminated by a false BooleanConstantNode. o ValueNodes other than AndNodes and OrNodes are considered leaf nodes for purposes of expression normalization. In other words, we won't do any normalization under those nodes. In addition, we track whether or not we are under a top level AndNode. SubqueryNodes need to know this for subquery flattening.

Overrides:
changeToCNF in class ValueNode
Parameters:
underTopAndNode - Whether or not we are under a top level AndNode.
Returns:
The modified expression
Throws:
StandardException - Thrown on error

genSQLJavaSQLTree

public ValueNode genSQLJavaSQLTree()
                            throws StandardException
Description copied from class: BinaryOperatorNode
generate a SQL->Java->SQL conversion tree above the left and right operand of this Binary Operator Node if needed. Subclasses can override the default behavior.

Overrides:
genSQLJavaSQLTree in class BinaryOperatorNode
Returns:
ValueNode The new tree.
Throws:
StandardException - Thrown on error
See Also:
BinaryOperatorNode.genSQLJavaSQLTree()

Built on Thu 2010-12-23 20:49:13+0000, from revision ???

Apache Derby V10.6 Internals - Copyright © 2004,2007 The Apache Software Foundation. All Rights Reserved.