mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
fix and test case for the bug #787: HANDLER without INDEX doesn't work with deleted rows
This commit is contained in:
@ -146,6 +146,25 @@ alter table t1 type=MyISAM;
|
|||||||
handler t2 read first;
|
handler t2 read first;
|
||||||
Unknown table 't2' in HANDLER
|
Unknown table 't2' in HANDLER
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1 (a int);
|
||||||
|
insert into t1 values (1),(2),(3),(4),(5),(6);
|
||||||
|
delete from t1 limit 2;
|
||||||
|
handler t1 open;
|
||||||
|
handler t1 read first;
|
||||||
|
a
|
||||||
|
3
|
||||||
|
handler t1 read first limit 1,1;
|
||||||
|
a
|
||||||
|
4
|
||||||
|
handler t1 read first limit 2,2;
|
||||||
|
a
|
||||||
|
5
|
||||||
|
6
|
||||||
|
delete from t1 limit 3;
|
||||||
|
handler t1 read first;
|
||||||
|
a
|
||||||
|
6
|
||||||
|
drop table t1;
|
||||||
create table t1(a int, index(a));
|
create table t1(a int, index(a));
|
||||||
insert into t1 values (1), (2), (3);
|
insert into t1 values (1), (2), (3);
|
||||||
handler t1 open;
|
handler t1 open;
|
||||||
|
@ -80,6 +80,21 @@ alter table t1 type=MyISAM;
|
|||||||
handler t2 read first;
|
handler t2 read first;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# test case for the bug #787
|
||||||
|
#
|
||||||
|
|
||||||
|
create table t1 (a int);
|
||||||
|
insert into t1 values (1),(2),(3),(4),(5),(6);
|
||||||
|
delete from t1 limit 2;
|
||||||
|
handler t1 open;
|
||||||
|
handler t1 read first;
|
||||||
|
handler t1 read first limit 1,1;
|
||||||
|
handler t1 read first limit 2,2;
|
||||||
|
delete from t1 limit 3;
|
||||||
|
handler t1 read first;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
#
|
#
|
||||||
#test for #751
|
#test for #751
|
||||||
#
|
#
|
||||||
|
@ -219,6 +219,8 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables,
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (err == HA_ERR_RECORD_DELETED)
|
||||||
|
continue;
|
||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
if (err != HA_ERR_KEY_NOT_FOUND && err != HA_ERR_END_OF_FILE)
|
if (err != HA_ERR_KEY_NOT_FOUND && err != HA_ERR_END_OF_FILE)
|
||||||
@ -230,31 +232,24 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables,
|
|||||||
}
|
}
|
||||||
goto ok;
|
goto ok;
|
||||||
}
|
}
|
||||||
if (cond)
|
if (cond && !cond->val_int())
|
||||||
|
continue;
|
||||||
|
if (!err && num_rows >= offset_limit)
|
||||||
{
|
{
|
||||||
err=err;
|
String *packet = &thd->packet;
|
||||||
if (!cond->val_int())
|
Item *item;
|
||||||
continue;
|
packet->length(0);
|
||||||
}
|
it.rewind();
|
||||||
if (num_rows>=offset_limit)
|
while ((item=it++))
|
||||||
{
|
|
||||||
if (!err)
|
|
||||||
{
|
{
|
||||||
String *packet = &thd->packet;
|
if (item->send(thd,packet))
|
||||||
Item *item;
|
{
|
||||||
packet->length(0);
|
packet->free(); // Free used
|
||||||
it.rewind();
|
my_error(ER_OUT_OF_RESOURCES,MYF(0));
|
||||||
while ((item=it++))
|
goto err;
|
||||||
{
|
}
|
||||||
if (item->send(thd,packet))
|
|
||||||
{
|
|
||||||
packet->free(); // Free used
|
|
||||||
my_error(ER_OUT_OF_RESOURCES,MYF(0));
|
|
||||||
goto err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
my_net_write(&thd->net, (char*)packet->ptr(), packet->length());
|
|
||||||
}
|
}
|
||||||
|
my_net_write(&thd->net, (char*)packet->ptr(), packet->length());
|
||||||
}
|
}
|
||||||
num_rows++;
|
num_rows++;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user