Class InListOperatorNode

    • Field Detail

      • isOrdered

        private boolean isOrdered
      • sortDescending

        private boolean sortDescending
    • Method Detail

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