Class GenericStatementContext
java.lang.Object
org.apache.derby.iapi.services.context.ContextImpl
org.apache.derby.impl.sql.conn.GenericStatementContext
- All Implemented Interfaces:
Context, StatementContext
GenericStatementContext is pushed/popped around a statement prepare and execute
so that any statement specific clean up can be performed.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static classThis is a TimerTask that is responsible for timing out statements, typically when an application has called Statement.setQueryTimeout(). -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate ActivationThe activation associated with this context, or nullprivate booleanprivate ArrayList<Dependency> private Stringprivate booleanprivate booleanprivate booleanprivate booleanprivate final LanguageConnectionContextprivate NoPutResultSet[]private booleanprivate ParameterValueSetprivate booleanprivate booleanprivate shortSet to one of RoutineAliasInfo.private SQLSessionContextThe SQLSessionContext associated with a statement context.private booleanprivate Stringprivate NoPutResultSet[]private ResultSet -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidTrack a Dependency within this StatementContext.voidcancel()Cancels the statement which has allocated this StatementContext object.voidcleanupOnError(Throwable error) Close down the top ResultSet, if relevant, and rollback to the internal savepoint, if one was set.voidMark this context as not in use.voidClear the save point for the current statement.Get activation associated with this statement context, if any.shortGet the setting of the SQL allowed state.Get the current SQL session context.Return the text of the current statement.booleanTells if this statement has been invalidated.Get the subquery tracking array for this query.booleanReturn true if this statement is system code.private static TimerFactorybooleanReturns whether we started from within the context of a trigger or not.booleaninUse()Is this statement context in use or not.booleanisAtomic()Indicates whether the statement needs to be executed atomically or not, i.e., whether a commit/rollback is permitted by a connection nested in this statement.booleanTests whether the statement which has allocated this StatementContext object has been cancelled.booleanIs this statement for a read only, non-updatable ResultSetbooleanisLastHandler(int severity) Return whether or not this context is the "last" handler for a the specified severity level.booleanonStack()Reports whether this StatementContext is on the context stack.private voidRaise an exception if this Context is not in use, that is, on the Context Stack.voidResets the savepoint to the current spot if it is set, otherwise, noop.voidMark this statement context as associated with this activation.voidsetInUse(boolean parentInTrigger, boolean isAtomic, boolean isForReadOnly, String stmtText, ParameterValueSet pvs, long timeoutMillis) Mark this context as being in use.voidIndicate that, in the event of a statement-level exception, this context is NOT the last one that needs to be rolled back--rather, it is nested within some other statement context, and that other context needs to be rolled back, too.voidSet a save point for the current statement.voidsetSQLAllowed(short allow, boolean force) Set the level of SQL allowed in this and subsequent nested statements due to a routine call.voidSet the current SQL session contextvoidsetSubqueryResultSet(int subqueryNumber, NoPutResultSet subqueryResultSet, int numSubqueries) Set the appropriate entry in the subquery tracking array for the specified subquery.voidSet to indicate statement is system code.voidsetTopResultSet(ResultSet topResultSet, NoPutResultSet[] subqueryTrackingArray) Set the top ResultSet in the ResultSet tree for close down on an error.private voidstuffTopResultSet(ResultSet topResultSet, NoPutResultSet[] subqueryTrackingArray) Private minion of setTopResultSet() and clearInUse()Methods inherited from class ContextImpl
getContextManager, getIdName, popMe, pushMeMethods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface Context
getContextManager, getIdName, popMe, pushMe
-
Field Details
-
setSavePoint
private boolean setSavePoint -
internalSavePointName
-
topResultSet
-
dependencies
-
subqueryTrackingArray
-
materializedSubqueries
-
lcc
-
inUse
private boolean inUse -
cancellationFlag
private volatile boolean cancellationFlag -
cancelTask
-
parentInTrigger
private boolean parentInTrigger -
isForReadOnly
private boolean isForReadOnly -
isAtomic
private boolean isAtomic -
isSystemCode
private boolean isSystemCode -
rollbackParentContext
private boolean rollbackParentContext -
statementWasInvalidated
private boolean statementWasInvalidated -
stmtText
-
pvs
-
sqlAllowed
private short sqlAllowedSet to one of RoutineAliasInfo.{MODIFIES_SQL_DATA, READS_SQL_DATA, CONTAINS_SQL, NO_SQL} -
activation
The activation associated with this context, or null -
sqlSessionContext
The SQLSessionContext associated with a statement context.
-
-
Constructor Details
-
GenericStatementContext
GenericStatementContext(LanguageConnectionContext lcc)
-
-
Method Details
-
getTimerFactory
-
setInUse
public void setInUse(boolean parentInTrigger, boolean isAtomic, boolean isForReadOnly, String stmtText, ParameterValueSet pvs, long timeoutMillis) Description copied from interface:StatementContextMark this context as being in use.- Specified by:
setInUsein interfaceStatementContext- Parameters:
parentInTrigger- true if the parent started in the context of a triggerisAtomic- true if the statement must be executed atomicallyisForReadOnly- true if the statement is for producing non-updatable resultsetstmtText- the text of the statement. Needed for any language statement (currently, for any statement that can cause a trigger to fire). Please set this unless you are some funky jdbc setXXX method or something.pvs- parameter value set, if it has onetimeoutMillis- timeout value for the statement, in milliseconds. Zero means no timeout.
-
clearInUse
public void clearInUse()Description copied from interface:StatementContextMark this context as not in use. This is important because we always leave the top statement context on the stack, and we don't want to clean it up if a statement level exception happens while the context is not in use.- Specified by:
clearInUsein interfaceStatementContext
-
setSavePoint
Description copied from interface:StatementContextSet a save point for the current statement. NOTE: This needs to be off of the StatementContext so that it gets cleared on a statement error.- Specified by:
setSavePointin interfaceStatementContext- Throws:
StandardException- Thrown on error- See Also:
-
resetSavePoint
Resets the savepoint to the current spot if it is set, otherwise, noop. Used when a commit is done on a nested connection.- Specified by:
resetSavePointin interfaceStatementContext- Throws:
StandardException- Thrown on error- See Also:
-
clearSavePoint
Description copied from interface:StatementContextClear the save point for the current statement.- Specified by:
clearSavePointin interfaceStatementContext- Throws:
StandardException- Thrown on error- See Also:
-
setTopResultSet
public void setTopResultSet(ResultSet topResultSet, NoPutResultSet[] subqueryTrackingArray) throws StandardException Set the top ResultSet in the ResultSet tree for close down on an error.- Specified by:
setTopResultSetin interfaceStatementContext- Parameters:
topResultSet- The top ResultSet in the ResultSet treesubqueryTrackingArray- (Sparse) of tops of subquery ResultSet trees- Throws:
StandardException- thrown on error.
-
stuffTopResultSet
Private minion of setTopResultSet() and clearInUse()- Parameters:
topResultSet- make this the top result setsubqueryTrackingArray- where to keep track of subqueries in this statement
-
setSubqueryResultSet
public void setSubqueryResultSet(int subqueryNumber, NoPutResultSet subqueryResultSet, int numSubqueries) throws StandardException Set the appropriate entry in the subquery tracking array for the specified subquery. Useful for closing down open subqueries on an exception.- Specified by:
setSubqueryResultSetin interfaceStatementContext- Parameters:
subqueryNumber- The subquery # for this subquerysubqueryResultSet- The ResultSet at the top of the subquerynumSubqueries- The total # of subqueries in the entire query- Throws:
StandardException- thrown on error.
-
getSubqueryTrackingArray
Get the subquery tracking array for this query. (Useful for runtime statistics.)- Specified by:
getSubqueryTrackingArrayin interfaceStatementContext- Returns:
- NoPutResultSet[] The (sparse) array of tops of subquery ResultSet trees
- Throws:
StandardException- thrown on error.
-
addDependency
Track a Dependency within this StatementContext. (We need to clear any dependencies added within this context on an error.- Specified by:
addDependencyin interfaceStatementContext- Parameters:
dy- The dependency to track.- Throws:
StandardException- thrown on error.
-
inTrigger
public boolean inTrigger()Returns whether we started from within the context of a trigger or not.- Specified by:
inTriggerin interfaceStatementContext- Returns:
- true if we are in a trigger context
-
cleanupOnError
Close down the top ResultSet, if relevant, and rollback to the internal savepoint, if one was set.- Specified by:
cleanupOnErrorin interfaceContext- Throws:
StandardException- thrown on error. REVISIT: don't want cleanupOnError's to throw exceptions.
-
isLastHandler
public boolean isLastHandler(int severity) Description copied from interface:ContextReturn whether or not this context is the "last" handler for a the specified severity level. Previously, the context manager would march through all of the contexts in cleanupOnError() and call each of their cleanupOnError() methods. That did not work with server side JDBC, especially for a StatementException, because outer contexts could get cleaned up incorrectly. This functionality is specific to the Language system. Any non-language system contexts should return ExceptionSeverity.NOT_APPLICABLE_SEVERITY. NOTE: Both the LanguageConnectionContext and the JDBC Connection Context are interested in session level errors because they both have clean up to do. This method allows both of them to return false so that all such handlers under them can do their clean up.- Specified by:
isLastHandlerin interfaceContext- Overrides:
isLastHandlerin classContextImpl- See Also:
-
onStack
public boolean onStack()Reports whether this StatementContext is on the context stack.- Specified by:
onStackin interfaceStatementContext- Returns:
- true if this StatementContext is on the context stack. false otherwise.
-
isAtomic
public boolean isAtomic()Indicates whether the statement needs to be executed atomically or not, i.e., whether a commit/rollback is permitted by a connection nested in this statement.- Specified by:
isAtomicin interfaceStatementContext- Returns:
- true if needs to be atomic
-
getStatementText
Return the text of the current statement. Note that this may be null. It is currently not set up correctly for ResultSets that aren't single row result sets (e.g SELECT), replication, and setXXXX/getXXXX jdbc methods.- Specified by:
getStatementTextin interfaceStatementContext- Returns:
- the statement text
-
pleaseBeOnStack
Raise an exception if this Context is not in use, that is, on the Context Stack.- Throws:
StandardException- thrown on error.
-
inUse
public boolean inUse()Description copied from interface:StatementContextIs this statement context in use or not.- Specified by:
inUsein interfaceStatementContext- Returns:
- true if in use
-
isForReadOnly
public boolean isForReadOnly()Description copied from interface:StatementContextIs this statement for a read only, non-updatable ResultSet- Specified by:
isForReadOnlyin interfaceStatementContext- Returns:
- true if the statement is for creating a read only, non-updatable ResultSet
-
isCancelled
public boolean isCancelled()Tests whether the statement which has allocated this StatementContext object has been cancelled. This method is typically called from the thread which is executing the statement, to test whether execution should continue or stop.- Specified by:
isCancelledin interfaceStatementContext- Returns:
- whether the statement which has allocated this StatementContext object has been cancelled.
-
cancel
public void cancel()Cancels the statement which has allocated this StatementContext object. This is done by setting a flag in the StatementContext object. For this to have any effect, it is the responsibility of the executing statement to check this flag regularly.- Specified by:
cancelin interfaceStatementContext
-
setSQLAllowed
public void setSQLAllowed(short allow, boolean force) Description copied from interface:StatementContextSet the level of SQL allowed in this and subsequent nested statements due to a routine call. Value must be one of RoutineAliasInfo.{MODIFIES_SQL_DATA, READS_SQL_DATA, CONTAINS_SQL, NO_SQL}- Specified by:
setSQLAllowedin interfaceStatementContext- Parameters:
force- set to true to override more restrictive setting. Used to reset the permissions after a function call.
-
getSQLAllowed
public short getSQLAllowed()Description copied from interface:StatementContextGet the setting of the SQL allowed state.- Specified by:
getSQLAllowedin interfaceStatementContext
-
setParentRollback
public void setParentRollback()Indicate that, in the event of a statement-level exception, this context is NOT the last one that needs to be rolled back--rather, it is nested within some other statement context, and that other context needs to be rolled back, too.- Specified by:
setParentRollbackin interfaceStatementContext
-
setSystemCode
public void setSystemCode()Set to indicate statement is system code. For example a system procedure, view, function etc.- Specified by:
setSystemCodein interfaceStatementContext
-
getSystemCode
public boolean getSystemCode()Return true if this statement is system code.- Specified by:
getSystemCodein interfaceStatementContext
-
appendErrorInfo
- Overrides:
appendErrorInfoin classContextImpl
-
setActivation
Description copied from interface:StatementContextMark this statement context as associated with this activation.- Specified by:
setActivationin interfaceStatementContext- Parameters:
a- activation- See Also:
-
getActivation
Description copied from interface:StatementContextGet activation associated with this statement context, if any. Used to link up stack of activations of calls in nested connections, see GenericPreparedStatement#getActivation.- Specified by:
getActivationin interfaceStatementContext- See Also:
-
getSQLSessionContext
Description copied from interface:StatementContextGet the current SQL session context.- Specified by:
getSQLSessionContextin interfaceStatementContext- Returns:
- the current SQL session context
- See Also:
-
setSQLSessionContext
Description copied from interface:StatementContextSet the current SQL session context- Specified by:
setSQLSessionContextin interfaceStatementContext- Parameters:
ctx- the SQL session context- See Also:
-
getStatementWasInvalidated
public boolean getStatementWasInvalidated()Description copied from interface:StatementContextTells if this statement has been invalidated.- Specified by:
getStatementWasInvalidatedin interfaceStatementContext- Returns:
trueif the statement was invalidated.
-