mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
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.
This commit is contained in:
@ -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)));
|
|||||||
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);
|
|||||||
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);
|
|||||||
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);
|
|||||||
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
|
||||||
|
Reference in New Issue
Block a user