mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
BUG#11756869 - 48848: MYISAMCHK DOING SORT RECOVER IN CERTAIN
CASES RESETS DATA POINTER TO SMAL ISSUE: Myisamchk doing sort recover on a table reduces data_file_length. Maximum size of data file decreases, lesser number of rows are stored. SOLUTION: Size of data_file_length is fixed to the original length.
This commit is contained in:
@ -2412,4 +2412,17 @@ CARDINALITY
|
||||
DROP TABLE t1;
|
||||
SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size;
|
||||
SET myisam_repair_threads=@@global.myisam_repair_threads;
|
||||
#
|
||||
# BUG 11756869 - 48848: MYISAMCHK DOING SORT RECOVER IN CERTAIN
|
||||
# CASES RESETS DATA POINTER TO SMAL
|
||||
#
|
||||
CREATE TABLE t1(a INT, KEY(a));
|
||||
ALTER TABLE t1 DISABLE KEYS;
|
||||
SET @before:= (SELECT MAX_DATA_LENGTH FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1' AND TABLE_SCHEMA='test');
|
||||
FLUSH TABLES;
|
||||
SET @after:= (SELECT MAX_DATA_LENGTH FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1' AND TABLE_SCHEMA='test');
|
||||
SELECT @before=@after;
|
||||
@before=@after
|
||||
1
|
||||
DROP TABLE t1;
|
||||
End of 5.1 tests
|
||||
|
@ -1645,4 +1645,20 @@ DROP TABLE t1;
|
||||
SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size;
|
||||
SET myisam_repair_threads=@@global.myisam_repair_threads;
|
||||
|
||||
--echo #
|
||||
--echo # BUG 11756869 - 48848: MYISAMCHK DOING SORT RECOVER IN CERTAIN
|
||||
--echo # CASES RESETS DATA POINTER TO SMAL
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1(a INT, KEY(a));
|
||||
ALTER TABLE t1 DISABLE KEYS;
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
SET @before:= (SELECT MAX_DATA_LENGTH FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1' AND TABLE_SCHEMA='test');
|
||||
FLUSH TABLES;
|
||||
--replace_result $MYSQLD_DATADIR MYSQLD_DATADIR
|
||||
--exec $MYISAMCHK -sn $MYSQLD_DATADIR/test/t1
|
||||
SET @after:= (SELECT MAX_DATA_LENGTH FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='t1' AND TABLE_SCHEMA='test');
|
||||
SELECT @before=@after;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
@ -4314,13 +4314,6 @@ int recreate_table(MI_CHECK *param, MI_INFO **org_info, char *filename)
|
||||
u_ptr->seg=keyseg;
|
||||
keyseg+=u_ptr->keysegs+1;
|
||||
}
|
||||
if (share.options & HA_OPTION_COMPRESS_RECORD)
|
||||
share.base.records=max_records=info.state->records;
|
||||
else if (share.base.min_pack_length)
|
||||
max_records=(ha_rows) (my_seek(info.dfile,0L,MY_SEEK_END,MYF(0)) /
|
||||
(ulong) share.base.min_pack_length);
|
||||
else
|
||||
max_records=0;
|
||||
unpack= (share.options & HA_OPTION_COMPRESS_RECORD) &&
|
||||
(param->testflag & T_UNPACK);
|
||||
share.options&= ~HA_OPTION_TEMP_COMPRESS_RECORD;
|
||||
@ -4331,9 +4324,16 @@ int recreate_table(MI_CHECK *param, MI_INFO **org_info, char *filename)
|
||||
set_if_bigger(file_length,tmp_length);
|
||||
set_if_bigger(file_length,(ulonglong) share.base.max_data_file_length);
|
||||
|
||||
if (share.options & HA_OPTION_COMPRESS_RECORD)
|
||||
share.base.records=max_records=info.state->records;
|
||||
else if (!(share.options & HA_OPTION_PACK_RECORD))
|
||||
max_records= (ha_rows) (file_length / share.base.pack_reclength);
|
||||
else
|
||||
max_records= 0;
|
||||
|
||||
VOID(mi_close(*org_info));
|
||||
bzero((char*) &create_info,sizeof(create_info));
|
||||
create_info.max_rows=max(max_records,share.base.records);
|
||||
create_info.max_rows= max_records;
|
||||
create_info.reloc_rows=share.base.reloc;
|
||||
create_info.old_options=(share.options |
|
||||
(unpack ? HA_OPTION_TEMP_COMPRESS_RECORD : 0));
|
||||
|
Reference in New Issue
Block a user