Class GenericPreparedStatement
- java.lang.Object
-
- org.apache.derby.impl.sql.GenericPreparedStatement
-
- All Implemented Interfaces:
- Dependable, Dependent, ExecPreparedStatement, PreparedStatement
- Direct Known Subclasses:
- GenericStorablePreparedStatement
public class GenericPreparedStatement extends java.lang.Object implements ExecPreparedStatement
Basic implementation of prepared statement. relies on implementation of ResultDescription and Statement that are also in this package.These are both dependents (of the schema objects and prepared statements they depend on) and providers. Prepared statements that are providers are cursors that end up being used in positioned delete and update statements (at present).
This is impl with the regular prepared statements; they will never have the cursor info fields set.
Stored prepared statements extend this implementation
-
-
Field Summary
Fields Modifier and Type Field and Description Statementstatement-
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
-
-
Constructor Summary
Constructors Constructor and Description GenericPreparedStatement(Statement st)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method and Description ResultSetexecute(Activation activation, boolean forMetaData, long timeoutMillis)Execute the PreparedStatement and return results, used for top level statements (not substatements) in a connection.ResultSetexecuteSubStatement(Activation parent, Activation activation, boolean rollbackParentContext, long timeoutMillis)Execute a statement as part of another statement (ithout a nested connection) and return results.ResultSetexecuteSubStatement(LanguageConnectionContext lcc, boolean rollbackParentContext, long timeoutMillis)Execute a statement as part of another statement (without a nested connection) and return results.voidfinish(LanguageConnectionContext lcc)Finish marks a statement as totally unusable.ActivationgetActivation(LanguageConnectionContext lcc, boolean scrollable)Get a new activation instance.GeneratedClassgetActivationClass()Get the class generated for this prepared statement.java.sql.TimestampgetBeginCompileTimestamp()Get the timestamp for the beginning of compilationlonggetBindTimeInMillis()Get the bind time for the associated query in milliseconds.java.lang.StringgetClassType()Get the Dependable's class type.ExecPreparedStatementgetClone()Get a new prepared statement that is a shallow copy of the current one.longgetCompileTimeInMillis()Get the total compile time for the associated query in milliseconds.java.sql.SQLWarninggetCompileTimeWarnings()Return any compile time warnings.ConstantActiongetConstantAction()Get the Execution constants.java.lang.ObjectgetCursorInfo()Return the cursor info in a single chunk.DependableFindergetDependableFinder()Get an object which can be written to disk and which, when read from disk, will find or reconstruct this in-memory Dependable.java.sql.TimestampgetEndCompileTimestamp()Get the timestamp for the end of compilationlonggetGenerateTimeInMillis()Get the generate time for the associated query in milliseconds.longgetInitialRowCount(int rsNum, long currentRowCount)Get the initial row count of the specified result set.UUIDgetObjectID()Get the Dependable's UUID String.java.lang.StringgetObjectName()Return the name of this Dependable.longgetOptimizeTimeInMillis()Get the optimize time for the associated query in milliseconds.DataTypeDescriptorgetParameterType(int idx)Return the type of the parameter (0-based indexing)DataTypeDescriptor[]getParameterTypes()Get an array of DataTypeDescriptors describing the types of the parameters of this PreparedStatement.longgetParseTimeInMillis()Get the parse time for the associated query in milliseconds.java.util.List<StatementPermission>getRequiredPermissionsList()ResultDescriptiongetResultDescription()Get the ResultDescription for the statement.java.lang.ObjectgetSavedObject(int objectNum)Get the specified saved object.java.util.List<java.lang.Object>getSavedObjects()Get the saved objects.java.lang.StringgetSource()Return the SQL string that this statement is for.java.lang.StringgetSPSName()Return the SPS Name for this statement.intgetStalePlanCheckInterval()Get the stale plan check interval.ExecCursorTableReferencegetTargetTable()the target table of the cursorintgetUpdateMode()the update mode of the cursorlonggetVersionCounter()Get the version counter.booleanhasUpdateColumns()Check if this prepared statement has a cursor with columns that can be updated.intincrementExecutionCount()Increment and return the execution count for this statement.voidincrementVersionCounter()booleanisAtomic()Returns whether or not this Statement requires should behave atomically -- i.e.booleanisPersistent()Is this dependent persistent? A stored dependency will be required if both the dependent and provider are persistent.booleanisStorable()booleanisUpdateColumn(java.lang.String columnName)Check if the specified column name is one of the update columns.booleanisValid()Check that all of the dependent's dependencies are valid.voidmakeInvalid(int action, LanguageConnectionContext lcc)Mark the dependent as invalid (due to at least one of its dependencies being invalid).booleanneedsSavepoint()Does this statement need a savepoint?voidprepareToInvalidate(Provider p, int action, LanguageConnectionContext lcc)Prepare to mark the dependent as invalid (due to at least one of its dependencies being invalid).booleanreferencesSessionSchema()Return true if the query node for this statement references SESSION schema tables/views.booleanreferencesSessionSchema(StatementNode qt)Return true if the QueryTreeNode references SESSION schema tables/views.voidrePrepare(LanguageConnectionContext lcc)Re-prepare the statement if it is not up to date or, if requested, simply not optimal.voidrePrepare(LanguageConnectionContext lcc, boolean forMetaData)voidsetCacheHolder(Cacheable cacheHolder)voidsetRequiredPermissionsList(java.util.List<StatementPermission> requiredPermissionsList)voidsetSource(java.lang.String text)set the statement textvoidsetSPSAction()Indicate this prepared statement is an SPS action, currently used by GenericTriggerExecutor.voidsetSPSName(java.lang.String name)voidsetStalePlanCheckInterval(int interval)Set the stale plan check interval.voidsetValid()set this prepared statement to be valid, currently used by GenericTriggerExecutor.java.lang.StringtoString()booleanupToDate()Checks whether this PreparedStatement is up to date.booleanupToDate(GeneratedClass gc)Check whether this statement is up to date and its generated class is identical to the supplied class object.
-
-
-
Field Detail
-
statement
public Statement statement
-
-
Constructor Detail
-
GenericPreparedStatement
public GenericPreparedStatement(Statement st)
-
-
Method Detail
-
upToDate
public boolean upToDate() throws StandardExceptionDescription copied from interface:PreparedStatementChecks whether this PreparedStatement is up to date. A PreparedStatement can become out of date if any of several things happen: A schema used by the statement is dropped A table used by the statement is dropped A table used by the statement, or a column in such a table, is altered in one of several ways: a column is dropped, a privilege is dropped, a constraint is added or dropped, an index is dropped. A view used by the statement is dropped. In general, anything that happened since the plan was generated that might cause the plan to fail, or to generate incorrect results, will cause this method to return FALSE.- Specified by:
upToDatein interfacePreparedStatement- Returns:
- TRUE if the PreparedStatement is up to date, FALSE if it is not up to date
- Throws:
StandardException
-
upToDate
public boolean upToDate(GeneratedClass gc)
Check whether this statement is up to date and its generated class is identical to the supplied class object.- Specified by:
upToDatein interfaceExecPreparedStatement- Parameters:
gc- a generated class that must be identical togetActivationClass()for this method to returntrue- Returns:
trueif this statement is up to date and its activation class is identical togc,falseotherwise- See Also:
ExecPreparedStatement.upToDate(GeneratedClass)
-
rePrepare
public void rePrepare(LanguageConnectionContext lcc) throws StandardException
Description copied from interface:PreparedStatementRe-prepare the statement if it is not up to date or, if requested, simply not optimal. If there are open cursors using this prepared statement, then we will not be able to recompile the statement.- Specified by:
rePreparein interfacePreparedStatement- Parameters:
lcc- The LanguageConnectionContext.- Throws:
StandardException- thrown if unable to perform
-
rePrepare
public void rePrepare(LanguageConnectionContext lcc, boolean forMetaData) throws StandardException
- Throws:
StandardException
-
getActivation
public Activation getActivation(LanguageConnectionContext lcc, boolean scrollable) throws StandardException
Get a new activation instance.- Specified by:
getActivationin interfacePreparedStatement- Parameters:
lcc- The LanguageConnectionContext.- Returns:
- The new activation.
- Throws:
StandardException- thrown if finished.
-
executeSubStatement
public ResultSet executeSubStatement(LanguageConnectionContext lcc, boolean rollbackParentContext, long timeoutMillis) throws StandardException
Description copied from interface:PreparedStatementExecute a statement as part of another statement (without a nested connection) and return results.Creates a new single use activation and executes it, but also passes rollbackParentContext parameter.
- Specified by:
executeSubStatementin interfacePreparedStatement- Parameters:
lcc- language connection contextrollbackParentContext- True if in the event of a statement-level exception, the parent context needs to be rolled back, too.timeoutMillis- timeout value in milliseconds.- Throws:
StandardException- See Also:
PreparedStatement.executeSubStatement(LanguageConnectionContext, boolean, long)
-
executeSubStatement
public ResultSet executeSubStatement(Activation parent, Activation activation, boolean rollbackParentContext, long timeoutMillis) throws StandardException
Description copied from interface:PreparedStatementExecute a statement as part of another statement (ithout a nested connection) and return results.There is no executeQuery() or executeUpdate(); a method is provided in ResultSet to tell whether to expect rows to be returned.
- Specified by:
executeSubStatementin interfacePreparedStatement- Parameters:
parent- The activation of the superstatementactivation- The activation containing all the local state to execute the plan for substatementrollbackParentContext- True if in the event of a statement-level exception, the parent context needs to be rolled back, too.timeoutMillis- timeout value in milliseconds.- Returns:
- A ResultSet for a statement. A ResultSet represents the results returned from the statement, if any. Will return NULL if the plan for the PreparedStatement has aged out of cache, or the plan is out of date.
- Throws:
StandardException- Thrown on failure- See Also:
PreparedStatement.executeSubStatement(Activation, Activation, boolean, long)
-
execute
public ResultSet execute(Activation activation, boolean forMetaData, long timeoutMillis) throws StandardException
Description copied from interface:PreparedStatementExecute the PreparedStatement and return results, used for top level statements (not substatements) in a connection.There is no executeQuery() or executeUpdate(); a method is provided in ResultSet to tell whether to expect rows to be returned.
- Specified by:
executein interfacePreparedStatement- Parameters:
activation- The activation containing all the local state to execute the plan.forMetaData- true if this is a meta-data querytimeoutMillis- timeout value in milliseconds.- Returns:
- A ResultSet for a statement. A ResultSet represents the results returned from the statement, if any. Will return NULL if the plan for the PreparedStatement has aged out of cache, or the plan is out of date.
- Throws:
StandardException- Thrown on failure- See Also:
PreparedStatement.execute(org.apache.derby.iapi.sql.Activation, boolean, long)
-
getResultDescription
public ResultDescription getResultDescription()
Description copied from interface:PreparedStatementGet the ResultDescription for the statement. The ResultDescription describes what the results look like: what are the rows and columns?This is available here and on the ResultSet so that users can see the shape of the result before they execute.
- Specified by:
getResultDescriptionin interfacePreparedStatement- Returns:
- A ResultDescription describing the results.
-
getParameterTypes
public DataTypeDescriptor[] getParameterTypes()
Description copied from interface:PreparedStatementGet an array of DataTypeDescriptors describing the types of the parameters of this PreparedStatement. The Nth element of the array describes the Nth parameter.- Specified by:
getParameterTypesin interfacePreparedStatement- Returns:
- An array of DataTypeDescriptors telling the type, length, precision, scale, etc. of each parameter of this PreparedStatement.
-
getParameterType
public DataTypeDescriptor getParameterType(int idx) throws StandardException
Return the type of the parameter (0-based indexing)- Specified by:
getParameterTypein interfacePreparedStatement- Throws:
StandardException
-
getSource
public java.lang.String getSource()
Description copied from interface:PreparedStatementReturn the SQL string that this statement is for.- Specified by:
getSourcein interfacePreparedStatement- Returns:
- the SQL string this statement is for.
-
setSource
public void setSource(java.lang.String text)
Description copied from interface:ExecPreparedStatementset the statement text- Specified by:
setSourcein interfaceExecPreparedStatement- Parameters:
text- the source text
-
setSPSName
public final void setSPSName(java.lang.String name)
-
getSPSName
public java.lang.String getSPSName()
Description copied from interface:PreparedStatementReturn the SPS Name for this statement.- Specified by:
getSPSNamein interfacePreparedStatement- Returns:
- the SPS Name for this statement
-
getCompileTimeInMillis
public long getCompileTimeInMillis()
Get the total compile time for the associated query in milliseconds. Compile time can be divided into parse, bind, optimize and generate times.- Specified by:
getCompileTimeInMillisin interfacePreparedStatement- Returns:
- long The total compile time for the associated query in milliseconds.
-
getParseTimeInMillis
public long getParseTimeInMillis()
Get the parse time for the associated query in milliseconds.- Specified by:
getParseTimeInMillisin interfacePreparedStatement- Returns:
- long The parse time for the associated query in milliseconds.
-
getBindTimeInMillis
public long getBindTimeInMillis()
Get the bind time for the associated query in milliseconds.- Specified by:
getBindTimeInMillisin interfacePreparedStatement- Returns:
- long The bind time for the associated query in milliseconds.
-
getOptimizeTimeInMillis
public long getOptimizeTimeInMillis()
Get the optimize time for the associated query in milliseconds.- Specified by:
getOptimizeTimeInMillisin interfacePreparedStatement- Returns:
- long The optimize time for the associated query in milliseconds.
-
getGenerateTimeInMillis
public long getGenerateTimeInMillis()
Get the generate time for the associated query in milliseconds.- Specified by:
getGenerateTimeInMillisin interfacePreparedStatement- Returns:
- long The generate time for the associated query in milliseconds.
-
getBeginCompileTimestamp
public java.sql.Timestamp getBeginCompileTimestamp()
Get the timestamp for the beginning of compilation- Specified by:
getBeginCompileTimestampin interfacePreparedStatement- Returns:
- Timestamp The timestamp for the beginning of compilation.
-
getEndCompileTimestamp
public java.sql.Timestamp getEndCompileTimestamp()
Get the timestamp for the end of compilation- Specified by:
getEndCompileTimestampin interfacePreparedStatement- Returns:
- Timestamp The timestamp for the end of compilation.
-
getCompileTimeWarnings
public final java.sql.SQLWarning getCompileTimeWarnings()
Description copied from interface:PreparedStatementReturn any compile time warnings. Null if no warnings exist.- Specified by:
getCompileTimeWarningsin interfacePreparedStatement
-
finish
public void finish(LanguageConnectionContext lcc)
Finish marks a statement as totally unusable.- Specified by:
finishin interfaceExecPreparedStatement
-
getConstantAction
public final ConstantAction getConstantAction()
Get the Execution constants. This routine is called at Execution time.- Specified by:
getConstantActionin interfaceExecPreparedStatement- Returns:
- ConstantAction The big structure enclosing the Execution constants.
-
getSavedObject
public final java.lang.Object getSavedObject(int objectNum)
Get the specified saved object.- Specified by:
getSavedObjectin interfaceExecPreparedStatement- Parameters:
objectNum- The object to get.- Returns:
- the requested saved object.
-
getSavedObjects
public final java.util.List<java.lang.Object> getSavedObjects()
Get the saved objects.- Specified by:
getSavedObjectsin interfaceExecPreparedStatement- Returns:
- all the saved objects
-
isValid
public boolean isValid()
Check that all of the dependent's dependencies are valid.
-
setValid
public void setValid()
set this prepared statement to be valid, currently used by GenericTriggerExecutor.- Specified by:
setValidin interfaceExecPreparedStatement
-
setSPSAction
public void setSPSAction()
Indicate this prepared statement is an SPS action, currently used by GenericTriggerExecutor.- Specified by:
setSPSActionin interfaceExecPreparedStatement
-
prepareToInvalidate
public void prepareToInvalidate(Provider p, int action, LanguageConnectionContext lcc) throws StandardException
Prepare to mark the dependent as invalid (due to at least one of its dependencies being invalid).- Specified by:
prepareToInvalidatein interfaceDependent- Parameters:
action- The action causing the invalidationp- the providerlcc- The LanguageConnectionContext- Throws:
StandardException- thrown if unable to make it invalid
-
makeInvalid
public void makeInvalid(int action, LanguageConnectionContext lcc) throws StandardExceptionMark the dependent as invalid (due to at least one of its dependencies being invalid).- Specified by:
makeInvalidin interfaceDependent- Parameters:
action- The action causing the invalidationlcc- The LanguageConnectionContext- Throws:
StandardException- Standard Derby error policy.
-
isPersistent
public boolean isPersistent()
Is this dependent persistent? A stored dependency will be required if both the dependent and provider are persistent.- Specified by:
isPersistentin interfaceDependable- Returns:
- boolean Whether or not this dependent is persistent.
-
getDependableFinder
public DependableFinder getDependableFinder()
Description copied from interface:DependableGet an object which can be written to disk and which, when read from disk, will find or reconstruct this in-memory Dependable.- Specified by:
getDependableFinderin interfaceDependable- Returns:
- the stored form of this Dependable
- See Also:
Dependable.getDependableFinder()
-
getObjectName
public java.lang.String getObjectName()
Return the name of this Dependable. (Useful for errors.)- Specified by:
getObjectNamein interfaceDependable- Returns:
- String The name of this Dependable..
-
getObjectID
public UUID getObjectID()
Get the Dependable's UUID String.- Specified by:
getObjectIDin interfaceDependable- Returns:
- String The Dependable's UUID String.
-
getClassType
public java.lang.String getClassType()
Get the Dependable's class type.- Specified by:
getClassTypein interfaceDependable- Returns:
- String Classname that this Dependable belongs to.
-
referencesSessionSchema
public boolean referencesSessionSchema()
Return true if the query node for this statement references SESSION schema tables/views. This method gets called at the very beginning of the compile phase of any statement. If the statement which needs to be compiled is already found in cache, then there is no need to compile it again except the case when the statement is referencing SESSION schema objects. There is a small window where such a statement might get cached temporarily (a statement referencing SESSION schema object will be removed from the cache after the bind phase is over because that is when we know for sure that the statement is referencing SESSION schema objects.)- Specified by:
referencesSessionSchemain interfacePreparedStatement- Returns:
- true if references SESSION schema tables, else false
-
referencesSessionSchema
public boolean referencesSessionSchema(StatementNode qt) throws StandardException
Return true if the QueryTreeNode references SESSION schema tables/views. The return value is also saved in the local field because it will be used by referencesSessionSchema() method. This method gets called when the statement is not found in cache and hence it is getting compiled. At the beginning of compilation for any statement, first we check if the statement's plan already exist in the cache. If not, then we add the statement to the cache and continue with the parsing and binding. At the end of the binding, this method gets called to see if the QueryTreeNode references a SESSION schema object. If it does, then we want to remove it from the cache, since any statements referencing SESSION schema objects should never get cached.- Returns:
- true if references SESSION schema tables/views, else false
- Throws:
StandardException
-
getActivationClass
public GeneratedClass getActivationClass() throws StandardException
Description copied from interface:ExecPreparedStatementGet the class generated for this prepared statement. Used to confirm compatability with auxilary structures.- Specified by:
getActivationClassin interfaceExecPreparedStatement- Throws:
StandardException- on error obtaining class (probably when a stored prepared statement is loading)
-
getUpdateMode
public int getUpdateMode()
the update mode of the cursor- Specified by:
getUpdateModein interfaceExecPreparedStatement- Returns:
- The update mode of the cursor
-
getTargetTable
public ExecCursorTableReference getTargetTable()
the target table of the cursor- Specified by:
getTargetTablein interfaceExecPreparedStatement- Returns:
- target table of the cursor
-
hasUpdateColumns
public boolean hasUpdateColumns()
Description copied from interface:ExecPreparedStatementCheck if this prepared statement has a cursor with columns that can be updated.- Specified by:
hasUpdateColumnsin interfaceExecPreparedStatement
-
isUpdateColumn
public boolean isUpdateColumn(java.lang.String columnName)
Description copied from interface:ExecPreparedStatementCheck if the specified column name is one of the update columns.- Specified by:
isUpdateColumnin interfaceExecPreparedStatement
-
getCursorInfo
public java.lang.Object getCursorInfo()
Return the cursor info in a single chunk. Used by StrorablePreparedStatement- Specified by:
getCursorInfoin interfaceExecPreparedStatement- Returns:
- Object the cursor info
-
needsSavepoint
public boolean needsSavepoint()
Does this statement need a savepoint?- Specified by:
needsSavepointin interfaceExecPreparedStatement- Returns:
- true if this statement needs a savepoint.
-
isAtomic
public boolean isAtomic()
Returns whether or not this Statement requires should behave atomically -- i.e. whether a user is permitted to do a commit/rollback during the execution of this statement.- Specified by:
isAtomicin interfacePreparedStatement- Returns:
- boolean Whether or not this Statement is atomic
-
getClone
public ExecPreparedStatement getClone() throws StandardException
Get a new prepared statement that is a shallow copy of the current one.- Specified by:
getClonein interfaceExecPreparedStatement- Returns:
- a new prepared statement
- Throws:
StandardException- on error
-
setCacheHolder
public void setCacheHolder(Cacheable cacheHolder)
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
isStorable
public boolean isStorable()
-
setRequiredPermissionsList
public void setRequiredPermissionsList(java.util.List<StatementPermission> requiredPermissionsList)
-
getRequiredPermissionsList
public java.util.List<StatementPermission> getRequiredPermissionsList()
- Specified by:
getRequiredPermissionsListin interfaceExecPreparedStatement- Returns:
- the list of permissions required to execute this statement. May be null if the database does not use SQL standard authorization
-
getVersionCounter
public final long getVersionCounter()
Description copied from interface:PreparedStatementGet the version counter. A change in the value indicates a recompile has happened.- Specified by:
getVersionCounterin interfacePreparedStatement- Returns:
- version counter
-
incrementVersionCounter
public final void incrementVersionCounter()
-
incrementExecutionCount
public int incrementExecutionCount()
Description copied from interface:ExecPreparedStatementIncrement and return the execution count for this statement.- Specified by:
incrementExecutionCountin interfaceExecPreparedStatement- Returns:
- execution count for this statement after the last compilation
- See Also:
ExecPreparedStatement.incrementExecutionCount()
-
setStalePlanCheckInterval
public void setStalePlanCheckInterval(int interval)
Description copied from interface:ExecPreparedStatementSet the stale plan check interval.- Specified by:
setStalePlanCheckIntervalin interfaceExecPreparedStatement- Parameters:
interval- the stale plan check interval- See Also:
ExecPreparedStatement.setStalePlanCheckInterval(int)
-
getStalePlanCheckInterval
public int getStalePlanCheckInterval()
Description copied from interface:ExecPreparedStatementGet the stale plan check interval.- Specified by:
getStalePlanCheckIntervalin interfaceExecPreparedStatement- Returns:
- the stale plan check interval, or zero if it has not been initialized yet
- See Also:
ExecPreparedStatement.getStalePlanCheckInterval()
-
getInitialRowCount
public long getInitialRowCount(int rsNum, long currentRowCount)Description copied from interface:ExecPreparedStatementGet the initial row count of the specified result set. If the initial row count has not yet been set, initialize it with the value of the current row count.- Specified by:
getInitialRowCountin interfaceExecPreparedStatement- Parameters:
rsNum- the result set to get the initial row count forcurrentRowCount- the current row count for the result set- Returns:
- the row count from the first execution of the result set
- See Also:
ExecPreparedStatement.getInitialRowCount(int, long)
-
-
DataMelt 3.0 © DataMelt by jWork.ORG