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 dy...@apache.org on 2008/01/25 13:29:32 UTC

svn commit: r615203 - in /db/derby/code/trunk/java: engine/org/apache/derby/impl/sql/compile/ResultColumn.java testing/org/apache/derbyTesting/functionTests/tests/lang/ResultSetsFromPreparedStatementTest.java

Author: dyre
Date: Fri Jan 25 04:29:31 2008
New Revision: 615203

URL: http://svn.apache.org/viewvc?rev=615203&view=rev
Log:
DERBY-3221: "java.sql.SQLException: The conglomerate (-5) requested does not exist." from Derby 10.3.1.4 embedded within Eclipse 3.3 and RAD 7.0

Patch file: derby-3221.v3.diff

Modifies the logic in ResultColumn.getOrderableVariantType() so that it behaves
correctly even when a default column is explicitly mentioned in an insert statement.


Modified:
    db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultColumn.java
    db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ResultSetsFromPreparedStatementTest.java

Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultColumn.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultColumn.java?rev=615203&r1=615202&r2=615203&view=diff
==============================================================================
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultColumn.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/sql/compile/ResultColumn.java Fri Jan 25 04:29:31 2008
@@ -1435,14 +1435,16 @@
 		** return VARIANT.  Otherwise, we return
 		** CONSTANT. For result columns that are 
 		** generating autoincrement values, the result
-		** is variant-- note that there is no expression
-		** associated with an autoincrement column in 
-		** an insert statement.
+		** is variant.
 		*/
-		int expType = ((expression != null) ?
-					   expression.getOrderableVariantType() : 
-					   ((isAutoincrementGenerated()) ? 
-						Qualifier.VARIANT : Qualifier.CONSTANT));
+        int expType;
+        if (isAutoincrementGenerated()) {
+            expType = Qualifier.VARIANT;
+        } else if (expression != null) {
+            expType = expression.getOrderableVariantType();
+        } else {
+            expType = Qualifier.CONSTANT;
+        }
 
 		switch (expType)
 		{

Modified: db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ResultSetsFromPreparedStatementTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ResultSetsFromPreparedStatementTest.java?rev=615203&r1=615202&r2=615203&view=diff
==============================================================================
--- db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ResultSetsFromPreparedStatementTest.java (original)
+++ db/derby/code/trunk/java/testing/org/apache/derbyTesting/functionTests/tests/lang/ResultSetsFromPreparedStatementTest.java Fri Jan 25 04:29:31 2008
@@ -21,9 +21,6 @@
 
 package org.apache.derbyTesting.functionTests.tests.lang;
 
-import java.util.HashMap;
-import java.util.Iterator;
-
 import java.sql.Connection;
 import java.sql.Statement;
 import java.sql.PreparedStatement;
@@ -2049,5 +2046,54 @@
             assertResultSet("R?="+i+" ?="+(i+1), empty, rs);
         }
         tst.close();
+    }
+
+
+    // Regression tests for DERBY-3343 (regression from the fix for DERBY-827)
+    /**
+     * Private helper method. Runs the same test for different
+     * generated identity columns.
+     * @param dataType SMALLINT, INT, or BIGINT
+     * @param generatedType BY DEFAULT or ALWAYS
+     * @throws Exception all errors passed on to JUnit
+     */
+    private void testGeneratedIdentity(String dataType, String generateType) 
+        throws Exception {
+        Statement s = createStatement();
+        s.execute("CREATE TABLE T(GI "+dataType+" PRIMARY KEY GENERATED "+
+                  generateType+
+                  " AS IDENTITY (START WITH 5, INCREMENT BY 10), "+
+                  "L VARCHAR(8))");
+        PreparedStatement implicit = 
+            prepareStatement("INSERT INTO T(L) VALUES('implicit')"); 
+        implicit.executeUpdate();
+        implicit.executeUpdate();
+        implicit.executeUpdate();
+        
+        PreparedStatement explicit = 
+            prepareStatement("INSERT INTO T(GI, L) "+
+                             "VALUES(DEFAULT, 'explicit')"); 
+        explicit.executeUpdate();
+        explicit.executeUpdate();
+        explicit.executeUpdate();
+    } 
+    public void testIntGeneratedByDefaultAsIdentity() throws Exception {
+        testGeneratedIdentity("INT","BY DEFAULT");
+    }
+    public void testSmallintGeneratedByDefaultAsIdentity() throws Exception {
+        testGeneratedIdentity("SMALLINT","BY DEFAULT");
+    }
+    public void testBigintGeneratedByDefaultAsIdentity() throws Exception {
+        testGeneratedIdentity("BIGINT","BY DEFAULT");
+    }
+
+    public void testIntGeneratedAlwaysAsIdentity() throws Exception {
+        testGeneratedIdentity("INT","ALWAYS");
+    }
+    public void testSmallintGeneratedAlwaysAsIdentity() throws Exception {
+        testGeneratedIdentity("SMALLINT","ALWAYS");
+    }
+    public void testBigintGeneratedAlwaysAsIdentity() throws Exception {
+        testGeneratedIdentity("BIGINT","ALWAYS");
     }
 }