Class GenericStatementContext

java.lang.Object
org.apache.derby.iapi.services.context.ContextImpl
org.apache.derby.impl.sql.conn.GenericStatementContext
All Implemented Interfaces:
Context, StatementContext

final class GenericStatementContext extends ContextImpl implements StatementContext
GenericStatementContext is pushed/popped around a statement prepare and execute so that any statement specific clean up can be performed.
  • Field Details

    • setSavePoint

      private boolean setSavePoint
    • internalSavePointName

      private String internalSavePointName
    • topResultSet

      private ResultSet topResultSet
    • dependencies

      private ArrayList<Dependency> dependencies
    • subqueryTrackingArray

      private NoPutResultSet[] subqueryTrackingArray
    • materializedSubqueries

      private NoPutResultSet[] materializedSubqueries
    • lcc

      private final LanguageConnectionContext 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

      private String stmtText
    • pvs

      private ParameterValueSet pvs
    • sqlAllowed

      private short sqlAllowed
      Set to one of RoutineAliasInfo.{MODIFIES_SQL_DATA, READS_SQL_DATA, CONTAINS_SQL, NO_SQL}
    • activation

      private Activation activation
      The activation associated with this context, or null
    • sqlSessionContext

      private SQLSessionContext sqlSessionContext
      The SQLSessionContext associated with a statement context.
  • Constructor Details

  • Method Details

    • getTimerFactory

      private static TimerFactory getTimerFactory()
    • setInUse

      public void setInUse(boolean parentInTrigger, boolean isAtomic, boolean isForReadOnly, String stmtText, ParameterValueSet pvs, long timeoutMillis)
      Description copied from interface: StatementContext
      Mark this context as being in use.
      Specified by:
      setInUse in interface StatementContext
      Parameters:
      parentInTrigger - true if the parent started in the context of a trigger
      isAtomic - true if the statement must be executed atomically
      isForReadOnly - true if the statement is for producing non-updatable resultset
      stmtText - 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 one
      timeoutMillis - timeout value for the statement, in milliseconds. Zero means no timeout.
    • clearInUse

      public void clearInUse()
      Description copied from interface: StatementContext
      Mark 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:
      clearInUse in interface StatementContext
    • setSavePoint

      public void setSavePoint() throws StandardException
      Description copied from interface: StatementContext
      Set 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:
      setSavePoint in interface StatementContext
      Throws:
      StandardException - Thrown on error
      See Also:
    • resetSavePoint

      public void resetSavePoint() throws StandardException
      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:
      resetSavePoint in interface StatementContext
      Throws:
      StandardException - Thrown on error
      See Also:
    • clearSavePoint

      public void clearSavePoint() throws StandardException
      Description copied from interface: StatementContext
      Clear the save point for the current statement.
      Specified by:
      clearSavePoint in interface StatementContext
      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:
      setTopResultSet in interface StatementContext
      Parameters:
      topResultSet - The top ResultSet in the ResultSet tree
      subqueryTrackingArray - (Sparse) of tops of subquery ResultSet trees
      Throws:
      StandardException - thrown on error.
    • stuffTopResultSet

      private void stuffTopResultSet(ResultSet topResultSet, NoPutResultSet[] subqueryTrackingArray)
      Private minion of setTopResultSet() and clearInUse()
      Parameters:
      topResultSet - make this the top result set
      subqueryTrackingArray - 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:
      setSubqueryResultSet in interface StatementContext
      Parameters:
      subqueryNumber - The subquery # for this subquery
      subqueryResultSet - The ResultSet at the top of the subquery
      numSubqueries - The total # of subqueries in the entire query
      Throws:
      StandardException - thrown on error.
    • getSubqueryTrackingArray

      public NoPutResultSet[] getSubqueryTrackingArray() throws StandardException
      Get the subquery tracking array for this query. (Useful for runtime statistics.)
      Specified by:
      getSubqueryTrackingArray in interface StatementContext
      Returns:
      NoPutResultSet[] The (sparse) array of tops of subquery ResultSet trees
      Throws:
      StandardException - thrown on error.
    • addDependency

      public void addDependency(Dependency dy) throws StandardException
      Track a Dependency within this StatementContext. (We need to clear any dependencies added within this context on an error.
      Specified by:
      addDependency in interface StatementContext
      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:
      inTrigger in interface StatementContext
      Returns:
      true if we are in a trigger context
    • cleanupOnError

      public void cleanupOnError(Throwable error) throws StandardException
      Close down the top ResultSet, if relevant, and rollback to the internal savepoint, if one was set.
      Specified by:
      cleanupOnError in interface Context
      Throws:
      StandardException - thrown on error. REVISIT: don't want cleanupOnError's to throw exceptions.
    • isLastHandler

      public boolean isLastHandler(int severity)
      Description copied from interface: Context
      Return 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:
      isLastHandler in interface Context
      Overrides:
      isLastHandler in class ContextImpl
      See Also:
    • onStack

      public boolean onStack()
      Reports whether this StatementContext is on the context stack.
      Specified by:
      onStack in interface StatementContext
      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:
      isAtomic in interface StatementContext
      Returns:
      true if needs to be atomic
    • getStatementText

      public String 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:
      getStatementText in interface StatementContext
      Returns:
      the statement text
    • pleaseBeOnStack

      private void pleaseBeOnStack() throws StandardException
      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: StatementContext
      Is this statement context in use or not.
      Specified by:
      inUse in interface StatementContext
      Returns:
      true if in use
    • isForReadOnly

      public boolean isForReadOnly()
      Description copied from interface: StatementContext
      Is this statement for a read only, non-updatable ResultSet
      Specified by:
      isForReadOnly in interface StatementContext
      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:
      isCancelled in interface StatementContext
      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:
      cancel in interface StatementContext
    • setSQLAllowed

      public void setSQLAllowed(short allow, boolean force)
      Description copied from interface: StatementContext
      Set 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:
      setSQLAllowed in interface StatementContext
      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: StatementContext
      Get the setting of the SQL allowed state.
      Specified by:
      getSQLAllowed in interface StatementContext
    • 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:
      setParentRollback in interface StatementContext
    • setSystemCode

      public void setSystemCode()
      Set to indicate statement is system code. For example a system procedure, view, function etc.
      Specified by:
      setSystemCode in interface StatementContext
    • getSystemCode

      public boolean getSystemCode()
      Return true if this statement is system code.
      Specified by:
      getSystemCode in interface StatementContext
    • appendErrorInfo

      public StringBuffer appendErrorInfo()
      Overrides:
      appendErrorInfo in class ContextImpl
    • setActivation

      public void setActivation(Activation a)
      Description copied from interface: StatementContext
      Mark this statement context as associated with this activation.
      Specified by:
      setActivation in interface StatementContext
      Parameters:
      a - activation
      See Also:
    • getActivation

      public Activation getActivation()
      Description copied from interface: StatementContext
      Get 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:
      getActivation in interface StatementContext
      See Also:
    • getSQLSessionContext

      public SQLSessionContext getSQLSessionContext()
      Description copied from interface: StatementContext
      Get the current SQL session context.
      Specified by:
      getSQLSessionContext in interface StatementContext
      Returns:
      the current SQL session context
      See Also:
    • setSQLSessionContext

      public void setSQLSessionContext(SQLSessionContext ctx)
      Description copied from interface: StatementContext
      Set the current SQL session context
      Specified by:
      setSQLSessionContext in interface StatementContext
      Parameters:
      ctx - the SQL session context
      See Also:
    • getStatementWasInvalidated

      public boolean getStatementWasInvalidated()
      Description copied from interface: StatementContext
      Tells if this statement has been invalidated.
      Specified by:
      getStatementWasInvalidated in interface StatementContext
      Returns:
      true if the statement was invalidated.