Commit 86d28519 authored by unknown's avatar unknown
Browse files

A fix (bug #10176: problem with varchar keys).


myisam/mi_key.c:
  A fix (bug #10176: problem with varchar keys).
  Should skip key pack length for 'old' too.
parent c8683be4
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -242,7 +242,10 @@ uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old,
      {
	k_length-=length;
        if (keyseg->flag & (HA_VAR_LENGTH_PART | HA_BLOB_PART))
        {
          k_length-=2;                                  /* Skip length */
          old+= 2;
        }
	continue;					/* Found NULL */
      }
    }
+10 −0
Original line number Diff line number Diff line
@@ -226,3 +226,13 @@ create table t1 (v varchar(65530), key(v(10)));
insert into t1 values(repeat('a',65530));
select length(v) from t1 where v=repeat('a',65530);
drop table t1;

#
# Bug #9489: problem with hash indexes
#

create table t1(a int, b varchar(12), key ba(b, a));
insert into t1 values (1, 'A'), (20, NULL);
explain select * from t1 where a=20 and b is null;
select * from t1 where a=20 and b is null;
drop table t1;
+9 −0
Original line number Diff line number Diff line
@@ -1858,6 +1858,15 @@ select length(v) from t1 where v=repeat('a',65530);
length(v)
65530
drop table t1;
create table t1(a int, b varchar(12), key ba(b, a));
insert into t1 values (1, 'A'), (20, NULL);
explain select * from t1 where a=20 and b is null;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	ref	ba	ba	20	const,const	1	Using where
select * from t1 where a=20 and b is null;
a	b
20	NULL
drop table t1;
create table t1 (v varchar(65530), key(v));
Warnings:
Warning	1071	Specified key was too long; max key length is 255 bytes
+9 −0
Original line number Diff line number Diff line
@@ -2359,6 +2359,15 @@ select length(v) from t1 where v=repeat('a',65530);
length(v)
65530
drop table t1;
create table t1(a int, b varchar(12), key ba(b, a));
insert into t1 values (1, 'A'), (20, NULL);
explain select * from t1 where a=20 and b is null;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	ref	ba	ba	20	const,const	1	Using where; Using index
select * from t1 where a=20 and b is null;
a	b
20	NULL
drop table t1;
create table t1 (v varchar(65530), key(v));
ERROR HY000: Can't create table './test/t1' (errno: 139)
create table t1 (v varchar(65536));
+9 −0
Original line number Diff line number Diff line
@@ -1157,6 +1157,15 @@ select length(v) from t1 where v=repeat('a',65530);
length(v)
65530
drop table t1;
create table t1(a int, b varchar(12), key ba(b, a));
insert into t1 values (1, 'A'), (20, NULL);
explain select * from t1 where a=20 and b is null;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	ref	ba	ba	20	const,const	1	Using where; Using index
select * from t1 where a=20 and b is null;
a	b
20	NULL
drop table t1;
create table t1 (v varchar(65530), key(v));
Warnings:
Warning	1071	Specified key was too long; max key length is 1000 bytes