MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:Ramil Kalimullin Date:September 3 2008 10:17am
Subject:bzr commit into mysql-5.0 branch (ramil:2681) Bug#38821
View as plain text  
#At file:///home/ram/mysql/mysql-5.0-5.1.29-rc/

 2681 Ramil Kalimullin	2008-09-03
      Fix for bug#38821: Assert table->auto_increment_field_not_null failed 
      in open_table()
      
      Problem: repeating "CREATE... ( AUTOINCREMENT) ... SELECT" may lead to
      an assertion failure.
      
      Fix: reset table->auto_increment_field_not_null after each record 
      writing.
modified:
  mysql-test/r/create.result
  mysql-test/t/create.test
  sql/sql_insert.cc

per-file messages:
  mysql-test/r/create.result
    Fix for bug#38821: Assert table->auto_increment_field_not_null failed 
    in open_table()
      - test result.
  mysql-test/t/create.test
    Fix for bug#38821: Assert table->auto_increment_field_not_null failed 
    in open_table()
      - test case.
  sql/sql_insert.cc
    Fix for bug#38821: Assert table->auto_increment_field_not_null failed 
    in open_table()
      - reset table->auto_increment_field_not_null after writing a record
    for "{CREATE, INSERT}..SELECT".
=== modified file 'mysql-test/r/create.result'
--- a/mysql-test/r/create.result	2008-02-01 08:00:40 +0000
+++ b/mysql-test/r/create.result	2008-09-03 10:17:19 +0000
@@ -1546,4 +1546,15 @@ SHOW INDEX FROM t1;
 Table	Non_unique	Key_name	Seq_in_index	Column_name	Collation	Cardinality	Sub_part	Packed	Null	Index_type	Comment
 t1	1	c1	1	c1	A	NULL	NULL	NULL	YES	BTREE	
 DROP TABLE t1;
+CREATE TABLE t1 (a INTEGER AUTO_INCREMENT PRIMARY KEY, b INTEGER NOT NULL);
+INSERT IGNORE INTO t1 (b) VALUES (5);
+CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
+SELECT a FROM t1;
+CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
+SELECT a FROM t1;
+ERROR 23000: Duplicate entry '1' for key 1
+CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
+SELECT a FROM t1;
+ERROR 23000: Duplicate entry '1' for key 1
+DROP TABLE t1, t2;
 End of 5.0 tests

=== modified file 'mysql-test/t/create.test'
--- a/mysql-test/t/create.test	2008-02-01 08:00:40 +0000
+++ b/mysql-test/t/create.test	2008-09-03 10:17:19 +0000
@@ -1172,4 +1172,22 @@ SHOW INDEX FROM t1;
 DROP TABLE t1;
 
 
+#
+# Bug#38821: Assert table->auto_increment_field_not_null failed in open_table()
+#
+CREATE TABLE t1 (a INTEGER AUTO_INCREMENT PRIMARY KEY, b INTEGER NOT NULL);
+INSERT IGNORE INTO t1 (b) VALUES (5);
+
+CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
+  SELECT a FROM t1;
+--error 1062
+CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
+  SELECT a FROM t1;
+--error 1062
+CREATE TABLE IF NOT EXISTS t2 (a INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY)
+  SELECT a FROM t1;
+
+DROP TABLE t1, t2;
+
+
 --echo End of 5.0 tests

=== modified file 'sql/sql_insert.cc'
--- a/sql/sql_insert.cc	2008-03-28 13:34:06 +0000
+++ b/sql/sql_insert.cc	2008-09-03 10:17:19 +0000
@@ -2897,7 +2897,11 @@ bool select_insert::send_data(List<Item>
       DBUG_RETURN(1);
     }
   }
-  if (!(error= write_record(thd, table, &info)))
+  
+  error= write_record(thd, table, &info);
+  table->auto_increment_field_not_null= FALSE;
+  
+  if (!error)
   {
     if (table->triggers || info.handle_duplicates == DUP_UPDATE)
     {

Thread
bzr commit into mysql-5.0 branch (ramil:2681) Bug#38821Ramil Kalimullin3 Sep