mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
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.
This commit is contained in:
70
mysql-test/r/truncate_coverage.result
Normal file
70
mysql-test/r/truncate_coverage.result
Normal file
@ -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';
|
Reference in New Issue
Block a user