MDEV-4813 Replication fails on updating a MEMORY table with an index using btree

skip NULL VARCHAR key parts like it's done elsewhere
This commit is contained in:
Sergei Golubchik 2014-10-07 10:54:14 +02:00
parent d2e808025a
commit e5bc21af37
3 changed files with 18 additions and 0 deletions

View File

@ -0,0 +1,6 @@
create table t1 (f1 varchar(128), f2 varchar(128), key (f2,f1) using btree) engine=memory;
insert into t1 values (null,'not'),('one',null),('two',null),('three','');
select * from t1 where f1 = 'one' and f2 is null;
f1 f2
one NULL
drop table t1;

View File

@ -0,0 +1,7 @@
#
# MDEV-4813 Replication fails on updating a MEMORY table with an index using btree
#
create table t1 (f1 varchar(128), f2 varchar(128), key (f2,f1) using btree) engine=memory;
insert into t1 values (null,'not'),('one',null),('two',null),('three','');
select * from t1 where f1 = 'one' and f2 is null;
drop table t1;

View File

@ -876,8 +876,13 @@ uint hp_rb_pack_key(HP_KEYDEF *keydef, uchar *key, const uchar *old,
if (seg->null_bit)
{
if (!(*key++= (char) 1 - *old++))
{
/* Add key pack length (2) to key for VARCHAR segments */
if (seg->type == HA_KEYTYPE_VARTEXT1)
old+= 2;
continue;
}
}
if (seg->flag & HA_SWAP_KEY)
{
uint length= seg->length;