Commit 5ce9e597 authored by unknown's avatar unknown

BUG#6151 - myisam index corruption.

Removed the assumption of a certain key order.
Since 4.1, keys are padded with blanks for comparison.
Hence, shorter keys sort behind longer keys, if the
data bytes have values below BLANK.


mysql-test/r/key.result:
  BUG#6151 - myisam index corruption.
  The test results.
mysql-test/t/key.test:
  BUG#6151 - myisam index corruption.
  Added the test case as derived from the original data.
parent 6d3e14a1
...@@ -826,8 +826,8 @@ static uint remove_key(MI_KEYDEF *keyinfo, uint nod_flag, ...@@ -826,8 +826,8 @@ static uint remove_key(MI_KEYDEF *keyinfo, uint nod_flag,
else else
get_key_length(rest_length,keypos); 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; uint pack_length,tmp;
bmove_upp((char*) keypos,(char*) (lastkey+next_length), bmove_upp((char*) keypos,(char*) (lastkey+next_length),
tmp=(next_length-prev_length)); tmp=(next_length-prev_length));
......
...@@ -267,3 +267,26 @@ select t from t1 where t=0xD0B1D0B1212223D0B1D0B1D0B1D0B1; ...@@ -267,3 +267,26 @@ select t from t1 where t=0xD0B1D0B1212223D0B1D0B1D0B1D0B1;
t t
??!"#???? ??!"#????
drop table t1; 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
...@@ -252,3 +252,22 @@ select c from t1 where c=0xD0B1212223D0B1D0B1D0B1D0B1D0B1; ...@@ -252,3 +252,22 @@ select c from t1 where c=0xD0B1212223D0B1D0B1D0B1D0B1D0B1;
select t from t1 where t=0xD0B1D0B1212223D0B1D0B1D0B1D0B1; select t from t1 where t=0xD0B1D0B1212223D0B1D0B1D0B1D0B1;
drop table t1; 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';
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment