Class AndNode

All Implemented Interfaces:
Visitable
Direct Known Subclasses:
AndNoShortCircuitNode

class AndNode extends BinaryLogicalOperatorNode
  • Constructor Details

  • Method Details

    • bindExpression

      ValueNode bindExpression(FromList fromList, SubqueryList subqueryList, List<AggregateNode> aggregates) throws StandardException
      Bind this logical operator. All that has to be done for binding a logical operator is to bind the operands, check that both operands are BooleanDataValue, and set the result type to BooleanDataValue.
      Overrides:
      bindExpression in class BinaryLogicalOperatorNode
      Parameters:
      fromList - The query's FROM list
      subqueryList - The subquery list being built as we find SubqueryNodes
      aggregates - The aggregate list being built as we find AggregateNodes
      Returns:
      The new top of the expression tree.
      Throws:
      StandardException - Thrown on error
    • 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 BinaryOperatorNode
      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
    • putAndsOnTop

      ValueNode putAndsOnTop() throws StandardException
      Do the 1st step in putting an expression into conjunctive normal form. This step ensures that the top level of the expression is a chain of AndNodes terminated by a true BooleanConstantNode.
      Overrides:
      putAndsOnTop in class ValueNode
      Returns:
      The modified expression
      Throws:
      StandardException - Thrown on error
    • verifyPutAndsOnTop

      boolean verifyPutAndsOnTop()
      Verify that putAndsOnTop() did its job correctly. Verify that the top level of the expression is a chain of AndNodes terminated by a true BooleanConstantNode.
      Overrides:
      verifyPutAndsOnTop in class ValueNode
      Returns:
      Boolean which reflects validity of the tree.
    • changeToCNF

      ValueNode changeToCNF(boolean underTopAndNode) throws StandardException
      Finish putting an expression into conjunctive normal form. An expression tree in conjunctive normal form meets the following criteria: o If the expression tree is not null, the top level will be a chain of AndNodes terminating in a true BooleanConstantNode. o The left child of an AndNode will never be an AndNode. o Any right-linked chain that includes an AndNode will be entirely composed of AndNodes terminated by a true BooleanConstantNode. o The left child of an OrNode will never be an OrNode. o Any right-linked chain that includes an OrNode will be entirely composed of OrNodes terminated by a false BooleanConstantNode. o ValueNodes other than AndNodes and OrNodes are considered leaf nodes for purposes of expression normalization. In other words, we won't do any normalization under those nodes. In addition, we track whether or not we are under a top level AndNode. SubqueryNodes need to know this for subquery flattening.
      Overrides:
      changeToCNF in class ValueNode
      Parameters:
      underTopAndNode - Whether or not we are under a top level AndNode.
      Returns:
      The modified expression
      Throws:
      StandardException - Thrown on error
    • verifyChangeToCNF

      boolean verifyChangeToCNF()
      Verify that changeToCNF() did its job correctly. Verify that: o AndNode - rightOperand is not instanceof OrNode leftOperand is not instanceof AndNode o OrNode - rightOperand is not instanceof AndNode leftOperand is not instanceof OrNode
      Overrides:
      verifyChangeToCNF in class ValueNode
      Returns:
      Boolean which reflects validity of the tree.
    • postBindFixup

      void postBindFixup() throws StandardException
      Do bind() by hand for an AndNode that was generated after bind(), eg by putAndsOnTop(). (Set the data type and nullability info.)
      Throws:
      StandardException - Thrown on error