summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <mskold@mysql.com>2006-06-02 07:26:45 +0200
committerunknown <mskold@mysql.com>2006-06-02 07:26:45 +0200
commit9f7fa7628a200a8366ce1c84a9083aea59a57439 (patch)
tree7ca1918d7c36ccdf31d0128f0777f63896bce3a5
parente531b42b317c4f2e4b8b69de9d84b08134753afb (diff)
downloadmariadb-git-9f7fa7628a200a8366ce1c84a9083aea59a57439.tar.gz
Bug #18864 TRUNCATE TABLE doesn't reset AUTO_INCREMENT value on ndb table
-rw-r--r--mysql-test/r/ndb_truncate.result23
-rw-r--r--mysql-test/t/ndb_truncate.test23
-rw-r--r--sql/ha_ndbcluster.cc6
-rw-r--r--sql/handler.h3
4 files changed, 37 insertions, 18 deletions
diff --git a/mysql-test/r/ndb_truncate.result b/mysql-test/r/ndb_truncate.result
index 38f3a78029c..811e5e3afeb 100644
--- a/mysql-test/r/ndb_truncate.result
+++ b/mysql-test/r/ndb_truncate.result
@@ -1,14 +1,23 @@
-DROP TABLE IF EXISTS t2;
-CREATE TABLE t2 (
-a bigint unsigned NOT NULL PRIMARY KEY,
+DROP TABLE IF EXISTS t1, t2;
+CREATE TABLE t1 (
+a bigint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
b int unsigned not null,
c int unsigned
) engine=ndbcluster;
-select count(*) from t2;
+select count(*) from t1;
count(*)
5000
-truncate table t2;
-select count(*) from t2;
+select * from t1 order by a limit 2;
+a b c
+1 509 2500
+2 510 7
+truncate table t1;
+select count(*) from t1;
count(*)
0
-drop table t2;
+insert into t1 values(NULL,1,1),(NULL,2,2);
+select * from t1 order by a;
+a b c
+1 1 1
+2 2 2
+drop table t1;
diff --git a/mysql-test/t/ndb_truncate.test b/mysql-test/t/ndb_truncate.test
index 73af70d0d0f..a1ef4be0d48 100644
--- a/mysql-test/t/ndb_truncate.test
+++ b/mysql-test/t/ndb_truncate.test
@@ -2,12 +2,11 @@
-- source include/not_embedded.inc
--disable_warnings
-DROP TABLE IF EXISTS t2;
+DROP TABLE IF EXISTS t1, t2;
--enable_warnings
-
-CREATE TABLE t2 (
- a bigint unsigned NOT NULL PRIMARY KEY,
+CREATE TABLE t1 (
+ a bigint unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY,
b int unsigned not null,
c int unsigned
) engine=ndbcluster;
@@ -20,17 +19,23 @@ 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);
+ eval insert into t1 values(NULL, $1+9, 5*$1), (NULL, $1+10, 7),(NULL, $1+10, 7*$1), (NULL, $1+10, 10+$1), (NULL, $1+10, 70*$1), (NULL, $1+10, 7), (NULL, $1+10, 9), (NULL, $1+299, 899), (NULL, $1+10, 12), (NULL, $1+10, 14*$1);
dec $1;
}
enable_query_log;
-select count(*) from t2;
+select count(*) from t1;
+
+select * from t1 order by a limit 2;
+
+truncate table t1;
+
+select count(*) from t1;
-truncate table t2;
+insert into t1 values(NULL,1,1),(NULL,2,2);
-select count(*) from t2;
+select * from t1 order by a;
-drop table t2;
+drop table t1;
# End of 4.1 tests
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
index 3f2c6cbc6bb..ecbe42860ef 100644
--- a/sql/ha_ndbcluster.cc
+++ b/sql/ha_ndbcluster.cc
@@ -3767,6 +3767,12 @@ int ha_ndbcluster::create(const char *name,
set_dbname(name2);
set_tabname(name2);
+ if (current_thd->lex->sql_command == SQLCOM_TRUNCATE)
+ {
+ DBUG_PRINT("info", ("Dropping and re-creating table for TRUNCATE"));
+ if ((my_errno= delete_table(name)))
+ DBUG_RETURN(my_errno);
+ }
if (create_from_engine)
{
/*
diff --git a/sql/handler.h b/sql/handler.h
index d4bb19dd7b2..e361dfd4559 100644
--- a/sql/handler.h
+++ b/sql/handler.h
@@ -533,8 +533,7 @@ extern TYPELIB myisam_stats_method_typelib;
#define ha_supports_generate(T) (T != DB_TYPE_INNODB && \
T != DB_TYPE_BERKELEY_DB && \
T != DB_TYPE_ARCHIVE_DB && \
- T != DB_TYPE_FEDERATED_DB && \
- T != DB_TYPE_NDBCLUSTER)
+ T != DB_TYPE_FEDERATED_DB)
bool ha_caching_allowed(THD* thd, char* table_key,
uint key_length, uint8 cache_type);