Class IsNode

    • Field Detail

      • notMe

        private boolean notMe
    • Constructor Detail

      • IsNode

        IsNode​(ValueNode leftOperand,
               ValueNode rightOperand,
               boolean notMe,
               ContextManager cm)
        Constructor for an IsNode
        Parameters:
        leftOperand - The left operand of the IS
        rightOperand - The right operand of the IS
        notMe - Whether to reverse the sense of this node.
        cm - The context manager
    • Method Detail

      • bindExpression

        ValueNode bindExpression​(FromList fromList,
                                 SubqueryList subqueryList,
                                 java.util.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
      • eliminateNots

        ValueNode eliminateNots​(boolean underNotNode)
                         throws StandardException
        Eliminate NotNodes in the current query block. We just mark whether this IS node is under an eliminated NOT node.
        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

        public ValueNode putAndsOnTop()
                               throws StandardException
        Do the 1st step in putting child expressions into conjunctive normal form. This step ensures that the top level of the child 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

        public 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

        public 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

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