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 2009/10/19 11:30:00 UTC

svn commit: r826616 - in /db/derby/code/trunk/java: engine/org/apache/derby/impl/sql/compile/ engine/org/apache/derby/loc/ shared/org/apache/derby/shared/common/reference/ testing/org/apache/derbyTesting/functionTests/tests/lang/

Author: kahatlen
Date: Mon Oct 19 09:30:00 2009
New Revision: 826616

URL: http://svn.apache.org/viewvc?rev=826616&view=rev
Log:
DERBY-4407: StringIndexOutOfBoundsException in ij when result has no columns

Raise a compile-time error if a query returns no columns.

Modified:
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/SelectNode.java
    db/derby/code/trunk/java/engine/org/apache/derby/loc/messages.xml
    db/derby/code/trunk/java/shared/org/apache/derby/shared/common/reference/SQLState.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/JoinTest.java

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/SelectNode.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/SelectNode.java?rev=826616&r1=826615&r2=826616&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/SelectNode.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/SelectNode.java Mon Oct 19 09:30:00 2009
@@ -643,6 +643,13 @@
 		{
 			throw StandardException.newException(SQLState.LANG_TOO_MANY_ELEMENTS);
 		}
+
+        // DERBY-4407: A derived table must have at least one column.
+        if (resultColumns.size() == 0)
+        {
+            throw StandardException.newException(
+                    SQLState.LANG_EMPTY_COLUMN_LIST);
+        }
 	}
 
 	/**

Modified: db/derby/code/trunk/java/engine/org/apache/derby/loc/messages.xml
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/loc/messages.xml?rev=826616&r1=826615&r2=826616&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/loc/messages.xml (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/loc/messages.xml Mon Oct 19 09:30:00 2009
@@ -1895,6 +1895,11 @@
             </msg>
 
             <msg>
+                <name>42X81</name>
+                <text>A query expression must return at least one column.</text>
+            </msg>
+
+            <msg>
                 <name>42X82</name>
                 <text>The USING clause returned more than one row. Only single-row ResultSets are permissible.</text>
             </msg>

Modified: db/derby/code/trunk/java/shared/org/apache/derby/shared/common/reference/SQLState.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/shared/org/apache/derby/shared/common/reference/SQLState.java?rev=826616&r1=826615&r2=826616&view=diff
==============================================================================
--- db/derby/code/trunk/java/shared/org/apache/derby/shared/common/reference/SQLState.java (original)
+++ db/derby/code/trunk/java/shared/org/apache/derby/shared/common/reference/SQLState.java Mon Oct 19 09:30:00 2009
@@ -882,6 +882,7 @@
 	String LANG_DISTINCT_ORDER_BY                                      = "42879";
 	String LANG_DISTINCT_ORDER_BY_EXPRESSION                           = "4287A";
 	String LANG_EMPTY_VALUES_CLAUSE                                    = "42X80";
+	String LANG_EMPTY_COLUMN_LIST                                      = "42X81";
 	String LANG_USING_CARDINALITY_VIOLATION                            = "42X82";
 	String LANG_ADDING_COLUMN_WITH_NULL_AND_NOT_NULL_CONSTRAINT        = "42X83";
 	String LANG_CANT_DROP_BACKING_INDEX                                = "42X84";

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/JoinTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/JoinTest.java?rev=826616&r1=826615&r2=826616&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/JoinTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/JoinTest.java Mon Oct 19 09:30:00 2009
@@ -38,6 +38,7 @@
     private static final String AMBIGUOUS_COLNAME = "42X03";
     private static final String COLUMN_NOT_IN_SCOPE = "42X04";
     private static final String NON_COMPARABLE = "42818";
+    private static final String NO_COLUMNS = "42X81";
 
     public JoinTest(String name) {
         super(name);
@@ -641,5 +642,15 @@
         // of the columns to use.
         assertStatementError(AMBIGUOUS_COLNAME, s,
                 "select * from (t1 cross join t2) join t2 tt2 using(b)");
+
+        // DERBY-4407: If all the columns of table X are in the USING clause,
+        // X.* will expand to no columns. A result should always have at least
+        // one column.
+        assertStatementError(NO_COLUMNS, s,
+                "select x.* from t1 x inner join t1 y using (a,b,c)");
+        assertStatementError(NO_COLUMNS, s,
+                "select x.* from t1 x left join t1 y using (a,b,c)");
+        assertStatementError(NO_COLUMNS, s,
+                "select x.* from t1 x right join t1 y using (a,b,c)");
     }
 }