summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoreland@mysql.com <>2004-08-04 12:00:54 +0200
committerjoreland@mysql.com <>2004-08-04 12:00:54 +0200
commit5dd11be77b89bd3ee841e531733eef8750767380 (patch)
tree25408146811b35bb00f90aa65d4178f2c5c7d4da
parent6d0e2e72ce99c60bc85f36f6188e07e26cf1829a (diff)
parent39e63640b71ae04eec6b02283196ac4157069c7f (diff)
downloadmariadb-git-5dd11be77b89bd3ee841e531733eef8750767380.tar.gz
Merge mysql.com:/home/jonas/src/mysql-4.1
into mysql.com:/home/jonas/src/mysql-4.1-ndb
-rw-r--r--mysql-test/r/ndb_limit.result31
-rw-r--r--mysql-test/r/ndb_truncate.result14
-rw-r--r--mysql-test/t/ndb_limit.test44
-rw-r--r--mysql-test/t/ndb_truncate.test33
-rw-r--r--sql/ha_ndbcluster.cc14
-rw-r--r--sql/handler.h3
6 files changed, 138 insertions, 1 deletions
diff --git a/mysql-test/r/ndb_limit.result b/mysql-test/r/ndb_limit.result
new file mode 100644
index 00000000000..6574aa0bb1a
--- /dev/null
+++ b/mysql-test/r/ndb_limit.result
@@ -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;
diff --git a/mysql-test/r/ndb_truncate.result b/mysql-test/r/ndb_truncate.result
new file mode 100644
index 00000000000..38f3a78029c
--- /dev/null
+++ b/mysql-test/r/ndb_truncate.result
@@ -0,0 +1,14 @@
+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(*)
+5000
+truncate table t2;
+select count(*) from t2;
+count(*)
+0
+drop table t2;
diff --git a/mysql-test/t/ndb_limit.test b/mysql-test/t/ndb_limit.test
new file mode 100644
index 00000000000..b0b6f3c4f17
--- /dev/null
+++ b/mysql-test/t/ndb_limit.test
@@ -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;
diff --git a/mysql-test/t/ndb_truncate.test b/mysql-test/t/ndb_truncate.test
new file mode 100644
index 00000000000..63bb8cbefb6
--- /dev/null
+++ b/mysql-test/t/ndb_truncate.test
@@ -0,0 +1,33 @@
+-- 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=500;
+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;
+
+truncate table t2;
+
+select count(*) from t2;
+
+drop table t2;
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
index 2c966aab73a..f9dca1b36bb 100644
--- a/sql/ha_ndbcluster.cc
+++ b/sql/ha_ndbcluster.cc
@@ -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);
diff --git a/sql/handler.h b/sql/handler.h
index 28b0b8df6e2..3dd89a0c5d0 100644
--- a/sql/handler.h
+++ b/sql/handler.h
@@ -516,7 +516,8 @@ extern TYPELIB tx_isolation_typelib;
#define ha_rollback(thd) (ha_rollback_trans((thd), &((thd)->transaction.all)))
#define ha_supports_generate(T) (T != DB_TYPE_INNODB && \
- T != DB_TYPE_BERKELEY_DB)
+ T != DB_TYPE_BERKELEY_DB && \
+ T != DB_TYPE_NDBCLUSTER)
bool ha_caching_allowed(THD* thd, char* table_key,
uint key_length, uint8 cache_type);