|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectorg.apache.derby.impl.sql.execute.InternalTriggerExecutionContext
public class InternalTriggerExecutionContext
There is one of these beasts per INSERT/DELETE/UPDATE statement. It fulfills the contract for the externally visible trigger execution context and it validates that a statement that is about to be executed doesn't violate the restrictions placed upon what can be executed from a trigger.
Note that it is crucial that cleanup() is called once the DML has completed, cleanup() makes sure that users can't do something invalid on a tec reference that they were holding from when the trigger fired.
| Field Summary | |
|---|---|
protected CursorResultSet |
afterResultSet
|
protected ExecRow |
afterRow
used exclusively for InsertResultSets which have autoincrement columns. |
private java.util.Vector |
aiCounters
aiCounters is a vector of AutoincrementCounters used to keep state which might be used by the trigger. |
private java.util.Hashtable |
aiHT
aiHT is a hashtable of autincrement |
protected CursorResultSet |
beforeResultSet
|
protected ConnectionContext |
cc
|
protected int[] |
changedColIds
|
protected java.lang.String[] |
changedColNames
|
protected boolean |
cleanupCalled
|
protected int |
dmlType
|
protected TriggerEvent |
event
|
protected LanguageConnectionContext |
lcc
|
private java.util.Vector |
resultSetVector
|
protected java.lang.String |
statementText
|
protected UUID |
targetTableId
|
protected java.lang.String |
targetTableName
|
protected TriggerDescriptor |
triggerd
|
| Fields inherited from interface org.apache.derby.iapi.db.TriggerExecutionContext |
|---|
DELETE_EVENT, INSERT_EVENT, UPDATE_EVENT |
| Constructor Summary | |
|---|---|
InternalTriggerExecutionContext(LanguageConnectionContext lcc,
ConnectionContext cc,
java.lang.String statementText,
int dmlType,
int[] changedColIds,
java.lang.String[] changedColNames,
UUID targetTableId,
java.lang.String targetTableName,
java.util.Vector aiCounters)
Build me a big old nasty trigger execution context. |
|
| Method Summary | |
|---|---|
protected void |
cleanup()
Cleanup the trigger execution context. |
(package private) void |
clearCurrentTriggerEvent()
|
(package private) void |
clearTrigger()
|
void |
copyHashtableToAIHT(java.util.Map from)
Copy a map of autoincrement values into the trigger execution context hashtable of autoincrement values. |
private void |
ensureProperContext()
Make sure that the user isn't trying to get a result set after we have cleaned up. |
java.lang.Long |
getAutoincrementValue(java.lang.String identity)
|
java.lang.String |
getEventStatementText()
Get the text of the statement that caused the trigger to fire. |
int |
getEventType()
Get the type for the event that caused the trigger to fire. |
java.lang.String[] |
getModifiedColumns()
Get the columns that have been modified by the statement that caused this trigger to fire. |
java.sql.ResultSet |
getNewRow()
Like getAfterResultSet(), but returns a result set positioned on the first row of the before result set. |
java.sql.ResultSet |
getNewRowSet()
Returns a result set row the new images of the changed rows. |
java.sql.ResultSet |
getOldRow()
Like getBeforeResultSet(), but returns a result set positioned on the first row of the before result set. |
java.sql.ResultSet |
getOldRowSet()
Returns a result set row the old images of the changed rows. |
UUID |
getTargetTableId()
Get the target table UUID upon which the trigger event is declared. |
java.lang.String |
getTargetTableName()
Get the target table name upon which the trigger event is declared. |
void |
resetAICounters(boolean begin)
Reset Autoincrement counters to the beginning or the end. |
(package private) void |
setAfterResultSet(CursorResultSet rs)
|
(package private) void |
setBeforeResultSet(CursorResultSet rs)
|
(package private) void |
setCurrentTriggerEvent(TriggerEvent event)
|
(package private) void |
setTrigger(TriggerDescriptor triggerd)
|
java.lang.String |
toString()
|
void |
updateAICounters()
Update Autoincrement Counters from the last row inserted. |
void |
validateStatement(ConstantAction constantAction)
Make sure that whatever statement is about to be executed is ok from the context of this trigger. |
boolean |
wasColumnModified(int columnNumber)
Find out of a column was changed, by column number |
boolean |
wasColumnModified(java.lang.String columnName)
Find out of a column was changed, by column name |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Field Detail |
|---|
protected int[] changedColIds
protected java.lang.String[] changedColNames
protected int dmlType
protected java.lang.String statementText
protected ConnectionContext cc
protected UUID targetTableId
protected java.lang.String targetTableName
protected LanguageConnectionContext lcc
protected CursorResultSet beforeResultSet
protected CursorResultSet afterResultSet
protected ExecRow afterRow
protected boolean cleanupCalled
protected TriggerEvent event
protected TriggerDescriptor triggerd
private java.util.Vector resultSetVector
private java.util.Vector aiCounters
AutoincrementCounterprivate java.util.Hashtable aiHT
| Constructor Detail |
|---|
public InternalTriggerExecutionContext(LanguageConnectionContext lcc,
ConnectionContext cc,
java.lang.String statementText,
int dmlType,
int[] changedColIds,
java.lang.String[] changedColNames,
UUID targetTableId,
java.lang.String targetTableName,
java.util.Vector aiCounters)
throws StandardException
About the only thing of real interest to outside observers is that it pushes itself as the trigger execution context in the lcc. Be sure to call cleanup() when you are done, or you will be flogged like the reprobate that you are.
lcc - the lccstatementText - the text of the statement that caused the
trigger to fire. may be null if we are replicatingchangedColIds - the list of columns that changed. Null
for all columns or INSERT/DELETE.changedColNames - the names that correspond to changedColIdstargetTableId - the UUID of the table upon which the trigger
firedtargetTableName - the name of the table upon which the trigger
firedaiCounters - A vector of AutoincrementCounters to keep state
of the ai columns in this insert trigger.a
StandardException - on error| Method Detail |
|---|
void setBeforeResultSet(CursorResultSet rs)
void setAfterResultSet(CursorResultSet rs)
throws StandardException
StandardExceptionvoid setCurrentTriggerEvent(TriggerEvent event)
void clearCurrentTriggerEvent()
void setTrigger(TriggerDescriptor triggerd)
void clearTrigger()
throws StandardException
StandardException
protected void cleanup()
throws StandardException
We go to somewhat exaggerated lengths to free up all our resources here because a user may hold on to a TEC after it is valid, so we clean everything up to be on the safe side.
StandardException - on unexpected error
private void ensureProperContext()
throws java.sql.SQLException
java.sql.SQLException
public void validateStatement(ConstantAction constantAction)
throws StandardException
Note that we are sub classed in replication for checks for replication specific language.
validateStatement in interface ExecutionStmtValidatorconstantAction - the constant action of the action
that we are to validate
StandardException - on errorConstantActionpublic java.lang.String getTargetTableName()
getTargetTableName in interface TriggerExecutionContextpublic UUID getTargetTableId()
getTargetTableId in interface TriggerExecutionContextpublic int getEventType()
getEventType in interface TriggerExecutionContextpublic java.lang.String getEventStatementText()
getEventStatementText in interface TriggerExecutionContextpublic java.lang.String[] getModifiedColumns()
getModifiedColumns in interface TriggerExecutionContextpublic boolean wasColumnModified(java.lang.String columnName)
wasColumnModified in interface TriggerExecutionContextcolumnName - the column to check
public boolean wasColumnModified(int columnNumber)
wasColumnModified in interface TriggerExecutionContextcolumnNumber - the column to check
public java.sql.ResultSet getOldRowSet()
throws java.sql.SQLException
getOldRowSet in interface TriggerExecutionContextjava.sql.SQLException - if called after the triggering event has
completed
public java.sql.ResultSet getNewRowSet()
throws java.sql.SQLException
getNewRowSet in interface TriggerExecutionContextjava.sql.SQLException - if called after the triggering event has
completed
public java.sql.ResultSet getOldRow()
throws java.sql.SQLException
getOldRow in interface TriggerExecutionContextjava.sql.SQLException - if called after the triggering event has
completed
public java.sql.ResultSet getNewRow()
throws java.sql.SQLException
getNewRow in interface TriggerExecutionContextjava.sql.SQLException - if called after the triggering event has
completedpublic java.lang.Long getAutoincrementValue(java.lang.String identity)
public void copyHashtableToAIHT(java.util.Map from)
public void resetAICounters(boolean begin)
begin - if True, reset the AutoincremnetCounter to the
beginning-- used to reset the counters for the
next trigger. If false, reset it to the end--
this sets up the counter appropriately for a
AFTER STATEMENT trigger.
public void updateAICounters()
throws StandardException
StandardExceptionpublic java.lang.String toString()
toString in class java.lang.Object
|
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 | ||||||||