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/t/myisampack.test | 47 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'mysql-test/t') diff --git a/mysql-test/t/myisampack.test b/mysql-test/t/myisampack.test index afa417822e6..cc9429a1707 100644 --- a/mysql-test/t/myisampack.test +++ b/mysql-test/t/myisampack.test @@ -267,3 +267,50 @@ FLUSH TABLE t1; --exec $MYISAMCHK -soq $MYSQLD_DATADIR/test/t1 CHECK TABLE t1; DROP TABLE t1; + +# +# MDEV-6245 Certain compressed tables with myisampack are corrupted by +# "CHECK TABLE" +# +# Issue was that checksum failed for tables with NULL and VARCHAR fields +# + +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; +insert into t1 values(NULL); +checksum table t1; +flush table t1; +--exec $MYISAMPACK -sf $MYSQLD_DATADIR/test/t1 +--exec $MYISAMCHK -srnq $MYSQLD_DATADIR/test/t1 +check table t1; +checksum table t1; +alter table t1 checksum=1 row_format=fixed; +checksum table t1; +flush table t1; +--exec $MYISAMPACK -sf $MYSQLD_DATADIR/test/t1 +--exec $MYISAMCHK -srnq $MYSQLD_DATADIR/test/t1 +check table t1; +checksum table t1; + +# Testing with row_format=dynamic + +alter table t1 row_format=dynamic checksum=0; +checksum table t1; +flush table t1; +--exec $MYISAMPACK -sf $MYSQLD_DATADIR/test/t1 +--exec $MYISAMCHK -srnq $MYSQLD_DATADIR/test/t1 +check table t1; +checksum table t1; +alter table t1 checksum=1 row_format=dynamic; +checksum table t1; +flush table t1; +--exec $MYISAMPACK -sf $MYSQLD_DATADIR/test/t1 +--exec $MYISAMCHK -srnq $MYSQLD_DATADIR/test/t1 +check table t1; +checksum table t1; +drop table t1; -- cgit v1.2.1