diff options
author | Michael Widenius <monty@mariadb.org> | 2014-03-12 11:26:40 +0200 |
---|---|---|
committer | Michael Widenius <monty@mariadb.org> | 2014-03-12 11:26:40 +0200 |
commit | f320b12ca52aa32e1a83130a1acbbba6496bb6f1 (patch) | |
tree | 5897482af38f74ff343506b7e3096fbf76b5594b /mysql-test/r | |
parent | 49ca12a107d6a6f3e18729e6481090077b1f1bf8 (diff) | |
download | mariadb-git-f320b12ca52aa32e1a83130a1acbbba6496bb6f1.tar.gz |
MDEV-5619: CREATE OR REPLACE does not release MDL_EXCLUSIVE upon failure
mysql-test/r/create_or_replace.result:
Added test of releasing of metadata locks
mysql-test/t/create_or_replace.test:
Added test of releasing of metadata locks
sql/handler.h:
Added marker if table was deleted as part of CREATE OR REPLACE
sql/sql_base.cc:
Added Locked_tables_list::unlock_locked_table()
sql/sql_class.h:
New prototypes
sql/sql_insert.cc:
Unlock metadata locks for deleted table in case of error. Also do unlock tables if this was the only locked table.
sql/sql_table.cc:
Unlock metadata locks for deleted table in case of error. Also do unlock tables if this was the only locked table.
Diffstat (limited to 'mysql-test/r')
-rw-r--r-- | mysql-test/r/create_or_replace.result | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/mysql-test/r/create_or_replace.result b/mysql-test/r/create_or_replace.result index 8f6ca01d34b..d8138bbc70d 100644 --- a/mysql-test/r/create_or_replace.result +++ b/mysql-test/r/create_or_replace.result @@ -247,6 +247,69 @@ a i 3 3 drop table t1,t3; # +# Test the meta data locks are freed properly +# +create database mysqltest2; +drop table if exists test.t1,mysqltest2.t2; +Warnings: +Note 1051 Unknown table 'test.t1' +Note 1051 Unknown table 'mysqltest2.t2' +create table test.t1 (i int); +create table mysqltest2.t2 like test.t1; +lock table test.t1 write, mysqltest2.t2 write; +select * from information_schema.metadata_lock_info; +THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME +3 MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Global read lock +3 MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1 +3 MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock mysqltest2 +3 MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test +3 MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock mysqltest2 t2 +create or replace table test.t1; +ERROR 42000: A table must have at least 1 column +show tables; +Tables_in_test +t2 +select * from information_schema.metadata_lock_info; +THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME +3 MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Global read lock +3 MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock mysqltest2 +3 MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test +3 MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock mysqltest2 t2 +create or replace table mysqltest2.t2; +ERROR 42000: A table must have at least 1 column +select * from information_schema.metadata_lock_info; +THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME +create table t1 (i int); +drop table t1; +create table test.t1 (i int); +create table mysqltest2.t2 like test.t1; +lock table test.t1 write, mysqltest2.t2 write; +select * from information_schema.metadata_lock_info; +THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME +3 MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Global read lock +3 MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock test t1 +3 MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock mysqltest2 +3 MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test +3 MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock mysqltest2 t2 +create or replace table test.t1 (a int) select 1 as 'a', 2 as 'a'; +ERROR 42S21: Duplicate column name 'a' +show tables; +Tables_in_test +t2 +select * from information_schema.metadata_lock_info; +THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME +3 MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Global read lock +3 MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock mysqltest2 +3 MDL_INTENTION_EXCLUSIVE MDL_EXPLICIT Schema metadata lock test +3 MDL_SHARED_NO_READ_WRITE MDL_EXPLICIT Table metadata lock mysqltest2 t2 +create or replace table mysqltest2.t2 (a int) select 1 as 'a', 2 as 'a'; +ERROR 42S21: Duplicate column name 'a' +select * from information_schema.metadata_lock_info; +THREAD_ID LOCK_MODE LOCK_DURATION LOCK_TYPE TABLE_SCHEMA TABLE_NAME +create table t1 (i int); +drop table t1; +drop database mysqltest2; +# # Testing CREATE .. LIKE # create or replace table t1 like t2; |