Class InListOperatorNode

All Implemented Interfaces:
Visitable

public final class InListOperatorNode extends BinaryListOperatorNode
An InListOperatorNode represents an IN list.
  • Field Details

    • isOrdered

      private boolean isOrdered
    • sortDescending

      private boolean sortDescending
  • Constructor Details

  • Method Details

    • toString

      public 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

      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
    • getDominantType

      private DataTypeDescriptor getDominantType()
      Get the dominant type of all the operands in this IN list.
      Returns:
      the type descriptor for the dominant type
      See Also:
    • 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

      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

      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

      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.