Commit c9f64f71 authored by cmiller@zippy.cornsilk.net's avatar cmiller@zippy.cornsilk.net
Browse files

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

set.

(Ramil's patch, recreated.)
parent 757493d4
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -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);
+35 −0
Original line number Diff line number Diff line
@@ -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
+19 −1
Original line number Diff line number Diff line
@@ -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