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 ka...@apache.org on 2012/12/06 17:33:43 UTC
svn commit: r1417991 - in /db/derby/code/trunk/java:
engine/org/apache/derby/impl/sql/compile/NormalizeResultSetNode.java
testing/org/apache/derbyTesting/functionTests/tests/lang/OrderByAndOffsetFetchInSubqueries.java
Author: kahatlen
Date: Thu Dec 6 16:33:42 2012
New Revision: 1417991
URL: http://svn.apache.org/viewvc?rev=1417991&view=rev
Log:
DERBY-6006: NullPointerException in INSERT INTO ... SELECT FROM ... ORDER BY
A NormalizeResultSet should not expose generated ORDER BY columns to
its parent.
Modified:
db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/NormalizeResultSetNode.java
db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/OrderByAndOffsetFetchInSubqueries.java
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=1417991&r1=1417990&r2=1417991&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 Thu Dec 6 16:33:42 2012
@@ -605,6 +605,8 @@ public class NormalizeResultSetNode exte
rsn.setResultColumns(rcl.copyListAndObjects());
// Remove any columns that were generated.
prRCList.removeGeneratedGroupingColumns();
+ // And also columns that were added for ORDER BY (DERBY-6006).
+ prRCList.removeOrderByColumns();
/* Replace ResultColumn.expression with new VirtualColumnNodes
* in the NormalizeResultSetNode's ResultColumnList. (VirtualColumnNodes include
Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/OrderByAndOffsetFetchInSubqueries.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/OrderByAndOffsetFetchInSubqueries.java?rev=1417991&r1=1417990&r2=1417991&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/OrderByAndOffsetFetchInSubqueries.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/OrderByAndOffsetFetchInSubqueries.java Thu Dec 6 16:33:42 2012
@@ -309,6 +309,21 @@ public class OrderByAndOffsetFetchInSubq
s.executeQuery("select * from t4496"),
new String[][]{{"Y"}});
+ // DERBY-6006. INSERT INTO ... SELECT FROM could fail with a
+ // NullPointerException in insane builds, or XSCH5 or assert in sane
+ // builds, if the SELECT had an ORDER BY column that was not referenced
+ // in the select list, and if normalization was required because the
+ // types in the select list didn't exactly match the types in the
+ // target table.
+ //
+ // In the test case below, the select list has an INT (the literal 1),
+ // whereas the target type is DOUBLE. Also, the ORDER BY column (X) is
+ // not in the select list.
+ s.execute("create table t6006(x double)");
+ assertUpdateCount(s, 6, "insert into t6006 values 1,2,3,4,5,6");
+ assertUpdateCount(s, 6,
+ "insert into t6006 select 1 from t6006 order by x");
+
rollback();
}