| Modifier and Type | Field and Description |
|---|---|
| pack-priv ResultSetNode | resultSet
The result set is the rows that result from running the statement. |
| Access | Constructor and Description |
|---|---|
| pack-priv |
| Modifier and Type | Method and Description |
|---|---|
| pack-priv void | acceptChildren(Visitor
the visitor v)Overrides org. Accept the visitor for all visitable children of this node. |
| pack-priv int | Returns: either (NEED_ROW_ACTIVATION | NEED_PARAM_ACTIVATION) or (NEED_ROW_ACTIVATION) depending on paramsImplements abstract org. Returns the type of activation this class generates. |
| pack-priv QueryTreeNode | Returns: The bound query treeThe DataDictionary to use to look up
columns, tables, etc. dataDictionary)Bind this DMLStatementNode. |
| protected void | |
| protected void | |
| pack-priv QueryTreeNode | Returns: The bound query treeThe DataDictionary to use to look up
columns, tables, etc. dataDictionary)Bind only the underlying ResultSets with tables. |
| protected void | bindTables(DataDictionary
The data dictionary to use to look up the tables dataDictionary)Bind the tables in this DML statement. |
| pack-priv void | generateParameterValueSet(ActivationClassBuilder
The ActivationClassBuilder for the class we're building acb)Generate the code to create the ParameterValueSet, if necessary, when constructing the activation. |
| pack-priv int | |
| pack-priv ResultSetNode | Returns: ResultSetNode The ResultSetNode from this DMLStatementNode.Get the ResultSetNode from this DML Statement. |
| public boolean | Returns: true if the statement is atomicOverrides org. 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. |
| public ResultDescription | Returns: A ResultDescription for this DML statementOverrides org. Make a ResultDescription for use in a PreparedStatement. |
| public void | optimizeStatement()
Overrides org. Optimize a DML statement (which is the only type of statement that should need optimizing, I think). |
| pack-priv void | printSubNodes(int
The depth of this node in the tree depth)Overrides org. Prints the sub-nodes of this object. |
| resultSet | back to summary |
|---|---|
| pack-priv 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?). | |
| DMLStatementNode | back to summary |
|---|---|
| pack-priv DMLStatementNode(ResultSetNode resultSet, ContextManager cm) | |
| acceptChildren | back to summary |
|---|---|
| pack-priv void acceptChildren(Visitor v) throws StandardException Overrides org. Accept the visitor for all visitable children of this node.
| |
| activationKind | back to summary |
|---|---|
| pack-priv int activationKind() Implements abstract org. Returns the type of activation this class generates.
| |
| bind | back to summary |
|---|---|
| pack-priv QueryTreeNode bind(DataDictionary dataDictionary) throws 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.
| |
| bindExpressions | back to summary |
|---|---|
| protected void bindExpressions() throws StandardException Bind the expressions in this DML statement.
| |
| bindExpressionsWithTables | back to summary |
|---|---|
| protected void bindExpressionsWithTables() throws StandardException Bind the expressions in the underlying ResultSets with tables.
| |
| bindResultSetsWithTables | back to summary |
|---|---|
| pack-priv QueryTreeNode bindResultSetsWithTables(DataDictionary dataDictionary) throws 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 | back to summary |
|---|---|
| protected void bindTables(DataDictionary dataDictionary) throws StandardException Bind the tables in this DML statement.
| |
| generateParameterValueSet | back to summary |
|---|---|
| pack-priv void generateParameterValueSet(ActivationClassBuilder acb) throws 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.
| |
| getPrivType | back to summary |
|---|---|
| pack-priv int getPrivType() Return default privilege needed for this node. Other DML nodes can override this method to set their own default privilege.
| |
| getResultSetNode | back to summary |
|---|---|
| pack-priv ResultSetNode getResultSetNode() Get the ResultSetNode from this DML Statement. (Useful for view resolution after parsing the view definition.)
| |
| isAtomic | back to summary |
|---|---|
| public boolean isAtomic() throws StandardException Overrides org. 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.
| |
| makeResultDescription | back to summary |
|---|---|
| public ResultDescription makeResultDescription() Overrides org. 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.
| |
| optimizeStatement | back to summary |
|---|---|
| public void optimizeStatement() throws StandardException Overrides org. 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.
| |
| printSubNodes | back to summary |
|---|---|
| pack-priv void printSubNodes(int depth) Overrides org. Prints the sub-nodes of this object. See QueryTreeNode.java for how tree printing is supposed to work.
| |