Class DMLModStatementNode
- java.lang.Object
-
- org.apache.derby.impl.sql.compile.QueryTreeNode
-
- org.apache.derby.impl.sql.compile.StatementNode
-
- org.apache.derby.impl.sql.compile.DMLStatementNode
-
- org.apache.derby.impl.sql.compile.DMLModStatementNode
-
- All Implemented Interfaces:
Visitable
- Direct Known Subclasses:
DeleteNode
,DMLModGeneratedColumnsStatementNode
,MergeNode
abstract class DMLModStatementNode extends DMLStatementNode
A DMLStatement for a table modification: to wit, INSERT UPDATE or DELETE.
-
-
Field Summary
-
Fields inherited from class org.apache.derby.impl.sql.compile.DMLStatementNode
resultSet
-
Fields inherited from class org.apache.derby.impl.sql.compile.StatementNode
EMPTY_TD_LIST, NEED_CURSOR_ACTIVATION, NEED_DDL_ACTIVATION, NEED_NOTHING_ACTIVATION, NEED_PARAM_ACTIVATION, NEED_ROW_ACTIVATION
-
Fields inherited from class org.apache.derby.impl.sql.compile.QueryTreeNode
AUTOINCREMENT_CREATE_MODIFY, AUTOINCREMENT_CYCLE, AUTOINCREMENT_INC_INDEX, AUTOINCREMENT_IS_AUTOINCREMENT_INDEX, AUTOINCREMENT_START_INDEX
-
-
Constructor Summary
Constructors Constructor Description DMLModStatementNode(ResultSetNode resultSet, MatchingClauseNode matchingClause, int statementType, ContextManager cm)
Constructor for a DMLModStatementNode -- delegate to DMLStatementNodeDMLModStatementNode(ResultSetNode resultSet, MatchingClauseNode matchingClause, ContextManager cm)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description (package private) void
acceptChildren(Visitor v)
Accept the visitor for all visitable children of this node.protected void
adjustDeferredFlag(boolean adjustment)
(package private) ValueNode
bindConstraints(DataDictionary dataDictionary, OptimizerFactory optimizerFactory, TableDescriptor targetTableDescriptor, Dependent dependent, ResultColumnList sourceRCL, int[] changedColumnIds, FormatableBitSet readColsBitSet, boolean includeTriggers, boolean[] hasDeferrableCheckConstraints)
Gets and binds all the constraints for an INSERT/UPDATE/DELETE.(package private) static void
bindRowScopedExpression(OptimizerFactory optimizerFactory, ContextManager cm, TableDescriptor targetTableDescriptor, ResultColumnList sourceRCL, ValueNode expression)
Binds an already parsed expression that only involves columns in a single row.private void
createConstraintDependencies(DataDictionary dd, ConstraintDescriptorList cdl, Dependent dependent)
Get all of our dependents due to a constraint.private void
createTriggerDependencies(TriggerDescriptorList tdl, Dependent dependent)
Makes the calling object (usually a Statement) dependent on all the constraints.private void
fkSetupArrays(DataDictionary dd, ForeignKeyConstraintDescriptor fkcd, int index, UUID[] uuids, long[] conglomNumbers, java.lang.String[] fkNames, boolean[] isSelfReferencingFK, int[] raRules, boolean[] isDeferrable, UUID[] fkIds)
MethodBuilder
generateCheckConstraints(ValueNode checkConstraints, ExpressionClassBuilder ecb)
Generate a method to evaluate a tree of CHECK CONSTRAINTS.void
generateCheckConstraints(ValueNode checkConstraints, ExpressionClassBuilder ecb, MethodBuilder mb)
Generate the code to evaluate a tree of CHECK CONSTRAINTS.private ValueNode
generateCheckTree(ConstraintDescriptorList cdl, TableDescriptor td, boolean[] hasDeferrable)
Get the ANDing of all appropriate check constraints as 1 giant query tree.protected void
generateCodeForTemporaryTable(ActivationClassBuilder acb)
If the DML is on a temporary table, generate the code to mark temporary table as modified in the current UOW.private void
generateFKInfo(ConstraintDescriptorList cdl, DataDictionary dd, TableDescriptor td, FormatableBitSet readColsBitSet)
Generate the FKInfo structures used during code generation.private MethodBuilder
generateGenerationClauses(ResultColumnList rcl, int rsNumber, boolean isUpdate, ExpressionClassBuilder ecb)
Generate a method to compute all of the generation clauses in a row.void
generateGenerationClauses(ResultColumnList rcl, int resultSetNumber, boolean isUpdate, ExpressionClassBuilder ecb, MethodBuilder mb)
Generate the code to evaluate all of the generation clauses.private void
generateTriggerInfo(TriggerDescriptorList triggerList)
Generate the TriggerInfo structures used during code generation.protected void
getAffectedIndexes(TableDescriptor td, ResultColumnList updatedColumns, FormatableBitSet colBitSet)
Get the list of indexes that must be updated by this DML statement.protected ConstraintDescriptorList
getAllRelevantConstraints(DataDictionary dd, TableDescriptor td, int[] changedColumnIds)
Get all the constraints relevant to this DML operationprotected TriggerDescriptorList
getAllRelevantTriggers(DataDictionary dd, TableDescriptor td, int[] changedColumnIds, boolean includeTriggers)
Get all the triggers relevant to this DML operation(package private) ValueNode
getCheckConstraints()
Get the check constraints for this node(package private) FKInfo[]
getFKInfo()
Return the FKInfo structure.(package private) static int[]
getReadColMap(int column_map_length, FormatableBitSet readColsBitSet)
Get a map to efficiently find heap columns from a compressed set of read columns.protected void
getResultColumnList()
Get and bind the ResultColumnList representing the columns in the target table, given the table's name.private void
getResultColumnList(FromBaseTable fromBaseTable, ResultColumnList inputRcl)
Get and bind the ResultColumnList representing the columns in the target table, given a FromTable for the target table.protected FromBaseTable
getResultColumnList(ResultColumnList inputRcl)
Get and bind the ResultColumnList representing the columns in the target table, given the table's name.private int[]
getRowMap(FormatableBitSet bitSet, TableDescriptor td)
Get a integer based row map from a bit set.(package private) SchemaDescriptor
getSchemaDescriptor()
Get a schema descriptor for the given table.(package private) TriggerInfo
getTriggerInfo()
Return the TriggerInfo structure.(package private) static void
getXAffectedIndexes(TableDescriptor baseTable, ResultColumnList updatedColumns, FormatableBitSet colBitSet, java.util.List<ConglomerateDescriptor> conglomerates)
Marks which indexes are affected by an UPDATE of the desired shape.protected boolean
hasCheckConstraints(DataDictionary dd, TableDescriptor td)
Determine whether or not there are check constraints on the specified table.protected boolean
hasGenerationClauses(TableDescriptor td)
Determine whether or not there are generated columns in the specified table.boolean
inMatchingClause()
Returns true if this DMLModStatement a [ NOT ] MATCHED action of a MERGE statementboolean
isAtomic()
INSERT/UPDATE/DELETE are always atomic.protected void
markAffectedIndexes(java.util.List<ConglomerateDescriptor> affectedConglomerates)
(package private) void
normalizeSynonymColumns(ResultColumnList rcl, TableName targetTableName)
Normalize synonym column references to have the name of the base table.void
optimizeStatement()
Generate an optimized QueryTree from a bound QueryTree.(package private) void
parseAndBindGenerationClauses(DataDictionary dataDictionary, TableDescriptor targetTableDescriptor, ResultColumnList sourceRCL, ResultColumnList targetRCL, boolean forUpdate, ResultSetNode updateResultSet)
Parse and bind the generating expressions of computed columns.ValueNode
parseCheckConstraint(java.lang.String checkConstraintText, TableDescriptor td)
Parse a check constraint and turn it into a query tree.ValueNode
parseGenerationClause(java.lang.String clauseText, TableDescriptor td)
Parse the generation clause for a column.(package private) void
printSubNodes(int depth)
Prints the sub-nodes of this object.private int[]
remapReferencedColumns(ConstraintDescriptor cd, int[] rowMap)
Remap referenced columns in the cd to reflect the passed in row map.(package private) boolean
requiresDeferredProcessing()
Does this DML Node require deferred processing?(package private) void
setRefActionInfo(long fkIndexConglomId, int[] fkColArray, java.lang.String parentResultSetId, boolean dependentScan)
set the Information gathered from the parent table that is required to perform a referential action on dependent table.(package private) void
setTarget(QueryTreeNode targetName)
(package private) java.lang.String
statementToString()
(package private) void
verifyTargetTable()
Verify the target table.-
Methods inherited from class org.apache.derby.impl.sql.compile.DMLStatementNode
activationKind, bind, bindExpressions, bindExpressionsWithTables, bindResultSetsWithTables, bindTables, generateParameterValueSet, getPrivType, getResultSetNode, makeResultDescription
-
Methods inherited from class org.apache.derby.impl.sql.compile.StatementNode
bindStatement, executeSchemaName, executeStatementName, generate, getCursorInfo, getSPSName, lockTableForCompilation, needsSavepoint, toString, updateIndexStatisticsFor
-
Methods inherited from class org.apache.derby.impl.sql.compile.QueryTreeNode
accept, addTag, addUDTUsagePriv, addUDTUsagePriv, bindOffsetFetch, bindRowMultiSet, bindUserCatalogType, bindUserType, checkReliability, checkReliability, convertDefaultNode, copyTagsFrom, createTypeDependency, debugFlush, debugPrint, disablePrivilegeCollection, formatNodeString, generate, 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, isPrivilegeCollectionRequired, isSessionSchema, isSessionSchema, makeConstantAction, makeTableName, makeTableName, nodeHeader, optimizerTracingIsOn, orReliability, parseSearchCondition, parseStatement, printLabel, referencesSessionSchema, resolveTableToSynonym, setBeginOffset, setEndOffset, stackPrint, taggedWith, treePrint, treePrint, verifyClassExist
-
-
-
-
Field Detail
-
targetVTI
protected FromVTI targetVTI
-
targetTableName
protected TableName targetTableName
-
resultColumnList
protected ResultColumnList resultColumnList
-
lockMode
protected int lockMode
-
fkInfo
protected FKInfo[] fkInfo
-
triggerInfo
protected TriggerInfo triggerInfo
-
targetTableDescriptor
TableDescriptor targetTableDescriptor
-
indicesToMaintain
public IndexRowGenerator[] indicesToMaintain
-
indexConglomerateNumbers
public long[] indexConglomerateNumbers
-
indexNames
public java.lang.String[] indexNames
-
relevantCdl
protected ConstraintDescriptorList relevantCdl
-
relevantTriggers
protected TriggerDescriptorList relevantTriggers
-
requiresDeferredProcessing
private boolean requiresDeferredProcessing
-
statementType
private int statementType
-
bound
private boolean bound
-
checkConstraints
private ValueNode checkConstraints
-
fkSchemaNames
protected java.lang.String[] fkSchemaNames
-
fkTableNames
protected java.lang.String[] fkTableNames
-
fkRefActions
protected int[] fkRefActions
-
fkColDescriptors
protected ColumnDescriptorList[] fkColDescriptors
-
fkIndexConglomNumbers
protected long[] fkIndexConglomNumbers
-
isDependentTable
protected boolean isDependentTable
-
fkColArrays
protected int[][] fkColArrays
-
synonymTableName
protected TableName synonymTableName
-
matchingClause
protected MatchingClauseNode matchingClause
-
dependentTables
java.util.Set<java.lang.String> dependentTables
Set of dependent tables for cascading deletes.
-
-
Constructor Detail
-
DMLModStatementNode
DMLModStatementNode(ResultSetNode resultSet, MatchingClauseNode matchingClause, ContextManager cm)
-
DMLModStatementNode
DMLModStatementNode(ResultSetNode resultSet, MatchingClauseNode matchingClause, int statementType, ContextManager cm)
Constructor for a DMLModStatementNode -- delegate to DMLStatementNode- Parameters:
resultSet
- A ResultSetNode for the result set of the DML statementmatchingClause
- Non-null if this DML is part of a MATCHED clause of a MERGE statement.statementType
- used by nodes that allocate a DMLMod directly (rather than inheriting it).cm
- The context manager
-
-
Method Detail
-
inMatchingClause
public boolean inMatchingClause()
Returns true if this DMLModStatement a [ NOT ] MATCHED action of a MERGE statement
-
setTarget
void setTarget(QueryTreeNode targetName)
-
generateCodeForTemporaryTable
protected void generateCodeForTemporaryTable(ActivationClassBuilder acb) throws StandardException
If the DML is on a temporary table, generate the code to mark temporary table as modified in the current UOW. At rollback transaction (or savepoint), we will check if the temporary table was modified in that UOW. If yes, we will remove all the data from the temporary table- Parameters:
acb
- The ActivationClassBuilder for the class being built- Throws:
StandardException
- Thrown on error
-
verifyTargetTable
void verifyTargetTable() throws StandardException
Verify the target table. Get the TableDescriptor if the target table is not a VTI.- Throws:
StandardException
- Thrown on error
-
isAtomic
public boolean isAtomic()
INSERT/UPDATE/DELETE are always atomic.- Overrides:
isAtomic
in classDMLStatementNode
- Returns:
- true
-
getSchemaDescriptor
SchemaDescriptor getSchemaDescriptor() throws StandardException
Get a schema descriptor for the given table. Uses this.targetTableName.- Returns:
- Schema Descriptor
- Throws:
StandardException
- throws on schema name that doesn't exist
-
getReadColMap
static int[] getReadColMap(int column_map_length, FormatableBitSet readColsBitSet)
Get a map to efficiently find heap columns from a compressed set of read columns. The returns a map such thatmap[heapColId (0 based)] -> readCol id (0 based)
- Parameters:
column_map_length
- The number of columns(ints) in the map.readColsBitSet
- A language style (1 based) bit set with bits for read heap columns set. RESOLVE: Replace this with a call to RowUtil when the store and the language both use 0 base or 1 base offsets for columns. Today we can't use the store function because we have a 1 based FormatableBitSet.
-
getResultColumnList
protected void getResultColumnList() throws StandardException
Get and bind the ResultColumnList representing the columns in the target table, given the table's name.- Throws:
StandardException
- Thrown on error
-
getResultColumnList
protected FromBaseTable getResultColumnList(ResultColumnList inputRcl) throws StandardException
Get and bind the ResultColumnList representing the columns in the target table, given the table's name.- Throws:
StandardException
- Thrown on error
-
getResultColumnList
private void getResultColumnList(FromBaseTable fromBaseTable, ResultColumnList inputRcl) throws StandardException
Get and bind the ResultColumnList representing the columns in the target table, given a FromTable for the target table.- Throws:
StandardException
- Thrown on error
-
parseAndBindGenerationClauses
void parseAndBindGenerationClauses(DataDictionary dataDictionary, TableDescriptor targetTableDescriptor, ResultColumnList sourceRCL, ResultColumnList targetRCL, boolean forUpdate, ResultSetNode updateResultSet) throws StandardException
Parse and bind the generating expressions of computed columns.- Parameters:
dataDictionary
- metadatatargetTableDescriptor
- metadata for the table that has the generated columnssourceRCL
- the tuple stream which drives the INSERT or UPDATEtargetRCL
- the row in the table that's being INSERTed or UPDATEdforUpdate
- true if this is an UPDATE. false otherwise.updateResultSet
- more information on the tuple stream driving the UPDATE- Throws:
StandardException
-
parseGenerationClause
public ValueNode parseGenerationClause(java.lang.String clauseText, TableDescriptor td) throws StandardException
Parse the generation clause for a column.- Parameters:
clauseText
- Text of the generation clause- Returns:
- The parsed expression as a query tree.
- Throws:
StandardException
- Thrown on failure
-
bindConstraints
ValueNode bindConstraints(DataDictionary dataDictionary, OptimizerFactory optimizerFactory, TableDescriptor targetTableDescriptor, Dependent dependent, ResultColumnList sourceRCL, int[] changedColumnIds, FormatableBitSet readColsBitSet, boolean includeTriggers, boolean[] hasDeferrableCheckConstraints) throws StandardException
Gets and binds all the constraints for an INSERT/UPDATE/DELETE. First finds the constraints that are relevant to this node. This is done by calling getAllRelevantConstriants(). If getAllRelevantConstraints() has already been called, then this list is used. Then it creates appropriate dependencies. Then binds check constraints. It also generates the array of FKInfo items that are used in code generation. Note: we have a new flag here to see if defer processing is enabled or not, the only scenario that is disabled is when we reapply the reply message we get from the source- Parameters:
dataDictionary
- The DataDictionarytargetTableDescriptor
- The TableDescriptordependent
- Parent object that will depend on all the constraints that we look up. If this argument is null, then we use the default dependent (the statement being compiled).sourceRCL
- RCL of the table being changedchangedColumnIds
- If null, all columns being changed, otherwise array of 1-based column ids for columns being changedreadColsBitSet
- bit set for the read scanincludeTriggers
- whether triggers are included in the processinghasDeferrableCheckConstraints
- OUT semantics: set element 0 to true if the target table has any deferrable CHECK constraints- Returns:
- The bound, ANDed check constraints as a query tree.
- Throws:
StandardException
- Thrown on failure
-
bindRowScopedExpression
static void bindRowScopedExpression(OptimizerFactory optimizerFactory, ContextManager cm, TableDescriptor targetTableDescriptor, ResultColumnList sourceRCL, ValueNode expression) throws StandardException
Binds an already parsed expression that only involves columns in a single row. E.g., a check constraint or a generation clause.- Parameters:
optimizerFactory
- The optimizer factorycm
- The context managertargetTableDescriptor
- The TableDescriptor for the constrained tablesourceRCL
- Result columnsexpression
- Parsed query tree for row scoped expression- Throws:
StandardException
- Thrown on failure
-
hasCheckConstraints
protected boolean hasCheckConstraints(DataDictionary dd, TableDescriptor td) throws StandardException
Determine whether or not there are check constraints on the specified table.- Parameters:
dd
- The DataDictionary to usetd
- The TableDescriptor for the table- Returns:
- Whether or not there are check constraints on the specified table.
- Throws:
StandardException
- Thrown on failure
-
hasGenerationClauses
protected boolean hasGenerationClauses(TableDescriptor td) throws StandardException
Determine whether or not there are generated columns in the specified table.- Parameters:
td
- The TableDescriptor for the table- Returns:
- Whether or not there are generated columns in the specified table.
- Throws:
StandardException
- Thrown on failure
-
generateCheckTree
private ValueNode generateCheckTree(ConstraintDescriptorList cdl, TableDescriptor td, boolean[] hasDeferrable) throws StandardException
Get the ANDing of all appropriate check constraints as 1 giant query tree. Makes the calling object (usually a Statement) dependent on all the constraints.- Parameters:
cdl
- The constraint descriptor listtd
- The TableDescriptor- Returns:
- The ANDing of all appropriate check constraints as a query tree.
- Throws:
StandardException
- Thrown on failure
-
generateFKInfo
private void generateFKInfo(ConstraintDescriptorList cdl, DataDictionary dd, TableDescriptor td, FormatableBitSet readColsBitSet) throws StandardException
Generate the FKInfo structures used during code generation. For each constraint that isn't a check constraint, add another one of these FKInfo structures and then package them up into a single array.- Parameters:
cdl
- The constraint descriptor listdd
- The DataDictionarytd
- The TableDescriptorreadColsBitSet
- columns read- Throws:
StandardException
- Thrown on failure
-
fkSetupArrays
private void fkSetupArrays(DataDictionary dd, ForeignKeyConstraintDescriptor fkcd, int index, UUID[] uuids, long[] conglomNumbers, java.lang.String[] fkNames, boolean[] isSelfReferencingFK, int[] raRules, boolean[] isDeferrable, UUID[] fkIds) throws StandardException
- Throws:
StandardException
-
generateTriggerInfo
private void generateTriggerInfo(TriggerDescriptorList triggerList)
Generate the TriggerInfo structures used during code generation.- Parameters:
triggerList
- The trigger descriptor list
-
getFKInfo
FKInfo[] getFKInfo()
Return the FKInfo structure. Just a little wrapper to make sure we don't try to access it until after binding.- Returns:
- the array of fkinfos
-
getTriggerInfo
TriggerInfo getTriggerInfo()
Return the TriggerInfo structure. Just a little wrapper to make sure we don't try to access it until after binding.- Returns:
- the trigger info
-
getCheckConstraints
ValueNode getCheckConstraints()
Get the check constraints for this node- Returns:
- the check constraints, may be null
-
createTriggerDependencies
private void createTriggerDependencies(TriggerDescriptorList tdl, Dependent dependent) throws StandardException
Makes the calling object (usually a Statement) dependent on all the constraints.- Parameters:
tdl
- The trigger descriptor listdependent
- Parent object that will depend on all the constraints that we look up. If this argument is null, then we use the default dependent (the statement being compiled).- Throws:
StandardException
- Thrown on failure
-
getAllRelevantTriggers
protected TriggerDescriptorList getAllRelevantTriggers(DataDictionary dd, TableDescriptor td, int[] changedColumnIds, boolean includeTriggers) throws StandardException
Get all the triggers relevant to this DML operation- Parameters:
dd
- The data dictionarytd
- The TableDescriptorchangedColumnIds
- If null, all columns being changed, otherwise array of 1-based column ids for columns being changedincludeTriggers
- whether we allow trigger processing or not for this table- Returns:
- the constraint descriptor list
- Throws:
StandardException
- Thrown on failure
-
adjustDeferredFlag
protected void adjustDeferredFlag(boolean adjustment)
-
createConstraintDependencies
private void createConstraintDependencies(DataDictionary dd, ConstraintDescriptorList cdl, Dependent dependent) throws StandardException
Get all of our dependents due to a constraint. Makes the calling object (usually a Statement) dependent on all the constraints.- Parameters:
dd
- The data dictionarycdl
- The constraint descriptor listdependent
- Parent object that will depend on all the constraints that we look up. If this argument is null, then we use the default dependent (the statement being compiled).- Throws:
StandardException
- Thrown on failure
-
getAllRelevantConstraints
protected ConstraintDescriptorList getAllRelevantConstraints(DataDictionary dd, TableDescriptor td, int[] changedColumnIds) throws StandardException
Get all the constraints relevant to this DML operation- Parameters:
dd
- The DataDictionarytd
- The TableDescriptorchangedColumnIds
- If null, all columns being changed, otherwise array of 1-based column ids for columns being changed- Returns:
- the constraint descriptor list
- Throws:
StandardException
- Thrown on failure
-
requiresDeferredProcessing
boolean requiresDeferredProcessing()
Does this DML Node require deferred processing? Set to true if we have triggers or referential constraints that need deferred processing.- Returns:
- true/false
-
parseCheckConstraint
public ValueNode parseCheckConstraint(java.lang.String checkConstraintText, TableDescriptor td) throws StandardException
Parse a check constraint and turn it into a query tree.- Parameters:
checkConstraintText
- Text of CHECK CONSTRAINT.td
- The TableDescriptor for the table the the constraint is on.- Returns:
- The parsed check constraint as a query tree.
- Throws:
StandardException
- Thrown on failure
-
generateCheckConstraints
public void generateCheckConstraints(ValueNode checkConstraints, ExpressionClassBuilder ecb, MethodBuilder mb) throws StandardException
Generate the code to evaluate a tree of CHECK CONSTRAINTS.- Parameters:
checkConstraints
- Bound query tree of ANDed check constraints.ecb
- Expression Class Builder- Throws:
StandardException
- Thrown on error
-
generateCheckConstraints
public MethodBuilder generateCheckConstraints(ValueNode checkConstraints, ExpressionClassBuilder ecb) throws StandardException
Generate a method to evaluate a tree of CHECK CONSTRAINTS.- Parameters:
checkConstraints
- Bound query tree of ANDed check constraints.ecb
- Expression Class Builder- Throws:
StandardException
- Thrown on error
-
generateGenerationClauses
public void generateGenerationClauses(ResultColumnList rcl, int resultSetNumber, boolean isUpdate, ExpressionClassBuilder ecb, MethodBuilder mb) throws StandardException
Generate the code to evaluate all of the generation clauses. If there are generation clauses, this routine builds an Activation method which evaluates the generation clauses and fills in the computed columns.- Parameters:
rcl
- describes the row of expressions to be put into the bas tableresultSetNumber
- index of base table into array of ResultSetsisUpdate
- true if this is for an UPDATE statementecb
- code generation state variablemb
- the method being generated- Throws:
StandardException
- Thrown on error
-
generateGenerationClauses
private MethodBuilder generateGenerationClauses(ResultColumnList rcl, int rsNumber, boolean isUpdate, ExpressionClassBuilder ecb) throws StandardException
Generate a method to compute all of the generation clauses in a row.- Parameters:
rcl
- describes the row of expressions to be put into the bas tablersNumber
- index of base table into array of ResultSetsisUpdate
- true if this is for an UPDATE statementecb
- code generation state variable- Throws:
StandardException
-
optimizeStatement
public void optimizeStatement() throws StandardException
Generate an optimized QueryTree from a bound QueryTree. Actually, it can annotate the tree in place rather than generate a new tree, but this interface allows the root node of the optimized QueryTree to be different from the root node of the bound QueryTree. For non-optimizable statements, this method is a no-op. Throws an exception if the tree is not bound, or if the binding is out of date.- Overrides:
optimizeStatement
in classDMLStatementNode
- Throws:
StandardException
- Thrown on failure
-
getAffectedIndexes
protected void getAffectedIndexes(TableDescriptor td, ResultColumnList updatedColumns, FormatableBitSet colBitSet) throws StandardException
Get the list of indexes that must be updated by this DML statement. WARNING: As a side effect, it creates dependencies on those indexes.- Parameters:
td
- The table descriptor for the table being updatedupdatedColumns
- The updated column list. If not update, nullcolBitSet
- a 1 based bit set of the columns in the list- Throws:
StandardException
- Thrown on error
-
getXAffectedIndexes
static void getXAffectedIndexes(TableDescriptor baseTable, ResultColumnList updatedColumns, FormatableBitSet colBitSet, java.util.List<ConglomerateDescriptor> conglomerates) throws StandardException
Marks which indexes are affected by an UPDATE of the desired shape. Is passed a list of updated columns. Does the following: 1) finds all indices which overlap the updated columns 2) adds the index columns to a bitmap of affected columns 3) adds the index descriptors to a list of conglomerate descriptors.- Parameters:
updatedColumns
- a list of updated columnscolBitSet
- OUT: evolving bitmap of affected columnsconglomerates
- OUT: list of affected indices- Throws:
StandardException
- Thrown on error
-
markAffectedIndexes
protected void markAffectedIndexes(java.util.List<ConglomerateDescriptor> affectedConglomerates) throws StandardException
- Throws:
StandardException
-
statementToString
java.lang.String statementToString()
- Specified by:
statementToString
in classStatementNode
-
remapReferencedColumns
private int[] remapReferencedColumns(ConstraintDescriptor cd, int[] rowMap)
Remap referenced columns in the cd to reflect the passed in row map.- Parameters:
cd
- constraint descriptorrowMap
- 1 based row map
-
getRowMap
private int[] getRowMap(FormatableBitSet bitSet, TableDescriptor td) throws StandardException
Get a integer based row map from a bit set.- Parameters:
bitSet
-td
-- Throws:
StandardException
-
setRefActionInfo
void setRefActionInfo(long fkIndexConglomId, int[] fkColArray, java.lang.String parentResultSetId, boolean dependentScan)
Description copied from class:QueryTreeNode
set the Information gathered from the parent table that is required to perform a referential action on dependent table.- Overrides:
setRefActionInfo
in classQueryTreeNode
-
normalizeSynonymColumns
void normalizeSynonymColumns(ResultColumnList rcl, TableName targetTableName) throws StandardException
Normalize synonym column references to have the name of the base table.- Parameters:
rcl
- The result column list of the target tabletargetTableName
- The target tablename- Throws:
StandardException
- Thrown on error
-
printSubNodes
void printSubNodes(int depth)
Prints the sub-nodes of this object. See QueryTreeNode.java for how tree printing is supposed to work.- Overrides:
printSubNodes
in classDMLStatementNode
- Parameters:
depth
- The depth of this node in the tree
-
acceptChildren
void acceptChildren(Visitor v) throws StandardException
Accept the visitor for all visitable children of this node.- Overrides:
acceptChildren
in classDMLStatementNode
- Parameters:
v
- the visitor- Throws:
StandardException
- on error
-
-