Class StatementNode
- java.lang.Object
-
- org.apache.derby.impl.sql.compile.QueryTreeNode
-
- org.apache.derby.impl.sql.compile.StatementNode
-
- All Implemented Interfaces:
Visitable
- Direct Known Subclasses:
DDLStatementNode
,DMLStatementNode
,ExecSPSNode
,MiscellaneousStatementNode
,NOPStatementNode
,TransactionStatementNode
public abstract class StatementNode extends QueryTreeNode
A StatementNode represents a single statement in the language. It is the top node for any statement.StatementNode controls the class generation for query tree nodes.
-
-
Field Summary
Fields Modifier and Type Field Description (package private) static TableDescriptor[]
EMPTY_TD_LIST
Cached empty list object.(package private) static int
NEED_CURSOR_ACTIVATION
(package private) static int
NEED_DDL_ACTIVATION
create the outer shell class builder for the class we will be generating, generate the expression to stuff in it, and turn it into a class.(package private) static int
NEED_NOTHING_ACTIVATION
(package private) static int
NEED_PARAM_ACTIVATION
(package private) static int
NEED_ROW_ACTIVATION
-
Fields inherited from class org.apache.derby.impl.sql.compile.QueryTreeNode
AUTOINCREMENT_CREATE_MODIFY, AUTOINCREMENT_CYCLE, AUTOINCREMENT_INC_INDEX, AUTOINCREMENT_IS_AUTOINCREMENT_INDEX, AUTOINCREMENT_START_INDEX
-
-
Constructor Summary
Constructors Constructor Description StatementNode(ContextManager cm)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description (package private) abstract int
activationKind()
void
bindStatement()
Perform the binding operation statement.java.lang.String
executeSchemaName()
Returns name of schema in EXECUTE STATEMENT command.java.lang.String
executeStatementName()
Returns the name of statement in EXECUTE STATEMENT command.GeneratedClass
generate(ByteArray byteCode)
Do code generation for this statement.java.lang.Object
getCursorInfo()
Get an object with information about the cursor if there is one.java.lang.String
getSPSName()
Get the name of the SPS that is used to execute this statement.boolean
isAtomic()
By default, assume StatementNodes are atomic.protected TableDescriptor
lockTableForCompilation(TableDescriptor td)
ResultDescription
makeResultDescription()
Only DML statements have result descriptions - for all others return null.boolean
needsSavepoint()
Returns whether or not this Statement requires a set/clear savepoint around its execution.void
optimizeStatement()
Generates an optimized statement from a bound StatementNode.(package private) abstract java.lang.String
statementToString()
java.lang.String
toString()
Convert this object to a String.TableDescriptor[]
updateIndexStatisticsFor()
Returns a list of base tables for which the index statistics of the associated indexes should be updated.-
Methods inherited from class org.apache.derby.impl.sql.compile.QueryTreeNode
accept, acceptChildren, addTag, addUDTUsagePriv, addUDTUsagePriv, bindOffsetFetch, bindRowMultiSet, bindUserCatalogType, bindUserType, checkReliability, checkReliability, convertDefaultNode, copyTagsFrom, createTypeDependency, debugFlush, debugPrint, disablePrivilegeCollection, formatNodeString, generate, generateAuthorizeCheck, getBeginOffset, getClassFactory, getCompilerContext, getContext, getContextManager, getDataDictionary, getDependencyManager, getEndOffset, getExecutionFactory, getGenericConstantActionFactory, getIntProperty, getLanguageConnectionContext, getLongProperty, getNullNode, getOffsetOrderedNodes, getOptimizerFactory, getOptimizerTracer, getParameterTypes, getSchemaDescriptor, getSchemaDescriptor, getStatementType, getTableDescriptor, getTypeCompiler, getUDTDesc, isPrivilegeCollectionRequired, isSessionSchema, isSessionSchema, makeConstantAction, makeTableName, makeTableName, nodeHeader, optimizerTracingIsOn, orReliability, parseSearchCondition, parseStatement, printLabel, printSubNodes, referencesSessionSchema, resolveTableToSynonym, setBeginOffset, setEndOffset, setRefActionInfo, stackPrint, taggedWith, treePrint, treePrint, verifyClassExist
-
-
-
-
Field Detail
-
EMPTY_TD_LIST
static final TableDescriptor[] EMPTY_TD_LIST
Cached empty list object.
-
NEED_DDL_ACTIVATION
static final int NEED_DDL_ACTIVATION
create the outer shell class builder for the class we will be generating, generate the expression to stuff in it, and turn it into a class.- See Also:
- Constant Field Values
-
NEED_CURSOR_ACTIVATION
static final int NEED_CURSOR_ACTIVATION
- See Also:
- Constant Field Values
-
NEED_PARAM_ACTIVATION
static final int NEED_PARAM_ACTIVATION
- See Also:
- Constant Field Values
-
NEED_ROW_ACTIVATION
static final int NEED_ROW_ACTIVATION
- See Also:
- Constant Field Values
-
NEED_NOTHING_ACTIVATION
static final int NEED_NOTHING_ACTIVATION
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
StatementNode
StatementNode(ContextManager cm)
-
-
Method Detail
-
isAtomic
public boolean isAtomic() throws StandardException
By default, assume StatementNodes are atomic. The rare statements that aren't atomic (e.g. CALL method()) override this.- Overrides:
isAtomic
in classQueryTreeNode
- Returns:
- true if the statement is atomic
- Throws:
StandardException
- Thrown on error
-
needsSavepoint
public boolean needsSavepoint()
Returns whether or not this Statement requires a set/clear savepoint around its execution. The following statement "types" do not require them: Cursor - unnecessary and won't work in a read only environment Xact - savepoint will get blown away underneath us during commit/rollbackONLY CALLABLE AFTER GENERATION
This implementation returns true, sub-classes can override the method to not require a savepoint.
- Returns:
- boolean Whether or not this Statement requires a set/clear savepoint
-
getSPSName
public java.lang.String getSPSName()
Get the name of the SPS that is used to execute this statement. Only relevant for an ExecSPSNode -- otherwise, returns null.- Returns:
- the name of the underlying sps
-
executeStatementName
public java.lang.String executeStatementName()
Returns the name of statement in EXECUTE STATEMENT command. Returns null for all other commands.- Returns:
- String null unless overridden for Execute Statement command
-
executeSchemaName
public java.lang.String executeSchemaName()
Returns name of schema in EXECUTE STATEMENT command. Returns null for all other commands.- Returns:
- String schema for EXECUTE STATEMENT null for all others
-
makeResultDescription
public ResultDescription makeResultDescription()
Only DML statements have result descriptions - for all others return null. This method is overridden in DMLStatementNode.- Returns:
- null
-
getCursorInfo
public java.lang.Object getCursorInfo() throws StandardException
Get an object with information about the cursor if there is one.- Throws:
StandardException
-
toString
public java.lang.String toString()
Convert this object to a String. See comments in QueryTreeNode.java for how this should be done for tree printing.- Overrides:
toString
in classQueryTreeNode
- Returns:
- This object as a String
-
statementToString
abstract java.lang.String statementToString()
-
bindStatement
public void bindStatement() throws StandardException
Perform the binding operation statement. Binding consists of permissions checking, view resolution, datatype resolution, and creation of a dependency list (for determining whether a tree or plan is still up to date). This bindStatement() method does nothing. Each StatementNode type that can appear at the top of a tree can override this method with its own bindStatement() method that does "something".- Throws:
StandardException
- Thrown on error
-
optimizeStatement
public void optimizeStatement() throws StandardException
Generates an optimized statement from a bound StatementNode. Actually, it annotates the tree in place rather than generating a new tree. For non-optimizable statements (for example, CREATE TABLE), return the bound tree without doing anything. For optimizable statements, this method will be over-ridden in the statement's root node (DMLStatementNode in all cases we know about so far). Throws an exception if the tree is not bound, or if the binding is out of date.- Throws:
StandardException
- Thrown on error
-
activationKind
abstract int activationKind()
-
lockTableForCompilation
protected TableDescriptor lockTableForCompilation(TableDescriptor td) throws StandardException
- Throws:
StandardException
-
generate
public GeneratedClass generate(ByteArray byteCode) throws StandardException
Do code generation for this statement.- Parameters:
byteCode
- the generated byte code for this statement. if non-null, then the byte code is saved here.- Returns:
- A GeneratedClass for this statement
- Throws:
StandardException
- Thrown on error
-
updateIndexStatisticsFor
public TableDescriptor[] updateIndexStatisticsFor() throws StandardException
Returns a list of base tables for which the index statistics of the associated indexes should be updated.This default implementation always returns an empty list.
- Returns:
- A list of table descriptors (potentially empty).
- Throws:
StandardException
- if accessing the index descriptors of a base table fails
-
-