Class InValuesOperator

  • All Implemented Interfaces:
    java.lang.Cloneable

    public class InValuesOperator
    extends Expression
    This class implements the expr IN (values) operator. This operation may be optimized out of a query, but if it is not, it can still be evaluated although it will be slow.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      (package private) Expression expr
      The expression to check against the set on the righthand side of the IN operator.
      private boolean invert
      If this is false, the operator computes expr IN (values); if true, the operator computes expr NOT IN (values).
      (package private) java.util.ArrayList<Expression> values
      If the righthand side of the IN operator is a list of values (expressions, specifically), this is the list of values.
    • Field Detail

      • expr

        Expression expr
        The expression to check against the set on the righthand side of the IN operator.
      • values

        java.util.ArrayList<Expression> values
        If the righthand side of the IN operator is a list of values (expressions, specifically), this is the list of values.
      • invert

        private boolean invert
        If this is false, the operator computes expr IN (values); if true, the operator computes expr NOT IN (values).
    • Constructor Detail

      • InValuesOperator

        public InValuesOperator​(Expression expr,
                                java.util.ArrayList<Expression> values)
    • Method Detail

      • setInvert

        public void setInvert​(boolean invert)
      • getColumnInfo

        public ColumnInfo getColumnInfo​(Schema schema)
                                 throws SchemaNameException
        Description copied from class: Expression
        Returns a ColumnInfo object describing the type (and possibly the name) of the expression's result.
        Specified by:
        getColumnInfo in class Expression
        Parameters:
        schema - a schema object that can be used to look up name and type details for symbols referenced by the expression.
        Returns:
        a column-information object describing the type (and possibly the name and table-name) of this expression's result
        Throws:
        SchemaNameException - if a symbol cannot be resolved, either because it doesn't appear in the schema, or because the name is ambiguous.
      • evaluate

        public java.lang.Object evaluate​(Environment env)
                                  throws ExpressionException
        Evaluates this comparison expression and returns either Boolean.TRUE or Boolean.FALSE. If either the left-hand or right-hand expression evaluates to null (representing the SQL NULL value), then the expression's result is always FALSE.
        Specified by:
        evaluate in class Expression
        Parameters:
        env - the environment to look up symbol-values from, when evaluating the expression
        Returns:
        the result of the expression evaluation
        Throws:
        ExpressionException - if the expression cannot be evaluated for some reason.
        Design Note:
        (Donnie) We have to suppress "unchecked operation" warnings on this code, since Comparable is a generic (and thus allows us to specify the type of object being compared), but we want to use it without specifying any types.
      • traverse

        public Expression traverse​(ExpressionProcessor p)
        Description copied from class: Expression

        This method allows the entire expression tree to be traversed node by node, either for analysis or for transformation. The ExpressionProcessor instance receives notifications as each node in the expression is entered and left.

        The expression tree can also be manipulated by this traversal process, depending on what the ExpressionProcessor wants to do. If the expression node that traverse() is invoked on, needs to be replaced with a new expression node, the replacement is returned by the traverse() method. (The ExpressionProcessor specifies the replacement as the return-value from the ExpressionProcessor.leave(Expression) method.)

        Specified by:
        traverse in class Expression
        Parameters:
        p - the object that performs analysis or transformation of the expression tree
        Returns:
        an Expression node to replace this node, or null if no changes are to be made.
      • toString

        public java.lang.String toString()
        Returns a string representation of this comparison expression and its subexpressions.
        Overrides:
        toString in class java.lang.Object
      • getValues

        public java.util.ArrayList<Expression> getValues()
        If the IN operation has a list of values on the righthand side, this will be the list of values. Otherwise, this will be null.
        Returns:
        the list of values on the righthand side of the IN operation, or null.
      • equals

        public boolean equals​(java.lang.Object obj)
        Checks if the argument is an expression with the same structure, but not necessarily the same references.
        Specified by:
        equals in class Expression
        Parameters:
        obj - the object to which we are comparing
      • hashCode

        public int hashCode()
        Description copied from class: Expression
        Computes the hashcode of an Expression. This method is used to see if two expressions CAN be equal.
        Specified by:
        hashCode in class Expression
      • clone

        protected java.lang.Object clone()
                                  throws java.lang.CloneNotSupportedException
        Creates a copy of expression. This method is used by the Expression.duplicate() method to make a deep copy of an expression tree.
        Overrides:
        clone in class Expression
        Throws:
        java.lang.CloneNotSupportedException