Optimizable
, Visitable
class HalfOuterJoinNode extends JoinNode
ResultSetNode.QueryExpressionClauses
Modifier and Type | Field | Description |
---|---|---|
private boolean |
rightOuterJoin |
|
private boolean |
transformed |
ADD_PLAN, bestAccessPath, bestCostEstimate, bestSortAvoidancePath, correlationName, corrTableName, currentAccessPath, hashKeyColumns, initialCapacity, level, LOAD_PLAN, loadFactor, maxCapacity, origTableName, REMOVE_PLAN, tableNumber, tableProperties, trulyTheBestAccessPath, userSpecifiedJoinStrategy
aggregates, CROSSJOIN, flattenableJoin, FULLOUTERJOIN, INNERJOIN, joinClause, joinClauseNormalized, joinOrderStrategyProperties, joinPredicates, LEFTOUTERJOIN, RIGHTOUTERJOIN, subqueryList, UNIONJOIN, usingClause
AUTOINCREMENT_CREATE_MODIFY, AUTOINCREMENT_CYCLE, AUTOINCREMENT_INC_INDEX, AUTOINCREMENT_IS_AUTOINCREMENT_INDEX, AUTOINCREMENT_START_INDEX
leftOptimizer, leftResultSet, rightOptimizer, rightResultSet
Constructor | Description |
---|---|
HalfOuterJoinNode(ResultSetNode leftResult,
ResultSetNode rightResult,
ValueNode onClause,
ResultColumnList usingClause,
boolean rightOuterJoin,
java.util.Properties tableProperties,
ContextManager cm) |
Constructor for a HalfOuterJoinNode.
|
Modifier and Type | Method | Description |
---|---|---|
(package private) int |
addOuterJoinArguments(ActivationClassBuilder acb,
MethodBuilder mb) |
Generate and add any arguments specifict to outer joins.
|
protected void |
adjustNumberOfRowsReturned(CostEstimate costEstimate) |
Some types of joins (e.g. outer joins) will return a different
number of rows than is predicted by optimizeIt() in JoinNode.
|
(package private) void |
generate(ActivationClassBuilder acb,
MethodBuilder mb) |
Generate the code for an inner join node.
|
(package private) ResultSetNode |
getLogicalLeftResultSet() |
Return the logical left result set for this qualified
join node.
|
(package private) ResultSetNode |
getLogicalRightResultSet() |
Return the logical right result set for this qualified
join node.
|
protected int |
getNumJoinArguments() |
Return the number of arguments to the join result set.
|
(package private) void |
isJoinColumnForRightOuterJoin(ResultColumn rc) |
If this is a right outer join node with USING/NATURAL clause, then
check if the passed ResultColumn is a join column.
|
private boolean |
isNullRejecting(ValueNode joinClause,
JBitSet leftTableMap,
JBitSet rightTableMap) |
Tests pRiRj in the sense of Galindo-Legaria et al: Outerjoin
Simplification and Reordering for Query Optimization, ACM
Transactions on Database Systems, Vol. 22, No. 1, March 1997, Pages
43-74:
"The set of attributes referenced by a predicate p is called the schema of p, and denoted sch(p). |
(package private) boolean |
isRightOuterJoin() |
Return true if right outer join or false if left outer join
Used to set Nullability correctly in JoinNode
|
(package private) boolean |
LOJ_bindResultColumns(boolean anyChange) |
|
(package private) boolean |
LOJ_reorderable(int numTables) |
This method recursively:
determines if this part of the query tree is a compound OJ of
the shape required for reordering and if so,
does a reordering.
|
(package private) JBitSet |
LOJgetNPReferencedTables(int numTables) |
|
JBitSet |
LOJgetRPReferencedTables(int numTables) |
|
(package private) void |
oneRowRightSide(ActivationClassBuilder acb,
MethodBuilder mb) |
|
(package private) ResultSetNode |
preprocess(int numTables,
GroupByList gbl,
FromList fromList) |
Put a ProjectRestrictNode on top of each FromTable in the FromList.
|
(package private) void |
pushExpressions(PredicateList outerPredicateList) |
Push expressions down to the first ResultSetNode which can do expression
evaluation and has the same referenced table map.
|
boolean |
pushOptPredicate(OptimizablePredicate optimizablePredicate) |
Push an OptimizablePredicate down, if this node accepts it.
|
java.lang.String |
toString() |
Convert this object to a String.
|
(package private) FromTable |
transformOuterJoins(ValueNode predicateTree,
int numTables) |
Transform any Outer Join into an Inner Join where applicable.
|
assignCostEstimate, canBeOrdered, columnsAreUpdatable, considerSortAvoidancePath, convertAbsoluteToRelativeColumnPosition, cursorTargetTable, estimateCost, feasibleJoinStrategy, fillInReferencedTableMap, forUpdate, getBaseTableName, getBestAccessPath, getBestSortAvoidancePath, getCorrelationName, getCostEstimate, getCurrentAccessPath, getLevel, getMergeTableID, getName, getNumColumnsReturned, getOrigTableName, getProperties, getResultColumnsForList, getSchemaDescriptor, getSchemaDescriptor, getScratchCostEstimate, getTableDescriptor, getTableName, getTableNumber, getTrulyTheBestAccessPath, getUserSpecifiedJoinStrategy, hashKeyColumns, hasLargeObjectColumns, hasTableNumber, initAccessPaths, initialCapacity, isBaseTable, isCoveringIndex, isMaterializable, isOneRowScan, isTargetTable, legalJoinOrder, loadFactor, markUpdatableByCursor, maxCapacity, memoryUsageOK, nextAccessPath, optimizeSubqueries, pullOptPredicates, rememberAsBest, rememberJoinStrategyAsBest, rememberSortAvoidancePath, resetJoinStrategies, setCostEstimateCost, setHashKeyColumns, setMergeTableID, setOrigTableName, setProperties, setTableNumber, startOptimizing, supportsMultipleInstantiations, tellRowOrderingAboutConstantColumns, uniqueJoin
acceptChildren, bindExpression, bindExpressions, bindResultColumns, bindResultColumns, flatten, generateCore, generateCore, getAllResultColumns, getFinalCostEstimate, getLeftPredicateList, getMatchingColumn, getRightPredicateList, isFlattenableJoinNode, isOrderedOn, joinTypeToString, LOJgetReferencedTables, makeFromList, modifyAccessPath, normExpressions, notFlattenableJoin, optimizeIt, printSubNodes, projectResultColumns, pushExpressionsToLeft, setAggregates, setNaturalJoin, setSubqueryList, updateTargetLockMode
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getDataDictionary, getOptimizerTracer, getReferencedTableMap, getResultSetNumber, optimizerTracingIsOn
accept, addTag, addUDTUsagePriv, addUDTUsagePriv, bindOffsetFetch, bindRowMultiSet, bindUserCatalogType, bindUserType, checkReliability, checkReliability, convertDefaultNode, copyTagsFrom, createTypeDependency, debugFlush, debugPrint, disablePrivilegeCollection, formatNodeString, generateAuthorizeCheck, getBeginOffset, getClassFactory, getCompilerContext, getContext, getContextManager, getDataDictionary, getDependencyManager, getEndOffset, getExecutionFactory, getGenericConstantActionFactory, getIntProperty, getLanguageConnectionContext, getLongProperty, getNullNode, getOffsetOrderedNodes, getOptimizerFactory, getOptimizerTracer, getParameterTypes, getSchemaDescriptor, getSchemaDescriptor, getStatementType, getTableDescriptor, getTypeCompiler, getUDTDesc, isAtomic, isPrivilegeCollectionRequired, isSessionSchema, isSessionSchema, makeConstantAction, makeTableName, makeTableName, nodeHeader, optimizerTracingIsOn, orReliability, parseSearchCondition, parseStatement, printLabel, resolveTableToSynonym, setBeginOffset, setEndOffset, setRefActionInfo, stackPrint, taggedWith, treePrint, treePrint, verifyClassExist
addNewPredicate, assignResultSetNumber, bindTargetExpressions, changeAccessPath, columnTypesAndLengthsMatch, considerMaterialization, enhanceRCLForInsert, ensurePredicateList, flattenableInFromSubquery, generateNormalizationResultSet, generateResultSet, genProjectRestrict, genProjectRestrict, genProjectRestrictForReordering, getCandidateFinalCostEstimate, getCostEstimate, getCursorTargetTable, getFromList, getNewCostEstimate, getOptimizer, getOptimizerImpl, getRCLForInsert, getReferencedTableMap, getResultColumns, getResultSetNumber, getScratchCostEstimate, isCursorTargetTable, isInsertSource, isNotExists, isOneRowResultSet, isPossibleDistinctScan, isStatementResultSet, isUpdatableCursor, makeResultDescription, makeResultDescriptors, markAsCursorTargetTable, markForDistinctScan, markStatementResultSet, modifyAccessPaths, notCursorTargetTable, numDistinctAggregates, parseDefault, performMaterialization, printQueryExpressionSuffixClauses, pushOffsetFetchFirst, pushOrderByList, pushQueryExpressionSuffix, rejectXMLValues, renameGeneratedResultNames, replaceOrForbidDefaults, returnsAtMostOneRow, setCandidateFinalCostEstimate, setCostEstimate, setCursorTargetTable, setInsertSource, setOptimizer, setReferencedTableMap, setResultColumns, setResultSetNumber, setResultToBooleanTrueNode, setScratchCostEstimate, setTableConstructorTypes, subqueryReferencesTarget, verifySelectStarSubquery
adjustForSortElimination, adjustForSortElimination, bindExpressionsWithTables, bindNonVTITables, bindUntypedNullsToResultColumns, bindVTITables, decrementLevel, getExposedName, getFromTableByName, getLeftmostResultSet, getLeftResultSet, getRightResultSet, modifyAccessPaths, needsSpecialRCLBinding, optimize, optimizeSource, referencesSessionSchema, referencesTarget, rejectParameters, setLeftmostResultSet, setLevel, setNestedInParens, setReferencedColumns, updateBestPlanMap, verifyProperties
accept, addTag, taggedWith
HalfOuterJoinNode(ResultSetNode leftResult, ResultSetNode rightResult, ValueNode onClause, ResultColumnList usingClause, boolean rightOuterJoin, java.util.Properties tableProperties, ContextManager cm) throws StandardException
leftResult
- The ResultSetNode on the left side of this joinrightResult
- The ResultSetNode on the right side of this joinonClause
- The ON clauseusingClause
- The USING clauserightOuterJoin
- Whether or not this node represents a user
specified right outer jointableProperties
- Properties list associated with the tablecm
- The context managerStandardException
- Thrown on errorpublic boolean pushOptPredicate(OptimizablePredicate optimizablePredicate) throws StandardException
Optimizable
pushOptPredicate
in interface Optimizable
pushOptPredicate
in class JoinNode
optimizablePredicate
- OptimizablePredicate to push down.StandardException
- Thrown on errorOptimizable.pushOptPredicate(org.apache.derby.iapi.sql.compile.OptimizablePredicate)
public java.lang.String toString()
toString
in class TableOperatorNode
ResultSetNode preprocess(int numTables, GroupByList gbl, FromList fromList) throws StandardException
preprocess
in class JoinNode
numTables
- Number of tables in the DML Statementgbl
- The group by list, if anyfromList
- The from list, if anyStandardException
- Thrown on errorvoid pushExpressions(PredicateList outerPredicateList) throws StandardException
pushExpressions
in class JoinNode
outerPredicateList
- The PredicateList from the outer RS.StandardException
- Thrown on errorboolean LOJ_reorderable(int numTables) throws StandardException
OJ1 pT1T2 OJ1 pT2T3 / \ / \ / \ can / t3 t1 OJ2 pT2T3 reorder / / \ to OJ2 pT1T2 / \ / \ t2 t3 / \ t1 t2 where pR1R2 is a null-rejecting predicate which references the schema of joinee R1 and R2, cf. terminology explanation in #isNullRejecting. OJ1 represents this before and after the reordering.The join predicates are assumed to be in CNF form. Note: Present implementation limitations
LOJ_reorderable
in class JoinNode
numTables
- number of tables involved (needed to right size the
bitmaps)StandardException
- standard error policyprivate boolean isNullRejecting(ValueNode joinClause, JBitSet leftTableMap, JBitSet rightTableMap) throws StandardException
"The set of attributes referenced by a predicate p is called the schema of p, and denoted sch(p). As a notational convention, we annotate predicates to reflect their schema. If sch(p) includes attributes of both Ri, Rj and only those relations, we can write the predicate as pRiRj.If a null-valued column is compared in a predicate that contains no OR connectives, the predicate evaluates to undefined, and the tuple is rejected. The relops satisfy this criterion. To simplify analysis, we only accept predicates of the form:
X relop Y [and .. and X-n relop Y-n]At least one of the relops should reference both
leftTableMap
and rightTableMap
, so that we know that sch(p) includes
attributes of both Ri, Rj. I.e.
X
should be a table in leftTableMap
, and
Y
should be a table in rightTableMap
.
or
X
should be a table in rightTableMap
, and
Y
should be a table in leftTableMap
.joinClause
- The join clause (i.e. predicate) we want to checkleftTableMap
- a bit map representing the tables expected for the
predicate (logical left)rightTableMap
- a bit map representing the tables expected for the
predicate (logical right)joinClause
has at least one relop that
references both leftTableMap
and
rightTableMap
StandardException
- standard exception policyboolean LOJ_bindResultColumns(boolean anyChange) throws StandardException
StandardException
FromTable transformOuterJoins(ValueNode predicateTree, int numTables) throws StandardException
transformOuterJoins
in class JoinNode
predicateTree
- The predicate tree for the query blockStandardException
- Thrown on errorprotected void adjustNumberOfRowsReturned(CostEstimate costEstimate)
JoinNode
adjustNumberOfRowsReturned
in class JoinNode
JoinNode.adjustNumberOfRowsReturned(org.apache.derby.iapi.sql.compile.CostEstimate)
void generate(ActivationClassBuilder acb, MethodBuilder mb) throws StandardException
generate
in class JoinNode
acb
- The ActivationClassBuilder for the class being builtmb
- The method for the generated code to go intoStandardException
- Thrown on errorint addOuterJoinArguments(ActivationClassBuilder acb, MethodBuilder mb) throws StandardException
addOuterJoinArguments
in class JoinNode
acb
- The ActivationClassBuildermb
- the method the generate code is to go into
return The args that have been addedStandardException
- Thrown on errorprotected int getNumJoinArguments()
getNumJoinArguments
in class JoinNode
void oneRowRightSide(ActivationClassBuilder acb, MethodBuilder mb)
oneRowRightSide
in class JoinNode
ResultSetNode getLogicalLeftResultSet()
getLogicalLeftResultSet
in class JoinNode
ResultSetNode getLogicalRightResultSet()
getLogicalRightResultSet
in class JoinNode
boolean isRightOuterJoin()
void isJoinColumnForRightOuterJoin(ResultColumn rc)
isJoinColumnForRightOuterJoin
in class FromTable
isJoinColumnForRightOuterJoin(org.apache.derby.impl.sql.compile.ResultColumn)
JBitSet LOJgetNPReferencedTables(int numTables) throws StandardException
StandardException
public JBitSet LOJgetRPReferencedTables(int numTables) throws StandardException
StandardException
Apache Derby V10.14 Internals - Copyright © 2004,2018 The Apache Software Foundation. All Rights Reserved.