Bug#9719: DELETE with WHERE on HEAP table just deletes first row of matched

set.

(Ramil's patch, recreated.)
parent 757493d4
......@@ -73,7 +73,10 @@ int hp_rb_delete_key(HP_INFO *info, register HP_KEYDEF *keyinfo,
int res;
if (flag)
{
info->last_pos= NULL; /* For heap_rnext/heap_rprev */
info->lastkey_len= 0;
}
custom_arg.keyseg= keyinfo->seg;
custom_arg.key_length= hp_rb_make_key(keyinfo, info->recbuf, record, recpos);
......
......@@ -246,3 +246,38 @@ DELETE from t1 where a < 100;
SELECT * from t1;
a
DROP TABLE t1;
create table t1(a int not null, key using btree(a)) engine=heap;
insert into t1 values (2), (2), (2), (1), (1), (3), (3), (3), (3);
select a from t1 where a > 2;
a
3
3
3
3
delete from t1 where a < 4;
select a from t1;
a
insert into t1 values (2), (2), (2), (1), (1), (3), (3), (3), (3);
select a from t1 where a > 4;
a
delete from t1 where a > 4;
select a from t1;
a
3
3
1
3
3
1
2
2
2
select a from t1 where a > 3;
a
delete from t1 where a >= 2;
select a from t1;
a
1
1
drop table t1;
End of 4.1 tests
......@@ -164,4 +164,22 @@ DELETE from t1 where a < 100;
SELECT * from t1;
DROP TABLE t1;
# End of 4.1 tests
#
# Bug #9719: problem with delete
#
create table t1(a int not null, key using btree(a)) engine=heap;
insert into t1 values (2), (2), (2), (1), (1), (3), (3), (3), (3);
select a from t1 where a > 2;
delete from t1 where a < 4;
select a from t1;
insert into t1 values (2), (2), (2), (1), (1), (3), (3), (3), (3);
select a from t1 where a > 4;
delete from t1 where a > 4;
select a from t1;
select a from t1 where a > 3;
delete from t1 where a >= 2;
select a from t1;
drop table t1;
--echo End of 4.1 tests
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