public class BinaryRelationalOperatorNode extends BinaryComparisonOperatorNode implements RelationalOperator
| Modifier and Type | Field and Description |
|---|---|
private BaseTableNumbersVisitor |
btnVis |
private InListOperatorNode |
inListProbeSource |
protected static int |
LEFT |
protected static int |
NEITHER |
private int |
operatorType |
(package private) JBitSet |
optBaseTables |
protected static int |
RIGHT |
(package private) JBitSet |
valNodeBaseTables |
AND, BinaryArgTypes, BinaryMethodNames, BinaryOperators, BinaryResultTypes, CONCATENATE, DIVIDE, EQ, GE, GT, LE, leftInterfaceType, leftOperand, LIKE, LT, methodName, MINUS, NE, operator, OR, PLUS, receiver, resultInterfaceType, rightInterfaceType, rightOperand, TIMES, XMLEXISTS_OP, XMLQUERY_OPtransformedAUTOINCREMENT_CREATE_MODIFY, AUTOINCREMENT_INC_INDEX, AUTOINCREMENT_IS_AUTOINCREMENT_INDEX, AUTOINCREMENT_START_INDEXEQUALS_RELOP, GREATER_EQUALS_RELOP, GREATER_THAN_RELOP, IS_NOT_NULL_RELOP, IS_NULL_RELOP, LESS_EQUALS_RELOP, LESS_THAN_RELOP, NOT_EQUALS_RELOP| Constructor and Description |
|---|
BinaryRelationalOperatorNode() |
| Modifier and Type | Method and Description |
|---|---|
protected double |
booleanSelectivity(Optimizable optTable)
Return 50% if this is a comparison with a boolean column, a negative
selectivity otherwise.
|
private void |
buildTableNumList(FromTable ft,
boolean forPush)
Create a set of table numbers to search when trying to find
which (if either) of this operator's operands reference the
received target table.
|
protected int |
columnOnOneSide(Optimizable optTable)
Determine whether there is a column from the given table on one side
of this operator, and if so, which side is it on?
|
boolean |
compareWithKnownConstant(Optimizable optTable,
boolean considerParameters)
Return whether this operator compares the given Optimizable with
a constant whose value is known at compile time.
|
boolean |
equalsComparisonWithConstantExpression(Optimizable optTable)
Return whether this operator is an equality comparison of the given
optimizable with a constant expression.
|
(package private) ValueNode |
evaluateConstantExpressions()
See if the node always evaluates to true or false, and return a Boolean
constant node if it does.
|
void |
generateAbsoluteColumnId(MethodBuilder mb,
Optimizable optTable)
Generate the absolute column id for the ColumnReference that appears on one
side of this RelationalOperator or the other, and that refers to
the given table.
|
void |
generateExpressionOperand(Optimizable optTable,
int columnPosition,
ExpressionClassBuilder acb,
MethodBuilder mb)
Check whether this RelationalOperator is a comparison of the given
column with an expression.
|
void |
generateNegate(MethodBuilder mb,
Optimizable optTable)
Generate an expression that evaluates to true if the result of the
comparison should be negated.
|
void |
generateOperator(MethodBuilder mb,
Optimizable optTable)
Generate the comparison operator for this RelationalOperator.
|
void |
generateOrderedNulls(MethodBuilder mb)
Generate an expression that evaluates to true if this RelationalOperator
uses ordered null semantics, false if it doesn't.
|
void |
generateQualMethod(ExpressionClassBuilder acb,
MethodBuilder mb,
Optimizable optTable)
Generate the method to evaluate a Qualifier.
|
void |
generateRelativeColumnId(MethodBuilder mb,
Optimizable optTable)
Generate the relative column id for the ColumnReference that appears on one
side of this RelationalOperator or the other, and that refers to
the given table.
|
ValueNode |
genSQLJavaSQLTree()
generate a SQL->Java->SQL conversion tree above the left and right
operand of this Binary Operator Node if needed.
|
private int |
getAbsoluteColumnPosition(Optimizable optTable)
Get the absolute 0-based column position of the ColumnReference from
the conglomerate for this Optimizable.
|
ColumnReference |
getColumnOperand(Optimizable optTable)
Get the ColumnReference for the given table on one side of this
RelationalOperator.
|
ColumnReference |
getColumnOperand(Optimizable optTable,
int columnPosition)
Check whether this RelationalOperator is a comparison of the given
column with an expression.
|
DataValueDescriptor |
getCompareValue(Optimizable optTable)
Return an Object representing the known value that this relational
operator is comparing to a column in the given Optimizable.
|
ValueNode |
getExpressionOperand(int tableNumber,
int columnPosition,
FromTable ft)
Check whether this RelationalOperator is a comparison of the given
column with an expression.
|
protected InListOperatorNode |
getInListOp()
If this rel op was created for an IN-list probe predicate then return
the underlying InListOperatorNode.
|
(package private) BinaryOperatorNode |
getNegation(ValueNode leftOperand,
ValueNode rightOperand)
Returns the negation of this operator; negation of Equals is NotEquals.
|
private int |
getNegationNode() |
private int |
getNodeTypeForSwap()
Return the node type that must be used in order to construct an
equivalent expression if the operands are swapped.
|
ValueNode |
getOperand(ColumnReference cRef,
int refSetSize,
boolean otherSide)
Find the operand (left or right) that points to the same table
as the received ColumnReference, and then return either that
operand or the "other" operand, depending on the value of
otherSide.
|
int |
getOperator()
Return the operator (as an int) for this RelationalOperator.
|
int |
getOrderableVariantType(Optimizable optTable)
Return the variant type for the Qualifier's Orderable.
|
java.lang.String |
getReceiverInterfaceName()
The methods generated for this node all are on Orderable.
|
ValueNode |
getScopedOperand(int whichSide,
JBitSet parentRSNsTables,
ResultSetNode childRSN,
int[] whichRC)
Take a ResultSetNode and return a column reference that is scoped for
for the received ResultSetNode, where "scoped" means that the column
reference points to a specific column in the RSN.
|
int |
getStartOperator(Optimizable optTable)
Get the start operator for a scan (at the store level) for this
RelationalOperator.
|
int |
getStopOperator(Optimizable optTable)
Get the stop operator for a scan (at the store level) for this
RelationalOperator.
|
(package private) BinaryOperatorNode |
getSwappedEquivalent()
Return an equivalent node with the operands swapped, and possibly with
the operator type changed in order to preserve the meaning of the
expression.
|
RelationalOperator |
getTransitiveSearchClause(ColumnReference otherCR)
Return a relational operator which matches the current one
but with the passed in ColumnReference as the (left) operand.
|
private boolean |
implicitVarcharComparison()
Return whether or not this binary relational predicate requires an implicit
(var)char conversion.
|
void |
init(java.lang.Object leftOperand,
java.lang.Object rightOperand,
java.lang.Object forQueryRewrite)
Initializer for a BinaryOperatorNode
|
void |
init(java.lang.Object leftOperand,
java.lang.Object rightOperand,
java.lang.Object inListOp,
java.lang.Object forQueryRewrite)
Same as init() above except takes a third argument that is
an InListOperatorNode.
|
private void |
initBaseTableVisitor(int numTablesInQuery,
boolean initOptBaseTables)
Initialize the fields used for retrieving base tables in
subtrees, which allows us to do a more extensive search
for table references.
|
boolean |
isBinaryEqualsOperatorNode()
Returns true if this value node is a equals operator.
|
boolean |
isInListProbeNode()
Returns true if this value node is an operator created
for optimized performance of an IN list.
|
boolean |
isQualifier(Optimizable optTable,
boolean forPush)
Return true if this operator can be compiled into a Qualifier for
the given Optimizable table.
|
boolean |
isRelationalOperator()
Returns true if this ValueNode is a relational operator.
|
protected boolean |
keyColumnOnLeft(Optimizable optTable)
Return true if a key column for the given table is found on the
left side of this operator, false if it is found on the right
side of this operator.
|
private ValueNode |
newBool(boolean b)
Create a Boolean constant node with a specified value.
|
boolean |
optimizableEqualityNode(Optimizable optTable,
int columnNumber,
boolean isNullOkay)
Return true if the predicate represents an optimizable equality node.
|
boolean |
orderedNulls()
Return true if this operator uses ordered null semantics
|
double |
selectivity(Optimizable optTable)
return the selectivity of this predicate.
|
boolean |
selfComparison(ColumnReference cr)
Check whether this RelationalOperator compares the given ColumnReference
to any columns in the same table as the ColumnReference.
|
protected boolean |
usefulStartKey(boolean columnOnLeft)
is this is useful start key?
|
boolean |
usefulStartKey(Optimizable optTable)
Tell whether this relop is a useful start key for the given table.
|
protected boolean |
usefulStopKey(boolean columnOnLeft) |
boolean |
usefulStopKey(Optimizable optTable)
Tell whether this relop is a useful stop key for the given table.
|
private boolean |
valNodeReferencesOptTable(ValueNode valNode,
FromTable optTable,
boolean forPush,
boolean walkOptTableSubtree)
Determine whether or not the received ValueNode (which will
usually be a ColumnReference) references either the received
optTable or else a base table in the subtree beneath that
optTable.
|
bindComparisonOperator, bindExpression, changeToCNF, eliminateNots, getBetweenSelectivity, getForQueryRewrite, init, preprocess, setBetweenSelectivity, setForQueryRewriteacceptChildren, bindXMLQuery, categorize, constantExpression, generateExpression, getLeftOperand, getOrderableVariantType, getRightOperand, init, isConstantExpression, isEquivalent, printSubNodes, remapColumnReferencesToExpressions, setLeftOperand, setLeftRightInterfaceType, setMethodName, setOperator, setRightOperand, toStringpushSqlXmlUtilbindExpression, checkIsBoolean, checkTopPredicatesForEqualsConditions, copyFields, genEqualsFalseTree, generate, generateFilter, genIsNullTree, getClone, getColumnName, getConstantValueAsObject, getDataValueFactory, getSchemaName, getSourceResultColumn, getTableName, getTablesReferenced, getTransformed, getTypeCompiler, getTypeId, getTypeServices, isBooleanFalse, isBooleanTrue, isCloneable, isParameterNode, isSameNodeType, putAndsOnTop, requiresTypeFromContext, setCollationInfo, setCollationInfo, setCollationUsingCompilationSchema, setCollationUsingCompilationSchema, setNullability, setTransformed, setType, setType, setType, updatableByCursor, verifyChangeToCNF, verifyEliminateNots, verifyPutAndsOnTopaccept, 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, init, isAtomic, isInstanceOf, isPrivilegeCollectionRequired, isSessionSchema, isSessionSchema, makeConstantAction, makeTableName, makeTableName, nodeHeader, orReliability, parseStatement, printLabel, referencesSessionSchema, resolveTableToSynonym, setBeginOffset, setContextManager, setEndOffset, setNodeType, setRefActionInfo, stackPrint, treePrint, treePrint, verifyClassExistprivate int operatorType
private BaseTableNumbersVisitor btnVis
JBitSet optBaseTables
JBitSet valNodeBaseTables
private InListOperatorNode inListProbeSource
protected static final int LEFT
protected static final int NEITHER
protected static final int RIGHT
public void init(java.lang.Object leftOperand,
java.lang.Object rightOperand,
java.lang.Object forQueryRewrite)
BinaryOperatorNodeinit in interface Nodeinit in class BinaryOperatorNodeleftOperand - The left operand of the noderightOperand - The right operand of the nodeforQueryRewrite - An Integer holding the operatorType
for this operator.public void init(java.lang.Object leftOperand,
java.lang.Object rightOperand,
java.lang.Object inListOp,
java.lang.Object forQueryRewrite)
init in interface Nodeinit in class BinaryOperatorNodeprotected InListOperatorNode getInListOp()
public ColumnReference getColumnOperand(Optimizable optTable, int columnPosition)
RelationalOperatorgetColumnOperand in interface RelationalOperatoroptTable - An Optimizable for the base table the column is incolumnPosition - The ordinal position of the column (one-based)RelationalOperator.getColumnOperand(org.apache.derby.iapi.sql.compile.Optimizable, int)public ColumnReference getColumnOperand(Optimizable optTable)
RelationalOperatorgetColumnOperand in interface RelationalOperatorRelationalOperator.getColumnOperand(org.apache.derby.iapi.sql.compile.Optimizable, int)public ValueNode getExpressionOperand(int tableNumber, int columnPosition, FromTable ft)
RelationalOperatorgetExpressionOperand in interface RelationalOperatortableNumber - The table number of the base table the column is incolumnPosition - The ordinal position of the column (one-based)ft - We'll look for the column in all tables at and beneath ft.
This is useful if ft is, say, a ProjectRestrictNode over a subquery--
then we want to look at all of the FROM tables in the subquery to try
to find the right column.RelationalOperator.getExpressionOperand(int, int, org.apache.derby.impl.sql.compile.FromTable)public ValueNode getOperand(ColumnReference cRef, int refSetSize, boolean otherSide)
RelationalOperatorgetOperand in interface RelationalOperatorcRef - The ColumnReference for which we're searching.refSetSize - Size of the referenced map for the predicate
represented by this RelationalOperator node. This is used
for storing base table numbers when searching for cRef.otherSide - Assuming we find an operand that points to
the same table as cRef, then we will return the *other*
operand if otherSide is true; else we'll return the operand
that matches cRef.RelationalOperator.getOperand(org.apache.derby.impl.sql.compile.ColumnReference, int, boolean)public void generateExpressionOperand(Optimizable optTable, int columnPosition, ExpressionClassBuilder acb, MethodBuilder mb) throws StandardException
RelationalOperatorgenerateExpressionOperand in interface RelationalOperatoroptTable - An Optimizable for the base table the column is incolumnPosition - The ordinal position of the column (one-based)acb - The ExpressionClassBuilder for the class we're buildingmb - The method the expression will go intoStandardException - Thrown on errorRelationalOperator.generateExpressionOperand(org.apache.derby.iapi.sql.compile.Optimizable, int, org.apache.derby.impl.sql.compile.ExpressionClassBuilder, org.apache.derby.iapi.services.compiler.MethodBuilder)public boolean selfComparison(ColumnReference cr) throws StandardException
RelationalOperatorselfComparison in interface RelationalOperatorcr - The ColumnReference that is being compared to some
expression.StandardException - Thrown on errorRelationalOperator.selfComparison(org.apache.derby.impl.sql.compile.ColumnReference)public boolean usefulStartKey(Optimizable optTable)
RelationalOperatorusefulStartKey in interface RelationalOperatoroptTable - The Optimizable table for which we want to know
whether this is a useful start key.RelationalOperator.usefulStartKey(org.apache.derby.iapi.sql.compile.Optimizable)protected boolean keyColumnOnLeft(Optimizable optTable)
optTable - The Optimizable table that we're looking for a key
column on.protected int columnOnOneSide(Optimizable optTable)
optTable - The Optimizable table that we're looking for a key
column on.public boolean usefulStopKey(Optimizable optTable)
RelationalOperatorusefulStopKey in interface RelationalOperatoroptTable - The Optimizable table for which we want to know
whether this is a useful stop key.RelationalOperator.usefulStopKey(org.apache.derby.iapi.sql.compile.Optimizable)public void generateAbsoluteColumnId(MethodBuilder mb, Optimizable optTable)
RelationalOperatorgenerateAbsoluteColumnId in interface RelationalOperatormb - The method the generated code is to go intooptTable - The optimizable table we're doing the scan on.RelationalOperator.generateAbsoluteColumnId(org.apache.derby.iapi.services.compiler.MethodBuilder, org.apache.derby.iapi.sql.compile.Optimizable)public void generateRelativeColumnId(MethodBuilder mb, Optimizable optTable)
RelationalOperatorgenerateRelativeColumnId in interface RelationalOperatormb - The method the generated code is to go intooptTable - The optimizable table we're doing the scan on.RelationalOperator.generateRelativeColumnId(org.apache.derby.iapi.services.compiler.MethodBuilder, org.apache.derby.iapi.sql.compile.Optimizable)private int getAbsoluteColumnPosition(Optimizable optTable)
optTable - The Optimizablepublic void generateQualMethod(ExpressionClassBuilder acb, MethodBuilder mb, Optimizable optTable) throws StandardException
RelationalOperatorgenerateQualMethod in interface RelationalOperatoracb - The ExpressionClassBuilder for the class we're buildingmb - The method the generated code is to go intooptTable - The Optimizable table the Qualifier will qualifyStandardException - Thrown on errorpublic void generateOrderedNulls(MethodBuilder mb)
RelationalOperatorgenerateOrderedNulls in interface RelationalOperatormb - The method the generated code is to go intoRelationalOperator.generateOrderedNulls(org.apache.derby.iapi.services.compiler.MethodBuilder)public boolean orderedNulls()
RelationalOperatororderedNulls in interface RelationalOperatorRelationalOperator.orderedNulls()public boolean isQualifier(Optimizable optTable, boolean forPush) throws StandardException
RelationalOperatorisQualifier in interface RelationalOperatoroptTable - The Optimizable table in question.forPush - Are we asking because we're trying to push?StandardException - Thrown on errorRelationalOperator.isQualifier(org.apache.derby.iapi.sql.compile.Optimizable, boolean)public int getOrderableVariantType(Optimizable optTable) throws StandardException
RelationalOperatorgetOrderableVariantType in interface RelationalOperatoroptTable - The Optimizable table the Qualifier will qualifyStandardException - thrown on errorRelationalOperator.getOrderableVariantType(org.apache.derby.iapi.sql.compile.Optimizable)public boolean compareWithKnownConstant(Optimizable optTable, boolean considerParameters)
RelationalOperatorcompareWithKnownConstant in interface RelationalOperatorRelationalOperator.compareWithKnownConstant(org.apache.derby.iapi.sql.compile.Optimizable, boolean)public DataValueDescriptor getCompareValue(Optimizable optTable) throws StandardException
RelationalOperatorgetCompareValue in interface RelationalOperatorStandardException - Thrown on errorRelationalOperator.getCompareValue(org.apache.derby.iapi.sql.compile.Optimizable)protected double booleanSelectivity(Optimizable optTable) throws StandardException
StandardExceptionpublic java.lang.String getReceiverInterfaceName()
getReceiverInterfaceName in class BinaryOperatorNodeValueNode evaluateConstantExpressions() throws StandardException
evaluateConstantExpressions in class ValueNodeStandardException - if an error occurs during evaluationConstantExpressionVisitorprivate ValueNode newBool(boolean b) throws StandardException
b - the value of the constantStandardExceptionBinaryOperatorNode getNegation(ValueNode leftOperand, ValueNode rightOperand) throws StandardException
getNegation in class BinaryComparisonOperatorNodeleftOperand - The left operand of the comparison operatorrightOperand - The right operand of the comparison operatorStandardException - Thrown on errorprivate int getNegationNode()
BinaryOperatorNode getSwappedEquivalent() throws StandardException
getSwappedEquivalent in class BinaryComparisonOperatorNodeStandardException - if an error occursprivate int getNodeTypeForSwap()
= and <>), the same node type is returned.
Otherwise, the direction of the operator is switched in order to
preserve the meaning (for instance, a node representing less-than will
return the node type for greater-than).protected boolean usefulStartKey(boolean columnOnLeft)
columnOnLeft - is true if the column is the left hand side of the
binary operator.protected boolean usefulStopKey(boolean columnOnLeft)
public int getStartOperator(Optimizable optTable)
RelationalOperatorgetStartOperator in interface RelationalOperatoroptTable - The optimizable table we're doing the scan on.
This parameter is so we can tell which side of
the operator the table's column is on.RelationalOperator.getStartOperator(org.apache.derby.iapi.sql.compile.Optimizable)public int getStopOperator(Optimizable optTable)
RelationalOperatorgetStopOperator in interface RelationalOperatoroptTable - The optimizable table we're doing the scan on.
This parameter is so we can tell which side of
the operator the table's column is on.RelationalOperator.getStopOperator(org.apache.derby.iapi.sql.compile.Optimizable)public void generateOperator(MethodBuilder mb, Optimizable optTable)
RelationalOperatorgenerateOperator in interface RelationalOperatormb - The method the generated code is to go intooptTable - The optimizable table we're doing the scan on.RelationalOperator.generateOperator(org.apache.derby.iapi.services.compiler.MethodBuilder, org.apache.derby.iapi.sql.compile.Optimizable)public void generateNegate(MethodBuilder mb, Optimizable optTable)
RelationalOperatorgenerateNegate in interface RelationalOperatormb - The method the generated code is to go intooptTable - The Optimizable table the Qualifier will qualifyRelationalOperator.generateNegate(org.apache.derby.iapi.services.compiler.MethodBuilder, org.apache.derby.iapi.sql.compile.Optimizable)public int getOperator()
RelationalOperatorgetOperator in interface RelationalOperatorRelationalOperator.getOperator()public double selectivity(Optimizable optTable) throws StandardException
selectivity in class ValueNodeStandardExceptionpublic RelationalOperator getTransitiveSearchClause(ColumnReference otherCR) throws StandardException
RelationalOperatorgetTransitiveSearchClause in interface RelationalOperatorotherCR - The ColumnReference for the new (left) operand.StandardException - Thrown on errorRelationalOperator.getTransitiveSearchClause(org.apache.derby.impl.sql.compile.ColumnReference)public boolean equalsComparisonWithConstantExpression(Optimizable optTable)
RelationalOperatorequalsComparisonWithConstantExpression in interface RelationalOperatorpublic boolean isRelationalOperator()
ValueNodeisRelationalOperator in class ValueNodeValueNode.isRelationalOperator()public boolean isBinaryEqualsOperatorNode()
ValueNodeisBinaryEqualsOperatorNode in class ValueNodeValueNode.isBinaryEqualsOperatorNode()public boolean isInListProbeNode()
ValueNodeisInListProbeNode in class ValueNodeIt's okay for this method to reference inListProbeSource directly
because it does not rely on the contents of inListProbeSource's
leftOperand, and a caller of this method cannot gain access to
inListProbeSource's leftOperand through this method.public boolean optimizableEqualityNode(Optimizable optTable, int columnNumber, boolean isNullOkay) throws StandardException
ValueNodeoptimizableEqualityNode in class ValueNodeoptTable - the table being optimized. Column reference must be from
this table.columnNumber - the column number. One of the operands of this
predicate must be the column number specified by optTable/columnNumberisNullOkay - if set to true we also consider IS NULL predicates;
otherwise consider only = predicates.StandardExceptionValueNode.optimizableEqualityNode(org.apache.derby.iapi.sql.compile.Optimizable, int, boolean)private boolean implicitVarcharComparison()
throws StandardException
StandardException - Thrown on errorpublic ValueNode genSQLJavaSQLTree() throws StandardException
BinaryOperatorNodegenSQLJavaSQLTree in class BinaryComparisonOperatorNodeStandardException - Thrown on errorBinaryOperatorNode.genSQLJavaSQLTree()public ValueNode getScopedOperand(int whichSide, JBitSet parentRSNsTables, ResultSetNode childRSN, int[] whichRC) throws StandardException
whichSide - The operand are we trying to scope (LEFT or RIGHT)parentRSNsTables - Set of all table numbers referenced by
the ResultSetNode that is _parent_ to the received childRSN.
We need this to make sure we don't scope the operand to a
ResultSetNode to which it doesn't apply.childRSN - The result set node to which we want to create
a scoped predicate.whichRC - If not -1 then this tells us which ResultColumn
in the received childRSN we need to use for the scoped predicate;
if -1 then the column position of the scoped column reference
will be stored in this array and passed back to the caller.StandardExceptionprivate boolean valNodeReferencesOptTable(ValueNode valNode, FromTable optTable, boolean forPush, boolean walkOptTableSubtree)
valNode - The ValueNode that has the reference(s).optTable - The table/subtree node to which we're trying
to find a reference.forPush - Whether or not we are searching with the intent
to push this operator to the target table.walkOptTableSubtree - Should we walk the subtree beneath
optTable to find base tables, or not? Will be false if we've
already done it for the left operand and now we're here
for the right operand.private void initBaseTableVisitor(int numTablesInQuery,
boolean initOptBaseTables)
numTablesInQuery - Used for creating JBitSets that
can hold table numbers for the query.initOptBaseTables - Whether or not we should clear out
or initialize the optBaseTables bit set.private void buildTableNumList(FromTable ft, boolean forPush) throws StandardException
ft - Target table for which we're building the search
list.forPush - Whether or not we are searching with the intent
to push this operator to the target table.StandardExceptionApache Derby V10.10 Internals - Copyright © 2004,2014 The Apache Software Foundation. All Rights Reserved.