From 27390a8d8149a9203547c860d6bc98ecc4ef7178 Mon Sep 17 00:00:00 2001 From: "serg@serg.mysql.com" <> Date: Sat, 31 Aug 2002 23:18:08 +0000 Subject: [PATCH] LOCK+modify+OPTIMIZE bugfix --- Docs/manual.texi | 3 +++ mysql-test/r/myisam.result | 2 ++ mysql-test/t/myisam.test | 11 +++++++++++ sql/ha_myisam.cc | 1 + 4 files changed, 17 insertions(+) diff --git a/Docs/manual.texi b/Docs/manual.texi index 87b9a480f3f..ffefdc28409 100644 --- a/Docs/manual.texi +++ b/Docs/manual.texi @@ -46929,6 +46929,9 @@ not yet 100% confident in this code. @appendixsubsec Changes in release 3.23.53 @itemize @bullet @item +Fixed a bug that @code{OPTIMIZE} of locked and modified MyISAM table, +reported table corruption. +@item Fixed a @code{BDB}-related @code{ALTER TABLE} bug with dropping a column and shutting down immediately thereafter. @item diff --git a/mysql-test/r/myisam.result b/mysql-test/r/myisam.result index a8f97c57d33..f57b99cf9fd 100644 --- a/mysql-test/r/myisam.result +++ b/mysql-test/r/myisam.result @@ -36,3 +36,5 @@ table type possible_keys key key_len ref rows Extra t1 ALL NULL NULL NULL NULL 4 table type possible_keys key key_len ref rows Extra t1 ALL NULL NULL NULL NULL 4 +Table Op Msg_type Msg_text +test.t1 optimize status OK diff --git a/mysql-test/t/myisam.test b/mysql-test/t/myisam.test index eb1d9a01020..45d26993795 100644 --- a/mysql-test/t/myisam.test +++ b/mysql-test/t/myisam.test @@ -64,3 +64,14 @@ explain select a,b from t1 order by b; explain select a,b from t1; explain select a,b,c from t1; drop table t1; + +# +# Test of OPTIMIZE of locked and modified tables +# +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES (1), (2), (3); +LOCK TABLES t1 WRITE; +INSERT INTO t1 VALUES (1), (2), (3); +OPTIMIZE TABLE t1; +DROP TABLE t1; + diff --git a/sql/ha_myisam.cc b/sql/ha_myisam.cc index 595c83ff8ef..c14ca7d034e 100644 --- a/sql/ha_myisam.cc +++ b/sql/ha_myisam.cc @@ -561,6 +561,7 @@ int ha_myisam::repair(THD *thd, MI_CHECK ¶m, bool optimize) } if (!optimize || + memcmp(file->state, & share->state.state, sizeof(MI_STATUS_INFO)) || ((file->state->del || share->state.split != file->state->records) && (!param.opt_rep_quick || !(share->state.changed & STATE_NOT_OPTIMIZED_KEYS))))