MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:Georgi Kodinov Date:September 11 2009 11:44am
Subject:bzr commit into mysql-5.1-bugteam branch (joro:3120) Bug#46760
View as plain text  
#At file:///home/kgeorge/mysql/work/B46760-5.1-bugteam/ based on revid:alik@stripped

 3120 Georgi Kodinov	2009-09-11
      Bug#46760: Fast ALTER TABLE no longer works for InnoDB
      
      Despite copying the value of the old table's row type
      we don't always have to mark row type as being specified.
      Innodb uses this to check if it can do fast ALTER TABLE
      or not.
      Fixed by marking the row as supplied only when it's 
      not the default one.

    modified:
      mysql-test/r/innodb_mysql.result
      mysql-test/t/innodb_mysql.test
      sql/sql_table.cc
=== modified file 'mysql-test/r/innodb_mysql.result'
--- a/mysql-test/r/innodb_mysql.result	2009-07-13 17:41:43 +0000
+++ b/mysql-test/r/innodb_mysql.result	2009-09-11 11:44:16 +0000
@@ -2208,4 +2208,27 @@ EXPLAIN SELECT * FROM t1 FORCE INDEX(PRI
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	t1	index	NULL	PRIMARY	4	NULL	128	Using where
 DROP TABLE t1;
+#
+# Bug#46760: Fast ALTER TABLE no longer works for InnoDB
+#
+CREATE TABLE t1 (a INT) ENGINE=InnoDB;
+INSERT INTO t1 VALUES (1);
+# By using --enable_info and verifying that number of affected
+# rows is 0 we check that this ALTER TABLE is really carried
+# out as "fast/online" operation, i.e. without full-blown data
+# copying.
+#
+# I.e. info for the below statement should normally look like:
+#
+# affected rows: 0
+# info: Records: 0  Duplicates: 0  Warnings: 0
+ALTER TABLE t1 ALTER COLUMN a SET DEFAULT 10;
+affected rows: 0
+info: Records: 0  Duplicates: 0  Warnings: 0
+SHOW CREATE TABLE t1;
+Table	Create Table
+t1	CREATE TABLE `t1` (
+  `a` int(11) DEFAULT '10'
+) ENGINE=InnoDB DEFAULT CHARSET=latin1
+DROP TABLE t1;
 End of 5.1 tests

=== modified file 'mysql-test/t/innodb_mysql.test'
--- a/mysql-test/t/innodb_mysql.test	2009-07-07 12:52:34 +0000
+++ b/mysql-test/t/innodb_mysql.test	2009-09-11 11:44:16 +0000
@@ -461,4 +461,28 @@ EXPLAIN SELECT * FROM t1 FORCE INDEX(PRI
 
 DROP TABLE t1;
 
+--echo #
+--echo # Bug#46760: Fast ALTER TABLE no longer works for InnoDB
+--echo #
+
+CREATE TABLE t1 (a INT) ENGINE=InnoDB;
+INSERT INTO t1 VALUES (1);
+
+--echo # By using --enable_info and verifying that number of affected
+--echo # rows is 0 we check that this ALTER TABLE is really carried
+--echo # out as "fast/online" operation, i.e. without full-blown data
+--echo # copying.
+--echo #
+--echo # I.e. info for the below statement should normally look like:
+--echo #
+--echo # affected rows: 0
+--echo # info: Records: 0  Duplicates: 0  Warnings: 0
+
+--enable_info
+ALTER TABLE t1 ALTER COLUMN a SET DEFAULT 10;
+--disable_info
+SHOW CREATE TABLE t1;
+
+DROP TABLE t1;
+
 --echo End of 5.1 tests

=== modified file 'sql/sql_table.cc'
--- a/sql/sql_table.cc	2009-09-10 08:49:49 +0000
+++ b/sql/sql_table.cc	2009-09-11 11:44:16 +0000
@@ -6659,7 +6659,8 @@ view_err:
   if (create_info->row_type == ROW_TYPE_NOT_USED)
   {
     create_info->row_type= table->s->row_type;
-    create_info->used_fields |= HA_CREATE_USED_ROW_FORMAT;
+    if (create_info->row_type != ROW_TYPE_DEFAULT)
+      create_info->used_fields |= HA_CREATE_USED_ROW_FORMAT;
   }
 
   DBUG_PRINT("info", ("old type: %s  new type: %s",


Attachment: [text/bzr-bundle] bzr/joro@sun.com-20090911114416-xoj6b8vae4dnakw5.bundle
Thread
bzr commit into mysql-5.1-bugteam branch (joro:3120) Bug#46760Georgi Kodinov11 Sep