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();
     }