org.apache.derby.impl.sql.compile
Class OrNode
java.lang.Object
org.apache.derby.impl.sql.compile.QueryTreeNode
org.apache.derby.impl.sql.compile.ValueNode
org.apache.derby.impl.sql.compile.OperatorNode
org.apache.derby.impl.sql.compile.BinaryOperatorNode
org.apache.derby.impl.sql.compile.BinaryLogicalOperatorNode
org.apache.derby.impl.sql.compile.OrNode
- All Implemented Interfaces:
- Node, Visitable
public class OrNode
- extends BinaryLogicalOperatorNode
|
Field Summary |
private boolean |
firstOr
|
| Fields inherited from class org.apache.derby.impl.sql.compile.BinaryOperatorNode |
AND, BinaryArgTypes, BinaryMethodNames, BinaryOperators, BinaryResultTypes, CONCATENATE, DIVIDE, EQ, GE, GT, LE, leftInterfaceType, leftOperand, LIKE, LT, methodName, MINUS, NE, operator, operatorType, OR, PLUS, receiver, resultInterfaceType, rightInterfaceType, rightOperand, TIMES, XMLEXISTS_OP, XMLQUERY_OP |
| Methods inherited from class org.apache.derby.impl.sql.compile.BinaryOperatorNode |
acceptChildren, bindXMLQuery, categorize, constantExpression, genSQLJavaSQLTree, getLeftOperand, getOrderableVariantType, getReceiverInterfaceName, getRightOperand, init, init, isConstantExpression, isEquivalent, printSubNodes, remapColumnReferencesToExpressions, setLeftOperand, setLeftRightInterfaceType, setMethodName, setOperator, setRightOperand, toString |
| Methods inherited from class org.apache.derby.impl.sql.compile.ValueNode |
bindExpression, checkIsBoolean, checkTopPredicatesForEqualsConditions, copyFields, evaluateConstantExpressions, genEqualsFalseTree, generate, generateFilter, genIsNullTree, getClone, getColumnName, getConstantValueAsObject, getDataValueFactory, getSchemaName, getSourceResultColumn, getTableName, getTablesReferenced, getTransformed, getTypeCompiler, getTypeId, getTypeServices, init, isBinaryEqualsOperatorNode, isBooleanFalse, isBooleanTrue, isCloneable, isInListProbeNode, isParameterNode, isRelationalOperator, isSameNodeType, optimizableEqualityNode, putAndsOnTop, requiresTypeFromContext, selectivity, setCollationInfo, setCollationInfo, setCollationUsingCompilationSchema, setCollationUsingCompilationSchema, setNullability, setTransformed, setType, setType, setType, updatableByCursor, verifyPutAndsOnTop |
| Methods inherited from class org.apache.derby.impl.sql.compile.QueryTreeNode |
accept, bindOffsetFetch, bindRowMultiSet, bindUserCatalogType, bindUserType, checkReliability, checkReliability, convertDefaultNode, createTypeDependency, debugFlush, debugPrint, disablePrivilegeCollection, formatNodeString, foundString, generateAuthorizeCheck, getBeginOffset, getClassFactory, getCompilerContext, getContextManager, getCursorInfo, getDataDictionary, getDependencyManager, getEndOffset, getExecutionFactory, getGenericConstantActionFactory, getIntProperty, getLanguageConnectionContext, getNodeFactory, getNodeType, getNullNode, getParameterTypes, getSchemaDescriptor, getSchemaDescriptor, getStatementType, getTableDescriptor, getTypeCompiler, init, init, init, init, init, init, init, init, init, isAtomic, isInstanceOf, isPrivilegeCollectionRequired, isSessionSchema, isSessionSchema, makeConstantAction, makeTableName, makeTableName, nodeHeader, orReliability, parseStatement, printLabel, referencesSessionSchema, resolveTableToSynonym, setBeginOffset, setContextManager, setEndOffset, setNodeType, setRefActionInfo, stackPrint, treePrint, treePrint, verifyClassExist |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
firstOr
private boolean firstOr
OrNode
public OrNode()
init
public void init(java.lang.Object leftOperand,
java.lang.Object rightOperand)
- Initializer for an OrNode
- Specified by:
init in interface Node- Overrides:
init in class QueryTreeNode
- Parameters:
leftOperand - The left operand of the ORrightOperand - The right operand of the OR
setFirstOr
void setFirstOr()
- Mark this OrNode as the 1st OR in the OR chain.
We will consider converting the chain to an IN list
during preprocess() if all entries are of the form:
ColumnReference = expression
bindExpression
public ValueNode bindExpression(FromList fromList,
SubqueryList subqueryList,
java.util.List aggregateVector)
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 listsubqueryList - The subquery list being built as we find SubqueryNodesaggregateVector - The aggregate vector being built as we find AggregateNodes
- Returns:
- The new top of the expression tree.
- Throws:
StandardException - Thrown on error
preprocess
public 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 StatementouterFromList - FromList from outer query blockouterSubqueryList - SubqueryList from outer query blockouterPredicateList - 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
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.
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
Apache Derby V10.10 Internals - Copyright © 2004,2013 The Apache Software Foundation. All Rights Reserved.