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 km...@apache.org on 2008/04/02 01:31:07 UTC
svn commit: r643644 - in
/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile:
InsertNode.java NormalizeResultSetNode.java ResultColumnList.java
UnionNode.java UpdateNode.java
Author: kmarsden
Date: Tue Apr 1 16:31:04 2008
New Revision: 643644
URL: http://svn.apache.org/viewvc?rev=643644&view=rev
Log:
DERBY-3494 Move the setup of NormalizeResultSetNode into the NormalizeResultSetNode
Removes ResultSetColumList.copyLengthsAndTypesToSource() and incorporate into the NormalizeResultSetNode init method.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/InsertNode.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/NormalizeResultSetNode.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultColumnList.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UnionNode.java
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UpdateNode.java
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/InsertNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/InsertNode.java?rev=643644&r1=643643&r2=643644&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/InsertNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/InsertNode.java Tue Apr 1 16:31:04 2008
@@ -425,10 +425,9 @@
resultSet =
(NormalizeResultSetNode) getNodeFactory().getNode(
- C_NodeTypes.NORMALIZE_RESULT_SET_NODE,
- resultSet, null, Boolean.FALSE,
+ C_NodeTypes.NORMALIZE_RESULT_SET_NODE, resultSet,
+ resultColumnList, null, Boolean.FALSE,
getContextManager());
- resultColumnList.copyTypesAndLengthsToSource(resultSet.getResultColumns());
}
if (targetTableDescriptor != null)
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/NormalizeResultSetNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/NormalizeResultSetNode.java?rev=643644&r1=643643&r2=643644&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/NormalizeResultSetNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/NormalizeResultSetNode.java Tue Apr 1 16:31:04 2008
@@ -87,6 +87,9 @@
* (insert into t1 (smallintcol) values 1 union all values 2;
*
* @param childResult The child ResultSetNode
+ * @param targetResultColumnList The target resultColumnList from
+ * the InsertNode or UpdateNode. These will
+ * be the types used for the NormalizeResultSetNode.
* @param tableProperties Properties list associated with the table
* @param forUpdate tells us if the normalize operation is being
* performed on behalf of an update statement.
@@ -95,6 +98,7 @@
public void init(
Object childResult,
+ Object targetResultColumnList,
Object tableProperties,
Object forUpdate) throws StandardException
{
@@ -103,7 +107,8 @@
ResultSetNode rsn = (ResultSetNode) childResult;
ResultColumnList rcl = rsn.getResultColumns();
-
+ ResultColumnList targetRCL = (ResultColumnList) targetResultColumnList;
+
/* We get a shallow copy of the ResultColumnList and its
* ResultColumns. (Copy maintains ResultColumn.expression for now.)
*
@@ -132,6 +137,14 @@
}
+ if (targetResultColumnList != null) {
+ int size = Math.min(targetRCL.size(), resultColumns.size());
+ for (int index = 0; index < size; index++) {
+ ResultColumn sourceRC = (ResultColumn) resultColumns.elementAt(index);
+ ResultColumn resultColumn = (ResultColumn) targetRCL.elementAt(index);
+ sourceRC.setType(resultColumn.getTypeServices());
+ }
+ }
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultColumnList.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultColumnList.java?rev=643644&r1=643643&r2=643644&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultColumnList.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultColumnList.java Tue Apr 1 16:31:04 2008
@@ -1643,36 +1643,8 @@
}
}
- /**
- * Copy the types and lengths for this RCL (the target)
- * to another RCL (the source).
- * This is useful when adding a NormalizeResultSetNode.
- * It is called on the NormalizeResultSetNode to copy
- * the types from the insert or update ResultColumnList (sourceRCL).
- * The type of the underlying expression should not be changed
- * (DERBY-3310)
- * because that same expression is pointed to by the child result set's
- * result column list. Only NormalizeResultSetNode should have a
- * type that is different than its expresssion. See Army's write up
- * attached to DERBY-3310 for a detailed analysis of the role of
- * copyTypesAndLengthsToSource.
- *
- * @param sourceRCL The source RCL
- */
- public void copyTypesAndLengthsToSource(ResultColumnList sourceRCL) throws StandardException
- {
- /* Source and target can have different lengths. */
- int size = Math.min(size(), sourceRCL.size());
- for (int index = 0; index < size; index++)
- {
- ResultColumn sourceRC = (ResultColumn) sourceRCL.elementAt(index);
- ResultColumn resultColumn = (ResultColumn) elementAt(index);
- sourceRC.setType(resultColumn.getTypeServices());
- }
- }
-
-
- /*
+
+ /**
** Check whether the column lengths and types of the result columns
** match the expressions under those columns. This is useful for
** INSERT and UPDATE statements. For SELECT statements this method
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UnionNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UnionNode.java?rev=643644&r1=643643&r2=643644&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UnionNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UnionNode.java Tue Apr 1 16:31:04 2008
@@ -413,7 +413,7 @@
treeTop =
(NormalizeResultSetNode) getNodeFactory().getNode(
C_NodeTypes.NORMALIZE_RESULT_SET_NODE,
- treeTop, null, Boolean.FALSE,
+ treeTop, null, null, Boolean.FALSE,
getContextManager());
}
Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UpdateNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UpdateNode.java?rev=643644&r1=643643&r2=643644&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UpdateNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/UpdateNode.java Tue Apr 1 16:31:04 2008
@@ -549,10 +549,10 @@
if (! resultColumnList.columnTypesAndLengthsMatch())
{
resultSet = (NormalizeResultSetNode) getNodeFactory().getNode(
- C_NodeTypes.NORMALIZE_RESULT_SET_NODE,
- resultSet, null, Boolean.TRUE,
+ C_NodeTypes.NORMALIZE_RESULT_SET_NODE,
+ resultSet, resultColumnList, null, Boolean.TRUE,
getContextManager());
- resultColumnList.copyTypesAndLengthsToSource(resultSet.getResultColumns());
+
if (hasCheckConstraints(dataDictionary, targetTableDescriptor))
{