Commit 86d28519 authored by unknown's avatar unknown

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
...@@ -242,7 +242,10 @@ uint _mi_pack_key(register MI_INFO *info, uint keynr, uchar *key, uchar *old, ...@@ -242,7 +242,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_PART | HA_BLOB_PART)) if (keyseg->flag & (HA_VAR_LENGTH_PART | HA_BLOB_PART))
{
k_length-=2; /* Skip length */ k_length-=2; /* Skip length */
old+= 2;
}
continue; /* Found NULL */ continue; /* Found NULL */
} }
} }
......
...@@ -226,3 +226,13 @@ create table t1 (v varchar(65530), key(v(10))); ...@@ -226,3 +226,13 @@ create table t1 (v varchar(65530), key(v(10)));
insert into t1 values(repeat('a',65530)); insert into t1 values(repeat('a',65530));
select length(v) from t1 where v=repeat('a',65530); select length(v) from t1 where v=repeat('a',65530);
drop table t1; 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;
...@@ -1858,6 +1858,15 @@ select length(v) from t1 where v=repeat('a',65530); ...@@ -1858,6 +1858,15 @@ select length(v) from t1 where v=repeat('a',65530);
length(v) length(v)
65530 65530
drop table t1; 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)); create table t1 (v varchar(65530), key(v));
Warnings: Warnings:
Warning 1071 Specified key was too long; max key length is 255 bytes Warning 1071 Specified key was too long; max key length is 255 bytes
......
...@@ -2359,6 +2359,15 @@ select length(v) from t1 where v=repeat('a',65530); ...@@ -2359,6 +2359,15 @@ select length(v) from t1 where v=repeat('a',65530);
length(v) length(v)
65530 65530
drop table t1; 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)); create table t1 (v varchar(65530), key(v));
ERROR HY000: Can't create table './test/t1' (errno: 139) ERROR HY000: Can't create table './test/t1' (errno: 139)
create table t1 (v varchar(65536)); create table t1 (v varchar(65536));
......
...@@ -1157,6 +1157,15 @@ select length(v) from t1 where v=repeat('a',65530); ...@@ -1157,6 +1157,15 @@ select length(v) from t1 where v=repeat('a',65530);
length(v) length(v)
65530 65530
drop table t1; 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)); create table t1 (v varchar(65530), key(v));
Warnings: Warnings:
Warning 1071 Specified key was too long; max key length is 1000 bytes Warning 1071 Specified key was too long; max key length is 1000 bytes
......
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