diff options
-rw-r--r-- | mysql-test/r/upgrade.result | 12 | ||||
-rw-r--r-- | mysql-test/std_data/bug37631.MYD | 0 | ||||
-rw-r--r-- | mysql-test/std_data/bug37631.MYI | bin | 0 -> 1024 bytes | |||
-rw-r--r-- | mysql-test/std_data/bug37631.frm | bin | 0 -> 8590 bytes | |||
-rw-r--r-- | mysql-test/t/upgrade.test | 14 | ||||
-rw-r--r-- | storage/myisam/ha_myisam.cc | 4 |
6 files changed, 28 insertions, 2 deletions
diff --git a/mysql-test/r/upgrade.result b/mysql-test/r/upgrade.result index 711e69094f7..da6201692a9 100644 --- a/mysql-test/r/upgrade.result +++ b/mysql-test/r/upgrade.result @@ -57,6 +57,18 @@ s1 1 drop table `txu@0023p@0023p1`; drop table `txu#p#p1`; +# +# Bug#37631 Incorrect key file for table after upgrading from 5.0 to 5.1 +# +# copy table created using mysql4.0 into the data dir +# check the table created using mysql 4.0 +CHECK TABLE t1; +Table Op Msg_type Msg_text +test.t1 check error Table upgrade required. Please do "REPAIR TABLE `t1`" or dump/reload to fix it! +# query the table created using mysql 4.0 +SELECT * FROM t1; +c1 c2 c3 +DROP TABLE t1; truncate t1; drop table t1; drop database if exists `tabc`; diff --git a/mysql-test/std_data/bug37631.MYD b/mysql-test/std_data/bug37631.MYD new file mode 100644 index 00000000000..e69de29bb2d --- /dev/null +++ b/mysql-test/std_data/bug37631.MYD diff --git a/mysql-test/std_data/bug37631.MYI b/mysql-test/std_data/bug37631.MYI Binary files differnew file mode 100644 index 00000000000..8bf14b46add --- /dev/null +++ b/mysql-test/std_data/bug37631.MYI diff --git a/mysql-test/std_data/bug37631.frm b/mysql-test/std_data/bug37631.frm Binary files differnew file mode 100644 index 00000000000..2742a387c38 --- /dev/null +++ b/mysql-test/std_data/bug37631.frm diff --git a/mysql-test/t/upgrade.test b/mysql-test/t/upgrade.test index e096b6520a1..d571a2efc7c 100644 --- a/mysql-test/t/upgrade.test +++ b/mysql-test/t/upgrade.test @@ -48,6 +48,20 @@ select * from `txu#p#p1`; drop table `txu@0023p@0023p1`; drop table `txu#p#p1`; +--echo # +--echo # Bug#37631 Incorrect key file for table after upgrading from 5.0 to 5.1 +--echo # +--echo # copy table created using mysql4.0 into the data dir +let $MYSQLD_DATADIR= `SELECT @@datadir`; +copy_file std_data/bug37631.frm $MYSQLD_DATADIR/test/t1.frm; +copy_file std_data/bug37631.MYD $MYSQLD_DATADIR/test/t1.MYD; +copy_file std_data/bug37631.MYI $MYSQLD_DATADIR/test/t1.MYI; +--echo # check the table created using mysql 4.0 +CHECK TABLE t1; +--echo # query the table created using mysql 4.0 +SELECT * FROM t1; +DROP TABLE t1; + # # Check if old tables work # diff --git a/storage/myisam/ha_myisam.cc b/storage/myisam/ha_myisam.cc index dd66c255475..a939a263a0f 100644 --- a/storage/myisam/ha_myisam.cc +++ b/storage/myisam/ha_myisam.cc @@ -392,7 +392,7 @@ int check_definition(MI_KEYDEF *t1_keyinfo, MI_COLUMNDEF *t1_recinfo, test(t2_keyinfo[i].flag & HA_SPATIAL))); DBUG_RETURN(1); } - if ((mysql_40_compat && + if ((!mysql_40_compat && t1_keyinfo[i].key_alg != t2_keyinfo[i].key_alg) || t1_keyinfo[i].keysegs != t2_keyinfo[i].keysegs) { @@ -424,7 +424,7 @@ int check_definition(MI_KEYDEF *t1_keyinfo, MI_COLUMNDEF *t1_recinfo, t1_keysegs_j__type= HA_KEYTYPE_VARBINARY1; /* purecov: inspected */ } - if ((mysql_40_compat && + if ((!mysql_40_compat && t1_keysegs[j].language != t2_keysegs[j].language) || t1_keysegs_j__type != t2_keysegs[j].type || t1_keysegs[j].null_bit != t2_keysegs[j].null_bit || |