Commit bec3694b authored by Ashish Agarwal's avatar Ashish Agarwal

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.
parent d8c68db1
...@@ -2412,4 +2412,17 @@ CARDINALITY ...@@ -2412,4 +2412,17 @@ CARDINALITY
DROP TABLE t1; DROP TABLE t1;
SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size; SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size;
SET myisam_repair_threads=@@global.myisam_repair_threads; 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 End of 5.1 tests
...@@ -1645,4 +1645,20 @@ DROP TABLE t1; ...@@ -1645,4 +1645,20 @@ DROP TABLE t1;
SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size; SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size;
SET myisam_repair_threads=@@global.myisam_repair_threads; 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 --echo End of 5.1 tests
...@@ -4314,13 +4314,6 @@ int recreate_table(MI_CHECK *param, MI_INFO **org_info, char *filename) ...@@ -4314,13 +4314,6 @@ int recreate_table(MI_CHECK *param, MI_INFO **org_info, char *filename)
u_ptr->seg=keyseg; u_ptr->seg=keyseg;
keyseg+=u_ptr->keysegs+1; 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) && unpack= (share.options & HA_OPTION_COMPRESS_RECORD) &&
(param->testflag & T_UNPACK); (param->testflag & T_UNPACK);
share.options&= ~HA_OPTION_TEMP_COMPRESS_RECORD; share.options&= ~HA_OPTION_TEMP_COMPRESS_RECORD;
...@@ -4330,10 +4323,17 @@ int recreate_table(MI_CHECK *param, MI_INFO **org_info, char *filename) ...@@ -4330,10 +4323,17 @@ int recreate_table(MI_CHECK *param, MI_INFO **org_info, char *filename)
set_if_bigger(file_length,param->max_data_file_length); set_if_bigger(file_length,param->max_data_file_length);
set_if_bigger(file_length,tmp_length); set_if_bigger(file_length,tmp_length);
set_if_bigger(file_length,(ulonglong) share.base.max_data_file_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)); VOID(mi_close(*org_info));
bzero((char*) &create_info,sizeof(create_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.reloc_rows=share.base.reloc;
create_info.old_options=(share.options | create_info.old_options=(share.options |
(unpack ? HA_OPTION_TEMP_COMPRESS_RECORD : 0)); (unpack ? HA_OPTION_TEMP_COMPRESS_RECORD : 0));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment