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

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.BinaryListOperatorNode
              extended by org.apache.derby.impl.sql.compile.InListOperatorNode
All Implemented Interfaces:
Visitable

public final class InListOperatorNode
extends BinaryListOperatorNode

An InListOperatorNode represents an IN list.


Field Summary
private  boolean isOrdered
           
private  boolean sortDescending
           
 
Fields inherited from class org.apache.derby.impl.sql.compile.BinaryListOperatorNode
leftInterfaceType, leftOperand, methodName, operator, receiver, rightInterfaceType, rightOperandList
 
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
InListOperatorNode()
           
 
Method Summary
(package private)  ValueNode eliminateNots(boolean underNotNode)
          Eliminate NotNodes in the current query block.
 void generateExpression(ExpressionClassBuilder acb, MethodBuilder mb)
          Do code generation for this IN list operator.
protected  LocalField generateListAsArray(ExpressionClassBuilder acb, MethodBuilder mb)
          Generate the code to create an array of DataValueDescriptors that will hold the IN-list values at execution time.
 void generateStartStopKey(boolean isAsc, boolean isStartKey, ExpressionClassBuilder acb, MethodBuilder mb)
          Generate start/stop key for this IN list operator.
 void init(java.lang.Object leftOperand, java.lang.Object rightOperandList)
          Initializer for a InListOperatorNode
protected  boolean isOrdered()
          Return whether or not the IN-list values for this node are ordered.
protected  void markAsOrdered()
          Indicate that the IN-list values for this node are ordered (i.e. they are all constants and they have been sorted).
protected  void markSortDescending()
          Indicate that the IN-list values for this node must be sorted in DESCENDING order.
 ValueNode preprocess(int numTables, FromList outerFromList, SubqueryList outerSubqueryList, PredicateList outerPredicateList)
          Preprocess an expression tree.
 double selectivity(Optimizable optTable)
          The selectivity for an "IN" predicate is generally very small.
 boolean selfReference(ColumnReference cr)
          See if this IN list operator is referencing the same table.
protected  InListOperatorNode shallowCopy()
          Create a shallow copy of this InListOperatorNode whose operands are the same as this node's operands.
protected  boolean sortDescending()
          Return whether or not the IN-list values for this node must be sorted in DESCENDING order.
 java.lang.String toString()
          Convert this object to a String.
 
Methods inherited from class org.apache.derby.impl.sql.compile.BinaryListOperatorNode
acceptChildren, bindComparisonOperator, bindExpression, categorize, constantExpression, getLeftOperand, getOrderableVariantType, getRightOperandList, init, isConstantExpression, isEquivalent, printSubNodes, remapColumnReferencesToExpressions, setLeftOperand, setRightOperandList
 
Methods inherited from class org.apache.derby.impl.sql.compile.ValueNode
bindExpression, changeToCNF, checkIsBoolean, checkTopPredicatesForEqualsConditions, copyFields, evaluateConstantExpressions, genEqualsFalseTree, generate, generateFilter, genIsNullTree, genSQLJavaSQLTree, getClone, getColumnName, getConstantValueAsObject, getDataValueFactory, getSchemaName, getSourceResultColumn, getTableName, getTablesReferenced, getTransformed, getTypeCompiler, getTypeId, getTypeServices, init, isBinaryEqualsOperatorNode, isBooleanFalse, isBooleanTrue, isCloneable, isInListProbeNode, isParameterNode, isRelationalOperator, isSameNodeType, optimizableEqualityNode, putAndsOnTop, requiresTypeFromContext, 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, 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

isOrdered

private boolean isOrdered

sortDescending

private boolean sortDescending
Constructor Detail

InListOperatorNode

public InListOperatorNode()
Method Detail

init

public void init(java.lang.Object leftOperand,
                 java.lang.Object rightOperandList)
Initializer for a InListOperatorNode

Overrides:
init in class QueryTreeNode
Parameters:
leftOperand - The left operand of the node
rightOperandList - The right operand list of the node

toString

public java.lang.String toString()
Convert this object to a String. See comments in QueryTreeNode.java for how this should be done for tree printing.

Overrides:
toString in class BinaryListOperatorNode
Returns:
This object as a String

shallowCopy

protected InListOperatorNode shallowCopy()
                                  throws StandardException
Create a shallow copy of this InListOperatorNode whose operands are the same as this node's operands. Copy over all other necessary state, as well.

Throws:
StandardException

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 BinaryListOperatorNode
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

selfReference

public boolean selfReference(ColumnReference cr)
                      throws StandardException
See if this IN list operator is referencing the same table.

Parameters:
cr - The column reference.
Returns:
true if in list references the same table as in cr.
Throws:
StandardException - Thrown on error

selectivity

public double selectivity(Optimizable optTable)
The selectivity for an "IN" predicate is generally very small. This is an estimate applicable when in list are not all constants.

Overrides:
selectivity in class ValueNode

generateExpression

public void generateExpression(ExpressionClassBuilder acb,
                               MethodBuilder mb)
                        throws StandardException
Do code generation for this IN list operator.

Overrides:
generateExpression in class ValueNode
Parameters:
acb - The ExpressionClassBuilder for the class we're generating
mb - The MethodBuilder the expression will go into
Throws:
StandardException - Thrown on error

generateListAsArray

protected LocalField generateListAsArray(ExpressionClassBuilder acb,
                                         MethodBuilder mb)
                                  throws StandardException
Generate the code to create an array of DataValueDescriptors that will hold the IN-list values at execution time. The array gets created in the constructor. All constant elements in the array are initialized in the constructor. All non-constant elements, if any, are initialized each time the IN list is evaluated.

Parameters:
acb - The ExpressionClassBuilder for the class we're generating
mb - The MethodBuilder the expression will go into
Throws:
StandardException

generateStartStopKey

public void generateStartStopKey(boolean isAsc,
                                 boolean isStartKey,
                                 ExpressionClassBuilder acb,
                                 MethodBuilder mb)
                          throws StandardException
Generate start/stop key for this IN list operator. Bug 3858.

Parameters:
isAsc - is the index ascending on the column in question
isStartKey - are we generating start key or not
acb - The ExpressionClassBuilder for the class we're generating
mb - The MethodBuilder the expression will go into
Throws:
StandardException - Thrown on error

markAsOrdered

protected void markAsOrdered()
Indicate that the IN-list values for this node are ordered (i.e. they are all constants and they have been sorted).


markSortDescending

protected void markSortDescending()
Indicate that the IN-list values for this node must be sorted in DESCENDING order. This only applies to in-list "multi-probing", where the rows are processed in the order of the IN list elements themselves. In that case, any requirement to sort the rows in descending order means that the values in the IN list have to be sorted in descending order, as well.


isOrdered

protected boolean isOrdered()
Return whether or not the IN-list values for this node are ordered. This is used for determining whether or not we need to do an execution- time sort.


sortDescending

protected boolean sortDescending()
Return whether or not the IN-list values for this node must be sorted in DESCENDING order.


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.