Class ValueNodeList

  • All Implemented Interfaces:
    java.lang.Iterable<ValueNode>, Visitable

    class ValueNodeList
    extends QueryTreeNodeVector<ValueNode>
    A ValueNodeList represents a list of ValueNodes within a specific predicate e.g. IN list, NOT IN list or BETWEEN in a DML statement.
    • Method Detail

      • bindExpression

        void bindExpression​(FromList fromList,
                            SubqueryList subqueryList,
                            java.util.List<AggregateNode> aggregates)
                     throws StandardException
        Bind this expression. This means binding the sub-expressions, as well as figuring out what the return type is for this expression.
        Parameters:
        fromList - The FROM list for the query this expression is in, for binding columns.
        subqueryList - The subquery list being built as we find SubqueryNodes
        aggregates - The aggregate list being built as we find AggregateNodes
        Throws:
        StandardException - Thrown on error
      • genSQLJavaSQLTrees

        void genSQLJavaSQLTrees()
                         throws StandardException
        Generate a SQL->Java->SQL conversion tree any node in the list which is not a system built-in type. This is useful when doing comparisons, built-in functions, etc. on java types which have a direct mapping to system built-in types.
        Throws:
        StandardException - Thrown on error
      • allSamePrecendence

        boolean allSamePrecendence​(int precedence)
        Return whether or not all of the entries in the list have the same type precendence as the specified value.
        Parameters:
        precedence - The specified precedence.
        Returns:
        Whether or not all of the entries in the list have the same type precendence as the specified value.
      • compatible

        void compatible​(ValueNode leftOperand)
                 throws StandardException
        Make sure that passed ValueNode's type is compatible with the non-parameter elements in the ValueNodeList.
        Parameters:
        leftOperand - Check for compatibility against this parameter's type
        Throws:
        StandardException
      • comparable

        void comparable​(ValueNode leftOperand)
                 throws StandardException
        Determine whether or not the leftOperand is comparable() with all of the elements in the list. Throw an exception if any of them are not comparable.
        Parameters:
        leftOperand - The left side of the expression
        Throws:
        StandardException - Thrown on error
      • isNullable

        boolean isNullable()
                    throws StandardException
        Determine whether or not any of the elements in the list are nullable.
        Returns:
        boolean Whether or not any of the elements in the list are nullable.
        Throws:
        StandardException
      • containsParameterNode

        boolean containsParameterNode()
        Does this list contain a ParameterNode?
        Returns:
        boolean Whether or not the list contains a ParameterNode
      • containsAllParameterNodes

        boolean containsAllParameterNodes()
        Does this list contain all ParameterNodes?
        Returns:
        boolean Whether or not the list contains all ParameterNodes
      • containsAllConstantNodes

        boolean containsAllConstantNodes()
        Does this list contain all ConstantNodes?
        Returns:
        boolean Whether or not the list contains all ConstantNodes
      • containsOnlyConstantAndParamNodes

        boolean containsOnlyConstantAndParamNodes()
        Does this list *only* contain constant and/or parameter nodes?
        Returns:
        boolean True if every node in this list is either a constant node or parameter node.
      • sortInAscendingOrder

        void sortInAscendingOrder​(DataValueDescriptor judgeODV)
                           throws StandardException
        Sort the entries in the list in ascending order. (All values are assumed to be constants.)
        Parameters:
        judgeODV - In case of type not exactly matching, the judging type.
        Throws:
        StandardException - Thrown on error
      • setParameterDescriptor

        void setParameterDescriptor​(DataTypeDescriptor descriptor)
                             throws StandardException
        Set the descriptor for every ParameterNode in the list.
        Parameters:
        descriptor - The DataTypeServices to set for the parameters
        Throws:
        StandardException - Thrown on error
      • preprocess

        void preprocess​(int numTables,
                        FromList outerFromList,
                        SubqueryList outerSubqueryList,
                        PredicateList outerPredicateList)
                 throws StandardException
        Preprocess a ValueNodeList. For now, we just preprocess each ValueNode in the list.
        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
        Throws:
        StandardException - Thrown on error
      • remapColumnReferencesToExpressions

        ValueNodeList remapColumnReferencesToExpressions()
                                                  throws StandardException
        Remap all ColumnReferences in this tree to be clones of the underlying expression.
        Returns:
        ValueNodeList The remapped expression tree.
        Throws:
        StandardException - Thrown on error
      • isEquivalent

        boolean isEquivalent​(ValueNodeList other)
                      throws StandardException
        Check if all the elements in this list are equivalent to the elements in another list. The two lists must have the same size, and the equivalent nodes must appear in the same order in both lists, for the two lists to be equivalent.
        Parameters:
        other - the other list
        Returns:
        true if the two lists contain equivalent elements, or false otherwise
        Throws:
        StandardException - thrown on error
        See Also:
        ValueNode.isEquivalent(ValueNode)
      • isConstantExpression

        boolean isConstantExpression()
        Return whether or not this expression tree represents a constant expression.
        Returns:
        Whether or not this expression tree represents a constant expression.
      • categorize

        boolean categorize​(JBitSet referencedTabs,
                           boolean simplePredsOnly)
                    throws StandardException
        Categorize this predicate. Initially, this means building a bit map of the referenced tables for each predicate. If the source of this ColumnReference (at the next underlying level) is not a ColumnReference or a VirtualColumnNode then this predicate will not be pushed down. For example, in: select * from (select 1 from s) a (x) where x = 1 we will not push down x = 1. NOTE: It would be easy to handle the case of a constant, but if the inner SELECT returns an arbitrary expression, then we would have to copy that tree into the pushed predicate, and that tree could contain subqueries and method calls. RESOLVE - revisit this issue once we have views.
        Parameters:
        referencedTabs - JBitSet with bit map of referenced FromTables
        simplePredsOnly - Whether or not to consider method calls, field references and conditional nodes when building bit map
        Returns:
        boolean Whether or not source.expression is a ColumnReference or a VirtualColumnNode.
        Throws:
        StandardException - Thrown on error
      • getOrderableVariantType

        protected int getOrderableVariantType()
                                       throws StandardException
        Return the variant type for the underlying expression. The variant type can be: VARIANT - variant within a scan (method calls and non-static field access) SCAN_INVARIANT - invariant within a scan (column references from outer tables) QUERY_INVARIANT - invariant within the life of a query CONSTANT - constant
        Returns:
        The variant type for the underlying expression.
        Throws:
        StandardException - thrown on error