You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-commits@db.apache.org by dj...@apache.org on 2006/11/28 05:12:15 UTC
svn commit: r479886 - in
/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql: ./ compile/
depend/
Author: djd
Date: Mon Nov 27 20:12:14 2006
New Revision: 479886
URL: http://svn.apache.org/viewvc?view=rev&rev=479886
Log:
DERBY-2096 (partial) Move needsSavepoint() to StatementNode, remove QueryTreeNode.bind and optimize.
Have GenericStatement use StatementNode for the head of the statement's query tree.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/GenericStatement.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CreateTriggerNode.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/DMLModStatementNode.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/DefaultNode.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/DeleteNode.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNode.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultSetNode.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/StatementNode.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/depend/BasicDependencyManager.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/GenericStatement.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/GenericStatement.java?view=diff&rev=479886&r1=479885&r2=479886
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/GenericStatement.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/GenericStatement.java Mon Nov 27 20:12:14 2006
@@ -44,10 +44,9 @@
import org.apache.derby.iapi.sql.depend.Dependent;
import org.apache.derby.iapi.sql.compile.CompilerContext;
-import org.apache.derby.iapi.sql.compile.NodeFactory;
import org.apache.derby.iapi.sql.compile.Parser;
-import org.apache.derby.impl.sql.compile.QueryTreeNode;
+import org.apache.derby.impl.sql.compile.StatementNode;
import org.apache.derby.impl.sql.conn.GenericLanguageConnectionContext;
import org.apache.derby.iapi.sql.dictionary.SchemaDescriptor;
@@ -308,7 +307,7 @@
//Only top level statements go through here, nested statement
//will invoke this method from other places
- QueryTreeNode qt = p.parseStatement(statementText, paramDefaults);
+ StatementNode qt = p.parseStatement(statementText, paramDefaults);
parseTime = getCurrentTimeMillis(lcc);
@@ -342,7 +341,7 @@
// transaction.
lcc.beginNestedTransaction(true);
- qt = qt.bind();
+ qt.bindStatement();
bindTime = getCurrentTimeMillis(lcc);
if (SanityManager.DEBUG)
@@ -393,7 +392,7 @@
((GenericLanguageConnectionContext)lcc).removeStatement(this);
}
- qt = qt.optimize();
+ qt.optimizeStatement();
optimizeTime = getCurrentTimeMillis(lcc);
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CreateTriggerNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CreateTriggerNode.java?view=diff&rev=479886&r1=479885&r2=479886
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CreateTriggerNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/CreateTriggerNode.java Mon Nov 27 20:12:14 2006
@@ -78,7 +78,7 @@
private boolean isRow;
private boolean isEnabled;
private Vector refClause;
- private QueryTreeNode whenClause;
+ private ValueNode whenClause;
private String whenText;
private int whenOffset;
private StatementNode actionNode;
@@ -157,7 +157,7 @@
this.isRow = ((Boolean) isRow).booleanValue();
this.isEnabled = ((Boolean) isEnabled).booleanValue();
this.refClause = (Vector) refClause;
- this.whenClause = (QueryTreeNode) whenClause;
+ this.whenClause = (ValueNode) whenClause;
this.whenText = (whenText == null) ? null : ((String) whenText).trim();
this.whenOffset = ((Integer) whenOffset).intValue();
this.actionNode = (StatementNode) actionNode;
@@ -279,12 +279,14 @@
if(isBefore)
compilerContext.setReliability(CompilerContext.MODIFIES_SQL_DATA_PROCEDURE_ILLEGAL);
- actionNode.bind();
+ actionNode.bindStatement();
+ /* when clause is always null
if (whenClause != null)
{
whenClause.bind();
}
+ */
}
finally
{
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/DMLModStatementNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/DMLModStatementNode.java?view=diff&rev=479886&r1=479885&r2=479886
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/DMLModStatementNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/DMLModStatementNode.java Mon Nov 27 20:12:14 2006
@@ -1220,7 +1220,7 @@
/* Finally, we can call the parser */
// Since this is always nested inside another SQL statement, so topLevel flag
// should be false
- QueryTreeNode qt = p.parseStatement(select);
+ StatementNode qt = p.parseStatement(select);
if (SanityManager.DEBUG)
{
if (! (qt instanceof CursorNode))
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/DefaultNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/DefaultNode.java?view=diff&rev=479886&r1=479885&r2=479886
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/DefaultNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/DefaultNode.java Mon Nov 27 20:12:14 2006
@@ -236,7 +236,7 @@
/* Finally, we can call the parser */
// Since this is always nested inside another SQL statement, so topLevel flag
// should be false
- QueryTreeNode qt = p.parseStatement(values);
+ StatementNode qt = p.parseStatement(values);
if (SanityManager.DEBUG)
{
if (! (qt instanceof CursorNode))
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/DeleteNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/DeleteNode.java?view=diff&rev=479886&r1=479885&r2=479886
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/DeleteNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/DeleteNode.java Mon Nov 27 20:12:14 2006
@@ -106,7 +106,7 @@
private ConstantAction[] dependentConstantActions;
private boolean cascadeDelete;
- private QueryTreeNode[] dependentNodes;
+ private StatementNode[] dependentNodes;
/**
* Initializer for a DeleteNode.
@@ -369,14 +369,14 @@
{
cascadeDelete = true;
int noDependents = fkTableNames.length;
- dependentNodes = new QueryTreeNode[noDependents];
+ dependentNodes = new StatementNode[noDependents];
graphHashTable.put(currentTargetTableName, new Integer(noDependents));
for(int i =0 ; i < noDependents ; i ++)
{
dependentNodes[i] = getDependentTableNode(fkTableNames[i],
fkRefActions[i],
fkColDescriptors[i]);
- dependentNodes[i].bind();
+ dependentNodes[i].bindStatement();
}
}
}
@@ -726,10 +726,10 @@
* DML (UPDATE or DELETE) on the dependent tables.
* Following function returns the DML Node for the dependent table.
*/
- private QueryTreeNode getDependentTableNode(String tableName, int refAction,
+ private StatementNode getDependentTableNode(String tableName, int refAction,
ColumnDescriptorList cdl) throws StandardException
{
- QueryTreeNode node=null;
+ StatementNode node=null;
int index = tableName.indexOf('.');
String schemaName = tableName.substring(0 , index);
@@ -752,22 +752,18 @@
}
- private QueryTreeNode getEmptyDeleteNode(String schemaName, String targetTableName)
+ private StatementNode getEmptyDeleteNode(String schemaName, String targetTableName)
throws StandardException
{
ValueNode whereClause = null;
- TableName tableName = null;
- FromTable fromTable = null;
- QueryTreeNode retval;
- SelectNode resultSet;
- tableName = new TableName();
+ TableName tableName = new TableName();
tableName.init(schemaName , targetTableName);
NodeFactory nodeFactory = getNodeFactory();
FromList fromList = (FromList) nodeFactory.getNode(C_NodeTypes.FROM_LIST, getContextManager());
- fromTable = (FromTable) nodeFactory.getNode(
+ FromTable fromTable = (FromTable) nodeFactory.getNode(
C_NodeTypes.FROM_BASE_TABLE,
tableName,
null,
@@ -782,7 +778,7 @@
((FromBaseTable) fromTable).setTableProperties(targetProperties);
fromList.addFromTable(fromTable);
- resultSet = (SelectNode) nodeFactory.getNode(
+ SelectNode resultSet = (SelectNode) nodeFactory.getNode(
C_NodeTypes.SELECT_NODE,
null,
null, /* AGGREGATE list */
@@ -791,35 +787,30 @@
null, /* GROUP BY list */
getContextManager());
- retval =(QueryTreeNode) nodeFactory.getNode(
+ return (StatementNode) nodeFactory.getNode(
C_NodeTypes.DELETE_NODE,
tableName,
resultSet,
getContextManager());
- return retval;
}
- private QueryTreeNode getEmptyUpdateNode(String schemaName,
+ private StatementNode getEmptyUpdateNode(String schemaName,
String targetTableName,
ColumnDescriptorList cdl)
throws StandardException
{
ValueNode whereClause = null;
- TableName tableName = null;
- FromTable fromTable = null;
- QueryTreeNode retval;
- SelectNode resultSet;
- tableName = new TableName();
+ TableName tableName = new TableName();
tableName.init(schemaName , targetTableName);
NodeFactory nodeFactory = getNodeFactory();
FromList fromList = (FromList) nodeFactory.getNode(C_NodeTypes.FROM_LIST, getContextManager());
- fromTable = (FromTable) nodeFactory.getNode(
+ FromTable fromTable = (FromTable) nodeFactory.getNode(
C_NodeTypes.FROM_BASE_TABLE,
tableName,
null,
@@ -836,7 +827,7 @@
fromList.addFromTable(fromTable);
- resultSet = (SelectNode) nodeFactory.getNode(
+ SelectNode resultSet = (SelectNode) nodeFactory.getNode(
C_NodeTypes.SELECT_NODE,
getSetClause(tableName, cdl),
null, /* AGGREGATE list */
@@ -845,13 +836,12 @@
null, /* GROUP BY list */
getContextManager());
- retval =(QueryTreeNode) nodeFactory.getNode(
+ return (StatementNode) nodeFactory.getNode(
C_NodeTypes.UPDATE_NODE,
tableName,
resultSet,
getContextManager());
- return retval;
}
@@ -896,7 +886,7 @@
{
for(int index=0 ; index < dependentNodes.length ; index++)
{
- dependentNodes[index] = dependentNodes[index].optimize();
+ dependentNodes[index].optimizeStatement();
}
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNode.java?view=diff&rev=479886&r1=479885&r2=479886
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/QueryTreeNode.java Mon Nov 27 20:12:14 2006
@@ -468,26 +468,6 @@
}
/**
- * Perform the binding operation on a query tree. 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 bind() method does nothing. Each node type that can appear
- * at the top of a tree can override this method with its own bind()
- * method that does "something".
- *
- * @return The bound query tree
- *
- * @exception StandardException Thrown on error
- */
-
- public QueryTreeNode bind() throws StandardException
- {
- return this;
- }
-
- /**
* Return true if the node references SESSION schema tables (temporary or permanent)
*
* @return true if references SESSION schema tables, else false
@@ -575,29 +555,6 @@
}
/**
- * Generates an optimized QueryTree from a bound QueryTree. Actually,
- * it annotates the tree in place rather than generating a new tree,
- * but this interface allows the root node of the optmized QueryTree
- * to be different from the root node of the bound QueryTree.
- *
- * 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.
- *
- * @return An optimized QueryTree
- *
- * @exception StandardException Thrown on error
- */
- public QueryTreeNode optimize() throws StandardException
- {
- return this;
- }
-
- /**
* this implementation of generate() is
* a place-holder until all of the nodes that need to,
* implement it. Only the root, statement nodes
@@ -680,20 +637,7 @@
return null;
}
- /**
- * 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/rollback
- * <p>
- * ONLY CALLABLE AFTER GENERATION
- *
- * @return boolean Whether or not this Statement requires a set/clear savepoint
- */
- public boolean needsSavepoint()
- {
- return true;
- }
+
/**
* Returns the name of statement in EXECUTE STATEMENT command.
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultSetNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultSetNode.java?view=diff&rev=479886&r1=479885&r2=479886
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultSetNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultSetNode.java Mon Nov 27 20:12:14 2006
@@ -1243,7 +1243,7 @@
/* Finally, we can call the parser */
// Since this is always nested inside another SQL statement, so topLevel flag
// should be false
- QueryTreeNode qt = p.parseStatement(values);
+ StatementNode qt = p.parseStatement(values);
if (SanityManager.DEBUG)
{
if (! (qt instanceof CursorNode))
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/StatementNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/StatementNode.java?view=diff&rev=479886&r1=479885&r2=479886
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/StatementNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/StatementNode.java Mon Nov 27 20:12:14 2006
@@ -78,6 +78,24 @@
{
return true;
}
+
+ /**
+ * 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/rollback
+ * <p>
+ * ONLY CALLABLE AFTER GENERATION
+ * <P>
+ * This implementation returns true, sub-classes can override the
+ * method to not require a savepoint.
+ *
+ * @return boolean Whether or not this Statement requires a set/clear savepoint
+ */
+ public boolean needsSavepoint()
+ {
+ return true;
+ }
/**
* Convert this object to a String. See comments in QueryTreeNode.java
@@ -119,15 +137,6 @@
{
}
- // TEMP map QueryTreeNode.bind() onto bindStatement()
- // for StatementNode. Part of incremental development
- // in switching the api for a compiled statement to
- // be StatementNode.
- public final QueryTreeNode bind() throws StandardException {
- bindStatement();
- return this;
- }
-
/**
* Generates an optimized statement from a bound StatementNode. Actually,
* it annotates the tree in place rather than generating a new tree.
@@ -147,13 +156,7 @@
{
}
- // TEMP -RE_WORK for switching to StatementNode.
- public final QueryTreeNode optimize() throws StandardException
- {
- optimizeStatement();
- return this;
- }
-
+
/**
* create the outer shell class builder for the class we will
* be generating, generate the expression to stuff in it,
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/depend/BasicDependencyManager.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/depend/BasicDependencyManager.java?view=diff&rev=479886&r1=479885&r2=479886
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/depend/BasicDependencyManager.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/depend/BasicDependencyManager.java Mon Nov 27 20:12:14 2006
@@ -305,7 +305,6 @@
compSchema = dd.getSchemaDescriptor(vd.getCompSchemaId(), null);
CompilerContext newCC = lcc.pushCompilerContext(compSchema);
Parser pa = newCC.getParser();
- LanguageConnectionFactory lcf = lcc.getLanguageConnectionFactory();
// Since this is always nested inside another SQL
// statement, so topLevel flag should be false
@@ -314,7 +313,7 @@
// need a current dependent for bind
newCC.setCurrentDependent(dep);
- cvn = (CreateViewNode) cvn.bind();
+ cvn.bindStatement();
ProviderInfo[] providerInfos = cvn.getProviderInfo();
lcc.popCompilerContext(newCC);