From 1b78e7dd417a5307aaeded9114a795284071aca1 Mon Sep 17 00:00:00 2001 From: "hf@deer.(none)" <> Date: Mon, 22 Mar 2004 21:34:36 +0400 Subject: [PATCH] Fix for #3067 (REPAIR TABLE reenables disabled keys) --- myisam/mi_check.c | 7 ++++--- mysql-test/r/repair_part1.result | 15 +++++++++++++++ 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;