|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectorg.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
abstract class DMLModStatementNode
A DMLStatement for a table modification: to wit, INSERT UPDATE or DELETE.
| Field Summary | |
|---|---|
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
|
| 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_INC_INDEX, AUTOINCREMENT_IS_AUTOINCREMENT_INDEX, AUTOINCREMENT_START_INDEX, isPrivilegeCollectionRequired |
| Constructor Summary | |
|---|---|
DMLModStatementNode()
|
|
| Method Summary | |
|---|---|
(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. |
| 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, getSPSName, lockTableForCompilation, needsSavepoint, toString, updateIndexStatisticsFor |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Field Detail |
|---|
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
| Constructor Detail |
|---|
DMLModStatementNode()
| Method Detail |
|---|
public void init(java.lang.Object resultSet)
init in interface Nodeinit in class DMLStatementNoderesultSet - A ResultSetNode for the result set of the
DML statement
public void init(java.lang.Object resultSet,
java.lang.Object statementType)
init in interface Nodeinit in class QueryTreeNoderesultSet - 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 built
StandardException - Thrown on error
void 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 exist
public 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 error
protected FromBaseTable getResultColumnList(ResultColumnList inputRcl)
throws StandardException
StandardException - Thrown on error
private void getResultColumnList(FromBaseTable fromBaseTable,
ResultColumnList inputRcl)
throws StandardException
StandardException - Thrown on error
void 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 UPDATE
StandardException
public ValueNode parseGenerationClause(java.lang.String clauseText,
TableDescriptor td)
throws StandardException
clauseText - Text of the generation clause
StandardException - Thrown on failure
ValueNode 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 processing
StandardException - Thrown on failure
static 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 expression
StandardException - Thrown on failure
protected boolean hasCheckConstraints(DataDictionary dd,
TableDescriptor td)
throws StandardException
dd - The DataDictionary to usetd - The TableDescriptor for the table
StandardException - Thrown on failure
protected boolean hasGenerationClauses(TableDescriptor td)
throws StandardException
td - The TableDescriptor for the table
StandardException - Thrown on failure
private ValueNode generateCheckTree(ConstraintDescriptorList cdl,
TableDescriptor td)
throws StandardException
cdl - The constriant descriptor listtd - The TableDescriptor
StandardException - Thrown on failure
private void generateFKInfo(ConstraintDescriptorList cdl,
DataDictionary dd,
TableDescriptor td,
FormatableBitSet readColsBitSet)
throws StandardException
cdl - The constriant descriptor listdd - The DataDictionarytd - The TableDescriptorreadColsBitSet - columns read
StandardException - Thrown on failure
private 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 modified
StandardException - 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 failure
protected 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 table
StandardException - 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 failure
protected 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 changed
StandardException - 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 failure
public void generateCheckConstraints(ValueNode checkConstraints,
ExpressionClassBuilder ecb,
MethodBuilder mb)
throws StandardException
checkConstraints - Bound query tree of ANDed check constraints.ecb - Expression Class Builder
StandardException - Thrown on error
public MethodBuilder generateCheckConstraints(ValueNode checkConstraints,
ExpressionClassBuilder ecb)
throws StandardException
checkConstraints - Bound query tree of ANDed check constraints.ecb - Expression Class Builder
StandardException - Thrown on error
public 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 generated
StandardException - Thrown on error
private 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 variable
StandardException
public void optimizeStatement()
throws StandardException
optimizeStatement in class DMLStatementNodeStandardException - Thrown on failure
protected 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 list
StandardException - Thrown on error
static 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 indices
StandardException - Thrown on error
protected void markAffectedIndexes(java.util.List affectedConglomerates)
throws StandardException
StandardExceptionpublic java.lang.String statementToString()
statementToString in class StatementNode
private int[] remapReferencedColumns(ConstraintDescriptor cd,
int[] rowMap)
cd - constraint descriptorrowMap - 1 based row map
private 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 tablename
StandardException - Thrown on errorpublic void printSubNodes(int depth)
printSubNodes in class DMLStatementNodedepth - The depth of this node in the tree
void acceptChildren(Visitor v)
throws StandardException
acceptChildren in class DMLStatementNodev - the visitor
StandardException - on error
|
Built on Wed 2013-06-12 15:21:56+0000, from revision ??? | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||