polardbxengine/mysql-test/suite/ndb/t/ndb_global_schema_lock.test

136 lines
3.6 KiB
Plaintext

-- source include/have_ndb.inc
#
# Run all the commands which should take the global schema lock
# and thus increment the ndb_schema_locks_count variable
#
--source ndb_init_schema_locks_count.inc
CREATE DATABASE test2;
--source ndb_schema_locks_count.inc
--source ndb_init_schema_locks_count.inc
ALTER DATABASE test2 CHARACTER SET latin2;
--source ndb_schema_locks_count.inc
--source ndb_init_schema_locks_count.inc
DROP DATABASE test2;
--source ndb_schema_locks_count.inc
--source ndb_init_schema_locks_count.inc
CREATE TABLE t1(a int not null primary key) ENGINE ndb;
--source ndb_schema_locks_count.inc
--source ndb_init_schema_locks_count.inc
RENAME TABLE t1 TO t2;
--source ndb_schema_locks_count.inc
--source ndb_init_schema_locks_count.inc
CREATE TABLE t3 LIKE t2;
--source ndb_schema_locks_count.inc
--source ndb_init_schema_locks_count.inc
ALTER TABLE t3 ADD COLUMN b int default NULL;
--source ndb_schema_locks_count.inc
# Insert a row to truncate
INSERT INTO t2 VALUES(1);
--source ndb_init_schema_locks_count.inc
TRUNCATE TABLE t2;
--source ndb_schema_locks_count.inc
--source ndb_init_schema_locks_count.inc
--disable_warnings
CREATE TABLE t4 ENGINE=NDB AS SELECT * FROM t2;
--enable_warnings
--source ndb_schema_locks_count.inc
--source ndb_init_schema_locks_count.inc
DROP TABLE t2;
--source ndb_schema_locks_count.inc
--source ndb_init_schema_locks_count.inc
DROP TABLE t3, t4;
--source ndb_schema_locks_count.inc
#
# Testing GSL behaviour combined with LOCK TABLES
#
# NOTE! Using LOCK TABLES should not be a way to circumvent
# global schema locking
#
CREATE TABLE t10(a int primary key) ENGINE ndb;
#
# Database DDL with READ lock, should return error
#
LOCK TABLES t10 READ;
--error ER_LOCK_OR_ACTIVE_TRANSACTION
CREATE DATABASE test2;
--error ER_LOCK_OR_ACTIVE_TRANSACTION
ALTER DATABASE test2 CHARACTER SET latin2;
--error ER_LOCK_OR_ACTIVE_TRANSACTION
DROP DATABASE test2;
UNLOCK TABLES;
#
# Database DDL with WRITE lock, should return error
#
LOCK TABLES t10 WRITE;
--error ER_LOCK_OR_ACTIVE_TRANSACTION
CREATE DATABASE test2;
--error ER_LOCK_OR_ACTIVE_TRANSACTION
ALTER DATABASE test2 CHARACTER SET latin2;
--error ER_LOCK_OR_ACTIVE_TRANSACTION
DROP DATABASE test2;
UNLOCK TABLES;
#
# Table DDL with READ lock
#
LOCK TABLES t10 READ;
# Catch 22, not possible to lock table until created
--error ER_TABLE_NOT_LOCKED
CREATE TABLE t1(a int not null primary key);
--error ER_TABLE_NOT_LOCKED_FOR_WRITE
RENAME TABLE t10 TO t2;
# Catch 22, not possible to lock table until created
--error ER_TABLE_NOT_LOCKED
CREATE TABLE t3 LIKE t10;
--error ER_TABLE_NOT_LOCKED_FOR_WRITE
ALTER TABLE t10 ADD COLUMN b int default NULL;
--error ER_TABLE_NOT_LOCKED_FOR_WRITE
TRUNCATE TABLE t10;
# Catch 22, not possible to lock table until created
--error ER_TABLE_NOT_LOCKED
CREATE TABLE t4 AS SELECT * FROM t10;
--error ER_TABLE_NOT_LOCKED_FOR_WRITE
DROP TABLE t10;
UNLOCK TABLES;
#
# Table DDL with WRITE lock
#
LOCK TABLES t10 WRITE;
# Catch 22, not possible to lock table until created
--error ER_TABLE_NOT_LOCKED
CREATE TABLE t1(a int not null primary key);
# Catch 22, not possible to lock table until created
--error ER_TABLE_NOT_LOCKED
CREATE TABLE t3 LIKE t10;
--source ndb_init_schema_locks_count.inc
ALTER TABLE t10 ADD COLUMN b int default NULL;
--source ndb_schema_locks_count.inc
--source ndb_init_schema_locks_count.inc
TRUNCATE TABLE t10;
--source ndb_schema_locks_count.inc
# Catch 22, not possible to lock table until created
--error ER_TABLE_NOT_LOCKED
CREATE TABLE t4 AS SELECT * FROM t10;
# Now allowed due to WL#9826 "Allow RENAME TABLES under LOCK TABLES"
RENAME TABLE t10 TO t110;
DROP TABLE t110;
UNLOCK TABLES;