|
|||||||||
| Home >> All >> org >> apache >> derby >> impl >> sql >> [ compile overview ] | PREV CLASS NEXT CLASS | ||||||||
SUMMARY: JAVADOC | SOURCE | DOWNLOAD | NESTED | FIELD | CONSTR | METHOD |
DETAIL: FIELD | CONSTR | METHOD | ||||||||
org.apache.derby.impl.sql.compile
Class DMLStatementNode

java.lang.Objectorg.apache.derby.impl.sql.compile.QueryTreeNode
org.apache.derby.impl.sql.compile.StatementNode
org.apache.derby.impl.sql.compile.DMLStatementNode
- All Implemented Interfaces:
- org.apache.derby.iapi.sql.compile.Visitable
- Direct Known Subclasses:
- CallStatementNode, DMLModStatementNode, ReadCursorNode
- public abstract class DMLStatementNode
- extends StatementNode
A DMLStatementNode represents any type of DML statement: a cursor declaration, an INSERT statement, and UPDATE statement, or a DELETE statement. All DML statements have result sets, but they do different things with them. A SELECT statement sends its result set to the client, an INSERT statement inserts its result set into a table, a DELETE statement deletes from a table the rows corresponding to the rows in its result set, and an UPDATE statement updates the rows in a base table corresponding to the rows in its result set.
| Field Summary | |
ResultSetNode |
resultSet
The result set is the rows that result from running the statement. |
| Fields inherited from class org.apache.derby.impl.sql.compile.StatementNode |
NEED_CURSOR_ACTIVATION, NEED_DDL_ACTIVATION, NEED_NOTHING_ACTIVATION, NEED_PARAM_ACTIVATION, NEED_ROW_ACTIVATION |
| Fields inherited from class org.apache.derby.impl.sql.compile.QueryTreeNode |
AUTOINCREMENT_INC_INDEX, AUTOINCREMENT_IS_AUTOINCREMENT_INDEX, AUTOINCREMENT_START_INDEX, beginOffset, endOffset |
| Constructor Summary | |
DMLStatementNode()
|
|
| Method Summary | |
org.apache.derby.iapi.sql.compile.Visitable |
accept(org.apache.derby.iapi.sql.compile.Visitor v)
Accept a visitor, and call v.visit() on child nodes as necessary. |
(package private) int |
activationKind()
Returns the type of activation this class generates. |
QueryTreeNode |
bind(org.apache.derby.iapi.sql.dictionary.DataDictionary dataDictionary)
Bind this DMLStatementNode. |
protected void |
bindExpressions()
Bind the expressions in this DML statement. |
protected void |
bindExpressionsWithTables()
Bind the expressions in the underlying ResultSets with tables. |
QueryTreeNode |
bindResultSetsWithTables(org.apache.derby.iapi.sql.dictionary.DataDictionary dataDictionary)
Bind only the underlying ResultSets with tables. |
protected void |
bindTables(org.apache.derby.iapi.sql.dictionary.DataDictionary dataDictionary)
Bind the tables in this DML statement. |
(package private) void |
generateParameterHolders(ActivationClassBuilder acb)
|
(package private) void |
generateParameterValueSet(ActivationClassBuilder acb)
Generate the code to create the ParameterValueSet, if necessary, when constructing the activation. |
ResultSetNode |
getResultSetNode()
Get the ResultSetNode from this DML Statement. |
void |
init(java.lang.Object resultSet)
Initializer for a DMLStatementNode |
boolean |
isAtomic()
A read statement is atomic (DMLMod overrides us) if there are no work units, and no SELECT nodes, or if its SELECT nodes are all arguments to a function. |
org.apache.derby.iapi.sql.ResultDescription |
makeResultDescription()
Make a ResultDescription for use in a PreparedStatement. |
QueryTreeNode |
optimize()
Optimize a DML statement (which is the only type of statement that should need optimizing, I think). |
void |
printSubNodes(int depth)
Prints the sub-nodes of this object. |
| Methods inherited from class org.apache.derby.impl.sql.compile.StatementNode |
generate, lockTableForCompilation, statementToString, toString |
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Field Detail |
resultSet
public ResultSetNode resultSet
- The result set is the rows that result from running the
statement. What this means for SELECT statements is fairly obvious.
For a DELETE, there is one result column representing the
key of the row to be deleted (most likely, the location of the
row in the underlying heap). For an UPDATE, the row consists of
the key of the row to be updated plus the updated columns. For
an INSERT, the row consists of the new column values to be
inserted, with no key (the system generates a key).
The parser doesn't know anything about keys, so the columns
representing the keys will be added after parsing (perhaps in
the binding phase?).
RESOLVE: This is public so RepDeleteNode can see it. Perhaps it should
hava a public accessor function.
| Constructor Detail |
DMLStatementNode
public DMLStatementNode()
| Method Detail |
init
public void init(java.lang.Object resultSet)
- Initializer for a DMLStatementNode
- Overrides:
initin classQueryTreeNode
printSubNodes
public void printSubNodes(int depth)
- Prints the sub-nodes of this object. See QueryTreeNode.java for
how tree printing is supposed to work.
- Overrides:
printSubNodesin classQueryTreeNode
getResultSetNode
public ResultSetNode getResultSetNode()
- Get the ResultSetNode from this DML Statement.
(Useful for view resolution after parsing the view definition.)
bind
public QueryTreeNode bind(org.apache.derby.iapi.sql.dictionary.DataDictionary dataDictionary) throws org.apache.derby.iapi.error.StandardException
- Bind this DMLStatementNode. This means looking up tables and columns and
getting their types, and figuring out the result types of all
expressions, as well as doing view resolution, permissions checking,
etc.
bindResultSetsWithTables
public QueryTreeNode bindResultSetsWithTables(org.apache.derby.iapi.sql.dictionary.DataDictionary dataDictionary) throws org.apache.derby.iapi.error.StandardException
- Bind only the underlying ResultSets with tables. This is necessary for
INSERT, where the binding order depends on the underlying ResultSets.
This means looking up tables and columns and
getting their types, and figuring out the result types of all
expressions, as well as doing view resolution, permissions checking,
etc.
bindTables
protected void bindTables(org.apache.derby.iapi.sql.dictionary.DataDictionary dataDictionary) throws org.apache.derby.iapi.error.StandardException
- Bind the tables in this DML statement.
bindExpressions
protected void bindExpressions()
throws org.apache.derby.iapi.error.StandardException
- Bind the expressions in this DML statement.
bindExpressionsWithTables
protected void bindExpressionsWithTables()
throws org.apache.derby.iapi.error.StandardException
- Bind the expressions in the underlying ResultSets with tables.
activationKind
int activationKind()
- Returns the type of activation this class
generates.
- Specified by:
activationKindin classStatementNode
optimize
public QueryTreeNode optimize() throws org.apache.derby.iapi.error.StandardException
- Optimize a DML statement (which is the only type of statement that
should need optimizing, I think). This method over-rides the one
in QueryTreeNode.
This method takes a bound tree, and returns an optimized tree.
It annotates the bound tree rather than creating an entirely
new tree.
Throws an exception if the tree is not bound, or if the binding
is out of date.
- Overrides:
optimizein classQueryTreeNode
makeResultDescription
public org.apache.derby.iapi.sql.ResultDescription makeResultDescription()
- Make a ResultDescription for use in a PreparedStatement.
ResultDescriptions are visible to JDBC only for cursor statements.
For other types of statements, they are only used internally to
get descriptions of the base tables being affected. For example,
for an INSERT statement, the ResultDescription describes the
rows in the table being inserted into, which is useful when
the values being inserted are of a different type or length
than the columns in the base table.
- Overrides:
makeResultDescriptionin classQueryTreeNode
generateParameterValueSet
void generateParameterValueSet(ActivationClassBuilder acb) throws org.apache.derby.iapi.error.StandardException
- Generate the code to create the ParameterValueSet, if necessary,
when constructing the activation. Also generate the code to call
a method that will throw an exception if we try to execute without
all the parameters being set.
generateParameterHolders
void generateParameterHolders(ActivationClassBuilder acb) throws org.apache.derby.iapi.error.StandardException
isAtomic
public boolean isAtomic()
throws org.apache.derby.iapi.error.StandardException
- A read statement is atomic (DMLMod overrides us) if there
are no work units, and no SELECT nodes, or if its SELECT nodes
are all arguments to a function. This is admittedly
a bit simplistic, what if someone has:
VALUES myfunc(SELECT max(c.commitFunc()) FROM T)
but we aren't going too far out of our way to catch every possible wierd case. We basically want to be permissive w/o allowing someone to partially commit a write.- Overrides:
isAtomicin classStatementNode
accept
public org.apache.derby.iapi.sql.compile.Visitable accept(org.apache.derby.iapi.sql.compile.Visitor v) throws org.apache.derby.iapi.error.StandardException
- Accept a visitor, and call v.visit()
on child nodes as necessary.
- Specified by:
acceptin interfaceorg.apache.derby.iapi.sql.compile.Visitable- Overrides:
acceptin classQueryTreeNode
|
|||||||||
| Home >> All >> org >> apache >> derby >> impl >> sql >> [ compile overview ] | PREV CLASS NEXT CLASS | ||||||||
SUMMARY: JAVADOC | SOURCE | DOWNLOAD | NESTED | FIELD | CONSTR | METHOD |
DETAIL: FIELD | CONSTR | METHOD | ||||||||
JAVADOC