org.apache.derby.impl.sql.compile
Class NormalizeResultSetNode
java.lang.Object
org.apache.derby.impl.sql.compile.QueryTreeNode
org.apache.derby.impl.sql.compile.ResultSetNode
org.apache.derby.impl.sql.compile.FromTable
org.apache.derby.impl.sql.compile.SingleChildResultSetNode
org.apache.derby.impl.sql.compile.NormalizeResultSetNode
- All Implemented Interfaces:
- Optimizable, Visitable
public class NormalizeResultSetNode
- extends SingleChildResultSetNode
A NormalizeResultSetNode represents a normalization result set for any
child result set that needs one. See non-javadoc comments for
a walk-through of a couple sample code paths.
Field Summary |
private boolean |
forUpdate
this indicates if the normalize is being performed for an Update
statement or not. |
Fields inherited from class org.apache.derby.impl.sql.compile.FromTable |
ADD_PLAN, bestAccessPath, bestCostEstimate, bestSortAvoidancePath, correlationName, corrTableName, currentAccessPath, hashKeyColumns, initialCapacity, level, LOAD_PLAN, loadFactor, maxCapacity, origTableName, REMOVE_PLAN, tableNumber, tableProperties, trulyTheBestAccessPath, userSpecifiedJoinStrategy |
Method Summary |
void |
generate(ActivationClassBuilder acb,
MethodBuilder mb)
Do the code generation for this node. |
void |
init(java.lang.Object childResult,
java.lang.Object targetResultColumnList,
java.lang.Object tableProperties,
java.lang.Object forUpdate)
Initializer for a NormalizeResultSetNode. |
(package private) void |
pushOffsetFetchFirst(ValueNode offset,
ValueNode fetchFirst)
Push through the offset and fetch first parameters, if any, to the child
result set. |
(package private) void |
pushOrderByList(OrderByList orderByList)
Push the order by list down from InsertNode into its child result set so
that the optimizer has all of the information that it needs to consider
sort avoidance. |
void |
setRefActionInfo(long fkIndexConglomId,
int[] fkColArray,
java.lang.String parentResultSetId,
boolean dependentScan)
set the Information gathered from the parent table that is
required to peform a referential action on dependent table. |
Methods inherited from class org.apache.derby.impl.sql.compile.SingleChildResultSetNode |
acceptChildren, addNewPredicate, adjustForSortElimination, adjustForSortElimination, changeAccessPath, decrementLevel, ensurePredicateList, flattenableInFromSubquery, forUpdate, getChildResult, getFinalCostEstimate, getFromTableByName, getTrulyTheBestAccessPath, init, initAccessPaths, isNotExists, isOneRowResultSet, isOrderedOn, modifyAccessPaths, optimize, preprocess, printSubNodes, pullOptPredicates, pushExpressions, referencesSessionSchema, referencesTarget, reflectionNeededForProjection, setChildResult, setLevel, subqueryReferencesTarget, updateBestPlanMap, updateTargetLockMode |
Methods inherited from class org.apache.derby.impl.sql.compile.FromTable |
assignCostEstimate, canBeOrdered, considerSortAvoidancePath, convertAbsoluteToRelativeColumnPosition, cursorTargetTable, estimateCost, feasibleJoinStrategy, fillInReferencedTableMap, flatten, getBaseTableName, getBestAccessPath, getBestSortAvoidancePath, getCorrelationName, getCostEstimate, getCurrentAccessPath, getExposedName, getLevel, getName, getNumColumnsReturned, getOrigTableName, getProperties, getResultColumnsForList, getSchemaDescriptor, getSchemaDescriptor, getScratchCostEstimate, getTableDescriptor, getTableName, getTableNumber, getUserSpecifiedJoinStrategy, hashKeyColumns, hasTableNumber, initialCapacity, isBaseTable, isCoveringIndex, isFlattenableJoinNode, isMaterializable, isOneRowScan, isTargetTable, legalJoinOrder, loadFactor, LOJ_reorderable, markUpdatableByCursor, maxCapacity, memoryUsageOK, modifyAccessPath, needsSpecialRCLBinding, nextAccessPath, optimizeIt, optimizeSubqueries, pushOptPredicate, rememberAsBest, rememberJoinStrategyAsBest, rememberSortAvoidancePath, resetJoinStrategies, setCostEstimate, setHashKeyColumns, setOrigTableName, setProperties, setTableNumber, startOptimizing, supportsMultipleInstantiations, tellRowOrderingAboutConstantColumns, toString, transformOuterJoins, uniqueJoin, verifyProperties |
Methods inherited from class org.apache.derby.impl.sql.compile.ResultSetNode |
assignResultSetNumber, bindExpressions, bindExpressionsWithTables, bindNonVTITables, bindResultColumns, bindResultColumns, bindTargetExpressions, bindUntypedNullsToResultColumns, bindVTITables, columnTypesAndLengthsMatch, considerMaterialization, disablePrivilegeCollection, enhanceRCLForInsert, generateNormalizationResultSet, generateResultSet, genProjectRestrict, genProjectRestrict, genProjectRestrictForReordering, getAllResultColumns, getCostEstimate, getCursorTargetTable, getFromList, getMatchingColumn, getNewCostEstimate, getOptimizer, getOptimizerImpl, getRCLForInsert, getReferencedTableMap, getResultColumns, getResultSetNumber, isPossibleDistinctScan, isUpdatableCursor, LOJgetReferencedTables, makeResultDescription, makeResultDescriptors, markAsCursorTargetTable, markForDistinctScan, markStatementResultSet, modifyAccessPaths, notCursorTargetTable, notFlattenableJoin, numDistinctAggregates, parseDefault, performMaterialization, projectResultColumns, rejectParameters, rejectXMLValues, renameGeneratedResultNames, replaceOrForbidDefaults, returnsAtMostOneRow, setInsertSource, setReferencedTableMap, setResultColumns, setResultToBooleanTrueNode, setTableConstructorTypes, verifySelectStarSubquery |
Methods inherited from class org.apache.derby.impl.sql.compile.QueryTreeNode |
accept, bindOffsetFetch, bindRowMultiSet, bindUserType, checkReliability, checkReliability, convertDefaultNode, createTypeDependency, debugFlush, debugPrint, formatNodeString, foundString, generateAuthorizeCheck, getBeginOffset, getClassFactory, getCompilerContext, getContextManager, getCursorInfo, getDataDictionary, getDependencyManager, getEndOffset, getExecutionFactory, getGenericConstantActionFactory, getIntProperty, getLanguageConnectionContext, getNodeFactory, getNodeType, getNullNode, getParameterTypes, getRowEstimate, getSchemaDescriptor, getSchemaDescriptor, getStatementType, getTableDescriptor, getTypeCompiler, init, init, init, init, init, init, init, init, init, init, init, init, isAtomic, isInstanceOf, isPrivilegeCollectionRequired, isSessionSchema, isSessionSchema, makeConstantAction, makeTableName, makeTableName, nodeHeader, orReliability, parseStatement, printLabel, resolveTableToSynonym, setBeginOffset, setContextManager, setEndOffset, setNodeType, stackPrint, treePrint, treePrint, verifyClassExist |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
forUpdate
private boolean forUpdate
- this indicates if the normalize is being performed for an Update
statement or not. The row passed to update also has
before values of the columns being updated-- we need not
normalize these values.
NormalizeResultSetNode
public NormalizeResultSetNode()
init
public void init(java.lang.Object childResult,
java.lang.Object targetResultColumnList,
java.lang.Object tableProperties,
java.lang.Object forUpdate)
throws StandardException
- Initializer for a NormalizeResultSetNode.
ColumnReferences must continue to point to the same ResultColumn, so
that ResultColumn must percolate up to the new PRN. However,
that ResultColumn will point to a new expression, a VirtualColumnNode,
which points to the FromTable and the ResultColumn that is the source for
the ColumnReference.
(The new NRSN will have the original of the ResultColumnList and
the ResultColumns from that list. The FromTable will get shallow copies
of the ResultColumnList and its ResultColumns. ResultColumn.expression
will remain at the FromTable, with the PRN getting a new
VirtualColumnNode for each ResultColumn.expression.)
This is useful for UNIONs, where we want to generate a DistinctNode above
the UnionNode to eliminate the duplicates, because the type going into the
sort has to agree with what the sort expects.
(insert into t1 (smallintcol) values 1 union all values 2;
- Overrides:
init
in class QueryTreeNode
- Parameters:
childResult
- The child ResultSetNodetargetResultColumnList
- The target resultColumnList from
the InsertNode or UpdateNode. These will
be the types used for the NormalizeResultSetNode.tableProperties
- Properties list associated with the tableforUpdate
- tells us if the normalize operation is being
performed on behalf of an update statement.
- Throws:
StandardException
generate
public void generate(ActivationClassBuilder acb,
MethodBuilder mb)
throws StandardException
- Description copied from class:
QueryTreeNode
- Do the code generation for this node. This is a place-holder
method - it should be over-ridden in the sub-classes.
- Overrides:
generate
in class QueryTreeNode
- Parameters:
acb
- The ActivationClassBuilder for the class being builtmb
- The method for the generated code to go into
- Throws:
StandardException
- Thrown on error
setRefActionInfo
public void setRefActionInfo(long fkIndexConglomId,
int[] fkColArray,
java.lang.String parentResultSetId,
boolean dependentScan)
- set the Information gathered from the parent table that is
required to peform a referential action on dependent table.
- Overrides:
setRefActionInfo
in class QueryTreeNode
pushOrderByList
void pushOrderByList(OrderByList orderByList)
- Push the order by list down from InsertNode into its child result set so
that the optimizer has all of the information that it needs to consider
sort avoidance.
- Overrides:
pushOrderByList
in class ResultSetNode
- Parameters:
orderByList
- The order by list
pushOffsetFetchFirst
void pushOffsetFetchFirst(ValueNode offset,
ValueNode fetchFirst)
- Push through the offset and fetch first parameters, if any, to the child
result set.
- Overrides:
pushOffsetFetchFirst
in class ResultSetNode
- Parameters:
offset
- the OFFSET, if anyfetchFirst
- the OFFSET FIRST, if any
Apache Derby V10.6 Internals - Copyright © 2004,2007 The Apache Software Foundation. All Rights Reserved.