Commit 8b9bab27 authored by sergefp@mysql.com's avatar sergefp@mysql.com

Fix for BUG#13814: in mi_pack_key(), when processing NULL value for TINYBLOB key segment,

do advance the source pointer over 2 bytes that specify value length.
parent 7a8bd252
...@@ -217,7 +217,10 @@ uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old, ...@@ -217,7 +217,10 @@ uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old,
{ {
k_length-=length; k_length-=length;
if (keyseg->flag & (HA_VAR_LENGTH | HA_BLOB_PART)) if (keyseg->flag & (HA_VAR_LENGTH | HA_BLOB_PART))
{
old+= 2;
k_length-=2; /* Skip length */ k_length-=2; /* Skip length */
}
continue; /* Found NULL */ continue; /* Found NULL */
} }
} }
......
...@@ -702,3 +702,21 @@ t1 1 a 2 b A 0 NULL NULL YES BTREE ...@@ -702,3 +702,21 @@ t1 1 a 2 b A 0 NULL NULL YES BTREE
t1 1 a 3 c A 0 NULL NULL YES BTREE t1 1 a 3 c A 0 NULL NULL YES BTREE
t1 1 a 4 d A 0 NULL NULL YES BTREE t1 1 a 4 d A 0 NULL NULL YES BTREE
set myisam_stats_method=DEFAULT; set myisam_stats_method=DEFAULT;
drop table t1;
create table t1(
cip INT NOT NULL,
time TIME NOT NULL,
score INT NOT NULL DEFAULT 0,
bob TINYBLOB
);
insert into t1 (cip, time) VALUES (1, '00:01'), (2, '00:02'), (3,'00:03');
insert into t1 (cip, bob, time) VALUES (4, 'a', '00:04'), (5, 'b', '00:05'),
(6, 'c', '00:06');
select * from t1 where bob is null and cip=1;
cip time score bob
1 00:01:00 0 NULL
create index bug on t1 (bob(22), cip, time);
select * from t1 where bob is null and cip=1;
cip time score bob
1 00:01:00 0 NULL
drop table t1;
...@@ -656,4 +656,22 @@ analyze table t1; ...@@ -656,4 +656,22 @@ analyze table t1;
show index from t1; show index from t1;
set myisam_stats_method=DEFAULT; set myisam_stats_method=DEFAULT;
drop table t1;
# BUG#13814 - key value packed incorrectly for TINYBLOBs
create table t1(
cip INT NOT NULL,
time TIME NOT NULL,
score INT NOT NULL DEFAULT 0,
bob TINYBLOB
);
insert into t1 (cip, time) VALUES (1, '00:01'), (2, '00:02'), (3,'00:03');
insert into t1 (cip, bob, time) VALUES (4, 'a', '00:04'), (5, 'b', '00:05'),
(6, 'c', '00:06');
select * from t1 where bob is null and cip=1;
create index bug on t1 (bob(22), cip, time);
select * from t1 where bob is null and cip=1;
drop table t1;
# End of 4.1 tests # End of 4.1 tests
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