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()
|
||||
{
|
||||
NdbResultSet *cursor= m_active_cursor;
|
||||
NdbConnection *trans= m_active_trans;
|
||||
DBUG_ENTER("close_scan");
|
||||
|
||||
if (!cursor)
|
||||
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();
|
||||
m_active_cursor= NULL;
|
||||
DBUG_RETURN(0);
|
||||
|
Reference in New Issue
Block a user