diff options
author | unknown <hf@deer.(none)> | 2004-03-22 21:34:36 +0400 |
---|---|---|
committer | unknown <hf@deer.(none)> | 2004-03-22 21:34:36 +0400 |
commit | a0d0da6f26050d3b710ee06e539e5d2d9a201841 (patch) | |
tree | 30cfa5bc59ea5a6d511bc24ba8b8d4349d9c5d4a | |
parent | afbf1bbaa40614b965752c9c8dd2ca28c4428cb0 (diff) | |
download | mariadb-git-a0d0da6f26050d3b710ee06e539e5d2d9a201841.tar.gz |
Fix for #3067 (REPAIR TABLE reenables disabled keys)
myisam/mi_check.c:
we only restore key_map if it's required
mysql-test/r/repair_part1.result:
appropriate test result
mysql-test/t/repair_part1.test:
test case
-rw-r--r-- | myisam/mi_check.c | 7 | ||||
-rw-r--r-- | mysql-test/r/repair_part1.result | 15 | ||||
-rw-r--r-- | mysql-test/t/repair_part1.test | 12 |
3 files changed, 31 insertions, 3 deletions
diff --git a/myisam/mi_check.c b/myisam/mi_check.c index cdaed59cd01..79167a885cd 100644 --- a/myisam/mi_check.c +++ b/myisam/mi_check.c @@ -1274,11 +1274,12 @@ int mi_repair(MI_CHECK *param, register MI_INFO *info, I think mi_repair and mi_repair_by_sort should do the same (according, e.g. to ha_myisam::repair), but as mi_repair doesn't touch key_map it cannot be used to T_CREATE_MISSING_KEYS. - That is what the next line is for... (serg) + That is what the next line is for */ - share->state.key_map= ((((ulonglong) 1L << share->base.keys)-1) & - param->keys_in_use); + if (param->testflag & T_CREATE_MISSING_KEYS) + share->state.key_map= ((((ulonglong) 1L << share->base.keys)-1) & + param->keys_in_use); info->state->key_file_length=share->base.keystart; diff --git a/mysql-test/r/repair_part1.result b/mysql-test/r/repair_part1.result index e0030327743..6dcec409ea6 100644 --- a/mysql-test/r/repair_part1.result +++ b/mysql-test/r/repair_part1.result @@ -9,6 +9,21 @@ repair table t1 use_frm; Table Op Msg_type Msg_text test.t1 repair error The storage engine for the table doesn't support repair drop table t1; +create table t1(id int PRIMARY KEY, st varchar(10), KEY st_key(st)); +insert into t1 values(1, "One"); +alter table t1 disable keys; +show keys from t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment +t1 0 PRIMARY 1 id A 1 NULL NULL BTREE +t1 1 st_key 1 st A NULL NULL NULL YES BTREE disabled +repair table t1 extended; +Table Op Msg_type Msg_text +test.t1 repair status OK +show keys from t1; +Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment +t1 0 PRIMARY 1 id A 1 NULL NULL BTREE +t1 1 st_key 1 st A NULL NULL NULL YES BTREE disabled +drop table t1; repair table t1 use_frm; Table Op Msg_type Msg_text test.t1 repair error Table 'test.t1' doesn't exist diff --git a/mysql-test/t/repair_part1.test b/mysql-test/t/repair_part1.test index e82edb64713..a2e186fd385 100644 --- a/mysql-test/t/repair_part1.test +++ b/mysql-test/t/repair_part1.test @@ -12,6 +12,18 @@ alter table t1 ENGINE=HEAP; repair table t1 use_frm; drop table t1; +# +# disabled keys during repair +# +create table t1(id int PRIMARY KEY, st varchar(10), KEY st_key(st)); +insert into t1 values(1, "One"); +alter table t1 disable keys; +show keys from t1; +repair table t1 extended; +show keys from t1; +drop table t1; + + # non-existent table repair table t1 use_frm; |