List:Commits« Previous MessageNext Message »
From:gni Date:November 29 2007 12:20pm
Subject:bk commit into 5.1 tree (gni:1.2555) BUG#30417
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of gni. When gni does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-11-29 19:19:55+08:00, gni@stripped +3 -0
  BUG#30417 Cluster misbehaves on auto-inc w/o PK.

  mysql-test/suite/ndb/r/ndb_autoinc.result@stripped, 2007-11-29 19:19:53+08:00,
gni@stripped +38 -0
    Adding test case for auto_increment isn't the default primary key columns

  mysql-test/suite/ndb/r/ndb_autoinc.result@stripped, 2007-11-29 19:19:53+08:00,
gni@stripped +0 -0

  mysql-test/suite/ndb/t/ndb_autoinc.test@stripped, 2007-11-29 19:19:53+08:00,
gni@stripped +43 -0
    Adding test case for auto_increment isn't the default primary key columns

  mysql-test/suite/ndb/t/ndb_autoinc.test@stripped, 2007-11-29 19:19:53+08:00,
gni@stripped +0 -0

  storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp@stripped, 2007-11-29 19:19:52+08:00,
gni@stripped +16 -15
    The check that how many auto_increment columns in table are there should be preceded
creating the table.
    If there are more than one auto_increment columns, the table shouldn't be created.

diff -Nrup a/mysql-test/suite/ndb/r/ndb_autoinc.result
b/mysql-test/suite/ndb/r/ndb_autoinc.result
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/mysql-test/suite/ndb/r/ndb_autoinc.result	2007-11-29 19:19:53 +08:00
@@ -0,0 +1,38 @@
+DROP TABLE IF EXISTS t1,t2,t3;
+USE test;
+CREATE TABLE t1 (
+id INT AUTO_INCREMENT,
+PRIMARY KEY(id)
+) ENGINE=NDBCLUSTER;
+CREATE TABLE t2 (
+id INT AUTO_INCREMENT,
+KEY(id)
+) ENGINE=NDBCLUSTER;
+ERROR HY000: Can't create table 'test.t2' (errno: 4335)
+SHOW TABLES;
+Tables_in_test
+t1
+CREATE TABLE t3 (
+id INT AUTO_INCREMENT,
+KEY(id)
+) ENGINE=MYISAM;
+ALTER TABLE t3
+ENGINE NDBCLUSTER;
+ERROR HY000: Can't create table 'test.#sql-7b9e_3' (errno: 4335)
+SHOW CREATE TABLE t3;
+Table	Create Table
+t3	CREATE TABLE `t3` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  KEY `id` (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+ALTER TABLE t3
+ADD PRIMARY KEY (id);
+SHOW CREATE TABLE t3;
+Table	Create Table
+t3	CREATE TABLE `t3` (
+  `id` int(11) NOT NULL AUTO_INCREMENT,
+  PRIMARY KEY (`id`),
+  KEY `id` (`id`)
+) ENGINE=MyISAM DEFAULT CHARSET=latin1
+DROP TABLE t1, t3;
+End of 5.1 tests
diff -Nrup a/mysql-test/suite/ndb/t/ndb_autoinc.test
b/mysql-test/suite/ndb/t/ndb_autoinc.test
--- /dev/null	Wed Dec 31 16:00:00 196900
+++ b/mysql-test/suite/ndb/t/ndb_autoinc.test	2007-11-29 19:19:53 +08:00
@@ -0,0 +1,43 @@
+-- source include/have_ndb.inc
+-- source include/not_embedded.inc
+
+--disable_warnings
+DROP TABLE IF EXISTS t1,t2,t3;
+--enable_warnings
+
+USE test;
+
+CREATE TABLE t1 (
+  id INT AUTO_INCREMENT,
+  PRIMARY KEY(id)
+) ENGINE=NDBCLUSTER;
+
+# Test For bug#30417
+--error 1005
+
+CREATE TABLE t2 (
+  id INT AUTO_INCREMENT,
+  KEY(id)
+) ENGINE=NDBCLUSTER;
+
+SHOW TABLES;
+
+CREATE TABLE t3 (
+  id INT AUTO_INCREMENT,
+  KEY(id)
+) ENGINE=MYISAM;
+
+--error 1005
+ALTER TABLE t3
+ENGINE NDBCLUSTER;
+
+SHOW CREATE TABLE t3;
+
+ALTER TABLE t3
+ADD PRIMARY KEY (id);
+
+SHOW CREATE TABLE t3;
+
+DROP TABLE t1, t3;
+
+--echo End of 5.1 tests
diff -Nrup a/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp
b/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp
--- a/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp	2007-09-12 19:57:58 +08:00
+++ b/storage/ndb/src/ndbapi/NdbDictionaryImpl.cpp	2007-11-29 19:19:52 +08:00
@@ -2340,6 +2340,22 @@ NdbDictionaryImpl::createTable(NdbTableI
 { 
   DBUG_ENTER("NdbDictionaryImpl::createTable");
 
+  
+  bool autoIncrement = false;
+  Uint64 initialValue = 0;
+  for (Uint32 i = 0; i < t.m_columns.size(); i++) {
+    const NdbColumnImpl* c = t.m_columns[i];
+    assert(c != NULL);
+    if (c->m_autoIncrement) {
+      if (autoIncrement) {
+        m_error.code = 4335;
+        DBUG_RETURN(-1);
+      }
+      autoIncrement = true;
+      initialValue = c->m_autoIncrementInitialValue;
+    }
+  }
+ 
   // if the new name has not been set, use the copied name
   if (t.m_newExternalName.empty())
   {
@@ -2377,21 +2393,6 @@ NdbDictionaryImpl::createTable(NdbTableI
 
   // auto-increment - use "t" because initial value is not in DICT
   {
-    bool autoIncrement = false;
-    Uint64 initialValue = 0;
-    for (Uint32 i = 0; i < t.m_columns.size(); i++) {
-      const NdbColumnImpl* c = t.m_columns[i];
-      assert(c != NULL);
-      if (c->m_autoIncrement) {
-        if (autoIncrement) {
-          m_error.code = 4335;
-          delete t2;
-          DBUG_RETURN(-1);
-        }
-        autoIncrement = true;
-        initialValue = c->m_autoIncrementInitialValue;
-      }
-    }
     if (autoIncrement) {
       // XXX unlikely race condition - t.m_id may no longer be same table
       // the tuple id range is not used on input
Thread
bk commit into 5.1 tree (gni:1.2555) BUG#30417gni29 Nov