From: Martin Skold Date: June 21 2012 10:05am Subject: bzr push into mysql-5.1-telco-6.3 branch (Martin.Skold:3474 to 3475) Bug#12755722 List-Archive: http://lists.mysql.com/commits/144297 X-Bug: 12755722 Message-Id: <20120621100550.AD3AC9F8D7F@quadfish> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 3475 Martin Skold 2012-06-21 Bug#12755722 61528: INNODB BACKEND CRASHES ON ALTER TABLE STATEMENT (MYSQL SERVER HAS GONE AWAY: implemented check for new field and added test case modified: mysql-test/suite/ndb/r/ndb_alter_table_online.result mysql-test/suite/ndb/t/ndb_alter_table_online.test sql/sql_table.cc 3474 Pekka Nousiainen 2012-05-03 bug#13834481 b01_upg.diff testUpgrade failing before 7.0 patches modified: storage/ndb/test/include/HugoTransactions.hpp storage/ndb/test/ndbapi/testUpgrade.cpp storage/ndb/test/src/HugoTransactions.cpp === modified file 'mysql-test/suite/ndb/r/ndb_alter_table_online.result' --- a/mysql-test/suite/ndb/r/ndb_alter_table_online.result 2009-09-15 13:42:29 +0000 +++ b/mysql-test/suite/ndb/r/ndb_alter_table_online.result 2012-06-21 10:05:18 +0000 @@ -711,3 +711,39 @@ ALTER ONLINE TABLE t1 ADD b INT; ******************** DROP TABLE t1; DROP TABLE ndb_show_tables_results; +CREATE TABLE categorylinks ( +cl_from int(10) unsigned NOT NULL DEFAULT '0', +cl_to varbinary(255) NOT NULL DEFAULT '', +cl_sortkey varbinary(70) NOT NULL DEFAULT '', +cl_timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE +CURRENT_TIMESTAMP, +UNIQUE KEY cl_from (cl_from,cl_to), +KEY cl_sortkey (cl_to,cl_sortkey,cl_from), +KEY cl_timestamp (cl_to,cl_timestamp) +) ENGINE=ndb DEFAULT CHARSET=binary; +ALTER TABLE categorylinks +CHANGE COLUMN cl_sortkey cl_sortkey varbinary(230) NOT NULL default +'', +ADD COLUMN cl_sortkey_prefix varchar(255) binary NOT NULL default '', +ADD COLUMN cl_collation varbinary(32) NOT NULL default '', +ADD COLUMN cl_type ENUM('page', 'subcat', 'file') NOT NULL default +'page', +ADD INDEX (cl_collation), +DROP INDEX cl_sortkey, +ADD INDEX cl_sortkey (cl_to, cl_type, cl_sortkey, cl_from); +SHOW CREATE TABLE categorylinks; +Table Create Table +categorylinks CREATE TABLE `categorylinks` ( + `cl_from` int(10) unsigned NOT NULL DEFAULT '0', + `cl_to` varbinary(255) NOT NULL DEFAULT '', + `cl_sortkey` varbinary(230) NOT NULL DEFAULT '', + `cl_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `cl_sortkey_prefix` varbinary(255) NOT NULL DEFAULT '', + `cl_collation` varbinary(32) NOT NULL DEFAULT '', + `cl_type` enum('page','subcat','file') NOT NULL DEFAULT 'page', + UNIQUE KEY `cl_from` (`cl_from`,`cl_to`), + KEY `cl_timestamp` (`cl_to`,`cl_timestamp`), + KEY `cl_collation` (`cl_collation`), + KEY `cl_sortkey` (`cl_to`,`cl_type`,`cl_sortkey`,`cl_from`) +) ENGINE=ndbcluster DEFAULT CHARSET=binary +DROP TABLE categorylinks; === modified file 'mysql-test/suite/ndb/t/ndb_alter_table_online.test' --- a/mysql-test/suite/ndb/t/ndb_alter_table_online.test 2009-09-15 13:42:29 +0000 +++ b/mysql-test/suite/ndb/t/ndb_alter_table_online.test 2012-06-21 10:05:18 +0000 @@ -770,6 +770,37 @@ ALTER ONLINE TABLE t1 ADD b INT; DROP TABLE t1; DROP TABLE ndb_show_tables_results; + +# +# Bug #12755722 61528: INNODB BACKEND CRASHES ON ALTER TABLE STATEMENT (MYSQL SERVER HAS GONE AWAY +# + +CREATE TABLE categorylinks ( + cl_from int(10) unsigned NOT NULL DEFAULT '0', + cl_to varbinary(255) NOT NULL DEFAULT '', + cl_sortkey varbinary(70) NOT NULL DEFAULT '', + cl_timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE +CURRENT_TIMESTAMP, + UNIQUE KEY cl_from (cl_from,cl_to), + KEY cl_sortkey (cl_to,cl_sortkey,cl_from), + KEY cl_timestamp (cl_to,cl_timestamp) +) ENGINE=ndb DEFAULT CHARSET=binary; + +ALTER TABLE categorylinks + CHANGE COLUMN cl_sortkey cl_sortkey varbinary(230) NOT NULL default +'', + ADD COLUMN cl_sortkey_prefix varchar(255) binary NOT NULL default '', + ADD COLUMN cl_collation varbinary(32) NOT NULL default '', + ADD COLUMN cl_type ENUM('page', 'subcat', 'file') NOT NULL default +'page', + ADD INDEX (cl_collation), + DROP INDEX cl_sortkey, + ADD INDEX cl_sortkey (cl_to, cl_type, cl_sortkey, cl_from); + +SHOW CREATE TABLE categorylinks; + +DROP TABLE categorylinks; + # End of 5.1 Test Case === modified file 'sql/sql_table.cc' --- a/sql/sql_table.cc 2012-02-13 17:00:22 +0000 +++ b/sql/sql_table.cc 2012-06-21 10:05:18 +0000 @@ -6073,8 +6073,11 @@ compare_tables(THD *thd, for(; key_part != end; key_part++) { /* Mark field to be part of new key */ - if ((field= table->field[key_part->fieldnr])) + if (key_part->fieldnr < table->s->fields) + { + field= table->field[key_part->fieldnr]; field->flags|= FIELD_IN_ADD_INDEX; + } } *table_changes= IS_EQUAL_NO; DBUG_PRINT("info", ("index changed: '%s'", table_key->name)); @@ -6108,18 +6111,18 @@ compare_tables(THD *thd, end= key_part + new_key->key_parts; for(; key_part != end; key_part++) { + if (key_part->fieldnr < table->s->fields) + { + field= table->field[key_part->fieldnr]; /* Mark field to be part of new key */ - if ((field= table->field[key_part->fieldnr])) field->flags|= FIELD_IN_ADD_INDEX; /* Check if all fields in key are declared NOT NULL */ - if (key_part->fieldnr < table->s->fields) - { is_not_null= (is_not_null && - (!table->field[key_part->fieldnr]->maybe_null())); + (!field->maybe_null())); } else { No bundle (reason: useless for push emails).