diff --git a/myisam/mi_delete.c b/myisam/mi_delete.c index 3e8ff9db0094c2a1ebb13751af82c3f62590590d..093a94bbf27cbb5440369189a3b77e33e62508bd 100644 --- a/myisam/mi_delete.c +++ b/myisam/mi_delete.c @@ -826,8 +826,8 @@ static uint remove_key(MI_KEYDEF *keyinfo, uint nod_flag, else get_key_length(rest_length,keypos); - if (next_length > prev_length) - { /* Key after is based on deleted key */ + /* Key after is based on deleted key */ + { uint pack_length,tmp; bmove_upp((char*) keypos,(char*) (lastkey+next_length), tmp=(next_length-prev_length)); diff --git a/mysql-test/r/key.result b/mysql-test/r/key.result index 967ff47e1ead7d8b7d59194858205e7ee343d8c4..e076c59a76c2c07bfcaf9be9908e3ceccc8f00aa 100644 --- a/mysql-test/r/key.result +++ b/mysql-test/r/key.result @@ -267,3 +267,26 @@ select t from t1 where t=0xD0B1D0B1212223D0B1D0B1D0B1D0B1; t ??!"#???? drop table t1; +DROP TABLE IF EXISTS t1; +Warnings: +Note 1051 Unknown table 't1' +CREATE TABLE t1 ( +c1 int, +c2 varbinary(240), +UNIQUE KEY (c1), +KEY (c2) +) ENGINE=MyISAM; +INSERT INTO t1 VALUES (1,'\Z\Z\Z\Z'); +INSERT INTO t1 VALUES (2,'\Z\Z\Z\Z\Z\Z'); +INSERT INTO t1 VALUES (3,'\Z\Z\Z\Z'); +select c1 from t1 where c2='\Z\Z\Z\Z'; +c1 +1 +3 +DELETE FROM t1 WHERE (c1 = 1); +select c1 from t1 where c2='\Z\Z\Z\Z'; +c1 +3 +DELETE FROM t1 WHERE (c1 = 3); +select c1 from t1 where c2='\Z\Z\Z\Z'; +c1 diff --git a/mysql-test/t/key.test b/mysql-test/t/key.test index ce10f07cf07bcf5b6a68b9f6c10d4eac628afb58..5c365ccf965b0402658b842ca1a1dec70102b2fb 100644 --- a/mysql-test/t/key.test +++ b/mysql-test/t/key.test @@ -252,3 +252,22 @@ select c from t1 where c=0xD0B1212223D0B1D0B1D0B1D0B1D0B1; select t from t1 where t=0xD0B1D0B1212223D0B1D0B1D0B1D0B1; drop table t1; +# +# BUG#6151 - myisam index corruption +# +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 ( + c1 int, + c2 varbinary(240), + UNIQUE KEY (c1), + KEY (c2) +) ENGINE=MyISAM; +INSERT INTO t1 VALUES (1,'\Z\Z\Z\Z'); +INSERT INTO t1 VALUES (2,'\Z\Z\Z\Z\Z\Z'); +INSERT INTO t1 VALUES (3,'\Z\Z\Z\Z'); +select c1 from t1 where c2='\Z\Z\Z\Z'; +DELETE FROM t1 WHERE (c1 = 1); +select c1 from t1 where c2='\Z\Z\Z\Z'; +DELETE FROM t1 WHERE (c1 = 3); +select c1 from t1 where c2='\Z\Z\Z\Z'; +