From a55c159424df1dbc6a61a3c6592ac819d8bb3316 Mon Sep 17 00:00:00 2001 From: Michael Widenius Date: Sat, 17 May 2014 10:42:59 +0300 Subject: MDEV-6245 Certain compressed tables with myisampack are corrupted by "CHECK TABLE" - Fixed bug that we where using wrong checksum algorithm when using VARCHAR with fixed lenth rows - Ensure in myisampack that HA_OPTION_NULL_FIELDS is set for tables with null fields. mysql-test/r/myisampack.result: Updated results mysql-test/t/myisampack.test: Added more tests storage/myisam/mi_open.c: Use correct checksum algorithm when we have VARCHAR fields with fixed length records storage/myisam/myisampack.c: Ensure HA_OPTION_NULL_FIELDS is set for tables with null fields. (This was not set by default for not compressed tables without checksums to keep MyISAM tables compatible with MySQL) --- mysql-test/r/myisampack.result | 54 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'mysql-test/r/myisampack.result') diff --git a/mysql-test/r/myisampack.result b/mysql-test/r/myisampack.result index 56f61ccdf47..aeb12c1f68e 100644 --- a/mysql-test/r/myisampack.result +++ b/mysql-test/r/myisampack.result @@ -150,3 +150,57 @@ CHECK TABLE t1; Table Op Msg_type Msg_text test.t1 check status OK DROP TABLE t1; +create table `t1` (`id` varchar(15) DEFAULT NULL) ENGINE=MyISAM ROW_FORMAT=FIXED; +insert into t1 values ('aaa'),('bbb'),('ccc'),('ddd'),('eee'); +insert into t1 (select * from t1); +insert into t1 (select * from t1); +insert into t1 (select * from t1); +insert into t1 (select * from t1); +checksum table t1; +Table Checksum +test.t1 2696656816 +insert into t1 values(NULL); +checksum table t1; +Table Checksum +test.t1 2679879600 +flush table t1; +check table t1; +Table Op Msg_type Msg_text +test.t1 check status OK +checksum table t1; +Table Checksum +test.t1 2679879600 +alter table t1 checksum=1 row_format=fixed; +checksum table t1; +Table Checksum +test.t1 2679879600 +flush table t1; +check table t1; +Table Op Msg_type Msg_text +test.t1 check status OK +checksum table t1; +Table Checksum +test.t1 2679879600 +alter table t1 row_format=dynamic checksum=0; +checksum table t1; +Table Checksum +test.t1 2330021136 +flush table t1; +check table t1; +Table Op Msg_type Msg_text +test.t1 check status OK +checksum table t1; +Table Checksum +test.t1 2330021136 +alter table t1 checksum=1 row_format=dynamic; +checksum table t1; +Table Checksum +test.t1 2330021136 +flush table t1; +check table t1; +Table Op Msg_type Msg_text +test.t1 check status OK +checksum table t1; +Table Checksum +test.t1 2330021136 +drop table t1; -- cgit v1.2.1