Commit 81882f71 authored by unknown's avatar unknown
Browse files

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.


myisam/mi_key.c:
  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 (for NULL value the 
  format is: null_marker 0x01, value length 0x00 0x00, data: 0x00 keyseg->length times).
  We need to advance over 2 bytes separately as keyseg->length doesn't include them.
mysql-test/r/myisam.result:
  Testcase for BUG#13814
mysql-test/t/myisam.test:
  Testcase for BUG#13814
parent 5e8515d9
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -217,7 +217,10 @@ uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old,
      {
	k_length-=length;
        if (keyseg->flag & (HA_VAR_LENGTH | HA_BLOB_PART))
        {
          old+= 2;
          k_length-=2;                                  /* Skip length */
        }
	continue;					/* Found NULL */
      }
    }
+18 −0
Original line number Diff line number Diff line
@@ -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	4	d	A	0	NULL	NULL	YES	BTREE	
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;
+18 −0
Original line number Diff line number Diff line
@@ -656,4 +656,22 @@ analyze table t1;
show index from t1;

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