summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNarayanan V <v.narayanan@sun.com>2009-04-30 18:16:49 +0530
committerNarayanan V <v.narayanan@sun.com>2009-04-30 18:16:49 +0530
commitdb83fda90d704c14770ecaa4f6dd9be9501e834b (patch)
tree6a25256782b5cdcc9013222598cd798ff4f2db42
parent755d312e8456da751f432fd0e9c211dc4aeba131 (diff)
downloadmariadb-git-db83fda90d704c14770ecaa4f6dd9be9501e834b.tar.gz
BUG#37631 - Incorrect key file for table after upgrading from 5.0 to 5.1
This patch adds corrections to the original patch submitted 2009-04-08 (http://lists.mysql.com/commits/71607): - fixed that the original patch didn't work because of an incorrect condition; - added a test case. mysql-test/r/upgrade.result: Bug#37631 Incorrect key file for table after upgrading from 5.0 to 5.1 Result file for test case mysql-test/std_data/bug37631.MYD: Bug#37631 Incorrect key file for table after upgrading from 5.0 to 5.1 table created in mysql 4.0 mysql-test/std_data/bug37631.MYI: Bug#37631 Incorrect key file for table after upgrading from 5.0 to 5.1 table created in mysql 4.0 mysql-test/std_data/bug37631.frm: Bug#37631 Incorrect key file for table after upgrading from 5.0 to 5.1 table created in mysql 4.0 mysql-test/t/upgrade.test: Bug#37631 Incorrect key file for table after upgrading from 5.0 to 5.1 Adds test for checking that upgrade works on a table which is created by a mysql server version <= 4.0. storage/myisam/ha_myisam.cc: Bug#37631 Incorrect key file for table after upgrading from 5.0 to 5.1 Fix the conformance checker to relax checking for the correct version of the tables (for tables created by mysql server version <= 4.0)
-rw-r--r--mysql-test/r/upgrade.result12
-rw-r--r--mysql-test/std_data/bug37631.MYD0
-rw-r--r--mysql-test/std_data/bug37631.MYIbin0 -> 1024 bytes
-rw-r--r--mysql-test/std_data/bug37631.frmbin0 -> 8590 bytes
-rw-r--r--mysql-test/t/upgrade.test14
-rw-r--r--storage/myisam/ha_myisam.cc4
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
new file mode 100644
index 00000000000..8bf14b46add
--- /dev/null
+++ b/mysql-test/std_data/bug37631.MYI
Binary files differ
diff --git a/mysql-test/std_data/bug37631.frm b/mysql-test/std_data/bug37631.frm
new file mode 100644
index 00000000000..2742a387c38
--- /dev/null
+++ b/mysql-test/std_data/bug37631.frm
Binary files differ
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 ||