abstract class DMLModStatementNode extends DMLStatementNode
Modifier and Type | Field and Description |
---|---|
private boolean |
bound |
private ValueNode |
checkConstraints |
(package private) java.util.Set |
dependentTables
Set of dependent tables for cascading deletes.
|
protected int[][] |
fkColArrays |
protected ColumnDescriptorList[] |
fkColDescriptors |
protected long[] |
fkIndexConglomNumbers |
protected FKInfo[] |
fkInfo |
protected int[] |
fkRefActions |
protected java.lang.String[] |
fkTableNames |
long[] |
indexConglomerateNumbers |
java.lang.String[] |
indexNames |
IndexRowGenerator[] |
indicesToMaintain |
protected boolean |
isDependentTable |
protected int |
lockMode |
protected ConstraintDescriptorList |
relevantCdl |
protected GenericDescriptorList |
relevantTriggers |
private boolean |
requiresDeferredProcessing |
protected ResultColumnList |
resultColumnList |
private int |
statementType |
protected TableName |
synonymTableName |
TableDescriptor |
targetTableDescriptor |
protected TableName |
targetTableName |
protected FromVTI |
targetVTI |
protected TriggerInfo |
triggerInfo |
resultSet
EMPTY_TD_LIST, NEED_CURSOR_ACTIVATION, NEED_DDL_ACTIVATION, NEED_NOTHING_ACTIVATION, NEED_PARAM_ACTIVATION, NEED_ROW_ACTIVATION
AUTOINCREMENT_CREATE_MODIFY, AUTOINCREMENT_INC_INDEX, AUTOINCREMENT_IS_AUTOINCREMENT_INDEX, AUTOINCREMENT_START_INDEX
Constructor and Description |
---|
DMLModStatementNode() |
Modifier and Type | Method and 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,
NodeFactory nodeFactory,
TableDescriptor targetTableDescriptor,
Dependent dependent,
ResultColumnList sourceRCL,
int[] changedColumnIds,
FormatableBitSet readColsBitSet,
boolean skipCheckConstraints,
boolean includeTriggers)
Gets and binds all the constraints for an INSERT/UPDATE/DELETE.
|
(package private) static void |
bindRowScopedExpression(NodeFactory nodeFactory,
ContextManager contextManager,
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(GenericDescriptorList 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) |
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)
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(GenericDescriptorList triggerList,
TableDescriptor td,
int[] changedCols)
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,
boolean skipCheckConstraints,
int[] changedColumnIds)
Get all the constraints relevant to this DML operation
|
protected GenericDescriptorList |
getAllRelevantTriggers(DataDictionary dd,
TableDescriptor td,
int[] changedColumnIds,
boolean includeTriggers)
Get all the triggers relevant to this DML operation
|
ValueNode |
getCheckConstraints()
Get the check constraints for this node
|
FKInfo[] |
getFKInfo()
Return the FKInfo structure.
|
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.
|
SchemaDescriptor |
getSchemaDescriptor()
Get a schema descriptor for the given table.
|
TriggerInfo |
getTriggerInfo()
Return the TriggerInfo structure.
|
(package private) static void |
getXAffectedIndexes(TableDescriptor baseTable,
ResultColumnList updatedColumns,
FormatableBitSet colBitSet,
java.util.List conglomVector)
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.
|
void |
init(java.lang.Object resultSet)
Initializer for a DMLModStatementNode -- delegate to DMLStatementNode
|
void |
init(java.lang.Object resultSet,
java.lang.Object statementType)
Initializer for a DMLModStatementNode -- delegate to DMLStatementNode
|
boolean |
isAtomic()
INSERT/UPDATE/DELETE are always atomic.
|
protected void |
markAffectedIndexes(java.util.List affectedConglomerates) |
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.
|
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.
|
boolean |
requiresDeferredProcessing()
Does this DML Node require deferred processing?
|
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.
|
(package private) void |
setTarget(QueryTreeNode targetName) |
java.lang.String |
statementToString() |
(package private) void |
verifyTargetTable()
Verify the target table.
|
activationKind, bind, bindExpressions, bindExpressionsWithTables, bindResultSetsWithTables, bindTables, generateParameterValueSet, getPrivType, getResultSetNode, makeResultDescription
bindStatement, executeSchemaName, executeStatementName, generate, getSPSName, lockTableForCompilation, needsSavepoint, toString, updateIndexStatisticsFor
accept, bindOffsetFetch, bindRowMultiSet, bindUserCatalogType, bindUserType, checkReliability, checkReliability, convertDefaultNode, createTypeDependency, debugFlush, debugPrint, disablePrivilegeCollection, formatNodeString, foundString, generate, 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, init, init, isInstanceOf, isPrivilegeCollectionRequired, isSessionSchema, isSessionSchema, makeConstantAction, makeTableName, makeTableName, nodeHeader, orReliability, parseStatement, printLabel, referencesSessionSchema, resolveTableToSynonym, setBeginOffset, setContextManager, setEndOffset, setNodeType, stackPrint, treePrint, treePrint, verifyClassExist
protected FromVTI targetVTI
protected TableName targetTableName
protected ResultColumnList resultColumnList
protected int lockMode
protected FKInfo[] fkInfo
protected TriggerInfo triggerInfo
public TableDescriptor targetTableDescriptor
public IndexRowGenerator[] indicesToMaintain
public long[] indexConglomerateNumbers
public java.lang.String[] indexNames
protected ConstraintDescriptorList relevantCdl
protected GenericDescriptorList relevantTriggers
private boolean requiresDeferredProcessing
private int statementType
private boolean bound
private ValueNode checkConstraints
protected java.lang.String[] fkTableNames
protected int[] fkRefActions
protected ColumnDescriptorList[] fkColDescriptors
protected long[] fkIndexConglomNumbers
protected boolean isDependentTable
protected int[][] fkColArrays
protected TableName synonymTableName
java.util.Set dependentTables
public void init(java.lang.Object resultSet)
init
in interface Node
init
in class DMLStatementNode
resultSet
- A ResultSetNode for the result set of the
DML statementpublic void init(java.lang.Object resultSet, java.lang.Object statementType)
init
in interface Node
init
in class QueryTreeNode
resultSet
- A ResultSetNode for the result set of the
DML statementstatementType
- used by nodes that allocate a DMLMod directly
(rather than inheriting it).void setTarget(QueryTreeNode targetName)
protected void generateCodeForTemporaryTable(ActivationClassBuilder acb) throws StandardException
acb
- The ActivationClassBuilder for the class being builtStandardException
- Thrown on errorvoid verifyTargetTable() throws StandardException
StandardException
- Thrown on errorpublic boolean isAtomic()
isAtomic
in class DMLStatementNode
public SchemaDescriptor getSchemaDescriptor() throws StandardException
StandardException
- throws on schema name
that doesn't existpublic static int[] getReadColMap(int column_map_length, FormatableBitSet readColsBitSet)
map[heapColId (0 based)] -> readCol id (0 based)
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.protected void getResultColumnList() throws StandardException
StandardException
- Thrown on errorprotected FromBaseTable getResultColumnList(ResultColumnList inputRcl) throws StandardException
StandardException
- Thrown on errorprivate void getResultColumnList(FromBaseTable fromBaseTable, ResultColumnList inputRcl) throws StandardException
StandardException
- Thrown on errorvoid parseAndBindGenerationClauses(DataDictionary dataDictionary, TableDescriptor targetTableDescriptor, ResultColumnList sourceRCL, ResultColumnList targetRCL, boolean forUpdate, ResultSetNode updateResultSet) throws StandardException
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 UPDATEStandardException
public ValueNode parseGenerationClause(java.lang.String clauseText, TableDescriptor td) throws StandardException
clauseText
- Text of the generation clauseStandardException
- Thrown on failureValueNode bindConstraints(DataDictionary dataDictionary, NodeFactory nodeFactory, TableDescriptor targetTableDescriptor, Dependent dependent, ResultColumnList sourceRCL, int[] changedColumnIds, FormatableBitSet readColsBitSet, boolean skipCheckConstraints, boolean includeTriggers) throws StandardException
dataDictionary
- The DataDictionarynodeFactory
- Where to get query tree nodes.targetTableDescriptor
- 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 scanskipCheckConstraints
- whether to skip check constraints or notincludeTriggers
- whether triggers are included in the processingStandardException
- Thrown on failurestatic void bindRowScopedExpression(NodeFactory nodeFactory, ContextManager contextManager, TableDescriptor targetTableDescriptor, ResultColumnList sourceRCL, ValueNode expression) throws StandardException
nodeFactory
- Where to get query tree nodes.targetTableDescriptor
- The TableDescriptor for the constrained table.sourceRCL
- Result columns.expression
- Parsed query tree for row scoped expressionStandardException
- Thrown on failureprotected boolean hasCheckConstraints(DataDictionary dd, TableDescriptor td) throws StandardException
dd
- The DataDictionary to usetd
- The TableDescriptor for the tableStandardException
- Thrown on failureprotected boolean hasGenerationClauses(TableDescriptor td) throws StandardException
td
- The TableDescriptor for the tableStandardException
- Thrown on failureprivate ValueNode generateCheckTree(ConstraintDescriptorList cdl, TableDescriptor td) throws StandardException
cdl
- The constriant descriptor listtd
- The TableDescriptorStandardException
- Thrown on failureprivate void generateFKInfo(ConstraintDescriptorList cdl, DataDictionary dd, TableDescriptor td, FormatableBitSet readColsBitSet) throws StandardException
cdl
- The constriant descriptor listdd
- The DataDictionarytd
- The TableDescriptorreadColsBitSet
- columns readStandardException
- Thrown on failureprivate void fkSetupArrays(DataDictionary dd, ForeignKeyConstraintDescriptor fkcd, int index, UUID[] uuids, long[] conglomNumbers, java.lang.String[] fkNames, boolean[] isSelfReferencingFK, int[] raRules) throws StandardException
StandardException
private void generateTriggerInfo(GenericDescriptorList triggerList, TableDescriptor td, int[] changedCols) throws StandardException
triggerList
- The trigger descriptor listtd
- The TableDescriptorchangedCols
- The columns that are being modifiedStandardException
- Thrown on failurepublic FKInfo[] getFKInfo()
public TriggerInfo getTriggerInfo()
public ValueNode getCheckConstraints()
private void createTriggerDependencies(GenericDescriptorList tdl, Dependent dependent) throws StandardException
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).StandardException
- Thrown on failureprotected GenericDescriptorList getAllRelevantTriggers(DataDictionary dd, TableDescriptor td, int[] changedColumnIds, boolean includeTriggers) throws StandardException
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 tableStandardException
- Thrown on failureprotected void adjustDeferredFlag(boolean adjustment)
private void createConstraintDependencies(DataDictionary dd, ConstraintDescriptorList cdl, Dependent dependent) throws StandardException
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).StandardException
- Thrown on failureprotected ConstraintDescriptorList getAllRelevantConstraints(DataDictionary dd, TableDescriptor td, boolean skipCheckConstraints, int[] changedColumnIds) throws StandardException
dd
- The DataDictionarytd
- The TableDescriptorskipCheckConstraints
- Skip check constraintschangedColumnIds
- If null, all columns being changed, otherwise array
of 1-based column ids for columns being changedStandardException
- Thrown on failurepublic boolean requiresDeferredProcessing()
public ValueNode parseCheckConstraint(java.lang.String checkConstraintText, TableDescriptor td) throws StandardException
checkConstraintText
- Text of CHECK CONSTRAINT.td
- The TableDescriptor for the table the the constraint is on.StandardException
- Thrown on failurepublic void generateCheckConstraints(ValueNode checkConstraints, ExpressionClassBuilder ecb, MethodBuilder mb) throws StandardException
checkConstraints
- Bound query tree of ANDed check constraints.ecb
- Expression Class BuilderStandardException
- Thrown on errorpublic MethodBuilder generateCheckConstraints(ValueNode checkConstraints, ExpressionClassBuilder ecb) throws StandardException
checkConstraints
- Bound query tree of ANDed check constraints.ecb
- Expression Class BuilderStandardException
- Thrown on errorpublic void generateGenerationClauses(ResultColumnList rcl, int resultSetNumber, boolean isUpdate, ExpressionClassBuilder ecb, MethodBuilder mb) throws StandardException
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 generatedStandardException
- Thrown on errorprivate MethodBuilder generateGenerationClauses(ResultColumnList rcl, int rsNumber, boolean isUpdate, ExpressionClassBuilder ecb) throws StandardException
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 variableStandardException
public void optimizeStatement() throws StandardException
optimizeStatement
in class DMLStatementNode
StandardException
- Thrown on failureprotected void getAffectedIndexes(TableDescriptor td, ResultColumnList updatedColumns, FormatableBitSet colBitSet) throws StandardException
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 listStandardException
- Thrown on errorstatic void getXAffectedIndexes(TableDescriptor baseTable, ResultColumnList updatedColumns, FormatableBitSet colBitSet, java.util.List conglomVector) throws StandardException
updatedColumns
- a list of updated columnscolBitSet
- OUT: evolving bitmap of affected columnsconglomVector
- OUT: vector of affected indicesStandardException
- Thrown on errorprotected void markAffectedIndexes(java.util.List affectedConglomerates) throws StandardException
StandardException
public java.lang.String statementToString()
statementToString
in class StatementNode
private int[] remapReferencedColumns(ConstraintDescriptor cd, int[] rowMap)
cd
- constraint descriptorrowMap
- 1 based row mapprivate int[] getRowMap(FormatableBitSet bitSet, TableDescriptor td) throws StandardException
bitSet
- td
- StandardException
public void setRefActionInfo(long fkIndexConglomId, int[] fkColArray, java.lang.String parentResultSetId, boolean dependentScan)
QueryTreeNode
setRefActionInfo
in class QueryTreeNode
public void normalizeSynonymColumns(ResultColumnList rcl, TableName targetTableName) throws StandardException
rcl
- The result column list of the target tabletargetTableName
- The target tablenameStandardException
- Thrown on errorpublic void printSubNodes(int depth)
printSubNodes
in class DMLStatementNode
depth
- The depth of this node in the treevoid acceptChildren(Visitor v) throws StandardException
acceptChildren
in class DMLStatementNode
v
- the visitorStandardException
- on errorApache Derby V10.10 Internals - Copyright © 2004,2014 The Apache Software Foundation. All Rights Reserved.