diff options
author | Michael Widenius <monty@askmonty.org> | 2014-05-17 10:42:59 +0300 |
---|---|---|
committer | Michael Widenius <monty@askmonty.org> | 2014-05-17 10:42:59 +0300 |
commit | a55c159424df1dbc6a61a3c6592ac819d8bb3316 (patch) | |
tree | 3961885ee0e04869ed5f15f562c6d14c23628397 /mysql-test/t/myisampack.test | |
parent | f6524e496312a6d3b870c74118f921c33201f3d7 (diff) | |
download | mariadb-git-a55c159424df1dbc6a61a3c6592ac819d8bb3316.tar.gz |
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)
Diffstat (limited to 'mysql-test/t/myisampack.test')
-rw-r--r-- | mysql-test/t/myisampack.test | 47 |
1 files changed, 47 insertions, 0 deletions
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; |