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).
| Thread |
|---|
| • bzr push into mysql-5.1-telco-6.3 branch (Martin.Skold:3474 to 3475)Bug#12755722 | Martin Skold | 25 Jun |