summaryrefslogtreecommitdiff
path: root/mysql-test/r
diff options
context:
space:
mode:
authorKonstantin Osipov <kostja@sun.com>2009-12-11 15:24:23 +0300
committerKonstantin Osipov <kostja@sun.com>2009-12-11 15:24:23 +0300
commit5a4f8e214c9d1ce67ea50ec360932e932d909e98 (patch)
treefcbe22f09de95c36f360e6f090d07d24c22fcdc6 /mysql-test/r
parent3097c22afdcd3dce204c7587bdadd2a2872eb3c0 (diff)
downloadmariadb-git-5a4f8e214c9d1ce67ea50ec360932e932d909e98.tar.gz
Backport of:
------------------------------------------------------------ 2599.161.3 Ingo Struewing 2009-07-21 Bug#20667 - Truncate table fails for a write locked table TRUNCATE TABLE was not allowed under LOCK TABLES. The patch removes this restriction. mysql_truncate() does now handle that case. mysql-test/r/merge.result: Bug#20667 - Truncate table fails for a write locked table Updated test result. mysql-test/r/truncate.result: Bug#20667 - Truncate table fails for a write locked table Updated test result. mysql-test/r/truncate_coverage.result: Bug#20667 - Truncate table fails for a write locked table New test result. mysql-test/t/merge.test: Bug#20667 - Truncate table fails for a write locked table Updated test case due to now working TRUNCATE under LOCK TABLES. Added some SELECTs to show that child tables are truncated. mysql-test/t/truncate.test: Bug#20667 - Truncate table fails for a write locked table Added test cases for TRUNCATE under LOCK TABLE. mysql-test/t/truncate_coverage.test: Bug#20667 - Truncate table fails for a write locked table New test file. Coverage tests for TRUNCATE. sql/sql_delete.cc: Bug#20667 - Truncate table fails for a write locked table Added branches for thd->locked_tables_mode. sql/sql_parse.cc: Bug#20667 - Truncate table fails for a write locked table Deleted rejection of TRUNCATE in case of LOCK TABLES.
Diffstat (limited to 'mysql-test/r')
-rw-r--r--mysql-test/r/merge.result29
-rw-r--r--mysql-test/r/truncate.result87
-rw-r--r--mysql-test/r/truncate_coverage.result70
3 files changed, 175 insertions, 11 deletions
diff --git a/mysql-test/r/merge.result b/mysql-test/r/merge.result
index 0417b91490e..a215c818b0f 100644
--- a/mysql-test/r/merge.result
+++ b/mysql-test/r/merge.result
@@ -1046,18 +1046,21 @@ c1
LOCK TABLE t1 WRITE, t2 WRITE, t3 WRITE;
INSERT INTO t1 VALUES (1);
TRUNCATE TABLE t3;
-ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
SELECT * FROM t3;
c1
-1
-2
+UNLOCK TABLES;
+SELECT * FROM t1;
+c1
+SELECT * FROM t2;
+c1
#
# Truncate child table under locked tables.
+LOCK TABLE t1 WRITE, t2 WRITE, t3 WRITE;
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (2);
TRUNCATE TABLE t1;
-ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
SELECT * FROM t3;
c1
-1
2
UNLOCK TABLES;
DROP TABLE t1, t2, t3;
@@ -1089,18 +1092,24 @@ INSERT INTO t1 VALUES (1);
CREATE TABLE t4 (c1 INT, INDEX(c1));
LOCK TABLE t4 WRITE;
TRUNCATE TABLE t3;
-ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
SELECT * FROM t3;
c1
-1
-2
+SELECT * FROM t1;
+c1
+SELECT * FROM t2;
+c1
#
# Truncate temporary child table under locked tables.
+INSERT INTO t1 VALUES (1);
+INSERT INTO t2 VALUES (2);
TRUNCATE TABLE t1;
-ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
SELECT * FROM t3;
c1
-1
+2
+SELECT * FROM t1;
+c1
+SELECT * FROM t2;
+c1
2
UNLOCK TABLES;
DROP TABLE t1, t2, t3, t4;
diff --git a/mysql-test/r/truncate.result b/mysql-test/r/truncate.result
index 8ce2ad9be21..8f237c81e75 100644
--- a/mysql-test/r/truncate.result
+++ b/mysql-test/r/truncate.result
@@ -1,4 +1,4 @@
-drop table if exists t1;
+drop table if exists t1, t2;
create table t1 (a integer, b integer,c1 CHAR(10));
insert into t1 (a) values (1),(2);
truncate table t1;
@@ -61,6 +61,91 @@ ERROR 42S02: Table 'test.v1' doesn't exist
drop view v1;
drop table t1;
#
+# Bug#20667 - Truncate table fails for a write locked table
+#
+CREATE TABLE t1 (c1 INT);
+LOCK TABLE t1 WRITE;
+INSERT INTO t1 VALUES (1);
+SELECT * FROM t1;
+c1
+1
+TRUNCATE TABLE t1;
+SELECT * FROM t1;
+c1
+UNLOCK TABLES;
+LOCK TABLE t1 READ;
+TRUNCATE TABLE t1;
+ERROR HY000: Table 't1' was locked with a READ lock and can't be updated
+UNLOCK TABLES;
+CREATE TABLE t2 (c1 INT);
+LOCK TABLE t2 WRITE;
+TRUNCATE TABLE t1;
+ERROR HY000: Table 't1' was not locked with LOCK TABLES
+UNLOCK TABLES;
+CREATE VIEW v1 AS SELECT t1.c1 FROM t1,t2 WHERE t1.c1 = t2.c1;
+INSERT INTO t1 VALUES (1), (2), (3);
+INSERT INTO t2 VALUES (1), (3), (4);
+SELECT * FROM v1;
+c1
+1
+3
+TRUNCATE v1;
+ERROR 42S02: Table 'test.v1' doesn't exist
+SELECT * FROM v1;
+c1
+1
+3
+LOCK TABLE t1 WRITE;
+SELECT * FROM v1;
+ERROR HY000: Table 'v1' was not locked with LOCK TABLES
+TRUNCATE v1;
+ERROR 42S02: Table 'test.v1' doesn't exist
+SELECT * FROM v1;
+ERROR HY000: Table 'v1' was not locked with LOCK TABLES
+UNLOCK TABLES;
+LOCK TABLE t1 WRITE, t2 WRITE;
+SELECT * FROM v1;
+ERROR HY000: Table 'v1' was not locked with LOCK TABLES
+TRUNCATE v1;
+ERROR 42S02: Table 'test.v1' doesn't exist
+SELECT * FROM v1;
+ERROR HY000: Table 'v1' was not locked with LOCK TABLES
+UNLOCK TABLES;
+LOCK TABLE v1 WRITE;
+SELECT * FROM v1;
+c1
+1
+3
+TRUNCATE v1;
+ERROR 42S02: Table 'test.v1' doesn't exist
+SELECT * FROM v1;
+c1
+1
+3
+UNLOCK TABLES;
+LOCK TABLE t1 WRITE, t2 WRITE, v1 WRITE;
+SELECT * FROM v1;
+c1
+1
+3
+TRUNCATE v1;
+ERROR 42S02: Table 'test.v1' doesn't exist
+SELECT * FROM v1;
+c1
+1
+3
+UNLOCK TABLES;
+DROP VIEW v1;
+DROP TABLE t1, t2;
+CREATE PROCEDURE p1() SET @a = 5;
+TRUNCATE p1;
+ERROR 42S02: Table 'test.p1' doesn't exist
+SHOW CREATE PROCEDURE p1;
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+p1 CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`()
+SET @a = 5 latin1 latin1_swedish_ci latin1_swedish_ci
+DROP PROCEDURE p1;
+#
# Bug#46452 Crash in MDL, HANDLER OPEN + TRUNCATE TABLE
#
DROP TABLE IF EXISTS t1;
diff --git a/mysql-test/r/truncate_coverage.result b/mysql-test/r/truncate_coverage.result
new file mode 100644
index 00000000000..bb036329f6f
--- /dev/null
+++ b/mysql-test/r/truncate_coverage.result
@@ -0,0 +1,70 @@
+SET DEBUG_SYNC='RESET';
+DROP TABLE IF EXISTS t1;
+#
+# Bug#20667 - Truncate table fails for a write locked table
+#
+CREATE TABLE t1 (c1 INT);
+INSERT INTO t1 VALUES (1);
+#
+# connection con1
+START TRANSACTION;
+INSERT INTO t1 VALUES (2);
+#
+# connection default
+LOCK TABLE t1 WRITE;
+SET DEBUG_SYNC='mdl_upgrade_shared_lock_to_exclusive SIGNAL waiting';
+TRUNCATE TABLE t1;
+#
+# connection con1
+SET DEBUG_SYNC='now WAIT_FOR waiting';
+KILL QUERY @id;
+COMMIT;
+#
+# connection default
+ERROR 70100: Query execution was interrupted
+UNLOCK TABLES;
+DROP TABLE t1;
+SET DEBUG_SYNC='RESET';
+CREATE TABLE t1 (c1 INT);
+INSERT INTO t1 VALUES (1);
+#
+# connection con1
+START TRANSACTION;
+INSERT INTO t1 VALUES (2);
+#
+# connection default
+LOCK TABLE t1 WRITE;
+SET DEBUG_SYNC='mdl_upgrade_shared_lock_to_exclusive SIGNAL waiting';
+TRUNCATE TABLE t1;
+#
+# connection con1
+SET DEBUG_SYNC='now WAIT_FOR waiting';
+COMMIT;
+#
+# connection default
+ERROR 42S02: Table 'test.t1' doesn't exist
+UNLOCK TABLES;
+DROP TABLE t1;
+ERROR 42S02: Unknown table 't1'
+SET DEBUG_SYNC='RESET';
+CREATE TABLE t1 (c1 INT);
+INSERT INTO t1 VALUES (1);
+#
+# connection con1
+START TRANSACTION;
+INSERT INTO t1 VALUES (2);
+#
+# connection default
+SET DEBUG_SYNC='mdl_acquire_exclusive_locks_wait SIGNAL waiting';
+TRUNCATE TABLE t1;
+#
+# connection con1
+SET DEBUG_SYNC='now WAIT_FOR waiting';
+KILL QUERY @id;
+COMMIT;
+#
+# connection default
+ERROR 70100: Query execution was interrupted
+UNLOCK TABLES;
+DROP TABLE t1;
+SET DEBUG_SYNC='RESET';