Interface Activation
-
- All Superinterfaces:
Dependable
,Dependent
- All Known Subinterfaces:
CursorActivation
- All Known Implementing Classes:
BaseActivation
,ConstantActionActivation
,CursorActivation
,GenericActivationHolder
public interface Activation extends Dependent
An activation contains all the local state information necessary to execute a re-entrant PreparedStatement. The way it will actually work is that a PreparedStatement will have an executable plan, which will be a generated class. All of the local state will be variables in the class. Creating a new instance of the executable plan will create the local state variables. This means that an executable plan must implement this interface, and that the PreparedStatement.getActivation() method will do a "new" operation on the executable plan.The fixed implementations of Activation in the Execution impl package are used as skeletons for the classes generated for statements when they are compiled.
There are no fixed implementations of Activation for statements; a statement has an activation generated for it when it is compiled.
-
-
Field Summary
-
Fields inherited from interface org.apache.derby.catalog.Dependable
ACTIVATION, ALIAS, COLUMNS_IN_TABLE, COLUMNS_PERMISSION, CONGLOMERATE, CONSTRAINT, DEFAULT, FILE, HEAP, INDEX, PERM, PREPARED_STATEMENT, ROLE_GRANT, ROUTINE_PERMISSION, SCHEMA, SEQUENCE, STORED_PREPARED_STATEMENT, TABLE, TABLE_PERMISSION, TRIGGER, VIEW
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description void
addWarning(java.sql.SQLWarning w)
Add a warning to the activationboolean
checkIfThisActivationHasHoldCursor(java.lang.String tableName)
Temporary tables can be declared with ON COMMIT DELETE ROWS.void
checkStatementValidity()
Check the validity of the current executing statement.void
clearCurrentRow(int resultSetNumber)
Generated plans have a current row field for ease in defining the methods and finding them dynamically.void
clearHeapConglomerateController()
Clear the ConglomerateController to be used for an update or delete.void
clearIndexScanInfo()
Clear the info for the index to be re-used for update/delete.void
clearParentResultSets()
void
clearWarnings()
Clear the activation's warnings.void
close()
Closing an activation statement marks it as unusable.ResultSet
execute()
When the prepared statement is executed, it passes execution on to the activation execution was requested for.int[]
getAutoGeneratedKeysColumnIndexes()
Returns the column positions array of columns requested in auto-generated keys resultset for this avtivation.java.lang.String[]
getAutoGeneratedKeysColumnNames()
Returns the column names array of columns requested in auto-generated keys resultset for this avtivation.boolean
getAutoGeneratedKeysResultsetMode()
Returns true if auto-generated keys resultset request was made for this avtivation.ConstantAction
getConstantAction()
Get the top ConstantAction on the stack without changing the stack.Row
getCurrentRow(int resultSetNumber)
Get the current row at the given index.NumberDataValue
getCurrentValueAndAdvance(java.lang.String sequenceUUIDstring, int typeFormatID)
Called by generated code to get the next number in an ANSI/ISO sequence and advance the sequence.java.lang.String
getCursorName()
Return the cursor name of this activation.DataValueFactory
getDataValueFactory()
Get the DataValueFactoryTableDescriptor
getDDLTableDescriptor()
Get the TableDescriptor for the target of DDL.java.sql.ResultSet[][]
getDynamicResults()
Return the set of dynamical created result sets, for procedures.ExecutionFactory
getExecutionFactory()
Get the ExecutionFactoryboolean
getForCreateTable()
Get whether or not this activation is for create table.CursorResultSet
getForUpdateIndexScan()
ConglomerateController
getHeapConglomerateController()
Get the ConglomerateController, if any, that has already been opened for the heap when scaning for an update or delete.long
getIndexConglomerateNumber()
Get the conglomerate number of the index, if any, that has already been opened for scaning for an update or delete.ScanController
getIndexScanController()
Get the ScanController, if any, that has already been opened for the index when scaning for an update or delete.LanguageConnectionContext
getLanguageConnectionContext()
Get the language connection context associated with this activationint
getMaxDynamicResults()
Return the maximum number of dynamical created result sets from the procedure definition.long
getMaxRows()
Get the maximum # of rows. (# of rows that can be returned by a ResultSet. 0 means no limit.)int
getNumSubqueries()
Get the number of subqueries in the entire query.ParameterValueSet
getParameterValueSet()
Gets the ParameterValueSet for this execution of the statement.Activation
getParentActivation()
This activation is created in a dynamic call context, or substatement execution context; get its caller's or superstatement's activation.java.util.Vector<TemporaryRowHolder>
getParentResultSet(java.lang.String resultSetId)
get the reference to parent table ResultSets, that will be needed by the referential action dependent table scans.java.util.Enumeration<java.lang.String>
getParentResultSetKeys()
ExecPreparedStatement
getPreparedStatement()
Get the prepared statement that this activation is for.ResultDescription
getResultDescription()
Get the result description for this activation, if it has one.ResultSet
getResultSet()
Returns the current result set for this activation, i.e.boolean
getResultSetHoldability()
Return the holdability of this activation.RowLocation
getRowLocationTemplate(int itemNumber)
Get the saved RowLocation.SQLSessionContext
getSQLSessionContextForChildren()
Get the current SQL session context if in a nested connection of a stored routine or in a substatement.java.sql.ResultSet
getTargetVTI()
Get the ResultSet for the target of an update/delete to a VTI.TransactionController
getTransactionController()
Get the Execution TransactionController associated with this activation/lcc.java.sql.SQLWarning
getWarnings()
Returns the chained list of warnings.void
informOfRowCount(NoPutResultSet resultSet, long rowCount)
Tell this activation that the given ResultSet was found to have the given number of rows.boolean
isClosed()
Find out if the activation is closed or not.boolean
isCursorActivation()
Is this Activation for a cursor?boolean
isInUse()
Is the activation in use?boolean
isSingleExecution()
Returns true if this Activation is only going to be used for one execution.void
markUnused()
Mark the activation as unused.ConstantAction
popConstantAction()
Pop the ConstantAction stack, returning the element which was just popped off the stack.ConstantAction
pushConstantAction(ConstantAction newConstantAction)
Push a ConstantAction to be returned by getConstantAction().void
reset()
Resets the activation to the "pre-execution" state - that is, the state where it can be used to begin a new execution.void
setAutoGeneratedKeysResultsetInfo(int[] columnIndexes, java.lang.String[] columnNames)
Set the auto-generated keys resultset mode to true for this activation.void
setCurrentRow(ExecRow currentRow, int resultSetNumber)
Generated plans have a current row field for ease in defining the methods and finding them dynamically.void
setCursorName(java.lang.String cursorName)
JDBC requires that all select statements be converted into cursors, and that the cursor name be settable for each execution of a select statement.void
setDDLTableDescriptor(TableDescriptor td)
Save the TableDescriptor for the target of DDL so that it can be passed between the various ConstantActions during execution.void
setForCreateTable()
Mark the Activation as being for create table.void
setForUpdateIndexScan(CursorResultSet forUpdateResultSet)
beetle 3865: updateable cursor using index.void
setHeapConglomerateController(ConglomerateController updateHeapCC)
Set the ConglomerateController to be used for an update or delete.void
setIndexConglomerateNumber(long indexConglomerateNumber)
Set the conglomerate number of the index to be used for an update or delete, when scanning an index that will also be updated (Saves opening the ScanController twice.)void
setIndexScanController(ScanController indexSC)
Set the ScanController to be used for an update or delete, when scanning an index that will also be updated (Saves opening the ScanController twice.)void
setMaxRows(long maxRows)
Set the maximum # of rows. (# of rows that can be returned by a ResultSet. 0 means no limit.)void
setParameters(ParameterValueSet parameterValues, DataTypeDescriptor[] parameterTypes)
Sets the parameter values for this execution of the statement.void
setParentActivation(Activation a)
This activation is created in a dynamic call context or a substatement execution context, chain its parent statements activation..void
setParentResultSet(TemporaryRowHolder rs, java.lang.String resultSetId)
void
setResultSetHoldability(boolean resultSetHoldability)
Set current resultset holdability.void
setSingleExecution()
Set this Activation for a single execution.void
setTargetVTI(java.sql.ResultSet targetVTI)
Save the ResultSet for the target of an update/delete to a VTI.SQLSessionContext
setupSQLSessionContextForChildren(boolean push)
Set up and return the current SQL session context for all immediately nested connections stemming from the call or function invocation of the statement corresponding to this activation (push=true) or for a substatement, which shares the parents statement's session context (push=false).-
Methods inherited from interface org.apache.derby.catalog.Dependable
getClassType, getDependableFinder, getObjectID, getObjectName, isPersistent
-
Methods inherited from interface org.apache.derby.iapi.sql.depend.Dependent
isValid, makeInvalid, prepareToInvalidate
-
-
-
-
Method Detail
-
reset
void reset() throws StandardException
Resets the activation to the "pre-execution" state - that is, the state where it can be used to begin a new execution. Frees local buffers, stops scans, resets counters to zero, sets current date and time to an unitialized state, etc.- Throws:
StandardException
- thrown on failure
-
setCursorName
void setCursorName(java.lang.String cursorName)
JDBC requires that all select statements be converted into cursors, and that the cursor name be settable for each execution of a select statement. The Language Module will support this, so that the JDBC driver will not have to parse JSQL text. This method will have no effect when called on non-select statements.There will be a JSQL statement to disable the "cursorization" of all select statements. For non-cursorized select statements, this method will have no effect.
This has no effect if the activation has been closed.
- Parameters:
cursorName
- The cursor name to use.
-
checkIfThisActivationHasHoldCursor
boolean checkIfThisActivationHasHoldCursor(java.lang.String tableName)
Temporary tables can be declared with ON COMMIT DELETE ROWS. But if the table has a held curosr open at commit time, data should not be deleted from the table. This method, (gets called at commit time) checks if this activation held cursor and if so, does that cursor reference the passed temp table name.- Returns:
- true if this activation has held cursor and if it references the passed temp table name
-
getParameterValueSet
ParameterValueSet getParameterValueSet()
Gets the ParameterValueSet for this execution of the statement.- Returns:
- The ParameterValueSet for this execution of the statement. Returns NULL if there are no parameters.
-
setParameters
void setParameters(ParameterValueSet parameterValues, DataTypeDescriptor[] parameterTypes) throws StandardException
Sets the parameter values for this execution of the statement.Has no effect if the activation has been closed.
NOTE: The setParameters() method is currently unimplemented. A statement with parameters will generate its own ParameterValueSet, which can be gotten with the getParameterValueSet() method (above). The idea behind setParameters() is to improve performance when operating across a network by allowing all the parameters to be set in one call, as opposed to one call per parameter.
- Parameters:
parameterValues
- The values of the parameters.- Throws:
StandardException
-
execute
ResultSet execute() throws StandardException
When the prepared statement is executed, it passes execution on to the activation execution was requested for.- Returns:
- the ResultSet for further manipulation, if any.
- Throws:
StandardException
- Thrown on failure
-
close
void close() throws StandardException
Closing an activation statement marks it as unusable. Any other requests made on it will fail. An activation should be marked closed when it is expected to not be used any longer, i.e. when the connection for it is closed, or it has suffered some sort of severe error. This will also close its result set and release any resources it holds e.g. for parameters.Any class that implements this must be prepared to be executed from garbage collection, ie. there is no matching context stack.
- Throws:
StandardException
- Thrown on failure
-
isClosed
boolean isClosed()
Find out if the activation is closed or not.- Returns:
- true if the Activation has been closed.
-
setSingleExecution
void setSingleExecution()
Set this Activation for a single execution. E.g. a java.sql.Statement execution.
-
isSingleExecution
boolean isSingleExecution()
Returns true if this Activation is only going to be used for one execution.
-
getWarnings
java.sql.SQLWarning getWarnings()
Returns the chained list of warnings. Returns null if there are no warnings.
-
addWarning
void addWarning(java.sql.SQLWarning w)
Add a warning to the activation
-
clearWarnings
void clearWarnings()
Clear the activation's warnings.
-
getLanguageConnectionContext
LanguageConnectionContext getLanguageConnectionContext()
Get the language connection context associated with this activation
-
getTransactionController
TransactionController getTransactionController()
Get the Execution TransactionController associated with this activation/lcc.
-
getResultSet
ResultSet getResultSet()
Returns the current result set for this activation, i.e. the one returned by the last execute() call. If there has been no execute call or the activation has been reset or closed, a null is returned.- Returns:
- the current ResultSet of this activation.
-
setCurrentRow
void setCurrentRow(ExecRow currentRow, int resultSetNumber)
Generated plans have a current row field for ease in defining the methods and finding them dynamically. The interface is used to set the row before a dynamic method that uses it is invoked.When all processing on the currentRow has been completed, callers should call activation.clearCurrentRow(resultSetNumber) to ensure that no unnecessary references are retained to rows. This will allow the rows no longer in use to be collected by the garbage collecter.
- Parameters:
currentRow
- The row to be operated upon.resultSetNumber
- The resultSetNumber for the current ResultSet
-
getCurrentRow
Row getCurrentRow(int resultSetNumber)
Get the current row at the given index.
-
clearCurrentRow
void clearCurrentRow(int resultSetNumber)
Generated plans have a current row field for ease in defining the methods and finding them dynamically. The interface is used to set the row before a dynamic method that uses it is invoked.When all processing on the currentRow has been completed, callers should call activation.clearCurrentRow(resultSetNumber) to ensure that no unnecessary references are retained to rows. This will allow the rows no longer in use to be collected by the garbage collecter.
- Parameters:
resultSetNumber
- The resultSetNumber for the current ResultSet
-
getPreparedStatement
ExecPreparedStatement getPreparedStatement()
Get the prepared statement that this activation is for.- Returns:
- the prepared statement this activation is for.
-
checkStatementValidity
void checkStatementValidity() throws StandardException
Check the validity of the current executing statement. Needs to be called after a statement has obtained the relevant table locks on the- Throws:
StandardException
-
getResultDescription
ResultDescription getResultDescription()
Get the result description for this activation, if it has one.- Returns:
- result description for this activation, if it has one; otherwise, null.
-
getDataValueFactory
DataValueFactory getDataValueFactory()
Get the DataValueFactory- Returns:
- DataValueFactory
-
getExecutionFactory
ExecutionFactory getExecutionFactory()
Get the ExecutionFactory- Returns:
- ExecutionFactory
-
getRowLocationTemplate
RowLocation getRowLocationTemplate(int itemNumber)
Get the saved RowLocation.- Parameters:
itemNumber
- The saved item number.- Returns:
- A RowLocation template for the conglomerate
-
getNumSubqueries
int getNumSubqueries()
Get the number of subqueries in the entire query.- Returns:
- int The number of subqueries in the entire query.
-
getCursorName
java.lang.String getCursorName()
Return the cursor name of this activation. This will differ from its ResultSet's cursor name if it has been altered with setCursorName. Thus this always returns the cursor name of the next execution of this activation. The cursor name of the current execution must be obtained from the ResultSet. or this.getResultSet.getCursorName() [with null checking].Statements that do not support cursors will return a null.
- Returns:
- The cursor name.
-
getResultSetHoldability
boolean getResultSetHoldability()
Return the holdability of this activation.- Returns:
- The holdability of this activation.
-
setResultSetHoldability
void setResultSetHoldability(boolean resultSetHoldability)
Set current resultset holdability.- Parameters:
resultSetHoldability
- The new resultset holdability.
-
setAutoGeneratedKeysResultsetInfo
void setAutoGeneratedKeysResultsetInfo(int[] columnIndexes, java.lang.String[] columnNames)
Set the auto-generated keys resultset mode to true for this activation. The specific columns for auto-generated keys resultset can be requested by passing column positions array The specific columns for auto-generated keys resultset can be requested by passing column names array Both the parameters would be null if user didn't request specific keys. Otherwise, the user could request specific columns by passing column positions or names array but not both.- Parameters:
columnIndexes
- Request specific columns in auto-generated keys resultset by passing column positions. null means no specific columns requested by positioncolumnNames
- Request specific columns in auto-generated keys resultset by passing column names. null means no specific columns requested by position
-
getAutoGeneratedKeysResultsetMode
boolean getAutoGeneratedKeysResultsetMode()
Returns true if auto-generated keys resultset request was made for this avtivation.- Returns:
- auto-generated keys resultset mode for this activation.
-
getAutoGeneratedKeysColumnIndexes
int[] getAutoGeneratedKeysColumnIndexes()
Returns the column positions array of columns requested in auto-generated keys resultset for this avtivation. Returns null if no specific column requested by positions- Returns:
- column positions array of columns requested.
-
getAutoGeneratedKeysColumnNames
java.lang.String[] getAutoGeneratedKeysColumnNames()
Returns the column names array of columns requested in auto-generated keys resultset for this avtivation. Returns null if no specific column requested by names- Returns:
- column names array of columns requested.
-
markUnused
void markUnused()
Mark the activation as unused.
-
isInUse
boolean isInUse()
Is the activation in use?- Returns:
- true/false
-
informOfRowCount
void informOfRowCount(NoPutResultSet resultSet, long rowCount) throws StandardException
Tell this activation that the given ResultSet was found to have the given number of rows. This is used during execution to determine whether a table has grown or shrunk. If a table's size changes significantly, the activation may invalidate its PreparedStatement to force recompilation. Note that the association of row counts with ResultSets is kept in the activation class, not in the activation itself. This means that this method must be synchronized. This method is not required to check the number of rows on each call. Because of synchronization, this check is likely to be expensive, so it may only check every hundred calls or so.- Throws:
StandardException
- Thrown on error
-
getHeapConglomerateController
ConglomerateController getHeapConglomerateController()
Get the ConglomerateController, if any, that has already been opened for the heap when scaning for an update or delete. (Saves opening the ConglomerateController twice.)- Returns:
- The ConglomerateController, if available, to use for the update.
-
setHeapConglomerateController
void setHeapConglomerateController(ConglomerateController updateHeapCC)
Set the ConglomerateController to be used for an update or delete. (Saves opening the ConglomerateController twice.)- Parameters:
updateHeapCC
- The ConglomerateController to reuse for the update or delete.
-
clearHeapConglomerateController
void clearHeapConglomerateController()
Clear the ConglomerateController to be used for an update or delete. (Saves opening the ConglomerateController twice.)
-
getIndexScanController
ScanController getIndexScanController()
Get the ScanController, if any, that has already been opened for the index when scaning for an update or delete. (Saves opening the ScanController twice.)- Returns:
- The ScanController, if available, to use for the update.
-
setIndexScanController
void setIndexScanController(ScanController indexSC)
Set the ScanController to be used for an update or delete, when scanning an index that will also be updated (Saves opening the ScanController twice.)- Parameters:
indexSC
- The ScanController to reuse for the update or delete.
-
getIndexConglomerateNumber
long getIndexConglomerateNumber()
Get the conglomerate number of the index, if any, that has already been opened for scaning for an update or delete. (Saves opening the ScanController twice.)- Returns:
- The conglomerate number, if available, to use for the update.
-
setIndexConglomerateNumber
void setIndexConglomerateNumber(long indexConglomerateNumber)
Set the conglomerate number of the index to be used for an update or delete, when scanning an index that will also be updated (Saves opening the ScanController twice.)- Parameters:
indexConglomerateNumber
- The conglomerate number of the index to reuse for the update or delete.
-
clearIndexScanInfo
void clearIndexScanInfo()
Clear the info for the index to be re-used for update/delete. (ScanController and conglomerate number.)
-
setForCreateTable
void setForCreateTable()
Mark the Activation as being for create table. (NOTE: We can do certain optimizations for create table that we can't do for other DDL.)
-
getForCreateTable
boolean getForCreateTable()
Get whether or not this activation is for create table. (NOTE: We can do certain optimizations for create table that we can't do for other DDL.)- Returns:
- Whether or not this activation is for create table.
-
setDDLTableDescriptor
void setDDLTableDescriptor(TableDescriptor td)
Save the TableDescriptor for the target of DDL so that it can be passed between the various ConstantActions during execution.
-
getDDLTableDescriptor
TableDescriptor getDDLTableDescriptor()
Get the TableDescriptor for the target of DDL.- Returns:
- The TableDescriptor for the target of DDL.
-
setMaxRows
void setMaxRows(long maxRows)
Set the maximum # of rows. (# of rows that can be returned by a ResultSet. 0 means no limit.)- Parameters:
maxRows
- Maximum # of rows. (0 means no limit.)
-
getMaxRows
long getMaxRows()
Get the maximum # of rows. (# of rows that can be returned by a ResultSet. 0 means no limit.)- Returns:
- Maximum # of rows. (0 means no limit.)
-
isCursorActivation
boolean isCursorActivation()
Is this Activation for a cursor?- Returns:
- Whether or not this Activation is for a cursor.
-
setTargetVTI
void setTargetVTI(java.sql.ResultSet targetVTI)
Save the ResultSet for the target of an update/delete to a VTI.
-
getTargetVTI
java.sql.ResultSet getTargetVTI()
Get the ResultSet for the target of an update/delete to a VTI.- Returns:
- The ResultSet for the target of an update/delete to a VTI.
-
pushConstantAction
ConstantAction pushConstantAction(ConstantAction newConstantAction)
Push a ConstantAction to be returned by getConstantAction(). Returns the newConstantAction.
-
popConstantAction
ConstantAction popConstantAction()
Pop the ConstantAction stack, returning the element which was just popped off the stack.
-
getConstantAction
ConstantAction getConstantAction()
Get the top ConstantAction on the stack without changing the stack.
-
setParentResultSet
void setParentResultSet(TemporaryRowHolder rs, java.lang.String resultSetId)
-
getParentResultSet
java.util.Vector<TemporaryRowHolder> getParentResultSet(java.lang.String resultSetId)
get the reference to parent table ResultSets, that will be needed by the referential action dependent table scans.
-
clearParentResultSets
void clearParentResultSets()
-
getParentResultSetKeys
java.util.Enumeration<java.lang.String> getParentResultSetKeys()
-
setForUpdateIndexScan
void setForUpdateIndexScan(CursorResultSet forUpdateResultSet)
beetle 3865: updateable cursor using index. A way of communication between cursor activation and update activation.
-
getForUpdateIndexScan
CursorResultSet getForUpdateIndexScan()
-
getDynamicResults
java.sql.ResultSet[][] getDynamicResults()
Return the set of dynamical created result sets, for procedures. Base implementation returns null, a generated class for a procedure overwrites this with a real implementation.- Returns:
- null if no dynamic results exists. Otherwise an array of ResultSet arrays, each of length one containing null or a reference to a ResultSet.
-
getMaxDynamicResults
int getMaxDynamicResults()
Return the maximum number of dynamical created result sets from the procedure definition. Base implementation returns 0, a generated class for a procedure overwrites this with a real implementation.
-
getSQLSessionContextForChildren
SQLSessionContext getSQLSessionContextForChildren()
Get the current SQL session context if in a nested connection of a stored routine or in a substatement.
-
setupSQLSessionContextForChildren
SQLSessionContext setupSQLSessionContextForChildren(boolean push)
Set up and return the current SQL session context for all immediately nested connections stemming from the call or function invocation of the statement corresponding to this activation (push=true) or for a substatement, which shares the parents statement's session context (push=false).- Parameters:
push
- true if used to push a new connection context
-
setParentActivation
void setParentActivation(Activation a)
This activation is created in a dynamic call context or a substatement execution context, chain its parent statements activation..
-
getParentActivation
Activation getParentActivation()
This activation is created in a dynamic call context, or substatement execution context; get its caller's or superstatement's activation.- Returns:
- The caller's activation
-
getCurrentValueAndAdvance
NumberDataValue getCurrentValueAndAdvance(java.lang.String sequenceUUIDstring, int typeFormatID) throws StandardException
Called by generated code to get the next number in an ANSI/ISO sequence and advance the sequence. Raises an exception if the sequence was declared NO CYCLE and its range is exhausted.- Parameters:
sequenceUUIDstring
- The string value of the sequence's UUIDtypeFormatID
- The format id of the data type to be returned. E.g., StoredFormatIds.SQL_INTEGER_ID.- Returns:
- The next number in the sequence
- Throws:
StandardException
-
-