1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +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:
Konstantin Osipov
2009-12-11 15:24:23 +03:00
parent 3097c22afd
commit 5a4f8e214c
8 changed files with 470 additions and 35 deletions

View File

@ -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;