Class 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 Detail

      • setSavePoint

        private boolean setSavePoint
      • internalSavePointName

        private java.lang.String internalSavePointName
      • topResultSet

        private ResultSet topResultSet
      • dependencies

        private java.util.ArrayList<Dependency> dependencies
      • subqueryTrackingArray

        private NoPutResultSet[] subqueryTrackingArray
      • materializedSubqueries

        private NoPutResultSet[] materializedSubqueries
      • inUse

        private boolean inUse
      • cancellationFlag

        private volatile boolean cancellationFlag
      • 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 java.lang.String stmtText
      • 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.
    • Method Detail

      • getTimerFactory

        private static TimerFactory getTimerFactory()
      • setInUse

        public void setInUse​(boolean parentInTrigger,
                             boolean isAtomic,
                             boolean isForReadOnly,
                             java.lang.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
      • 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.
      • 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​(java.lang.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:
        Context.isLastHandler(int)
      • 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 java.lang.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
        force - set to true to override more restrictive setting. Used to reset the permissions after a function call.
      • 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
      • 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.