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 bp...@apache.org on 2010/06/15 03:02:34 UTC

svn commit: r954684 - in /db/derby/code/branches/10.6: ./ java/engine/org/apache/derby/impl/sql/execute/RenameConstantAction.java java/testing/org/apache/derbyTesting/functionTests/tests/lang/AlterTableTest.java

Author: bpendleton
Date: Tue Jun 15 01:02:33 2010
New Revision: 954684

URL: http://svn.apache.org/viewvc?rev=954684&view=rev
Log:
DERBY-4693: RENAME COLUMN loses IDENTITY attributes

Merged the fix from the trunk using  svn merge -r 954343:954344
https://svn.apache.org/repos/asf/db/derby/code/trunk/. Simple merge with
no conflicts; no additional changes were necessary.

Modified:
    db/derby/code/branches/10.6/   (props changed)
    db/derby/code/branches/10.6/java/engine/org/apache/derby/impl/sql/execute/RenameConstantAction.java
    db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/functionTests/tests/lang/AlterTableTest.java

Propchange: db/derby/code/branches/10.6/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Jun 15 01:02:33 2010
@@ -1 +1,2 @@
-/db/derby/code/trunk:938547,938796,938959,939231,940462,940469,941627,942031,944152,946794,948045,948069,951346,952138
+/db/derby/code/trunk:938547,938796,938959,939231,940462,940469,941627,942031,944152,946794,948045,948069,951346,952138,954344
+/db/derby/docs/trunk:954344

Modified: db/derby/code/branches/10.6/java/engine/org/apache/derby/impl/sql/execute/RenameConstantAction.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.6/java/engine/org/apache/derby/impl/sql/execute/RenameConstantAction.java?rev=954684&r1=954683&r2=954684&view=diff
==============================================================================
--- db/derby/code/branches/10.6/java/engine/org/apache/derby/impl/sql/execute/RenameConstantAction.java (original)
+++ db/derby/code/branches/10.6/java/engine/org/apache/derby/impl/sql/execute/RenameConstantAction.java Tue Jun 15 01:02:33 2010
@@ -50,6 +50,7 @@ import org.apache.derby.catalog.UUID;
 
 import org.apache.derby.iapi.services.io.FormatableBitSet;
 
+import org.apache.derby.impl.sql.compile.ColumnDefinitionNode;
 
 /**
  * This class  describes actions that are ALWAYS performed for a
@@ -331,6 +332,11 @@ class RenameConstantAction extends DDLSi
 		 * dependents on the column.
 		 */
 		columnDescriptor = td.getColumnDescriptor(oldObjectName);
+
+		if (columnDescriptor.isAutoincrement())
+			columnDescriptor.setAutoinc_create_or_modify_Start_Increment(
+				ColumnDefinitionNode.CREATE_AUTOINCREMENT);
+
 		columnPosition = columnDescriptor.getPosition();
 		FormatableBitSet toRename = new FormatableBitSet(td.getColumnDescriptorList().size() + 1);
 		toRename.set(columnPosition);

Modified: db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/functionTests/tests/lang/AlterTableTest.java
URL: http://svn.apache.org/viewvc/db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/functionTests/tests/lang/AlterTableTest.java?rev=954684&r1=954683&r2=954684&view=diff
==============================================================================
--- db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/functionTests/tests/lang/AlterTableTest.java (original)
+++ db/derby/code/branches/10.6/java/testing/org/apache/derbyTesting/functionTests/tests/lang/AlterTableTest.java Tue Jun 15 01:02:33 2010
@@ -1154,6 +1154,83 @@ public final class AlterTableTest extend
                 "session.logged(logged int) on commit delete rows not logged");
     }
 
+    /**
+     * See DERBY-4693 for a case where this was broken.
+     */
+    public void testRenameAutoincrementColumn()
+	throws Exception
+    {
+	// First, the repro from the Jira issue originally logged:
+	Statement st = createStatement();
+	st.executeUpdate("create table d4693" +
+		"(a int generated always as identity, b int)");
+        JDBC.assertFullResultSet(st.executeQuery(
+                "select columnname,columnnumber,columndatatype," +
+		"       autoincrementvalue," +
+		"       autoincrementstart," +
+		"       autoincrementinc" +
+		" from sys.syscolumns where " +
+		"      columnname = 'A' and " +
+		"      referenceid in (select tableid " +
+                "             from sys.systables where tablename = 'D4693')"),
+                new String[][]{ {"A","1","INTEGER NOT NULL","1","1","1"} });
+	st.executeUpdate("insert into d4693 (b) values (1)");
+	st.executeUpdate("rename column d4693.a to a2");
+        JDBC.assertFullResultSet(st.executeQuery(
+                "select columnname,columnnumber,columndatatype," +
+		"       autoincrementvalue," +
+		"       autoincrementstart," +
+		"       autoincrementinc" +
+		" from sys.syscolumns where " +
+		"      columnname = 'A2' and " +
+		"      referenceid in (select tableid " +
+                "             from sys.systables where tablename = 'D4693')"),
+                new String[][]{ {"A2","1","INTEGER NOT NULL","2","1","1"} });
+	st.executeUpdate("insert into d4693 (b) values (2)");
+        JDBC.assertFullResultSet(st.executeQuery(
+                "select a2, b from d4693"),
+                new String[][]{ {"1", "1"}, {"2", "2"} });
+        st.executeUpdate("drop table d4693");
+
+	// Then, a few other arbitrary test cases:
+	String colspecs[] = {
+	    "autoinc int generated always as identity (start with 100)",
+	    "autoinc1 int generated always as identity (increment by 100)",
+	    "autoinc2 int generated always as identity (start with 101, increment by 100)",
+	    "a11 int generated always as identity (start with  0, increment by -1)",
+	    "a21 int generated always as identity (start with  +0, increment by -1)",
+	    "a31 int generated always as identity (start with  -1, increment by -1)",
+	    "a41 int generated always as identity (start with  -11, increment by +100)"
+	};
+	String cn[] = {
+	    "AUTOINC", "AUTOINC1", "AUTOINC2", "A11", "A21", "A31", "A41" };
+	String val[] = {
+	    "100",     "1",        "101",      "0",   "0",   "-1",  "-11" };
+	String start[] = {
+	    "100",     "1",        "101",      "0",   "0",   "-1",  "-11" };
+	String inc[] = {
+	    "1",      "100",       "100",      "-1",  "-1",  "-1",  "100" };
+	for (int i = 0; i < colspecs.length; i++)
+	{
+	    st.executeUpdate("create table d4693 (" + colspecs[i] + ")");
+	    checkValStartInc(st, cn[i], val[i], start[i], inc[i]);
+	    st.executeUpdate("rename column d4693."+cn[i]+" to "+cn[i]+"2");
+	    checkValStartInc(st, cn[i]+"2", val[i], start[i], inc[i]);
+	    st.executeUpdate("drop table d4693");
+	}
+    }
+    private void checkValStartInc(Statement st, String nm, String v,
+					String s, String inc)
+	throws Exception
+    {
+        JDBC.assertFullResultSet(st.executeQuery(
+            "select autoincrementvalue,autoincrementstart,autoincrementinc" +
+		" from sys.syscolumns where columnname = '"+nm+"' and " +
+		"      referenceid in (select tableid " +
+                "             from sys.systables where tablename = 'D4693')"),
+                new String[][]{ {v, s, inc} });
+    }
+
     public void testAlterColumn() throws Exception {
         Statement st = createStatement();
         createTestObjects(st);