Fix for bug #37310: 'on update CURRENT_TIMESTAMP' option crashes the table
Problem: data consistency check (maximum record length) for a correct MyISAM table with CHECKSUM=1 and ROW_FORMAT=DYNAMIC option may fail due to wrong inner MyISAM parameter. In result we may have the table marked as 'corrupted'. Fix: properly set MyISAM maximum record length parameter. myisam/mi_create.c: Fix for bug #37310: 'on update CURRENT_TIMESTAMP' option crashes the table Use HA_OPTION_PACK_RECORD instead of HA_PACK_RECORD (typo?) calculating packed record length.
This commit is contained in:
parent
3b1adb501e
commit
b219978514
@ -192,7 +192,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
|
||||
packed=(packed+7)/8;
|
||||
if (pack_reclength != INT_MAX32)
|
||||
pack_reclength+= reclength+packed +
|
||||
test(test_all_bits(options, HA_OPTION_CHECKSUM | HA_PACK_RECORD));
|
||||
test(test_all_bits(options, HA_OPTION_CHECKSUM | HA_OPTION_PACK_RECORD));
|
||||
min_pack_length+=packed;
|
||||
|
||||
if (!ci->data_file_length && ci->max_rows)
|
||||
|
@ -1861,4 +1861,26 @@ id ref
|
||||
3 2
|
||||
4 5
|
||||
DROP TABLE t1, t2;
|
||||
CREATE TABLE t1 (a INT) ENGINE=MyISAM CHECKSUM=1 ROW_FORMAT=DYNAMIC;
|
||||
INSERT INTO t1 VALUES (0);
|
||||
UPDATE t1 SET a=1;
|
||||
SELECT a FROM t1;
|
||||
a
|
||||
1
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
INSERT INTO t1 VALUES (0), (5), (4), (2);
|
||||
UPDATE t1 SET a=2;
|
||||
SELECT a FROM t1;
|
||||
a
|
||||
2
|
||||
2
|
||||
2
|
||||
2
|
||||
2
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
|
@ -1210,4 +1210,19 @@ SELECT * FROM t1;
|
||||
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
|
||||
#
|
||||
# Bug#37310: 'on update CURRENT_TIMESTAMP' option crashes the table
|
||||
#
|
||||
CREATE TABLE t1 (a INT) ENGINE=MyISAM CHECKSUM=1 ROW_FORMAT=DYNAMIC;
|
||||
INSERT INTO t1 VALUES (0);
|
||||
UPDATE t1 SET a=1;
|
||||
SELECT a FROM t1;
|
||||
CHECK TABLE t1;
|
||||
INSERT INTO t1 VALUES (0), (5), (4), (2);
|
||||
UPDATE t1 SET a=2;
|
||||
SELECT a FROM t1;
|
||||
CHECK TABLE t1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
Loading…
x
Reference in New Issue
Block a user