mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
BUG#4818 DELETE FROM tab LIMIT
Check if there are any operations pending that needs to be taken over to the updating/deleting transaction before closing the scan
This commit is contained in:
31
mysql-test/r/ndb_limit.result
Normal file
31
mysql-test/r/ndb_limit.result
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
DROP TABLE IF EXISTS t2;
|
||||||
|
CREATE TABLE t2 (
|
||||||
|
a bigint unsigned NOT NULL PRIMARY KEY,
|
||||||
|
b int unsigned not null,
|
||||||
|
c int unsigned
|
||||||
|
) engine=ndbcluster;
|
||||||
|
select count(*) from t2;
|
||||||
|
count(*)
|
||||||
|
10000
|
||||||
|
delete from t2 limit 1;
|
||||||
|
select count(*) from t2;
|
||||||
|
count(*)
|
||||||
|
9999
|
||||||
|
delete from t2 limit 100;
|
||||||
|
select count(*) from t2;
|
||||||
|
count(*)
|
||||||
|
9899
|
||||||
|
delete from t2 limit 1000;
|
||||||
|
select count(*) from t2;
|
||||||
|
count(*)
|
||||||
|
8899
|
||||||
|
update t2 set c=12345678 limit 100;
|
||||||
|
select count(*) from t2 where c=12345678;
|
||||||
|
count(*)
|
||||||
|
100
|
||||||
|
select count(*) from t2 where c=12345678 limit 1000;
|
||||||
|
count(*)
|
||||||
|
100
|
||||||
|
select * from t2 limit 0;
|
||||||
|
a b c
|
||||||
|
drop table t2;
|
44
mysql-test/t/ndb_limit.test
Normal file
44
mysql-test/t/ndb_limit.test
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
-- source include/have_ndb.inc
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
DROP TABLE IF EXISTS t2;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
|
||||||
|
CREATE TABLE t2 (
|
||||||
|
a bigint unsigned NOT NULL PRIMARY KEY,
|
||||||
|
b int unsigned not null,
|
||||||
|
c int unsigned
|
||||||
|
) engine=ndbcluster;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# insert records into table
|
||||||
|
#
|
||||||
|
let $1=1000;
|
||||||
|
disable_query_log;
|
||||||
|
while ($1)
|
||||||
|
{
|
||||||
|
eval insert into t2 values($1*10, $1+9, 5*$1), ($1*10+1, $1+10, 7),($1*10+2, $1+10, 7*$1), ($1*10+3, $1+10, 10+$1), ($1*10+4, $1+10, 70*$1), ($1*10+5, $1+10, 7), ($1*10+6, $1+10, 9), ($1*10+7, $1+299, 899), ($1*10+8, $1+10, 12), ($1*10+9, $1+10, 14*$1);
|
||||||
|
dec $1;
|
||||||
|
}
|
||||||
|
enable_query_log;
|
||||||
|
|
||||||
|
select count(*) from t2;
|
||||||
|
|
||||||
|
delete from t2 limit 1;
|
||||||
|
select count(*) from t2;
|
||||||
|
|
||||||
|
delete from t2 limit 100;
|
||||||
|
select count(*) from t2;
|
||||||
|
|
||||||
|
delete from t2 limit 1000;
|
||||||
|
select count(*) from t2;
|
||||||
|
|
||||||
|
update t2 set c=12345678 limit 100;
|
||||||
|
select count(*) from t2 where c=12345678;
|
||||||
|
select count(*) from t2 where c=12345678 limit 1000;
|
||||||
|
|
||||||
|
select * from t2 limit 0;
|
||||||
|
|
||||||
|
drop table t2;
|
@ -1937,11 +1937,25 @@ int ha_ndbcluster::rnd_init(bool scan)
|
|||||||
int ha_ndbcluster::close_scan()
|
int ha_ndbcluster::close_scan()
|
||||||
{
|
{
|
||||||
NdbResultSet *cursor= m_active_cursor;
|
NdbResultSet *cursor= m_active_cursor;
|
||||||
|
NdbConnection *trans= m_active_trans;
|
||||||
DBUG_ENTER("close_scan");
|
DBUG_ENTER("close_scan");
|
||||||
|
|
||||||
if (!cursor)
|
if (!cursor)
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
|
|
||||||
|
|
||||||
|
if (ops_pending)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Take over any pending transactions to the
|
||||||
|
deleteing/updating transaction before closing the scan
|
||||||
|
*/
|
||||||
|
DBUG_PRINT("info", ("ops_pending: %d", ops_pending));
|
||||||
|
if (trans->execute(NoCommit) != 0)
|
||||||
|
DBUG_RETURN(ndb_err(trans));
|
||||||
|
ops_pending= 0;
|
||||||
|
}
|
||||||
|
|
||||||
cursor->close();
|
cursor->close();
|
||||||
m_active_cursor= NULL;
|
m_active_cursor= NULL;
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
|
Reference in New Issue
Block a user