summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <hf@deer.(none)>2004-03-22 21:34:36 +0400
committerunknown <hf@deer.(none)>2004-03-22 21:34:36 +0400
commita0d0da6f26050d3b710ee06e539e5d2d9a201841 (patch)
tree30cfa5bc59ea5a6d511bc24ba8b8d4349d9c5d4a
parentafbf1bbaa40614b965752c9c8dd2ca28c4428cb0 (diff)
downloadmariadb-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.c7
-rw-r--r--mysql-test/r/repair_part1.result15
-rw-r--r--mysql-test/t/repair_part1.test12
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;