[ Avaa Bypassed ]




Upload:

Command:

hmhc3928@13.59.35.116: ~ $
SET DEBUG_SYNC= 'RESET';
drop table if exists t1,t2,t3;
create table t1 (i int);
create table t2 (i int);
connection: default
lock tables t2 read;
connection: con1
set debug_sync='mdl_upgrade_lock SIGNAL parked WAIT_FOR go';
alter table t1 rename t3;
connection: default
set debug_sync= 'now WAIT_FOR parked';
connection: con2
set debug_sync='mdl_acquire_lock_wait SIGNAL go';
drop table t1,t2;
connection: con1
connection: default
unlock tables;
connection: con2
ERROR 42S02: Unknown table 'test.t1'
drop table t3;
SET DEBUG_SYNC= 'RESET';
#
# Basic test coverage for type-of-operation aware metadata locks.
#
drop table if exists t1, t2, t3;
set debug_sync= 'RESET';
create table t1 (c1 int);
# 
# A) First let us check compatibility rules between differend kinds of
#    type-of-operation aware metadata locks.
#    Of course, these rules are already covered by the tests scattered
#    across the test suite. But it still makes sense to have one place
#    which covers all of them.
#
# 1) Acquire S (simple shared) lock on the table (by using HANDLER):
#
handler t1 open;
# 
# Switching to connection 'mdl_con1'.
# Check that S, SH, SR and SW locks are compatible with it.
handler t1 open t;
handler t close;
select column_name from information_schema.columns where
table_schema='test' and table_name='t1';
column_name
c1
select count(*) from t1;
count(*)
0
insert into t1 values (1), (1);
# Check that SU lock is compatible with it. To do this use ALTER TABLE
# which will fail when constructing .frm and thus obtaining SU metadata
# lock.
alter table t1 add index (not_exist);
ERROR 42000: Key column 'not_exist' doesn't exist in table
# Check that SNW lock is compatible with it. To do this use ALTER TABLE
# which will fail during copying the table and thus obtaining SNW metadata
# lock.
alter table t1 add primary key (c1);
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
# Check that SNRW lock is compatible with S lock.
lock table t1 write;
insert into t1 values (1);
unlock tables;
# Check that X lock is incompatible with S lock.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above RENAME is blocked because of S lock.
# 
# Switching to connection 'default'.
# Unblock RENAME TABLE.
handler t1 close;
# 
# Switching to connection 'mdl_con1'.
# Reaping RENAME TABLE.
# Restore the original state of the things.
rename table t2 to t1;
# 
# Switching to connection 'default'.
handler t1 open;
# 
# Switching to connection 'mdl_con1'.
# Check that upgrade from SNW to X is blocked by presence of S lock.
# Sending:
alter table t1 add column c2 int;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above ALTER TABLE is blocked because of S lock.
# 
# Switching to connection 'default'.
# Unblock ALTER TABLE.
handler t1 close;
# 
# Switching to connection 'mdl_con1'.
# Reaping ALTER TABLE.
# Restore the original state of the things.
alter table t1 drop column c2;
# 
# Switching to connection 'default'.
handler t1 open;
# 
# Switching to connection 'mdl_con1'.
# Check that upgrade from SNRW to X is blocked by presence of S lock.
lock table t1 write;
# Sending:
alter table t1 add column c2 int;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above upgrade of SNRW to X in ALTER TABLE is blocked
# because of S lock.
# 
# Switching to connection 'default'.
# Unblock ALTER TABLE.
handler t1 close;
# 
# Switching to connection 'mdl_con1'.
# Reaping ALTER TABLE.
# Restore the original state of the things.
alter table t1 drop column c2;
unlock tables;
# 
# Switching to connection 'default'.
#
# 2) Acquire SH (shared high-priority) lock on the table.
#    We have to involve DEBUG_SYNC facility for this as usually
#    such kind of locks are short-lived.
#
set debug_sync= 'after_open_table_mdl_shared SIGNAL locked WAIT_FOR finish';
# Sending:
select table_name, table_type, auto_increment, table_comment from information_schema.tables where table_schema='test' and table_name='t1';;
# 
# Switching to connection 'mdl_con1'.
set debug_sync= 'now WAIT_FOR locked';
# Check that S, SH, SR and SW locks are compatible with it.
handler t1 open;
handler t1 close;
select column_name from information_schema.columns where
table_schema='test' and table_name='t1';
column_name
c1
select count(*) from t1;
count(*)
3
insert into t1 values (1);
# Check that SU lock is compatible with it. To do this use ALTER TABLE
# which will fail when constructing .frm and thus obtaining SU metadata
# lock.
alter table t1 add index (not_exist);
ERROR 42000: Key column 'not_exist' doesn't exist in table
# Check that SNW lock is compatible with it. To do this use ALTER TABLE
# which will fail during copying the table and thus obtaining SNW metadata
# lock.
alter table t1 add primary key (c1);
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
# Check that SNRW lock is compatible with SH lock.
lock table t1 write;
delete from t1 limit 1;
unlock tables;
# Check that X lock is incompatible with SH lock.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above RENAME is blocked because of SH lock.
# Unblock RENAME TABLE.
set debug_sync= 'now SIGNAL finish';
# 
# Switching to connection 'default'.
# Reaping SELECT ... FROM I_S.
table_name	table_type	auto_increment	table_comment
t1	BASE TABLE	NULL	
# 
# Switching to connection 'mdl_con1'.
# Reaping RENAME TABLE.
# Restore the original state of the things.
rename table t2 to t1;
# 
# Switching to connection 'default'.
set debug_sync= 'after_open_table_mdl_shared SIGNAL locked WAIT_FOR finish';
# Sending:
select table_name, table_type, auto_increment, table_comment from information_schema.tables where table_schema='test' and table_name='t1';;
# 
# Switching to connection 'mdl_con1'.
set debug_sync= 'now WAIT_FOR locked';
# Check that upgrade from SNW to X is blocked by presence of SH lock.
# Sending:
alter table t1 add column c2 int;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above ALTER TABLE is blocked because of SH lock.
# Unblock RENAME TABLE.
set debug_sync= 'now SIGNAL finish';
# 
# Switching to connection 'default'.
# Reaping SELECT ... FROM I_S.
table_name	table_type	auto_increment	table_comment
t1	BASE TABLE	NULL	
# 
# Switching to connection 'mdl_con1'.
# Reaping ALTER TABLE.
# Restore the original state of the things.
alter table t1 drop column c2;
# 
# Switching to connection 'default'.
set debug_sync= 'after_open_table_mdl_shared SIGNAL locked WAIT_FOR finish';
select table_name, table_type, auto_increment, table_comment from information_schema.tables where table_schema='test' and table_name='t1';;
# 
# Switching to connection 'mdl_con1'.
set debug_sync= 'now WAIT_FOR locked';
# Check that upgrade from SNRW to X is blocked by presence of S lock.
lock table t1 write;
# Sending:
alter table t1 add column c2 int;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above upgrade of SNRW to X in ALTER TABLE is blocked
# because of S lock.
# Unblock RENAME TABLE.
set debug_sync= 'now SIGNAL finish';
# 
# Switching to connection 'default'.
# Reaping SELECT ... FROM I_S.
table_name	table_type	auto_increment	table_comment
t1	BASE TABLE	NULL	
# 
# Switching to connection 'mdl_con1'.
# Reaping ALTER TABLE.
# Restore the original state of the things.
alter table t1 drop column c2;
unlock tables;
# 
# Switching to connection 'default'.
#
#
# 3) Acquire SR lock on the table.
#
#
begin;
select count(*) from t1;
count(*)
3
# 
# Switching to connection 'mdl_con1'.
# Check that S, SH, SR and SW locks are compatible with it.
handler t1 open;
handler t1 close;
select column_name from information_schema.columns where
table_schema='test' and table_name='t1';
column_name
c1
select count(*) from t1;
count(*)
3
insert into t1 values (1);
# Check that SU lock is compatible with it. To do this use ALTER TABLE
# which will fail when constructing .frm and thus obtaining SU metadata
# lock.
alter table t1 add index (not_exist);
ERROR 42000: Key column 'not_exist' doesn't exist in table
# Check that SNW lock is compatible with it. To do this use ALTER TABLE
# which will fail during copying the table and thus obtaining SNW metadata
# lock.
alter table t1 add primary key (c1);
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
# Check that SNRW lock is not compatible with SR lock.
# Sending:
lock table t1 write;;
# 
# Switching to connection 'default'.
# Check that the above LOCK TABLES is blocked because of SR lock.
# Unblock LOCK TABLES.
commit;
# 
# Switching to connection 'mdl_con1'.
# Reaping LOCK TABLES.
delete from t1 limit 1;
unlock tables;
# 
# Switching to connection 'default'.
begin;
select count(*) from t1;
count(*)
3
# 
# Switching to connection 'mdl_con1'.
# Check that X lock is incompatible with SR lock.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above RENAME is blocked because of SR lock.
# 
# Switching to connection 'default'.
# Unblock RENAME TABLE.
commit;
# 
# Switching to connection 'mdl_con1'.
# Reaping RENAME TABLE.
# Restore the original state of the things.
rename table t2 to t1;
# 
# Switching to connection 'default'.
begin;
select count(*) from t1;
count(*)
3
# 
# Switching to connection 'mdl_con1'.
# Check that upgrade from SNW to X is blocked by presence of SR lock.
# Sending:
alter table t1 add column c2 int;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above ALTER TABLE is blocked because of SR lock.
# 
# Switching to connection 'default'.
# Unblock ALTER TABLE.
commit;
# 
# Switching to connection 'mdl_con1'.
# Reaping ALTER TABLE.
# Restore the original state of the things.
alter table t1 drop column c2;
#
# There is no need to check that upgrade from SNRW to X is blocked
# by presence of SR lock because SNRW is incompatible with SR anyway.
# 
# 
# Switching to connection 'default'.
#
#
# 4) Acquire SW lock on the table.
#
#
begin;
insert into t1 values (1);
# 
# Switching to connection 'mdl_con1'.
# Check that S, SH, SR and SW locks are compatible with it.
handler t1 open;
handler t1 close;
select column_name from information_schema.columns where
table_schema='test' and table_name='t1';
column_name
c1
# Disable result log to make test robust against
# effects of concurrent insert.
select * from t1;
insert into t1 values (1);
# Check that SU lock is compatible with it. To do this use ALTER TABLE
# which will fail when constructing .frm and thus obtaining SU metadata
# lock.
alter table t1 add index (not_exist);
ERROR 42000: Key column 'not_exist' doesn't exist in table
# Check that SNW lock is not compatible with SW lock.
# Again we use ALTER TABLE which fails during copying
# the table to avoid upgrade of SNW -> X.
# Sending:
alter table t1 add primary key (c1);;
# 
# Switching to connection 'default'.
# Check that the above ALTER TABLE is blocked because of SW lock.
# Unblock ALTER TABLE.
commit;
# 
# Switching to connection 'mdl_con1'.
# Reaping ALTER TABLE.
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
# 
# Switching to connection 'default'.
begin;
insert into t1 values (1);
# 
# Switching to connection 'mdl_con1'.
# Check that SNRW lock is not compatible with SW lock.
# Sending:
lock table t1 write;;
# 
# Switching to connection 'default'.
# Check that the above LOCK TABLES is blocked because of SW lock.
# Unblock LOCK TABLES.
commit;
# 
# Switching to connection 'mdl_con1'.
# Reaping LOCK TABLES.
delete from t1 limit 2;
unlock tables;
# 
# Switching to connection 'default'.
begin;
insert into t1 values (1);
# 
# Switching to connection 'mdl_con1'.
# Check that X lock is incompatible with SW lock.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above RENAME is blocked because of SW lock.
# 
# Switching to connection 'default'.
# Unblock RENAME TABLE.
commit;
# 
# Switching to connection 'mdl_con1'.
# Reaping RENAME TABLE.
# Restore the original state of the things.
rename table t2 to t1;
#
# There is no need to check that upgrade from SNW/SNRW to X is
# blocked by presence of SW lock because SNW/SNRW is incompatible
# with SW anyway.
# 
# 
# Switching to connection 'default'.
#
#
# 5) Acquire SU lock on the table. We have to use DEBUG_SYNC for
#    this, to prevent SU from being immediately upgraded to X.
#
set debug_sync= 'alter_opened_table SIGNAL locked WAIT_FOR finish';
# Sending:
alter table t1 add primary key (c1);;
# 
# Switching to connection 'mdl_con1'.
set debug_sync= 'now WAIT_FOR locked';
# Check that S, SH, SR and SW locks are compatible with it.
handler t1 open;
handler t1 close;
select column_name from information_schema.columns where
table_schema='test' and table_name='t1';
column_name
c1
select count(*) from t1;
count(*)
5
delete from t1 limit 1;
# Check that SU lock is incompatible with SU lock.
# Sending:
alter table t1 add primary key (c1);;
# 
# Switching to connection 'mdl_con2'.
# Check that the above ALTER is blocked because of SU lock.
# Unblock ALTERs.
set debug_sync= 'now SIGNAL finish';
# 
# Switching to connection 'default'.
# Reaping first ALTER TABLE.
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
# 
# Switching to connection 'mdl_con1'.
# Reaping another ALTER TABLE.
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
# 
# Switching to connection 'default'.
set debug_sync= 'alter_opened_table SIGNAL locked WAIT_FOR finish';
# Sending:
alter table t1 add primary key (c1);;
# 
# Switching to connection 'mdl_con1'.
set debug_sync= 'now WAIT_FOR locked';
# Check that SNRW lock is incompatible with SU lock.
# Sending:
lock table t1 write;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above LOCK TABLES is blocked because of SU lock.
# Unblock ALTER and thus LOCK TABLES.
set debug_sync= 'now SIGNAL finish';
# 
# Switching to connection 'default'.
# Reaping ALTER TABLE.
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
# 
# Switching to connection 'mdl_con1'.
# Reaping LOCK TABLES
insert into t1 values (1);
unlock tables;
# 
# Switching to connection 'default'.
set debug_sync= 'alter_opened_table SIGNAL locked WAIT_FOR finish';
# Sending:
alter table t1 add primary key (c1);;
# 
# Switching to connection 'mdl_con1'.
set debug_sync= 'now WAIT_FOR locked';
# Check that X lock is incompatible with SU lock.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above RENAME is blocked because of SU lock.
# Unblock ALTER and thus RENAME TABLE.
set debug_sync= 'now SIGNAL finish';
# 
# Switching to connection 'default'.
# Now we have ALTER TABLE with SU->SNW and RENAME TABLE with pending
# X-lock. In this case ALTER TABLE should be chosen as victim.
# Reaping ALTER TABLE.
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
# 
# Switching to connection 'mdl_con1'.
# Reaping RENAME TABLE
# Revert back to original state of things.
rename table t2 to t1;
#
# There is no need to check that upgrade from SNW/SNRW to X is
# blocked by presence of another SU lock because SNW/SNRW is
# incompatible with SU anyway.
# 
# Switching to connection 'default'.
#
#
# 6) Acquire SNW lock on the table. We have to use DEBUG_SYNC for
#    this, to prevent SNW from being immediately upgraded to X.
#
set debug_sync= 'alter_table_copy_after_lock_upgrade SIGNAL locked WAIT_FOR finish';
# Sending:
alter table t1 add primary key (c1), lock=shared, algorithm=copy;;
# 
# Switching to connection 'mdl_con1'.
set debug_sync= 'now WAIT_FOR locked';
# Check that S, SH and SR locks are compatible with it.
handler t1 open;
handler t1 close;
select column_name from information_schema.columns where
table_schema='test' and table_name='t1';
column_name
c1
select count(*) from t1;
count(*)
5
# Check that SW lock is incompatible with SNW lock.
# Sending:
delete from t1 limit 2;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above DELETE is blocked because of SNW lock.
# Unblock ALTER and thus DELETE.
set debug_sync= 'now SIGNAL finish';
# 
# Switching to connection 'default'.
# Reaping ALTER TABLE.
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
# 
# Switching to connection 'mdl_con1'.
# Reaping DELETE.
# 
# Switching to connection 'default'.
set debug_sync= 'alter_table_copy_after_lock_upgrade SIGNAL locked WAIT_FOR finish';
# Sending:
alter table t1 add primary key (c1), lock=shared, algorithm=copy;;
# 
# Switching to connection 'mdl_con1'.
set debug_sync= 'now WAIT_FOR locked';
# Check that SU lock is incompatible with SNW lock.
# Sending:
alter table t1 add primary key (c1);;
# 
# Switching to connection 'mdl_con2'.
# Check that the above ALTER is blocked because of SNW lock.
# Unblock ALTERs.
set debug_sync= 'now SIGNAL finish';
# 
# Switching to connection 'default'.
# Reaping first ALTER TABLE.
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
# 
# Switching to connection 'mdl_con1'.
# Reaping another ALTER TABLE.
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
# 
# Note that we can't easily check SNW vs SNW locks since
# SNW is only used by ALTER TABLE after upgrading from SU
# and SU is also incompatible with SNW.
#
# Switching to connection 'default'.
set debug_sync= 'alter_table_copy_after_lock_upgrade SIGNAL locked WAIT_FOR finish';
# Sending:
alter table t1 add primary key (c1), lock=shared, algorithm=copy;;
# 
# Switching to connection 'mdl_con1'.
set debug_sync= 'now WAIT_FOR locked';
# Check that SNRW lock is incompatible with SNW lock.
# Sending:
lock table t1 write;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above LOCK TABLES is blocked because of SNW lock.
# Unblock ALTER and thus LOCK TABLES.
set debug_sync= 'now SIGNAL finish';
# 
# Switching to connection 'default'.
# Reaping ALTER TABLE.
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
# 
# Switching to connection 'mdl_con1'.
# Reaping LOCK TABLES
insert into t1 values (1);
unlock tables;
# 
# Switching to connection 'default'.
set debug_sync= 'alter_table_copy_after_lock_upgrade SIGNAL locked WAIT_FOR finish';
# Sending:
alter table t1 add primary key (c1), algorithm=copy, lock=shared;;
# 
# Switching to connection 'mdl_con1'.
set debug_sync= 'now WAIT_FOR locked';
# Check that X lock is incompatible with SNW lock.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above RENAME is blocked because of SNW lock.
# Unblock ALTER and thus RENAME TABLE.
set debug_sync= 'now SIGNAL finish';
# 
# Switching to connection 'default'.
# Reaping ALTER TABLE.
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
# 
# Switching to connection 'mdl_con1'.
# Reaping RENAME TABLE
# Revert back to original state of things.
rename table t2 to t1;
#
# There is no need to check that upgrade from SNW/SNRW to X is
# blocked by presence of another SNW lock because SNW/SNRW is
# incompatible with SNW anyway.
# 
# Switching to connection 'default'.
#
#
# 7) Acquire SNRW lock on the table. 
#
#
lock table t1 write;
# 
# Switching to connection 'mdl_con1'.
# Check that S and SH locks are compatible with it.
handler t1 open;
handler t1 close;
select column_name from information_schema.columns where
table_schema='test' and table_name='t1';
column_name
c1
# Check that SR lock is incompatible with SNRW lock.
# Sending:
select count(*) from t1;;
# 
# Switching to connection 'default'.
# Check that the above SELECT is blocked because of SNRW lock.
# Unblock SELECT.
unlock tables;
# 
# Switching to connection 'mdl_con1'.
# Reaping SELECT.
count(*)
4
# 
# Switching to connection 'default'.
lock table t1 write;
# 
# Switching to connection 'mdl_con1'.
# Check that SW lock is incompatible with SNRW lock.
# Sending:
delete from t1 limit 1;;
# 
# Switching to connection 'default'.
# Check that the above DELETE is blocked because of SNRW lock.
# Unblock DELETE.
unlock tables;
# 
# Switching to connection 'mdl_con1'.
# Reaping DELETE.
# 
# Switching to connection 'default'.
lock table t1 write;
# 
# Switching to connection 'mdl_con1'.
# Check that SU lock is incompatible with SNRW lock.
# Sending:
alter table t1 add primary key (c1);;
# 
# Switching to connection 'default'.
# Check that the above ALTER is blocked because of SNRW lock.
# Unblock ALTER.
unlock tables;
# 
# Switching to connection 'mdl_con1'.
# Reaping ALTER TABLE.
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
# 
# Note that we can't easily check SNW vs SNRW locks since
# SNW is only used by ALTER TABLE after upgrading from SU
# and SU is also incompatible with SNRW.
#
# Switching to connection 'default'.
lock table t1 write;
# 
# Switching to connection 'mdl_con1'.
# Check that SNRW lock is incompatible with SNRW lock.
# Sending:
lock table t1 write;;
# 
# Switching to connection 'default'.
# Check that the above LOCK TABLES is blocked because of SNRW lock.
# Unblock waiting LOCK TABLES.
unlock tables;
# 
# Switching to connection 'mdl_con1'.
# Reaping LOCK TABLES
insert into t1 values (1);
unlock tables;
# 
# Switching to connection 'default'.
lock table t1 write;
# 
# Switching to connection 'mdl_con1'.
# Check that X lock is incompatible with SNRW lock.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'default'.
# Check that the above RENAME is blocked because of SNRW lock.
# Unblock RENAME TABLE
unlock tables;
# 
# Switching to connection 'mdl_con1'.
# Reaping RENAME TABLE
# Revert back to original state of things.
rename table t2 to t1;
#
# There is no need to check that upgrade from SNW/SNRW to X is
# blocked by presence of another SNRW lock because SNW/SNRW is
# incompatible with SNRW anyway.
# 
# Switching to connection 'default'.
#
#
# 8) Now do the same round of tests for X lock. We use additional
#    table to get long-lived lock of this type.
#
create table t2 (c1 int);
# 
# Switching to connection 'mdl_con2'.
# Take a lock on t2, so RENAME TABLE t1 TO t2 will get blocked
# after acquiring X lock on t1.
lock tables t2 read;
# 
# Switching to connection 'default'.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'mdl_con1'.
# Check that RENAME has acquired X lock on t1 and is waiting for t2.
# Check that S lock in incompatible with X lock.
# Sending:
handler t1 open;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above HANDLER statement is blocked because of X lock.
# Unblock RENAME TABLE
unlock tables;
# 
# Switching to connection 'default'.
# Reaping RENAME TABLE.
ERROR 42S01: Table 't2' already exists
# 
# Switching to connection 'mdl_con1'.
# Reaping HANDLER.
handler t1 close;
# 
# Switching to connection 'mdl_con2'.
# Prepare for blocking RENAME TABLE.
lock tables t2 read;
# 
# Switching to connection 'default'.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'mdl_con1'.
# Check that RENAME has acquired X lock on t1 and is waiting for t2.
# Check that SH lock in incompatible with X lock.
# Sending:
select column_name from information_schema.columns where table_schema='test' and table_name='t1';;
# 
# Switching to connection 'mdl_con2'.
# Check that the above SELECT ... FROM I_S ... statement is blocked
# because of X lock.
# Unblock RENAME TABLE
unlock tables;
# 
# Switching to connection 'default'.
# Reaping RENAME TABLE.
ERROR 42S01: Table 't2' already exists
# 
# Switching to connection 'mdl_con1'.
# Reaping SELECT ... FROM I_S.
column_name
c1
# 
# Switching to connection 'mdl_con2'.
# Prepare for blocking RENAME TABLE.
lock tables t2 read;
# 
# Switching to connection 'default'.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'mdl_con1'.
# Check that RENAME has acquired X lock on t1 and is waiting for t2.
# Check that SR lock in incompatible with X lock.
# Sending:
select count(*) from t1;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above SELECT statement is blocked
# because of X lock.
# Unblock RENAME TABLE
unlock tables;
# 
# Switching to connection 'default'.
# Reaping RENAME TABLE.
ERROR 42S01: Table 't2' already exists
# 
# Switching to connection 'mdl_con1'.
# Reaping SELECT.
count(*)
4
# 
# Switching to connection 'mdl_con2'.
# Prepare for blocking RENAME TABLE.
lock tables t2 read;
# 
# Switching to connection 'default'.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'mdl_con1'.
# Check that RENAME has acquired X lock on t1 and is waiting for t2.
# Check that SW lock in incompatible with X lock.
# Sending:
delete from t1 limit 1;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above DELETE statement is blocked
# because of X lock.
# Unblock RENAME TABLE
unlock tables;
# 
# Switching to connection 'default'.
# Reaping RENAME TABLE.
ERROR 42S01: Table 't2' already exists
# 
# Switching to connection 'mdl_con1'.
# Reaping DELETE.
# 
# Switching to connection 'mdl_con2'.
# Prepare for blocking RENAME TABLE.
lock tables t2 read;
# 
# Switching to connection 'default'.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'mdl_con1'.
# Check that RENAME has acquired X lock on t1 and is waiting for t2.
# Check that SU lock is incompatible with X lock.
# Sending:
alter table t1 add primary key (c1);;
# 
# Switching to connection 'mdl_con2'.
# Check that the above ALTER statement is blocked
# because of X lock.
# Unblock RENAME TABLE
unlock tables;
# 
# Switching to connection 'default'.
# Reaping RENAME TABLE
ERROR 42S01: Table 't2' already exists
# 
# Switching to connection 'mdl_con1'.
# Reaping ALTER.
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
#
# Note that we can't easily check SNW vs X locks since
# SNW is only used by ALTER TABLE after upgrading from SU
# and SU is also incompatible with X.
#
# Switching to connection 'mdl_con2'.
# Prepare for blocking RENAME TABLE.
lock tables t2 read;
# 
# Switching to connection 'default'.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'mdl_con1'.
# Check that RENAME has acquired X lock on t1 and is waiting for t2.
# Check that SNRW lock is incompatible with X lock.
# Sending:
lock table t1 write;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above LOCK TABLE statement is blocked
# because of X lock.
# Unblock RENAME TABLE
unlock tables;
# 
# Switching to connection 'default'.
# Reaping RENAME TABLE
ERROR 42S01: Table 't2' already exists
# 
# Switching to connection 'mdl_con1'.
# Reaping LOCK TABLE.
unlock tables;
# 
# Switching to connection 'mdl_con2'.
# Prepare for blocking RENAME TABLE.
lock tables t2 read;
# 
# Switching to connection 'default'.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'mdl_con1'.
# Check that RENAME has acquired X lock on t1 and is waiting for t2.
# Check that X lock is incompatible with X lock.
# Sending:
rename table t1 to t3;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above RENAME statement is blocked
# because of X lock.
# Unblock RENAME TABLE
unlock tables;
# 
# Switching to connection 'default'.
# Reaping RENAME TABLE
ERROR 42S01: Table 't2' already exists
# 
# Switching to connection 'mdl_con1'.
# Reaping RENAME.
rename table t3 to t1;
#
# B) Now let us test compatibility in cases when both locks
#    are pending. I.e. let us test rules for priorities between
#    different types of metadata locks.
#
#    Note: No tests for pending SU lock as this lock requires
#          even stronger active or pending lock.
#
# 
# Switching to connection 'mdl_con2'.
#
# 1) Check compatibility for pending SNW lock.
#
# Acquire SW lock in order to create pending SNW lock later.
begin;
insert into t1 values (1);
# 
# Switching to connection 'default'.
# Add pending SNW lock.
# Sending:
alter table t1 add primary key (c1);;
# 
# Switching to connection 'mdl_con1'.
# Check that ALTER TABLE is waiting with pending SNW lock.
# Check that S, SH and SR locks are compatible with pending SNW
handler t1 open t;
handler t close;
select column_name from information_schema.columns where
table_schema='test' and table_name='t1';
column_name
c1
select count(*) from t1;
count(*)
4
# Check that SW is incompatible with pending SNW
# Sending:
delete from t1 limit 1;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above DELETE is blocked because of pending SNW lock.
# Unblock ALTER TABLE.
commit;
# 
# Switching to connection 'default'.
# Reaping ALTER.
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
# 
# Switching to connection 'mdl_con1'.
# Reaping DELETE.
#
# We can't do similar check for SNW, SNRW and X locks because
# they will also be blocked by active SW lock.
#
# 
# Switching to connection 'mdl_con2'.
#
# 2) Check compatibility for pending SNRW lock.
#
# Acquire SR lock in order to create pending SNRW lock.
begin;
select count(*) from t1;
count(*)
3
# 
# Switching to connection 'default'.
# Add pending SNRW lock.
# Sending:
lock table t1 write;;
# 
# Switching to connection 'mdl_con1'.
# Check that LOCK TABLE is waiting with pending SNRW lock.
# Check that S and SH locks are compatible with pending SNRW
handler t1 open t;
handler t close;
select column_name from information_schema.columns where
table_schema='test' and table_name='t1';
column_name
c1
# Check that SR is incompatible with pending SNRW
# Sending:
select count(*) from t1;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above SELECT is blocked because of pending SNRW lock.
# Unblock LOCK TABLE.
commit;
# 
# Switching to connection 'default'.
# Reaping LOCK TABLE.
unlock tables;
# 
# Switching to connection 'mdl_con1'.
# Reaping SELECT.
count(*)
3
# Restore pending SNRW lock.
# 
# Switching to connection 'mdl_con2'.
begin;
select count(*) from t1;
count(*)
3
# 
# Switching to connection 'default'.
# Sending:
lock table t1 write;;
# 
# Switching to connection 'mdl_con1'.
# Check that LOCK TABLE is waiting with pending SNRW lock.
# Check that SW is incompatible with pending SNRW
# Sending:
insert into t1 values (1);;
# 
# Switching to connection 'mdl_con2'.
# Check that the above INSERT is blocked because of pending SNRW lock.
# Unblock LOCK TABLE.
commit;
# 
# Switching to connection 'default'.
# Reaping LOCK TABLE.
unlock tables;
# 
# Switching to connection 'mdl_con1'.
# Reaping INSERT.
# Restore pending SNRW lock.
# 
# Switching to connection 'mdl_con2'.
begin;
select count(*) from t1;
count(*)
4
# 
# Switching to connection 'default'.
# Sending:
lock table t1 write;;
# 
# Switching to connection 'mdl_con1'.
# Check that LOCK TABLE is waiting with pending SNRW lock.
# Check that SNW is compatible with pending SNRW
# So ALTER TABLE statements are not starved by LOCK TABLEs.
alter table t1 add primary key (c1);
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
# 
# Switching to connection 'mdl_con2'.
# Unblock LOCK TABLE.
commit;
# 
# Switching to connection 'default'.
# Reaping LOCK TABLE.
unlock tables;
#
# We can't do similar check for SNRW and X locks because
# they will also be blocked by active SR lock.
#
# 
# Switching to connection 'mdl_con2'.
#
# 3) Check compatibility for pending X lock.
#
# Acquire SR lock in order to create pending X lock.
begin;
select count(*) from t1;
count(*)
4
# 
# Switching to connection 'default'.
# Add pending X lock.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'mdl_con1'.
# Check that RENAME TABLE is waiting with pending X lock.
# Check that SH locks are compatible with pending X
select column_name from information_schema.columns where
table_schema='test' and table_name='t1';
column_name
c1
# Check that S is incompatible with pending X
# Sending:
handler t1 open;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above HANDLER OPEN is blocked because of pending X lock.
# Unblock RENAME TABLE.
commit;
# 
# Switching to connection 'default'.
# Reaping RENAME TABLE.
ERROR 42S01: Table 't2' already exists
# 
# Switching to connection 'mdl_con1'.
# Reaping HANDLER t1 OPEN.
handler t1 close;
# Restore pending X lock.
# 
# Switching to connection 'mdl_con2'.
begin;
select count(*) from t1;
count(*)
4
# 
# Switching to connection 'default'.
# Add pending X lock.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'mdl_con1'.
# Check that RENAME TABLE is waiting with pending X lock.
# Check that SR is incompatible with pending X
# Sending:
select count(*) from t1;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above SELECT is blocked because of pending X lock.
# Unblock RENAME TABLE.
commit;
# 
# Switching to connection 'default'.
# Reaping RENAME TABLE.
ERROR 42S01: Table 't2' already exists
# 
# Switching to connection 'mdl_con1'.
# Reaping SELECT.
count(*)
4
# Restore pending X lock.
# 
# Switching to connection 'mdl_con2'.
begin;
select count(*) from t1;
count(*)
4
# 
# Switching to connection 'default'.
# Add pending X lock.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'mdl_con1'.
# Check that RENAME TABLE is waiting with pending X lock.
# Check that SW is incompatible with pending X
# Sending:
delete from t1 limit 1;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above DELETE is blocked because of pending X lock.
# Unblock RENAME TABLE.
commit;
# 
# Switching to connection 'default'.
# Reaping RENAME TABLE.
ERROR 42S01: Table 't2' already exists
# 
# Switching to connection 'mdl_con1'.
# Reaping DELETE.
# Restore pending X lock.
# 
# Switching to connection 'mdl_con2'.
begin;
select count(*) from t1;
count(*)
3
# 
# Switching to connection 'default'.
# Add pending X lock.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'mdl_con1'.
# Check that RENAME TABLE is waiting with pending X lock.
# Check that SNW is incompatible with pending X
# Sending:
alter table t1 add primary key (c1);;
# 
# Switching to connection 'mdl_con2'.
# Check that the above ALTER TABLE is blocked because of pending X lock.
# Unblock RENAME TABLE.
commit;
# 
# Switching to connection 'default'.
# Reaping RENAME TABLE.
ERROR 42S01: Table 't2' already exists
# 
# Switching to connection 'mdl_con1'.
# Reaping ALTER TABLE.
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
# Restore pending X lock.
# 
# Switching to connection 'mdl_con2'.
handler t1 open;
# 
# Switching to connection 'default'.
# Add pending X lock.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'mdl_con1'.
# Check that RENAME TABLE is waiting with pending X lock.
# Check that SNRW is incompatible with pending X
# Sending:
lock table t1 write;;
# 
# Switching to connection 'mdl_con3'.
# Check that the above LOCK TABLES is blocked because of pending X lock.
# 
# Switching to connection 'mdl_con2'.
# Unblock RENAME TABLE.
handler t1 close;
# 
# Switching to connection 'default'.
# Reaping RENAME TABLE.
ERROR 42S01: Table 't2' already exists
# 
# Switching to connection 'mdl_con1'.
# Reaping LOCK TABLES.
unlock tables;
# 
# Switching to connection 'default'.
#
#
# C) Now let us test how type-of-operation locks are handled in
#    transactional context. Obviously we are mostly interested
#    in conflicting types of locks.
#
#    Note: No tests for active/pending SU lock since
#          ALTER TABLE is in its own transaction.
#
#
# 1) Let us check how various locks used within transactional
#    context interact with active/pending SNW lock.
#
#    We start with case when we are acquiring lock on the table
#    which was not used in the transaction before.
begin;
select count(*) from t1;
count(*)
3
# 
# Switching to connection 'mdl_con1'.
# Create an active SNW lock on t2.
# We have to use DEBUG_SYNC facility as otherwise SNW lock
# will be immediately released (or upgraded to X lock).
insert into t2 values (1), (1);
set debug_sync= 'alter_table_copy_after_lock_upgrade SIGNAL locked WAIT_FOR finish';
# Sending:
alter table t2 add primary key (c1), algorithm=copy, lock=shared;;
# 
# Switching to connection 'default'.
set debug_sync= 'now WAIT_FOR locked';
# SR lock should be acquired without any waiting.
select count(*) from t2;
count(*)
2
commit;
# Now let us check that we will wait in case of SW lock.
begin;
select count(*) from t1;
count(*)
3
# Sending:
insert into t2 values (1);;
# 
# Switching to connection 'mdl_con2'.
# Check that the above INSERT is blocked.
# Unblock ALTER TABLE and thus INSERT.
set debug_sync= 'now SIGNAL finish';
# 
# Switching to connection 'mdl_con1'.
# Reap ALTER TABLE.
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
# 
# Switching to connection 'default'.
# Reap INSERT.
commit;
#
# Now let us see what happens when we are acquiring lock on the table
# which is already used in transaction.
#
# *) First, case when transaction which has SR lock on the table also
#    locked in SNW mode acquires yet another SR lock and then tries
#    to acquire SW lock.
begin;
select count(*) from t1;
count(*)
3
# 
# Switching to connection 'mdl_con1'.
# Create an active SNW lock on t1.
set debug_sync= 'alter_table_copy_after_lock_upgrade SIGNAL locked WAIT_FOR finish';
# Sending:
alter table t1 add primary key (c1), algorithm=copy, lock=shared;;
# 
# Switching to connection 'default'.
set debug_sync= 'now WAIT_FOR locked';
# We should still be able to get SR lock without waiting.
select count(*) from t1;
count(*)
3
# Since the above ALTER TABLE is not upgrading SNW lock to X by waiting
# for SW lock we won't create deadlock.
# So the below INSERT should not end-up with ER_LOCK_DEADLOCK error.
# Sending:
insert into t1 values (1);;
# 
# Switching to connection 'mdl_con2'.
# Check that the above INSERT is blocked.
# Unblock ALTER TABLE and thus INSERT.
set debug_sync= 'now SIGNAL finish';
# 
# Switching to connection 'mdl_con1'.
# Reap ALTER TABLE.
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
# 
# Switching to connection 'default'.
# Reap INSERT.
commit;
#
# **) Now test in which transaction that has SW lock on the table
#     against which there is pending SNW lock acquires SR and SW
#     locks on this table.
#
begin;
insert into t1 values (1);
# 
# Switching to connection 'mdl_con1'.
# Create pending SNW lock on t1.
# Sending:
alter table t1 add primary key (c1);;
# 
# Switching to connection 'default'.
# Wait until ALTER TABLE starts waiting for SNW lock.
# We should still be able to get both SW and SR locks without waiting.
select count(*) from t1;
count(*)
5
delete from t1 limit 1;
# Unblock ALTER TABLE.
commit;
# 
# Switching to connection 'mdl_con1'.
# Reap ALTER TABLE.
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
# 
# Switching to connection 'default'.
#
# 2) Now similar tests for active SNW lock which is being upgraded
#    to X lock.
#
#    Again we start with case when we are acquiring lock on the
#    table which was not used in the transaction before.
begin;
select count(*) from t1;
count(*)
4
# 
# Switching to connection 'mdl_con2'.
# Start transaction which will prevent SNW -> X upgrade from
# completing immediately.
begin;
select count(*) from t2;
count(*)
3
# 
# Switching to connection 'mdl_con1'.
# Create SNW lock pending upgrade to X on t2.
# Sending:
alter table t2 add column c2 int;;
# 
# Switching to connection 'default'.
# Wait until ALTER TABLE starts waiting X lock.
# Check that attempt to acquire SR lock on t2 causes waiting.
# Sending:
select count(*) from t2;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above SELECT is blocked.
# Unblock ALTER TABLE.
commit;
# 
# Switching to connection 'mdl_con1'.
# Reap ALTER TABLE.
# 
# Switching to connection 'default'.
# Reap SELECT.
count(*)
3
commit;
# Do similar check for SW lock.
begin;
select count(*) from t1;
count(*)
4
# 
# Switching to connection 'mdl_con2'.
# Start transaction which will prevent SNW -> X upgrade from
# completing immediately.
begin;
select count(*) from t2;
count(*)
3
# 
# Switching to connection 'mdl_con1'.
# Create SNW lock pending upgrade to X on t2.
# Sending:
alter table t2 drop column c2;;
# 
# Switching to connection 'default'.
# Wait until ALTER TABLE starts waiting X lock.
# Check that attempt to acquire SW lock on t2 causes waiting.
# Sending:
insert into t2 values (1);;
# 
# Switching to connection 'mdl_con2'.
# Check that the above INSERT is blocked.
# Unblock ALTER TABLE.
commit;
# 
# Switching to connection 'mdl_con1'.
# Reap ALTER TABLE.
# 
# Switching to connection 'default'.
# Reap INSERT.
commit;
#
# Test for the case in which we are acquiring lock on the table
# which is already used in transaction.
#
begin;
select count(*) from t1;
count(*)
4
# 
# Switching to connection 'mdl_con1'.
# Create SNW lock pending upgrade to X.
# Sending:
alter table t1 add column c2 int;;
# 
# Switching to connection 'default'.
# Wait until ALTER TABLE starts waiting X lock.
# Check that transaction is still able to acquire SR lock.
select count(*) from t1;
count(*)
4
# Waiting trying to acquire SW lock will cause deadlock and
# therefore should cause an error.
delete from t1 limit 1;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
# Unblock ALTER TABLE.
commit;
# 
# Switching to connection 'mdl_con1'.
# Reap ALTER TABLE.
# 
# Switching to connection 'default'.
#
# 3) Check how various locks used within transactional context
#    interact with active/pending SNRW lock.
# 
#    Once again we start with case when we are acquiring lock on
#    the table which was not used in the transaction before.
begin;
select count(*) from t1;
count(*)
4
# 
# Switching to connection 'mdl_con1'.
lock table t2 write;
# 
# Switching to connection 'default'.
# Attempt to acquire SR should be blocked. It should
# not cause errors as it does not creates deadlock.
# Sending:
select count(*) from t2;;
# 
# Switching to connection 'mdl_con1'.
# Check that the above SELECT is blocked 
# Unblock SELECT.
unlock tables;
# 
# Switching to connection 'default'.
# Reap SELECT.
count(*)
4
commit;
# Repeat the same test for SW lock.
begin;
select count(*) from t1;
count(*)
4
# 
# Switching to connection 'mdl_con1'.
lock table t2 write;
# 
# Switching to connection 'default'.
# Again attempt to acquire SW should be blocked and should
# not cause any errors.
# Sending:
delete from t2 limit 1;;
# 
# Switching to connection 'mdl_con1'.
# Check that the above DELETE is blocked 
# Unblock DELETE.
unlock tables;
# 
# Switching to connection 'default'.
# Reap DELETE.
commit;
#
# Now coverage for the case in which we are acquiring lock on
# the table which is already used in transaction and against
# which there is a pending SNRW lock request.
#
# *) Let us start with case when transaction has only a SR lock.
#
begin;
select count(*) from t1;
count(*)
4
# 
# Switching to connection 'mdl_con1'.
# Sending:
lock table t1 write;;
# 
# Switching to connection 'default'.
# Wait until LOCK TABLE is blocked creating pending request for X lock.
# Check that another instance of SR lock is granted without waiting.
select count(*) from t1;
count(*)
4
# Attempt to wait for SW lock will lead to deadlock, thus
# the below statement should end with ER_LOCK_DEADLOCK error.
delete from t1 limit 1;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
# Unblock LOCK TABLES.
commit;
# 
# Switching to connection 'mdl_con1'.
# Reap LOCK TABLES.
unlock tables;
# 
# Switching to connection 'default'.
#
# **) Now case when transaction has a SW lock.
#
begin;
delete from t1 limit 1;
# 
# Switching to connection 'mdl_con1'.
# Sending:
lock table t1 write;;
# 
# Switching to connection 'default'.
# Wait until LOCK TABLE is blocked creating pending request for X lock.
# Check that both SR and SW locks are granted without waiting
# and errors.
select count(*) from t1;
count(*)
3
insert into t1 values (1, 1);
# Unblock LOCK TABLES.
commit;
# 
# Switching to connection 'mdl_con1'.
# Reap LOCK TABLES.
unlock tables;
# 
# Switching to connection 'default'.
#
# 4) Check how various locks used within transactional context
#    interact with active/pending X lock.
# 
#    As usual we start with case when we are acquiring lock on
#    the table which was not used in the transaction before.
begin;
select count(*) from t1;
count(*)
4
# 
# Switching to connection 'mdl_con2'.
# Start transaction which will prevent X lock from going away
# immediately.
begin;
select count(*) from t2;
count(*)
3
# 
# Switching to connection 'mdl_con1'.
# Create pending X lock on t2.
# Sending:
rename table t2 to t3;;
# 
# Switching to connection 'default'.
# Wait until RENAME TABLE starts waiting with pending X lock.
# Check that attempt to acquire SR lock on t2 causes waiting.
# Sending:
select count(*) from t2;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above SELECT is blocked.
# Unblock RENAME TABLE.
commit;
# 
# Switching to connection 'mdl_con1'.
# Reap RENAME TABLE.
# 
# Switching to connection 'default'.
# Reap SELECT.
ERROR 42S02: Table 'test.t2' doesn't exist
commit;
rename table t3 to t2;
# The same test for SW lock.
begin;
select count(*) from t1;
count(*)
4
# 
# Switching to connection 'mdl_con2'.
# Start transaction which will prevent X lock from going away
# immediately.
begin;
select count(*) from t2;
count(*)
3
# 
# Switching to connection 'mdl_con1'.
# Create pending X lock on t2.
# Sending:
rename table t2 to t3;;
# 
# Switching to connection 'default'.
# Wait until RENAME TABLE starts waiting with pending X lock.
# Check that attempt to acquire SW lock on t2 causes waiting.
# Sending:
delete from t2 limit 1;;
# 
# Switching to connection 'mdl_con2'.
# Check that the above DELETE is blocked.
# Unblock RENAME TABLE.
commit;
# 
# Switching to connection 'mdl_con1'.
# Reap RENAME TABLE.
# 
# Switching to connection 'default'.
# Reap DELETE.
ERROR 42S02: Table 'test.t2' doesn't exist
commit;
rename table t3 to t2;
#
# Coverage for the case in which we are acquiring lock on
# the table which is already used in transaction and against
# which there is a pending X lock request.
#
# *) The first case is when transaction has only a SR lock.
#
begin;
select count(*) from t1;
count(*)
4
# 
# Switching to connection 'mdl_con1'.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'default'.
# Wait until RENAME TABLE is blocked creating pending request for X lock.
# Check that another instance of SR lock is granted without waiting.
select count(*) from t1;
count(*)
4
# Attempt to wait for SW lock will lead to deadlock, thus
# the below statement should end with ER_LOCK_DEADLOCK error.
delete from t1 limit 1;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
# Unblock RENAME TABLE.
commit;
# 
# Switching to connection 'mdl_con1'.
# Reap RENAME TABLE.
ERROR 42S01: Table 't2' already exists
# 
# Switching to connection 'default'.
#
# **) The second case is when transaction has a SW lock.
#
begin;
delete from t1 limit 1;
# 
# Switching to connection 'mdl_con1'.
# Sending:
rename table t1 to t2;;
# 
# Switching to connection 'default'.
# Wait until RENAME TABLE is blocked creating pending request for X lock.
# Check that both SR and SW locks are granted without waiting
# and errors.
select count(*) from t1;
count(*)
3
insert into t1 values (1, 1);
# Unblock RENAME TABLE.
commit;
# 
# Switching to connection 'mdl_con1'.
# Reap RENAME TABLE.
ERROR 42S01: Table 't2' already exists
# 
# Switching to connection 'default'.
# Clean-up.
set debug_sync= 'RESET';
drop table t1, t2;
#
# Additional coverage for some scenarios in which not quite
# correct use of S metadata locks by HANDLER statement might
# have caused deadlocks.
#
drop table if exists t1, t2;
create table t1 (i int);
create table t2 (j int);
insert into t1 values (1);
#
# First, check scenario in which we upgrade SNRW lock to X lock
# on a table while having HANDLER READ trying to acquire TL_READ
# on the same table.
#
handler t1 open;
# 
# Switching to connection 'handler_con1'.
lock table t1 write;
# Upgrade SNRW to X lock.
# Sending:
alter table t1 add column j int;;
# 
# Switching to connection 'handler_con2'.
# Wait until ALTER is blocked during upgrade.
# 
# Switching to connection 'default'.
# The below statement should not cause deadlock.
handler t1 read first;;
# 
# Switching to connection 'handler_con1'.
# Reap ALTER TABLE.
unlock tables;
# 
# Switching to connection 'default'.
# Reap HANDLER READ.
i	j
1	NULL
handler t1 close;
#
# Now, check scenario in which upgrade of SNRW lock to X lock
# can be blocked by HANDLER which is open in connection currently
# waiting to get table-lock owned by connection doing upgrade.
#
handler t1 open;
# 
# Switching to connection 'handler_con1'.
lock table t1 write, t2 read;
# 
# Switching to connection 'default'.
# Execute statement which will be blocked on table-level lock
# owned by connection 'handler_con1'.
# Sending:
insert into t2 values (1);;
# 
# Switching to connection 'handler_con1'.
# Wait until INSERT is blocked on table-level lock.
# Sending 'alter table t1 drop column j'. It should not cause
# deadlock.
alter table t1 drop column j;
# Switching to connection 'handler_con2'.
# Wait until ALTER is blocked during upgrade.
# 
# Switching to connection 'default'.
# Reap INSERT.
ERROR HY000: Wait on a lock was aborted due to a pending exclusive lock
handler t1 close;
#
# Switching to connection 'handler_con1'.
# Reaping 'alter table t1 drop column j'
unlock tables;
# Switching to connection 'default'.
# Then, check the scenario in which upgrade of SNRW lock to X
# lock is blocked by HANDLER which is open in connection currently
# waiting to get SW lock on the same table.
#
handler t1 open;
# 
# Switching to connection 'handler_con1'.
lock table t1 write;
# 
# Switching to connection 'default'.
# The below insert should be blocked because active SNRW lock on 't1'.
# Sending:
insert into t1 values (1);;
# 
# Switching to connection 'handler_con1'.
# Wait until INSERT is blocked because of SNRW lock.
# The below ALTER TABLE will be blocked because of presence of HANDLER.
# Sending:
alter table t1 add column j int;;
# 
# Switching to connection 'default'.
# INSERT should be chosen as victim for resolving deadlock.
# Reaping INSERT.
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
# Close HANDLER to unblock ALTER TABLE.
handler t1 close;
# 
# Switching to connection 'handler_con1'.
# Reaping ALTER TABLE.
unlock tables;
# 
# Switching to connection 'default'.
#
# Finally, test in which upgrade of SNRW lock to X lock is blocked
# by HANDLER which is open in connection currently waiting to get
# SR lock on the table on which lock is upgraded.
#
handler t1 open;
# 
# Switching to connection 'handler_con1'.
lock table t1 write, t2 write;
# 
# Switching to connection 'default'.
# The below insert should be blocked because active SNRW lock on 't1'.
# Sending:
insert into t2 values (1);;
# 
# Switching to connection 'handler_con1'.
# Wait until INSERT is blocked because of SNRW lock.
# The below ALTER TABLE will be blocked because of presence of HANDLER.
# Sending:
alter table t1 drop column j;;
# 
# Switching to connection 'default'.
# INSERT should be chosen as victim for resolving deadlock.
# Reaping INSERT.
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
# Close HANDLER to unblock ALTER TABLE.
handler t1 close;
# 
# Switching to connection 'handler_con1'.
# Reaping ALTER TABLE.
unlock tables;
# 
# Switching to connection 'default'.
# Clean-up.
drop tables t1, t2;
#
# Test coverage for basic deadlock detection in metadata
# locking subsystem.
#
drop tables if exists t0, t1, t2, t3, t4, t5;
set debug_sync= 'RESET';
create table t1 (i int);
create table t2 (j int);
create table t3 (k int);
create table t4 (k int);
#
# Test for the case in which no deadlock occurs.
#
#
# Switching to connection 'deadlock_con1'.
begin;
insert into t1 values (1);
#
# Switching to connection 'deadlock_con2'.
begin;
insert into t2 values (1);
#
# Switching to connection 'default'.
# Send:
rename table t2 to t0, t3 to t2, t0 to t3;;
#
# Switching to connection 'deadlock_con1'.
# Wait until the above RENAME TABLE is blocked because it has to wait
# for 'deadlock_con2' which holds shared metadata lock on 't2'.
# The below statement should wait for exclusive metadata lock
# on 't2' to go away and should not produce ER_LOCK_DEADLOCK
# as no deadlock is possible in this situation.
# Send:
select * from t2;;
#
# Switching to connection 'deadlock_con2'.
# Wait until the above SELECT * FROM t2 is starts waiting
# for an exclusive metadata lock to go away.
#
# Unblock RENAME TABLE by releasing shared metadata lock on t2.
commit;
#
# Switching to connection 'default'.
# Reap RENAME TABLE.
#
# Switching to connection 'deadlock_con1'.
# Reap SELECT.
k
#
# Switching to connection 'default'.
#
# Let us check that in the process of waiting for conflicting lock
# on table 't2' to go away transaction in connection 'deadlock_con1'
# has not released metadata lock on table 't1'.
# Send:
rename table t1 to t0, t3 to t1, t0 to t3;;
#
# Switching to connection 'deadlock_con1'.
# Wait until the above RENAME TABLE is blocked because it has to wait
# for 'deadlock_con1' which should still hold shared metadata lock on
# table 't1'.
# Commit transaction to unblock RENAME TABLE.
commit;
#
# Switching to connection 'default'.
# Reap RENAME TABLE.
#
# Test for case when deadlock occurs and should be detected immediately.
#
#
# Switching to connection 'deadlock_con1'.
begin;
insert into t2 values (2);
#
# Switching to connection 'default'.
# Send:
rename table t2 to t0, t1 to t2, t0 to t1;;
#
# Switching to connection 'deadlock_con1'.
# Wait until the above RENAME TABLE is blocked because it has to wait
# for 'deadlock_con1' which holds shared metadata lock on 't2'.
# 
# The below statement should not wait as doing so will cause deadlock.
# Instead it should fail and emit ER_LOCK_DEADLOCK statement and 
# transaction should be rolled back.
select * from t1;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
#
# Switching to connection 'default'.
# Reap RENAME TABLE.
#
# Test for the case in which deadlock also occurs but not immediately.
#
#
# Switching to connection 'deadlock_con1'.
begin;
insert into t2 values (1);
#
# Switching to connection 'default'.
lock table t1 write;
#
# Switching to connection 'deadlock_con1'.
# The below SELECT statement should wait for metadata lock
# on table 't1' and should not produce ER_LOCK_DEADLOCK
# immediately as no deadlock is possible at the moment.
select * from t1;;
#
# Switching to connection 'deadlock_con2'.
# Wait until the above SELECT * FROM t1 is starts waiting
# for an UNRW metadata lock to go away.
# Send RENAME TABLE statement that will deadlock with the
# SELECT statement and thus should abort the latter.
rename table t1 to t0, t2 to t1, t0 to t2;;
#
# Switching to connection 'default'.
# Wait till above RENAME TABLE is blocked while holding
# pending X lock on t1.
# Allow the above RENAME TABLE to acquire lock on t1 and
# create pending lock on t2 thus creating deadlock.
unlock tables;
#
# Switching to connection 'deadlock_con1'.
# Since the latest RENAME TABLE entered in deadlock with SELECT
# statement the latter should be aborted and emit ER_LOCK_DEADLOCK
# error and transaction should be rolled back.
# Reap SELECT * FROM t1.
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
#
# Switching to connection 'deadlock_con2'.
# Reap RENAME TABLE ... .
#
# Switching to connection 'default'.
drop tables t1, t2, t3, t4;
#
# Now, test case which shows that deadlock detection empiric
# also takes into account requests for metadata lock upgrade.
#
create table t1 (i int);
insert into t1 values (1);
# Avoid race which occurs when SELECT in 'deadlock_con1' connection
# accesses table before the above INSERT unlocks the table and thus
# its result becomes visible to other connections.
select * from t1;
i
1
#
# Switching to connection 'deadlock_con1'.
begin;
select * from t1;
i
1
#
# Switching to connection 'default'.
# Send:
alter table t1 add column j int, rename to t2;;
#
# Switching to connection 'deadlock_con1'.
# Wait until the above ALTER TABLE ... RENAME acquires exclusive
# metadata lock on 't2' and starts waiting for connection
# 'deadlock_con1' which holds shared lock on 't1'.
# The below statement should not wait as it will cause deadlock.
# An appropriate error should be reported instead and transaction
# should be rolled back.
select * from t2;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
#
# Switching to connection 'default'.
# Reap ALTER TABLE ... RENAME.
drop table t2;
#
# Test that in situation when MDL subsystem detects a deadlock
# but it turns out that it can be resolved by backing-off locks
# acquired by one of participating transactions (which is
# possible when one of transactions consists only of currently
# executed statement, e.g. in autocommit mode) no error is
# reported.
#
create table t1 (i int);
create table t2 (j int);
# Ensure that the below SELECT stops once it has acquired metadata
# lock on table 't2'.
set debug_sync= 'after_open_table_mdl_shared SIGNAL locked WAIT_FOR finish';
# Sending:
select * from t2, t1;
#
# Switching to connection 'deadlock_con1'.
# Wait till SELECT acquires MDL on 't2' and starts waiting for signal.
set debug_sync= 'now WAIT_FOR locked';
# Sending:
lock tables t1 write, t2 write;
#
# Switching to connection 'deadlock_con2'.
# Wait until LOCK TABLES acquires SNRW lock on 't1' and is blocked
# while trying to acquire SNRW lock on 't1'.
# Resume SELECT execution, this should eventually unblock LOCK TABLES.
set debug_sync= 'now SIGNAL finish';
#
# Switching to connection 'deadlock_con1'.
# Reaping LOCK TABLES.
unlock tables;
#
# Switching to connection 'default'.
# Reaping SELECT. It succeed and not report ER_LOCK_DEADLOCK error.
j	i
drop tables t1, t2;
#
# Test coverage for situation in which a race has happened
# during deadlock detection process which led to unwarranted
# ER_LOCK_DEADLOCK error.
#
create table t1 (i int);
# Ensure that ALTER waits once it has acquired SNW lock.
set debug_sync='alter_table_copy_after_lock_upgrade SIGNAL parked1 WAIT_FOR go1';
# Sending:
alter table t1 add column j int;
#
# Switching to connection 'deadlock_con1'.
# Wait till ALTER acquires SNW lock and stops.
set debug_sync='now WAIT_FOR parked1';
# Ensure that INSERT is paused once it detects that there is
# a conflicting metadata lock so it has to wait, but before
# deadlock detection is run.
set debug_sync='mdl_acquire_lock_wait SIGNAL parked2 WAIT_FOR go2';
# Sending:
insert into t1 values ();
#
# Switching to connection 'deadlock_con2'.
# Wait till INSERT is paused.
set debug_sync='now WAIT_FOR parked2';
# Resume ALTER execution. Eventually it will release its
# metadata lock and INSERT's request for SW lock will be
# satisified.
set debug_sync='now SIGNAL go1';
#
# Switching to connection 'default'.
# Reaping ALTER TABLE.
# Add a new request for SNW lock to waiting graph.
# Sending:
alter table t1 drop column j;
#
# Switching to connection 'deadlock_con2'.
# Wait until ALTER is blocked.
# Resume INSERT so it can start deadlock detection.
#
# At this point there is a discrepancy between the fact that INSERT's
# SW lock is already satisfied, but INSERT's connection is still
# marked as waiting for it. Looking for a loop in waiters graph
# without additional checks has detected a deadlock (INSERT waits
# for SW lock; which is not granted because of pending SNW lock from
# ALTER; which waits for active SW lock from INSERT). Since requests
# for SW and SNW locks have same weight ALTER was selected as a victim
# and ended with ER_LOCK_DEADLOCK error.
set debug_sync='now SIGNAL go2';
#
# Switching to connection 'deadlock_con1'.
# Reaping INSERT.
#
# Switching to connection 'default'.
# Reaping ALTER. It should succeed and not produce ER_LOCK_DEADLOCK.
drop table t1;
#
# Now, test for a situation in which deadlock involves waiting not
# only in MDL subsystem but also for TDC. Such deadlocks should be
# successfully detected. If possible, they should be resolved without
# resorting to ER_LOCK_DEADLOCK error.
#
create table t1(i int);
create table t2(j int);
#
# First, let us check how we handle a simple scenario involving
# waits in MDL and TDC.
#
set debug_sync= 'RESET';
# Switching to connection 'deadlock_con1'.
# Start a statement, which will acquire SR metadata lock on t1, open it
# and then stop, before trying to acquire SW lock on t2 and opening it.
set debug_sync='open_tables_after_open_and_process_table SIGNAL parked WAIT_FOR go';
# Sending:
select * from t1 where i in (select j from t2 for update);
# Switching to connection 'deadlock_con2'.
# Wait till the above SELECT stops.
set debug_sync='now WAIT_FOR parked';
# The below FLUSH TABLES WITH READ LOCK should acquire
# SNW locks on t1 and t2 and wait till SELECT closes t1.
# Sending:
flush tables t1, t2 with read lock;
# Switching to connection 'deadlock_con3'.
# Wait until FLUSH TABLES WITH t1, t2 READ LOCK starts waiting
# for SELECT to close t1.
# Resume SELECT, so it tries to acquire SW lock on t1 and blocks,
# creating a deadlock. This deadlock should be detected and resolved
# by backing-off SELECT. As a result FTWRL should be able to finish.
set debug_sync='now SIGNAL go';
# Switching to connection 'deadlock_con2'.
# Reap FLUSH TABLES WITH READ LOCK.
unlock tables;
# Switching to connection 'deadlock_con1'.
# Reap SELECT.
i
#
# The same scenario with a slightly different order of events
# which emphasizes that setting correct deadlock detector weights
# for flush waits is important.
#
set debug_sync= 'RESET';
# Switching to connection 'deadlock_con2'.
set debug_sync='flush_tables_with_read_lock_after_acquire_locks SIGNAL parked WAIT_FOR go';
# The below FLUSH TABLES WITH READ LOCK should acquire
# SNW locks on t1 and t2 and wait on debug sync point.
# Sending:
flush tables t1, t2 with read lock;
# Switching to connection 'deadlock_con1'.
# Wait till FLUSH TABLE WITH READ LOCK stops.
set debug_sync='now WAIT_FOR parked';
# Start statement which will acquire SR metadata lock on t1, open
# it and then will block while trying to acquire SW lock on t2.
# Sending:
select * from t1 where i in (select j from t2 for update);
# Switching to connection 'deadlock_con3'.
# Wait till the above SELECT blocks.
# Resume FLUSH TABLES, so it tries to flush t1, thus creating
# a deadlock. This deadlock should be detected and resolved by
# backing-off SELECT. As a result FTWRL should be able to finish.
set debug_sync='now SIGNAL go';
# Switching to connection 'deadlock_con2'.
# Reap FLUSH TABLES WITH READ LOCK.
unlock tables;
# Switching to connection 'deadlock_con1'.
# Reap SELECT.
i
#
# Now a more complex scenario involving two connections
# waiting for MDL and one for TDC.
#
set debug_sync= 'RESET';
# Switching to connection 'deadlock_con1'.
# Start a statement which will acquire SR metadata lock on t2, open it
# and then stop, before trying to acquire SR on t1 and opening it.
set debug_sync='open_tables_after_open_and_process_table SIGNAL parked WAIT_FOR go';
# Sending:
select * from t2, t1;
# Switching to connection 'deadlock_con2'.
# Wait till the above SELECT stops.
set debug_sync='now WAIT_FOR parked';
# The below FLUSH TABLES WITH READ LOCK should acquire
# SNW locks on t2 and wait till SELECT closes t2.
# Sending:
flush tables t2 with read lock;
# Switching to connection 'deadlock_con3'.
# Wait until FLUSH TABLES WITH READ LOCK starts waiting
# for SELECT to close t2.
# The below DROP TABLES should acquire X lock on t1 and start
# waiting for X lock on t2.
# Sending:
drop tables t1, t2;
# Switching to connection 'default'.
# Wait until DROP TABLES starts waiting for X lock on t2.
# Resume SELECT, so it tries to acquire SR lock on t1 and blocks,
# creating a deadlock. This deadlock should be detected and resolved
# by backing-off SELECT. As a result, FTWRL should be able to finish.
set debug_sync='now SIGNAL go';
# Switching to connection 'deadlock_con2'.
# Reap FLUSH TABLES WITH READ LOCK.
# Unblock DROP TABLES.
unlock tables;
# Switching to connection 'deadlock_con3'.
# Reap DROP TABLES.
# Switching to connection 'deadlock_con1'.
# Reap SELECT. It should emit error about missing table.
ERROR 42S02: Table 'test.t2' doesn't exist
# Switching to connection 'default'.
set debug_sync= 'RESET';
#
# Test for a scenario in which FLUSH TABLES <list> WITH READ LOCK
# used to erroneously release metadata locks.
# 
drop tables if exists t1, t2;
set debug_sync= 'RESET';
create table t1(i int);
create table t2(j int);
# Switching to connection 'con2'.
set debug_sync='open_tables_after_open_and_process_table SIGNAL parked WAIT_FOR go';
# The below FLUSH TABLES <list> WITH READ LOCK should acquire
# SNW locks on t1 and t2, open table t1 and block on the debug
# sync point.
# Sending:
flush tables t1, t2 with read lock;
# Switching to connection 'con1'.
# Wait till FLUSH TABLES <list> WITH READ LOCK stops.
set debug_sync='now WAIT_FOR parked';
# Start a statement which will flush all tables and thus
# invalidate table t1 open by FLUSH TABLES <list> WITH READ LOCK.
# Sending:
flush tables;
# Switching to connection 'default'.
# Wait till the above FLUSH TABLES blocks.
# Resume FLUSH TABLES <list> WITH READ LOCK, so it tries to open t2
# discovers that its t1 is obsolete and tries to reopen all tables.
# Such reopen should not cause releasing of SNW metadata locks
# which would result in assertion failures.
set debug_sync='now SIGNAL go';
# Switching to connection 'con2'.
# Reap FLUSH TABLES <list> WITH READ LOCK.
unlock tables;
# Switching to connection 'con1'.
# Reap FLUSH TABLES.
# Clean-up.
# Switching to connection 'default'.
drop tables t1, t2;
set debug_sync= 'RESET';
#
# Test for bug #46748 "Assertion in MDL_context::wait_for_locks()
# on INSERT + CREATE TRIGGER".
#
drop tables if exists t1, t2, t3, t4, t5;
# Let us simulate scenario in which we open some tables from extended
# part of prelocking set but then encounter conflicting metadata lock,
# so have to back-off and wait for it to go away.
create table t1 (i int);
create table t2 (j int);
create table t3 (k int);
create table t4 (l int);
create trigger t1_bi before insert on t1 for each row
insert into t2 values (new.i);
create trigger t2_bi before insert on t2 for each row
insert into t3 values (new.j);
#
# Switching to connection 'con1root'.
lock tables t4 read;
#
# Switching to connection 'con2root'.
# Send :
rename table t3 to t5, t4 to t3;;
#
# Switching to connection 'default'.
# Wait until the above RENAME TABLE adds pending requests for exclusive
# metadata lock on its tables and blocks due to 't4' being used by LOCK
# TABLES.
# Send :
insert into t1 values (1);;
#
# Switching to connection 'con1root'.
# Wait until INSERT statement waits due to encountering pending
# exclusive metadata lock on 't3'.
unlock tables;
#
# Switching to connection 'con2root'.
# Reap RENAME TABLE.
#
# Switching to connection 'default'.
# Reap INSERT.
# Clean-up.
drop tables t1, t2, t3, t5;
#
# Bug#42546 - Backup: RESTORE fails, thinking it finds an existing table
#
DROP TABLE IF EXISTS t1;
set @save_log_output=@@global.log_output;
set global log_output=file;
#
# Test 1: CREATE TABLE
#
# Connection 2 
# Start insert on the not-yet existing table
# Wait after taking the MDL lock
SET DEBUG_SYNC= 'after_open_table_mdl_shared SIGNAL locked WAIT_FOR finish';
INSERT INTO t1 VALUES(1,"def");
# Connection 1
SET DEBUG_SYNC= 'now WAIT_FOR locked';
# Now INSERT has a MDL on the non-existent table t1.
#
# Continue the INSERT once CREATE waits for exclusive lock
SET DEBUG_SYNC= 'mdl_acquire_lock_wait SIGNAL finish';
# Try to create that table.
CREATE TABLE t1 (c1 INT, c2 VARCHAR(100), KEY(c1));
# Connection 2
# Insert fails
ERROR 42S02: Table 'test.t1' doesn't exist
# Connection 1
SET DEBUG_SYNC= 'RESET';
SHOW TABLES;
Tables_in_test
t1
DROP TABLE IF EXISTS t1;
#
# Test 2: CREATE TABLE LIKE
#
CREATE TABLE t2 (c1 INT, c2 VARCHAR(100), KEY(c1));
# Connection 2 
# Start insert on the not-yet existing table
# Wait after taking the MDL
SET DEBUG_SYNC= 'after_open_table_mdl_shared SIGNAL locked WAIT_FOR finish';
INSERT INTO t1 VALUES(1,"def");
# Connection 1
SET DEBUG_SYNC= 'now WAIT_FOR locked';
# Now INSERT has a MDL on the non-existent table t1.
#
# Continue the INSERT once CREATE waits for exclusive lock
SET DEBUG_SYNC= 'mdl_acquire_lock_wait SIGNAL finish';
# Try to create that table.
CREATE TABLE t1 LIKE t2;
# Connection 2
# Insert fails
ERROR 42S02: Table 'test.t1' doesn't exist
# Connection 1
SET DEBUG_SYNC= 'RESET';
SHOW TABLES;
Tables_in_test
t1
t2
DROP TABLE t2;
DROP TABLE IF EXISTS t1;
set global log_output=@save_log_output;
#
# Bug #46044 "MDL deadlock on LOCK TABLE + CREATE TABLE HIGH_PRIORITY
#             FOR UPDATE"
#
drop tables if exists t1, t2;
create table t1 (i int);
insert into t1 values(1);
# Let us check that we won't deadlock if during filling
# of I_S table we encounter conflicting metadata lock
# which owner is in its turn waiting for our connection.
lock tables t1 read;
# Switching to connection 'con46044_2'.
# Sending:
update t1 set i = 2;
# Switching to connection 'con46044'.
# Waiting until UPDATE t1 SET ... is blocked.
# Sending:
create table t2 select * from t1;;
# Switching to connection 'default'.
# Waiting until CREATE TABLE ... SELECT ... is blocked.
# First let us check that SHOW FIELDS/DESCRIBE doesn't
# gets blocked and emits and error.
show fields from t2;
ERROR HY000: Table 'test'.'t2' was skipped since its definition is being modified by concurrent DDL statement
# Now test for I_S query which reads only .FRMs.
#
# Query below should only emit a warning.
select column_name from information_schema.columns
where table_schema='test' and table_name='t2';
column_name
Warnings:
Warning	1684	Table 'test'.'t2' was skipped since its definition is being modified by concurrent DDL statement
# Finally, test for I_S query which does full-blown table open.
#
# Query below should not be blocked. Warning message should be
# stored in the 'table_comment' column.
select table_name, table_type, auto_increment, table_comment
from information_schema.tables where table_schema='test' and table_name='t2';
table_name	table_type	auto_increment	table_comment
t2	BASE TABLE	NULL	Table 'test'.'t2' was skipped since its definition is being modified by concurrent DDL statement
Warnings:
Warning	1684	Table 'test'.'t2' was skipped since its definition is being modified by concurrent DDL statement
# Switching to connection 'default'.
unlock tables;
# Switching to connection 'con46044'.
# Reaping CREATE TABLE ... SELECT ... .
drop table t2;
# Reaping UPDATE t1 statement
#
# Let us also check that queries to I_S wait for conflicting metadata
# locks to go away instead of skipping table with a warning in cases
# when deadlock is not possible. This is a nice thing from compatibility
# and ease of use points of view.
#
# We check same three queries to I_S in this new situation.
# Switching to connection 'con46044_2'.
lock tables t1 read;
# Switching to connection 'con46044_3'.
# Sending:
update t1 set i = 3;
# Switching to connection 'con46044'.
# Waiting until UPDATE t1 SET ... is blocked.
# Sending:
create table t2 select * from t1;;
# Switching to connection 'default'.
# Waiting until CREATE TABLE ... SELECT ... is blocked.
# Let us check that SHOW FIELDS/DESCRIBE gets blocked.
# Sending:
show fields from t2;;
# Switching to connection 'con46044_2'.
# Wait until SHOW FIELDS gets blocked.
unlock tables;
# Switching to connection 'con46044'.
# Reaping CREATE TABLE ... SELECT ... .
# Switching to connection 'default'.
# Reaping SHOW FIELDS ...
Field	Type	Null	Key	Default	Extra
i	int(11)	YES		NULL	
drop table t2;
# Reaping UPDATE t1 statement
# Switching to connection 'con46044_2'.
lock tables t1 read;
# Switching to connection 'con46044_3'.
# Sending:
update t1 set i = 4;
# Switching to connection 'con46044'.
# Waiting until UPDATE t1 SET ... is blocked.
# Sending:
create table t2 select * from t1;;
# Switching to connection 'default'.
# Waiting until CREATE TABLE ... SELECT ... is blocked.
# Check that I_S query which reads only .FRMs gets blocked.
# Sending:
select column_name from information_schema.columns where table_schema='test' and table_name='t2';;
# Switching to connection 'con46044_2'.
# Wait until SELECT COLUMN_NAME FROM I_S.COLUMNS  gets blocked.
unlock tables;
# Switching to connection 'con46044'.
# Reaping CREATE TABLE ... SELECT ... .
# Switching to connection 'default'.
# Reaping SELECT COLUMN_NAME FROM I_S.COLUMNS
column_name
i
drop table t2;
# Reaping UPDATE t1 statement
# Switching to connection 'con46044_2'.
lock tables t1 read;
# Switching to connection 'con46044_3'.
# Sending:
update t1 set i = 5;
# Switching to connection 'con46044'.
# Waiting until UPDATE t1 SET ... is blocked.
# Sending:
create table t2 select * from t1;;
# Switching to connection 'default'.
# Waiting until CREATE TABLE ... SELECT ... is blocked.
# Finally, check that I_S query which does full-blown table open
# also gets blocked.
# Sending:
select table_name, table_type, auto_increment, table_comment from information_schema.tables where table_schema='test' and table_name='t2';;
# Switching to connection 'con46044_2'.
# Wait until SELECT ... FROM I_S.TABLES gets blocked.
unlock tables;
# Switching to connection 'con46044'.
# Reaping CREATE TABLE ... SELECT ... .
# Switching to connection 'default'.
# Reaping SELECT ... FROM I_S.TABLES
table_name	table_type	auto_increment	table_comment
t2	BASE TABLE	NULL	
drop table t2;
# Reaping UPDATE t1 statement
# Switching to connection 'default'.
# Clean-up.
drop table t1;
#
# Test for bug #46273 "MySQL 5.4.4 new MDL: Bug#989 is not fully fixed
#                      in case of ALTER".
#
drop table if exists t1;
set debug_sync= 'RESET';
create table t1 (c1 int primary key, c2 int, c3 int);
insert into t1 values (1,1,0),(2,2,0),(3,3,0),(4,4,0),(5,5,0);
begin;
select * from t1 where c2 = 3;
c1	c2	c3
3	3	0
#
# Switching to connection 'con46273'.
set debug_sync='alter_table_copy_after_lock_upgrade SIGNAL alter_table_locked WAIT_FOR alter_go';
alter table t1 add column e int, rename to t2;;
#
# Switching to connection 'default'.
set debug_sync='now WAIT_FOR alter_table_locked';
set debug_sync='mdl_acquire_lock_wait SIGNAL alter_go';
# The below statement should get ER_LOCK_DEADLOCK error
# (i.e. it should not allow ALTER to proceed, and then
# fail due to 't1' changing its name to 't2').
update t1 set c3=c3+1 where c2 = 3;
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
#
# Switching to connection 'con46273'.
# Reap ALTER TABLE.
#
# Switching to connection 'default'.
# Clean-up.
set debug_sync= 'RESET';
drop table t2;
#
# Test for bug #46673 "Deadlock between FLUSH TABLES WITH READ LOCK
#                      and DML".
#
drop tables if exists t1;
create table t1 (i int);
# Switching to connection 'con46673'.
begin;
insert into t1 values (1);
# Switching to connection 'default'.
# Statement below should not get blocked. And if after some
# changes to code it is there should not be a deadlock between
# it and transaction from connection 'con46673'.
flush tables with read lock;
unlock tables;
# Switching to connection 'con46673'.
delete from t1 where i = 1;
commit;
# Switching to connection 'default'.
# Clean-up
drop table t1;
#
# Bug#48210 FLUSH TABLES WITH READ LOCK deadlocks 
#           against concurrent CREATE PROCEDURE
#
# Test 1: CREATE PROCEDURE
# Connection 1
# Start CREATE PROCEDURE and open mysql.proc
SET DEBUG_SYNC= 'after_open_table_mdl_shared SIGNAL table_opened WAIT_FOR grlwait';
CREATE PROCEDURE p1() SELECT 1;
# Connection 2
SET DEBUG_SYNC= 'now WAIT_FOR table_opened';
# Check that FLUSH must wait to get the GRL
# and let CREATE PROCEDURE continue
SET DEBUG_SYNC= 'mdl_acquire_lock_wait SIGNAL grlwait';
FLUSH TABLES WITH READ LOCK;
# Connection 1
# Connection 2
UNLOCK TABLES;
# Connection 1
SET DEBUG_SYNC= 'RESET';
# Test 2: DROP PROCEDURE
# Start DROP PROCEDURE and open tables
SET DEBUG_SYNC= 'after_open_table_mdl_shared SIGNAL table_opened WAIT_FOR grlwait';
DROP PROCEDURE p1;
# Connection 2
SET DEBUG_SYNC= 'now WAIT_FOR table_opened';
# Check that FLUSH must wait to get the GRL
# and let DROP PROCEDURE continue
SET DEBUG_SYNC= 'mdl_acquire_lock_wait SIGNAL grlwait';
FLUSH TABLES WITH READ LOCK;
# Connection 1
# Once FLUSH TABLES WITH READ LOCK starts waiting
# DROP PROCEDURE will be waked up and will drop
# procedure. Global read lock will be granted after
# this statement ends.
#
# Reaping DROP PROCEDURE.
# Connection 2
# Reaping FTWRL.
UNLOCK TABLES;
# Connection 1
SET DEBUG_SYNC= 'RESET';
#
# Bug#50786 Assertion `thd->mdl_context.trans_sentinel() == __null' 
#           failed in open_ltable()
#
# Supress warnings written to the log file
call mtr.add_suppression("Wait on a lock was aborted due to a pending exclusive lock");
DROP TABLE IF EXISTS t1, t2;
CREATE TABLE t1 (i INT);
CREATE TABLE t2 (i INT);
SET @old_general_log= @@global.general_log;
SET @@global.general_log= 1;
SET @old_log_output= @@global.log_output;
SET @@global.log_output= 'TABLE';
SET @old_sql_log_off= @@session.sql_log_off;
SET @@session.sql_log_off= 1;
# connection: con1
HANDLER t1 OPEN;
# connection: con3
SET @@session.sql_log_off= 1;
# connection: con2
SET DEBUG_SYNC= 'thr_multi_lock_after_thr_lock SIGNAL parked WAIT_FOR go';
# Sending:
SELECT 1;
# connection: con3
SET DEBUG_SYNC= 'now WAIT_FOR parked';
# connection: con1
# Sending:
SELECT 1;
# connection: con3
ALTER TABLE t1 ADD COLUMN j INT;
# connection: default
SET DEBUG_SYNC= 'now SIGNAL go';
# connection: con1
# Reaping SELECT 1
1
1
HANDLER t1 CLOSE;
# connection: con2
# Reaping SELECT 1
1
1
# connection: default
DROP TABLE t1, t2;
SET DEBUG_SYNC= 'RESET';
SET @@global.general_log= @old_general_log;
SET @@global.log_output= @old_log_output;
SET @@session.sql_log_off= @old_sql_log_off;
#
# Additional coverage for bug #50913 "Deadlock between
# open_and_lock_tables_derived and MDL". The main test
# case is in lock_multi.test
#
drop table if exists t1;
set debug_sync= 'RESET';
create table t1 (i int) engine=InnoDB;
# Switching to connection 'con50913_1'.
set debug_sync= 'alter_table_copy_after_lock_upgrade SIGNAL parked WAIT_FOR go';
# Sending:
alter table t1 add column j int, ALGORITHM=COPY;
# Switching to connection 'default'.
# Wait until ALTER TABLE gets blocked on a sync point after
# acquiring thr_lock.c lock.
set debug_sync= 'now WAIT_FOR parked';
# The below statement should wait on MDL lock and not deadlock on
# thr_lock.c lock.
# Sending:
truncate table t1;
# Switching to connection 'con50913_2'.
# Wait until TRUNCATE TABLE is blocked on MDL lock.
# Unblock ALTER TABLE.
set debug_sync= 'now SIGNAL go';
# Switching to connection 'con50913_1'.
# Reaping ALTER TABLE.
# Switching to connection 'default'.
# Reaping TRUNCATE TABLE.
set debug_sync= 'RESET';
drop table t1;
#
# Test for bug #50998 "Deadlock in MDL code during test
#                      rqg_mdl_stability".
# Also provides coverage for the case when addition of
# waiting statement adds several loops in the waiters
# graph and therefore several searches for deadlock
# should be performed.
drop table if exists t1;
set debug_sync= 'RESET';
create table t1 (i int);
# Switching to connection 'con1'.
begin;
select * from t1;
i
# Switching to connection 'con2'.
begin;
select * from t1;
i
# Switching to connection 'default'.
# Start ALTER TABLE which will acquire SNW lock and
# table lock and get blocked on sync point.
set debug_sync= 'alter_table_copy_after_lock_upgrade SIGNAL parked WAIT_FOR go';
# Sending:
alter table t1 add column j int;
# Switching to connection 'con1'.
# Wait until ALTER TABLE gets blocked on a sync point.
set debug_sync= 'now WAIT_FOR parked';
# Sending:
insert into t1 values (1);
# Switching to connection 'con2'.
# Sending:
insert into t1 values (1);
# Switching to connection 'con3'.
# Wait until both 'con1' and 'con2' are blocked trying to acquire
# SW lock on the table.
# Unblock ALTER TABLE. Since it will try to upgrade SNW to X lock
# deadlock with two loops in waiting graph will occur. Both loops
# should be found and DML statements in both 'con1' and 'con2'
# should be aborted with ER_LOCK_DEADLOCK errors.
set debug_sync= 'now SIGNAL go';
# Switching to connection 'con1'.
# Reaping INSERT. It should end with ER_LOCK_DEADLOCK error and
# not wait indefinitely (as it happened before the bugfix).
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
commit;
# Switching to connection 'con2'.
# Reaping INSERT.
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
commit;
# Switching to connection 'default'.
# Reap ALTER TABLE.
set debug_sync= 'RESET';
drop table t1;
#
# Bug#42643: InnoDB does not support replication of TRUNCATE TABLE
#
# Ensure that a acquired lock is not given up due to a conflict.
#
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1),(2),(3);
# Connection: con1
LOCK TABLES t1 WRITE;
SET debug_sync='upgrade_lock_for_truncate SIGNAL parked_truncate WAIT_FOR go_truncate';
TRUNCATE TABLE t1;
# Connection: default
SET debug_sync='now WAIT_FOR parked_truncate';
# Connection: con2
SET debug_sync='after_open_table_ignore_flush SIGNAL parked_show WAIT_FOR go_show';
SHOW FIELDS FROM t1;
# Connection: default
SET debug_sync='now WAIT_FOR parked_show';
# Connection: con3
SET debug_sync='after_flush_unlock SIGNAL parked_flush WAIT_FOR go_flush';
FLUSH TABLES t1;
# Connection: default
SET debug_sync='now WAIT_FOR parked_flush';
SET debug_sync='now SIGNAL go_truncate';
# Ensure that truncate waits for a exclusive lock
SET debug_sync= 'now SIGNAL go_show';
# Connection: con1 (TRUNCATE)
# Reaping...
UNLOCK TABLES;
# Connection: con2 (SHOW FIELDS FROM t1)
# Reaping...
Field	Type	Null	Key	Default	Extra
a	int(11)	YES		NULL	
# Connection: default
SET debug_sync= 'now SIGNAL go_flush';
# Connection: con3 (FLUSH TABLES t1)
# Reaping...
# Connection: default
SET debug_sync= 'RESET';
DROP TABLE t1;
#
# Bug#52856 concurrent show columns or show full columns causes a crash!!!
#
CREATE TABLE t1(a CHAR(255));
SET DEBUG_SYNC= "get_schema_column SIGNAL waiting WAIT_FOR completed";
SHOW FULL COLUMNS FROM t1;
SET DEBUG_SYNC= "now WAIT_FOR waiting";
SHOW FULL COLUMNS FROM t1;
Field	Type	Collation	Null	Key	Default	Extra	Privileges	Comment
a	char(255)	latin1_swedish_ci	YES		NULL		#	
SET DEBUG_SYNC= "now SIGNAL completed";
Field	Type	Collation	Null	Key	Default	Extra	Privileges	Comment
a	char(255)	latin1_swedish_ci	YES		NULL		#	
DROP TABLE t1;
#
# Tests for schema-scope locks
#
DROP DATABASE IF EXISTS db1;
DROP DATABASE IF EXISTS db2;
# Test 1: 
# CREATE DATABASE blocks database DDL on the same database, but
# not database DDL on different databases. Tests X vs X lock.
#
# Connection default
SET DEBUG_SYNC= 'after_wait_locked_schema_name SIGNAL locked WAIT_FOR blocked';
# Sending:
CREATE DATABASE db1;
# Connection con2
SET DEBUG_SYNC= 'now WAIT_FOR locked';
# Sending:
CREATE DATABASE db1;
# Connection con3
CREATE DATABASE db2;
ALTER DATABASE db2 DEFAULT CHARACTER SET utf8;
DROP DATABASE db2;
SET DEBUG_SYNC= 'now SIGNAL blocked';
# Connection default
# Reaping: CREATE DATABASE db1
# Connection con2
# Reaping: CREATE DATABASE db1
ERROR HY000: Can't create database 'db1'; database exists
# Test 2:
# ALTER DATABASE blocks database DDL on the same database, but
# not database DDL on different databases. Tests X vs X lock.
#
# Connection default
SET DEBUG_SYNC= 'after_wait_locked_schema_name SIGNAL locked WAIT_FOR blocked';
# Sending:
ALTER DATABASE db1 DEFAULT CHARACTER SET utf8;
# Connection con2
SET DEBUG_SYNC= 'now WAIT_FOR locked';
# Sending:
ALTER DATABASE db1 DEFAULT CHARACTER SET utf8;
# Connection con3
CREATE DATABASE db2;
ALTER DATABASE db2 DEFAULT CHARACTER SET utf8;
DROP DATABASE db2;
SET DEBUG_SYNC= 'now SIGNAL blocked';
# Connection default
# Reaping: ALTER DATABASE db1 DEFAULT CHARACTER SET utf8
# Connection con2
# Reaping: ALTER DATABASE db1 DEFAULT CHARACTER SET utf8
# Connection default
SET DEBUG_SYNC= 'after_wait_locked_schema_name SIGNAL locked WAIT_FOR blocked';
# Sending:
ALTER DATABASE db1 DEFAULT CHARACTER SET utf8;
# Connection con2
SET DEBUG_SYNC= 'now WAIT_FOR locked';
# Sending:
DROP DATABASE db1;
# Connection con3
SET DEBUG_SYNC= 'now SIGNAL blocked';
# Connection default
# Reaping: ALTER DATABASE db1 DEFAULT CHARACTER SET utf8
# Connection con2
# Reaping: DROP DATABASE db1
CREATE DATABASE db1;
# Test 3:
# Two ALTER..UPGRADE of the same database are mutually exclusive, but
# two ALTER..UPGRADE of different databases are not. Tests X vs X lock.
#
# Connection default
SET DEBUG_SYNC= 'after_wait_locked_schema_name SIGNAL locked WAIT_FOR blocked';
# Sending:
ALTER DATABASE `#mysql50#a-b-c` UPGRADE DATA DIRECTORY NAME;
# Connection con2
SET DEBUG_SYNC= 'now WAIT_FOR locked';
# Sending:
ALTER DATABASE `#mysql50#a-b-c` UPGRADE DATA DIRECTORY NAME;
# Connection con3
ALTER DATABASE `#mysql50#a-b-c-d` UPGRADE DATA DIRECTORY NAME;
SET DEBUG_SYNC= 'now SIGNAL blocked';
# Connection default
# Reaping: ALTER DATABASE '#mysql50#a-b-c' UPGRADE DATA DIRECTORY NAME
# Connection con2
# Reaping: ALTER DATABASE '#mysql50#a-b-c' UPGRADE DATA DIRECTORY NAME
ERROR 42000: Unknown database '#mysql50#a-b-c'
DROP DATABASE `a-b-c`;
DROP DATABASE `a-b-c-d`;
# Test 4:
# DROP DATABASE blocks database DDL on the same database, but
# not database DDL on different databases. Tests X vs X lock.
#
# Connection default
SET DEBUG_SYNC= 'after_wait_locked_schema_name SIGNAL locked WAIT_FOR blocked';
# Sending:
DROP DATABASE db1;
# Connection con2
SET DEBUG_SYNC= 'now WAIT_FOR locked';
# Sending:
DROP DATABASE db1;
# Connection con3
CREATE DATABASE db2;
ALTER DATABASE db2 DEFAULT CHARACTER SET utf8;
DROP DATABASE db2;
SET DEBUG_SYNC= 'now SIGNAL blocked';
# Connection default
# Reaping: DROP DATABASE db1
# Connection con2
# Reaping: DROP DATABASE db1
ERROR HY000: Can't drop database 'db1'; database doesn't exist
# Connection default
CREATE DATABASE db1;
SET DEBUG_SYNC= 'after_wait_locked_schema_name SIGNAL locked WAIT_FOR blocked';
# Sending:
DROP DATABASE db1;
# Connection con2
SET DEBUG_SYNC= 'now WAIT_FOR locked';
# Sending:
ALTER DATABASE db1 DEFAULT CHARACTER SET utf8;
# Connection con3
SET DEBUG_SYNC= 'now SIGNAL blocked';
# Connection default
# Reaping: DROP DATABASE db1
# Connection con2
# Reaping: ALTER DATABASE db1 DEFAULT CHARACTER SET utf8
Got one of the listed errors
# Test 5:
# Locked database name prevents CREATE of tables in that database.
# Tests X vs IX lock.
#
# Connection default
CREATE DATABASE db1;
SET DEBUG_SYNC= 'after_wait_locked_schema_name SIGNAL locked WAIT_FOR blocked';
# Sending:
DROP DATABASE db1;
# Connection con2
SET DEBUG_SYNC= 'now WAIT_FOR locked';
# Sending:
CREATE TABLE db1.t1 (a INT);
# Connection con3
SET DEBUG_SYNC= 'now SIGNAL blocked';
# Connection default
# Reaping: DROP DATABASE db1
# Connection con2
# Reaping: CREATE TABLE db1.t1 (a INT)
ERROR 42000: Unknown database 'db1'
# Test 6:
# Locked database name prevents RENAME of tables to/from that database.
# Tests X vs IX lock.
#
# Connection default
CREATE DATABASE db1;
CREATE TABLE db1.t1 (a INT);
SET DEBUG_SYNC= 'after_wait_locked_schema_name SIGNAL locked WAIT_FOR blocked';
# Sending:
DROP DATABASE db1;
# Connection con2
SET DEBUG_SYNC= 'now WAIT_FOR locked';
# Sending:
RENAME TABLE db1.t1 TO test.t1;
# Connection con3
SET DEBUG_SYNC= 'now SIGNAL blocked';
# Connection default
# Reaping: DROP DATABASE db1
# Connection con2
# Reaping: RENAME TABLE db1.t1 TO test.t1
Got one of the listed errors
# Connection default
CREATE DATABASE db1;
CREATE TABLE test.t2 (a INT);
SET DEBUG_SYNC= 'after_wait_locked_schema_name SIGNAL locked WAIT_FOR blocked';
# Sending:
DROP DATABASE db1;
# Connection con2
SET DEBUG_SYNC= 'now WAIT_FOR locked';
# Sending:
RENAME TABLE test.t2 TO db1.t2;
# Connection con3
SET DEBUG_SYNC= 'now SIGNAL blocked';
# Connection default
# Reaping: DROP DATABASE db1
# Connection con2
# Reaping: RENAME TABLE test.t2 TO db1.t2
Got one of the listed errors
DROP TABLE test.t2;
# Test 7:
# Locked database name prevents DROP of tables in that database.
# Tests X vs IX lock.
#
# Connection default
CREATE DATABASE db1;
CREATE TABLE db1.t1 (a INT);
SET DEBUG_SYNC= 'after_wait_locked_schema_name SIGNAL locked WAIT_FOR blocked';
# Sending:
DROP DATABASE db1;
# Connection con2
SET DEBUG_SYNC= 'now WAIT_FOR locked';
# Sending:
DROP TABLE db1.t1;
# Connection con3
SET DEBUG_SYNC= 'now SIGNAL blocked';
# Connection default
# Reaping: DROP DATABASE db1
# Connection con2
# Reaping: DROP TABLE db1.t1
ERROR 42S02: Unknown table 'db1.t1'
# Connection default
SET DEBUG_SYNC= 'RESET';
#
# End of tests for schema-scope locks
#
#
# Tests of granted global S lock (FLUSH TABLE WITH READ LOCK)
#
CREATE DATABASE db1;
CREATE TABLE db1.t1(a INT);
# Connection default
FLUSH TABLE WITH READ LOCK;
# Connection con2
CREATE TABLE db1.t2(a INT);
# Connection default
UNLOCK TABLES;
# Connection con2
# Reaping CREATE TABLE db1.t2(a INT)
# Connection default
FLUSH TABLE WITH READ LOCK;
# Connection con2
ALTER DATABASE db1 DEFAULT CHARACTER SET utf8;
# Connection default
UNLOCK TABLES;
# Connection con2
# Reaping ALTER DATABASE db1 DEFAULT CHARACTER SET utf8
# Connection default
FLUSH TABLE WITH READ LOCK;
# Connection con2
FLUSH TABLE WITH READ LOCK;
UNLOCK TABLES;
# Connection default
UNLOCK TABLES;
DROP DATABASE db1;
#
# Bug#56292 Deadlock with ALTER TABLE and MERGE tables
#
DROP TABLE IF EXISTS t1, t2, m1;
CREATE TABLE t1(a INT) engine=MyISAM;
CREATE TABLE t2(a INT) engine=MyISAM;
CREATE TABLE m1(a INT) engine=MERGE UNION=(t1, t2);
INSERT INTO t1 VALUES (1), (2);
INSERT INTO t2 VALUES (3), (4);
# Connection con1
# We need EXECUTE 2 since ALTER TABLE does SU => SNW => X and we want
# to stop at the second upgrade.
SET DEBUG_SYNC= 'mdl_upgrade_lock SIGNAL upgrade WAIT_FOR continue EXECUTE 2';
# Sending:
ALTER TABLE m1 engine=MERGE UNION=(t2, t1);
# Connection con2
# Waiting for ALTER TABLE to try lock upgrade
SET DEBUG_SYNC= 'now WAIT_FOR upgrade';
SET DEBUG_SYNC= 'now SIGNAL continue';
SET DEBUG_SYNC= 'now WAIT_FOR upgrade';
# Sending:
DELETE FROM t2 WHERE a = 3;
# Connection default
# Check that DELETE is waiting on a metadata lock and not a table lock.
# Now that DELETE blocks on a metadata lock, we should be able to do
# SELECT * FROM m1 here. SELECT used to be blocked by a DELETE table
# lock request.
SELECT * FROM m1;
a
1
2
3
4
# Resuming ALTER TABLE
SET DEBUG_SYNC= 'now SIGNAL continue';
# Connection con1
# Reaping: ALTER TABLE m1 engine=MERGE UNION=(t2, t1)
# Connection con2
# Reaping: DELETE FROM t2 WHERE a = 3
# Connection default
DROP TABLE m1, t1, t2;
SET DEBUG_SYNC= 'RESET';
#
# Bug#21021848 ASSERTION `M_STATUS == DA_ERROR' FAILED.
#
CREATE TABLE t1(c1 INT NOT NULL) ENGINE = csv;
CREATE TABLE t2(c1 INT NOT NULL);
# Emulate corruption of t1
LOCK TABLES t1 WRITE;
INSERT INTO t1 VALUES(0);
CHECK TABLE t1;
Table	Op	Msg_type	Msg_text
test.t1	check	error	Corrupt
UNLOCK TABLES;
# Start XA txn on default
XA START 'test2';
# Acquire SR on t2
SELECT * FROM t2;
c1
# Block IS query just before calling lock_table_names() (before X on t1)
SET DEBUG_SYNC='recover_ot_repair SIGNAL parked WAIT_FOR go';
SELECT COUNT(*)FROM information_schema.key_column_usage;
# Create a new conncection which will compete for MDL lock
# Wait until default becomes blocked
SET DEBUG_SYNC='now WAIT_FOR parked';
# Try to acquire X on t1 and t2, which will block while default
# holds SR on t2
DROP TABLES t1, t2;
# Create control connection
# Wait until con1 is blocked
# Wake up XA txn/IS query on default
SET DEBUG_SYNC='now SIGNAL go';
# Disconnect control connection
# Switch to default connection
# Wait for IS query which will try repair t1 which requires X.
# Previously that resulted in deadlock with con1 over t1,
# but now t1 is skipped and a warning is issued
COUNT(*)
59
Warnings:
Warning	1194	Table 't1' is marked as crashed and should be repaired
# Finish XA txn 'test2' to release SR on t2 so that con1
# becomes unblocked
XA END 'test2';
XA PREPARE 'test2';
XA COMMIT 'test2';
# Cleanup
SET DEBUG_SYNC= 'RESET';
# Clean up con1 now that the XA txn has finished
# Wait for the now unblocked DROP t1, t2 to complete
# Disconnecting con1
# Switching to back to default at end of test case

Filemanager

Name Type Size Permission Actions
1st.result File 483 B 0644
alias.result File 13.42 KB 0644
almost_full.result File 1.11 KB 0644
alter_table-big.result File 3.12 KB 0644
alter_table.result File 108.41 KB 0644
analyze.result File 2.21 KB 0644
ansi.result File 1.14 KB 0644
archive-big.result File 616 B 0644
archive.result File 525.38 KB 0644
archive_bitfield.result File 4.26 KB 0644
archive_debug.result File 355 B 0644
archive_gis.result File 23.13 KB 0644
archive_no_symlink.result File 882 B 0644
archive_plugin.result File 543 B 0644
archive_symlink.result File 2.07 KB 0644
audit_plugin.result File 744 B 0644
auth_rpl.result File 1.85 KB 0644
auto_increment.result File 11.72 KB 0644
backup.result File 4.29 KB 0644
bench_count_distinct.result File 462 B 0644
big_test.require File 17 B 0644
bigint.result File 20.72 KB 0644
binary.result File 5.67 KB 0644
binary_to_hex.result File 5.87 KB 0644
binlog_tx_isolation.result File 1.71 KB 0644
blackhole.result File 613 B 0644
blackhole_plugin.result File 571 B 0644
bool.result File 2.56 KB 0644
bootstrap.result File 267 B 0644
bug12427262.result File 1.86 KB 0644
bug12969156.result File 952 B 0644
bug17076131.result File 322 B 0644
bug33509.result File 2.31 KB 0644
bug39022.result File 1.2 KB 0644
bug46080.result File 669 B 0644
bug46261.result File 382 B 0644
bug46760.result File 1.26 KB 0644
bug47671.result File 287 B 0644
bug58669.result File 480 B 0644
bulk_replace.result File 281 B 0644
cache_innodb.result File 5.42 KB 0644
case.result File 10.06 KB 0644
case_insensitive_file_system.require File 46 B 0644
case_sensitive_file_system.require File 47 B 0644
cast.result File 15.75 KB 0644
change_user.result File 3.31 KB 0644
check.result File 1.42 KB 0644
check_auto_permission.result File 251 B 0644
check_var_limit.require File 8 B 0644
client_xml.result File 2.38 KB 0644
comment_column.result File 140.57 KB 0644
comment_column2.result File 355.68 KB 0644
comment_index.result File 173.03 KB 0644
comment_table.result File 28.72 KB 0644
comments.result File 2.34 KB 0644
commit.result File 13.32 KB 0644
commit_1innodb.result File 19.19 KB 0644
compare.result File 3.17 KB 0644
compress.result File 56.5 KB 0644
concurrent_innodb_safelog.result File 31.89 KB 0644
concurrent_innodb_unsafelog.result File 31.61 KB 0644
connect.result File 12.75 KB 0644
connect_debug.result File 1.48 KB 0644
consistent_snapshot.result File 1.14 KB 0644
constraints.result File 2.55 KB 0644
count_distinct.result File 7.89 KB 0644
count_distinct2.result File 2.21 KB 0644
count_distinct3.result File 278 B 0644
create-big.result File 7.6 KB 0644
create.result File 147.09 KB 0644
create_not_windows.result File 961 B 0644
create_select_tmp.result File 846 B 0644
csv.result File 58.88 KB 0644
csv_alter_table.result File 1.17 KB 0644
csv_not_null.result File 1.75 KB 0644
ctype_ascii.result File 2.11 KB 0644
ctype_big5.result File 33.85 KB 0644
ctype_binary.result File 82.34 KB 0644
ctype_collate.result File 13.5 KB 0644
ctype_cp1250_ch.result File 21.88 KB 0644
ctype_cp1251.result File 96.09 KB 0644
ctype_cp932.result File 996 B 0644
ctype_cp932_binlog_row.result File 607 B 0644
ctype_cp932_binlog_stm.result File 251.22 KB 0644
ctype_create.result File 3.12 KB 0644
ctype_errors.result File 1.66 KB 0644
ctype_eucjpms.result File 400.21 KB 0644
ctype_euckr.result File 434.59 KB 0644
ctype_filename.result File 324 B 0644
ctype_filesystem.result File 341 B 0644
ctype_gb2312.result File 33.29 KB 0644
ctype_gbk.result File 49.63 KB 0644
ctype_gbk_binlog.result File 647 B 0644
ctype_hebrew.result File 254 B 0644
ctype_latin1.result File 118.67 KB 0644
ctype_latin1_de.result File 15.74 KB 0644
ctype_latin2.result File 13.32 KB 0644
ctype_latin2_ch.result File 25.11 KB 0644
ctype_ldml.result File 28.05 KB 0644
ctype_like_range.result File 80.89 KB 0644
ctype_many.result File 42.67 KB 0644
ctype_mb.result File 2.13 KB 0644
ctype_recoding.result File 9.6 KB 0644
ctype_sjis.result File 195.68 KB 0644
ctype_tis620.result File 100.45 KB 0644
ctype_uca.result File 154.97 KB 0644
ctype_ucs.result File 142.4 KB 0644
ctype_ucs2_def.result File 1.05 KB 0644
ctype_ujis.result File 364.9 KB 0644
ctype_ujis_ucs2.result File 548.59 KB 0644
ctype_utf16.result File 44.96 KB 0644
ctype_utf16_def.result File 273 B 0644
ctype_utf16_uca.result File 72.28 KB 0644
ctype_utf16le.result File 50.54 KB 0644
ctype_utf32.result File 48.05 KB 0644
ctype_utf32_uca.result File 75.11 KB 0644
ctype_utf8.result File 167.06 KB 0644
ctype_utf8mb4.result File 80.38 KB 0644
ctype_utf8mb4_heap.result File 72.21 KB 0644
ctype_utf8mb4_innodb.result File 74.62 KB 0644
ctype_utf8mb4_myisam.result File 74.63 KB 0644
ctype_utf8mb4_uca.result File 38.82 KB 0644
date_formats.result File 24.96 KB 0644
ddl_i18n_koi8r.result File 113.33 KB 0644
ddl_i18n_utf8.result File 116.35 KB 0644
deadlock_innodb.result File 2.35 KB 0644
debug_sync.result File 11.85 KB 0644
debug_sync2.result File 434 B 0644
default.result File 8.02 KB 0644
delayed.result File 17.7 KB 0644
delete.result File 16 KB 0644
deprecated_features.result File 2.03 KB 0644
derived.result File 78.6 KB 0644
dirty_close.result File 345 B 0644
disabled_replication.result File 3.01 KB 0644
disconnect_on_expired_password_default.result File 1.4 KB 0644
disconnect_on_expired_password_off.result File 1.36 KB 0644
distinct.result File 30.85 KB 0644
drop-no_root.result File 454 B 0644
drop.result File 5.73 KB 0644
drop_debug.result File 485 B 0644
ds_mrr-big.result File 2.14 KB 0644
dynamic_tracing.result File 813 B 0644
empty_table.result File 229 B 0644
enable_cleartext_plugin.result File 1.35 KB 0644
endspace.result File 6.61 KB 0644
eq_range_idx_stat.result File 4.02 KB 0644
error_simulation.result File 3.23 KB 0644
errors.result File 5.93 KB 0644
events_1.result File 22.18 KB 0644
events_2.result File 17.23 KB 0644
events_bugs.result File 37.35 KB 0644
events_embedded.result File 86 B 0644
events_grant.result File 10.33 KB 0644
events_logs_tests.result File 2.37 KB 0644
events_microsec.result File 810 B 0644
events_restart.result File 4.15 KB 0644
events_scheduling.result File 3.11 KB 0644
events_stress.result File 2.39 KB 0644
events_time_zone.result File 5.4 KB 0644
events_trans.result File 3.49 KB 0644
events_trans_notembedded.result File 1.37 KB 0644
execution_constants.result File 1.05 KB 0644
explain.result File 28.33 KB 0644
explain_json_all.result File 63.13 KB 0644
explain_json_none.result File 64.7 KB 0644
file_contents.result File 181 B 0644
filesort_debug.result File 2.79 KB 0644
fix_priv_tables.result File 1.3 KB 0644
flush.result File 13.75 KB 0644
flush2.result File 882 B 0644
flush_block_commit.result File 1.47 KB 0644
flush_block_commit_notembedded.result File 770 B 0644
flush_read_lock.result File 72.07 KB 0644
flush_read_lock_kill.result File 1.12 KB 0644
flush_table.result File 11.22 KB 0644
foreign_key.result File 3.33 KB 0644
fulltext.result File 28.72 KB 0644
fulltext2.result File 7.54 KB 0644
fulltext3.result File 540 B 0644
fulltext_cache.result File 2.67 KB 0644
fulltext_distinct.result File 1.25 KB 0644
fulltext_left_join.result File 4 KB 0644
fulltext_multi.result File 766 B 0644
fulltext_order_by.result File 5.83 KB 0644
fulltext_plugin.result File 229 B 0644
fulltext_update.result File 930 B 0644
fulltext_var.result File 1.3 KB 0644
func_aes.result File 12.78 KB 0644
func_aes_cfb1.result File 4.5 KB 0644
func_aes_cfb128.result File 4.57 KB 0644
func_aes_cfb8.result File 4.5 KB 0644
func_aes_misc.result File 8.28 KB 0644
func_aes_ofb.result File 4.47 KB 0644
func_analyse.result File 19.01 KB 0644
func_compress.result File 4.84 KB 0644
func_concat.result File 4.03 KB 0644
func_crypt.result File 4.37 KB 0644
func_date_add.result File 3.62 KB 0644
func_default.result File 1.19 KB 0644
func_des_encrypt.result File 1018 B 0644
func_digest.result File 121.48 KB 0644
func_encrypt.result File 10.33 KB 0644
func_encrypt_nossl.result File 4.21 KB 0644
func_encrypt_ucs2.result File 765 B 0644
func_equal.result File 1.27 KB 0644
func_gconcat.result File 48.53 KB 0644
func_group.result File 54.64 KB 0644
func_group_innodb.result File 5.12 KB 0644
func_group_innodb_16k.result File 544 B 0644
func_if.result File 6.05 KB 0644
func_in_all.result File 27.62 KB 0644
func_in_icp.result File 27.26 KB 0644
func_in_icp_mrr.result File 27.57 KB 0644
func_in_mrr.result File 27.29 KB 0644
func_in_mrr_cost.result File 27.01 KB 0644
func_in_none.result File 26.96 KB 0644
func_isnull.result File 827 B 0644
func_like.result File 4.45 KB 0644
func_math.result File 28.06 KB 0644
func_misc.result File 28.2 KB 0644
func_op.result File 1.93 KB 0644
func_regexp.result File 4.37 KB 0644
func_rollback.result File 12.44 KB 0644
func_sapdb.result File 12.38 KB 0644
func_set.result File 8.51 KB 0644
func_str.result File 157.75 KB 0644
func_str_debug.result File 349 B 0644
func_str_no_ps.result File 1.07 KB 0644
func_system.result File 2.63 KB 0644
func_test.result File 13.44 KB 0644
func_time.result File 67.37 KB 0644
func_timestamp.result File 518 B 0644
func_weight_string.result File 3.44 KB 0644
function_defaults.result File 109.23 KB 0644
function_defaults_notembedded.result File 6.38 KB 0644
gcc296.result File 528 B 0644
get_diagnostics.result File 24.96 KB 0644
gis-debug.result File 16.13 KB 0644
gis-precise.result File 28.34 KB 0644
gis-rt-precise.result File 1.86 KB 0644
gis-rtree.result File 78.36 KB 0644
gis.result File 58.53 KB 0644
grant.result File 95.95 KB 0644
grant2.result File 31.12 KB 0644
grant3.result File 7.15 KB 0644
grant4.result File 8.85 KB 0644
grant_cache.result File 5.62 KB 0644
grant_explain_non_select.result File 9.5 KB 0644
grant_lowercase_fs.result File 557 B 0644
greedy_optimizer.result File 592.8 KB 0644
greedy_search.result File 12.42 KB 0644
group_by.result File 84.6 KB 0644
group_min_max.result File 115.33 KB 0644
group_min_max_innodb.result File 17.52 KB 0644
handler_innodb.result File 40.72 KB 0644
handler_myisam.result File 44.62 KB 0644
handler_read_last.result File 1.15 KB 0644
have_big5.require File 79 B 0644
have_binlog_format_mixed.require File 40 B 0644
have_binlog_format_row.require File 38 B 0644
have_binlog_format_statement.require File 44 B 0644
have_binlog_rows_query.require File 53 B 0644
have_compress.require File 38 B 0644
have_cp1250_ch.require File 79 B 0644
have_cp1251.require File 84 B 0644
have_cp866.require File 82 B 0644
have_cp932.require File 83 B 0644
have_crypt.require File 35 B 0644
have_debug.require File 8 B 0644
have_debug_sync.require File 13 B 0644
have_eucjpms.require File 87 B 0644
have_euckr.require File 81 B 0644
have_gb2312.require File 84 B 0644
have_gbk.require File 78 B 0644
have_geometry.require File 38 B 0644
have_koi8r.require File 81 B 0644
have_latin2_ch.require File 78 B 0644
have_local_infile.require File 36 B 0644
have_log_bin.require File 31 B 0644
have_met_timezone.require File 43 B 0644
have_moscow_leap_timezone.require File 46 B 0644
have_mysql_upgrade.result File 21 B 0644
have_ndb_extra.require File 14 B 0644
have_ndbapi_examples.require File 19 B 0644
have_nodebug.require File 8 B 0644
have_optimizer_switch.require File 19 B 0644
have_outfile.require File 55 B 0644
have_partition.require File 42 B 0644
have_perror.require File 14 B 0644
have_profiling.require File 39 B 0644
have_query_cache.require File 41 B 0644
have_sjis.require File 81 B 0644
have_ssl.require File 33 B 0644
have_ssl_is_yes_or_disabled_only.require File 43 B 0644
have_symlink.require File 37 B 0644
have_tis620.require File 81 B 0644
have_ucs2.require File 80 B 0644
have_ujis.require File 81 B 0644
have_utf16.require File 82 B 0644
have_utf32.require File 82 B 0644
have_utf8.require File 80 B 0644
have_utf8mb4.require File 86 B 0644
having.result File 19.72 KB 0644
heap.result File 20.86 KB 0644
heap_auto_increment.result File 894 B 0644
heap_btree.result File 9.32 KB 0644
heap_hash.result File 14.37 KB 0644
help.result File 6.46 KB 0644
host_cache_size_functionality.result File 3.32 KB 0644
implicit_char_to_num_conversion.result File 6.44 KB 0644
implicit_commit.result File 17.71 KB 0644
import_schema_mismatch.result File 538 B 0644
index_merge_delete.result File 25.88 KB 0644
index_merge_innodb.result File 61.63 KB 0644
index_merge_insert-and-replace.result File 12.55 KB 0644
index_merge_intersect_dml.result File 4.96 KB 0644
index_merge_myisam.result File 73.48 KB 0644
index_merge_update.result File 16.41 KB 0644
information_schema-big.result File 2.81 KB 0644
information_schema.result File 87.98 KB 0644
information_schema_chmod.result File 182 B 0644
information_schema_db.result File 9.29 KB 0644
information_schema_inno.result File 4.33 KB 0644
information_schema_parameters.result File 22.11 KB 0644
information_schema_part.result File 9.71 KB 0644
information_schema_routines.result File 28.64 KB 0644
init_connect.result File 2.53 KB 0644
init_file.result File 323 B 0644
innodb_explain_json_non_select_all.result File 220.92 KB 0644
innodb_explain_json_non_select_none.result File 225.15 KB 0644
innodb_explain_non_select_all.result File 119.15 KB 0644
innodb_explain_non_select_none.result File 119.03 KB 0644
innodb_icp.result File 26.73 KB 0644
innodb_icp_all.result File 26.79 KB 0644
innodb_icp_none.result File 26.63 KB 0644
innodb_ignore_builtin.result File 354 B 0644
innodb_log_file_size_functionality.result File 2.79 KB 0644
innodb_mrr.result File 20.3 KB 0644
innodb_mrr_all.result File 20.47 KB 0644
innodb_mrr_cost.result File 20.27 KB 0644
innodb_mrr_cost_all.result File 20.43 KB 0644
innodb_mrr_cost_icp.result File 20.38 KB 0644
innodb_mrr_icp.result File 20.41 KB 0644
innodb_mrr_none.result File 20.22 KB 0644
innodb_mysql_lock.result File 5.52 KB 0644
innodb_mysql_lock2.result File 21.27 KB 0644
innodb_mysql_sync.result File 17.65 KB 0644
innodb_pk_extension_off.result File 14.06 KB 0644
innodb_pk_extension_on.result File 14.33 KB 0644
innodb_recovery_with_upper_case_names.result File 1.21 KB 0644
insert.result File 26.41 KB 0644
insert_debug.result File 1.29 KB 0644
insert_notembedded.result File 5.72 KB 0644
insert_select.result File 14.04 KB 0644
insert_update.result File 9.64 KB 0644
ipv4_as_ipv6.result File 21.69 KB 0644
ipv6.result File 12.49 KB 0644
is_debug_build.require File 32 B 0644
is_embedded.require File 16 B 0644
isam.result File 15.65 KB 0644
join.result File 46.84 KB 0644
join_cache_bka.result File 88.08 KB 0644
join_cache_bka_nixbnl.result File 87.38 KB 0644
join_cache_bkaunique.result File 88.54 KB 0644
join_cache_bnl.result File 86.26 KB 0644
join_cache_nojb.result File 85.38 KB 0644
join_crash.result File 4.59 KB 0644
join_nested.result File 62.76 KB 0644
join_nested_bka.result File 66.92 KB 0644
join_nested_bka_nixbnl.result File 63.95 KB 0644
join_optimizer.result File 2.54 KB 0644
join_outer.result File 63.99 KB 0644
join_outer_bka.result File 64.28 KB 0644
join_outer_bka_nixbnl.result File 62.57 KB 0644
join_outer_innodb.result File 1.86 KB 0644
key.result File 20.98 KB 0644
key_cache.result File 10.91 KB 0644
key_diff.result File 853 B 0644
key_primary.result File 666 B 0644
keywords.result File 6.63 KB 0644
kill.result File 8.37 KB 0644
kill_debug.result File 1.56 KB 0644
limit.result File 4.12 KB 0644
loaddata.result File 16.91 KB 0644
loaddata_autocom_innodb.result File 637 B 0644
loadxml.result File 2.71 KB 0644
locale.result File 5.59 KB 0644
lock.result File 15.03 KB 0644
lock_multi.result File 11.53 KB 0644
lock_multi_bug38499.result File 691 B 0644
lock_multi_bug38691.result File 539 B 0644
lock_sync.result File 31.17 KB 0644
lock_tables_lost_commit.result File 150 B 0644
log_empty_name.result File 247 B 0644
log_errchk.result File 664 B 0644
log_state.result File 9.66 KB 0644
log_state_bug33693.result File 111 B 0644
log_tables-big.result File 996 B 0644
log_tables.result File 40.97 KB 0644
log_tables_debug.result File 838 B 0644
log_tables_upgrade.result File 2.48 KB 0644
long_tmpdir.result File 99 B 0644
lowercase0.require File 45 B 0644
lowercase1.require File 45 B 0644
lowercase2.require File 45 B 0644
lowercase_fs_off.result File 2.05 KB 0644
lowercase_fs_on.result File 75 B 0644
lowercase_mixed_tmpdir.result File 176 B 0644
lowercase_mixed_tmpdir_innodb.result File 190 B 0644
lowercase_table.result File 2.67 KB 0644
lowercase_table2.result File 8.66 KB 0644
lowercase_table4.result File 3.68 KB 0644
lowercase_table_grant.result File 1.5 KB 0644
lowercase_table_qcache.result File 649 B 0644
lowercase_utf8.result File 173 B 0644
lowercase_view.result File 10.22 KB 0644
mdl_sync.result File 89.85 KB 0644
merge-big.result File 728 B 0644
merge.result File 97.6 KB 0644
merge_innodb.result File 1.31 KB 0644
merge_mmap.result File 3.33 KB 0644
metadata.result File 13.88 KB 0644
mix2_myisam.result File 57.76 KB 0644
mix2_myisam_ucs2.result File 15.31 KB 0644
multi_plugin_load.result File 347 B 0644
multi_plugin_load_add.result File 455 B 0644
multi_plugin_load_add2.result File 455 B 0644
multi_statement.result File 563 B 0644
multi_update.result File 23.21 KB 0644
multi_update2.result File 1016 B 0644
multi_update_innodb.result File 2.56 KB 0644
multi_update_tiny_hash.result File 1.5 KB 0644
myisam-blob.result File 1.25 KB 0644
myisam-system.result File 391 B 0644
myisam.result File 90.78 KB 0644
myisam_crash_before_flush_keys.result File 1.15 KB 0644
myisam_debug.result File 1.21 KB 0644
myisam_explain_json_non_select_all.result File 217.3 KB 0644
myisam_explain_json_non_select_none.result File 221.32 KB 0644
myisam_explain_non_select_all.result File 116.26 KB 0644
myisam_explain_non_select_none.result File 115.98 KB 0644
myisam_icp.result File 26.57 KB 0644
myisam_icp_all.result File 26.63 KB 0644
myisam_icp_none.result File 26.45 KB 0644
myisam_mrr.result File 19.24 KB 0644
myisam_mrr_all.result File 19.44 KB 0644
myisam_mrr_cost.result File 19.19 KB 0644
myisam_mrr_cost_all.result File 19.39 KB 0644
myisam_mrr_cost_icp.result File 19.33 KB 0644
myisam_mrr_icp.result File 19.38 KB 0644
myisam_mrr_none.result File 19.14 KB 0644
myisam_recover.result File 4.57 KB 0644
myisam_row_rpl.result File 2.04 KB 0644
myisampack.result File 7.56 KB 0644
mysql-bug41486.result File 465 B 0644
mysql-bug45236.result File 329 B 0644
mysql.result File 8.67 KB 0644
mysql_binary_mode.result File 1.52 KB 0644
mysql_client_test.result File 8.92 KB 0644
mysql_client_test_embedded.result File 111 B 0644
mysql_client_test_qcache.result File 502 B 0644
mysql_comments.result File 5.02 KB 0644
mysql_config_editor.result File 6.6 KB 0644
mysql_cp932.result File 37 B 0644
mysql_embedded.result File 171 B 0644
mysql_embedded_client_test.result File 153 B 0644
mysql_locale_posix.result File 973 B 0644
mysql_not_windows.result File 80 B 0644
mysql_plugin.result File 3.88 KB 0644
mysql_protocols.result File 208 B 0644
mysql_upgrade.result File 26.82 KB 0644
mysql_upgrade_ssl.result File 1.99 KB 0644
mysqladmin.result File 872 B 0644
mysqladmin_shutdown.result File 157 B 0644
mysqlbinlog.result File 30.17 KB 0644
mysqlbinlog_debug.result File 235 B 0644
mysqlbinlog_mixed_or_statment.result File 855 B 0644
mysqlbinlog_raw_mode.result File 8.32 KB 0644
mysqlbinlog_raw_mode_win.result File 8.08 KB 0644
mysqlbinlog_row_big.result File 2.42 KB 0644
mysqlcheck.result File 15.2 KB 0644
mysqld--defaults-file.result File 710 B 0644
mysqld--help-notwin.result File 53.91 KB 0644
mysqld--help-win.result File 54.47 KB 0644
mysqldump-compat.result File 111 B 0644
mysqldump-max.result File 10.95 KB 0644
mysqldump-no-binlog.result File 50 B 0644
mysqldump.result File 280.61 KB 0644
mysqldump_restore.result File 3.78 KB 0644
mysqlhotcopy_archive.result File 1.8 KB 0644
mysqlhotcopy_myisam.result File 2.28 KB 0644
mysqlimport.result File 490 B 0644
mysqlshow.result File 7.56 KB 0644
mysqlslap.result File 6.88 KB 0644
mysqltest.result File 31.15 KB 0644
named_pipe.result File 56.25 KB 0644
ndb_default_cluster.require File 51 B 0644
negation_elimination.result File 8.72 KB 0644
no-threads.result File 329 B 0644
no_binlog.result File 64 B 0644
not_embedded.require File 16 B 0644
not_embedded_server.result File 5.63 KB 0644
not_ndb.require File 39 B 0644
not_openssl.require File 36 B 0644
not_partition.result File 4.14 KB 0644
not_ssl.require File 32 B 0644
not_true.require File 10 B 0644
not_valgrind.require File 17 B 0644
not_windows.require File 7 B 0644
null.result File 14.48 KB 0644
null_key_all.result File 15.6 KB 0644
null_key_icp.result File 15.53 KB 0644
null_key_none.result File 15.47 KB 0644
odbc.result File 954 B 0644
olap.result File 19.13 KB 0644
one_thread_per_connection.require File 44 B 0644
openssl.require File 37 B 0644
openssl_1.result File 8.04 KB 0644
optimizer_bug12837084.result File 13.97 KB 0644
optimizer_debug_sync.result File 1.32 KB 0644
optimizer_switch.result File 19.94 KB 0644
order_by_all.result File 61.42 KB 0644
order_by_icp_mrr.result File 61.37 KB 0644
order_by_none.result File 61.15 KB 0644
order_by_sortkey.result File 2.91 KB 0644
order_fill_sortbuf.result File 262 B 0644
outfile.result File 2.09 KB 0644
outfile_loaddata.result File 10.12 KB 0644
overflow.result File 235 B 0644
packet.result File 5 KB 0644
parser.result File 38.22 KB 0644
parser_bug21114_innodb.result File 25.39 KB 0644
parser_not_embedded.result File 4.42 KB 0644
parser_precedence.result File 23.96 KB 0644
parser_stack.result File 9.54 KB 0644
partition.result File 76.63 KB 0644
partition_archive.result File 4.51 KB 0644
partition_binlog.result File 2.3 KB 0644
partition_binlog_stmt.result File 442 B 0644
partition_blackhole.result File 174 B 0644
partition_bug18198.result File 8.07 KB 0644
partition_cache.result File 5.16 KB 0644
partition_charset.result File 434 B 0644
partition_column.result File 23.07 KB 0644
partition_column_prune.result File 2.83 KB 0644
partition_csv.result File 1.83 KB 0644
partition_datatype.result File 39.34 KB 0644
partition_debug_sync.result File 3.19 KB 0644
partition_disabled.result File 4.59 KB 0644
partition_error.result File 82.17 KB 0644
partition_exchange.result File 37.6 KB 0644
partition_explicit_prune.result File 55.63 KB 0644
partition_federated.result File 271 B 0644
partition_grant.result File 1.54 KB 0644
partition_hash.result File 7.12 KB 0644
partition_index_innodb.result File 4.04 KB 0644
partition_index_myisam.result File 3.21 KB 0644
partition_innodb.result File 30.66 KB 0644
partition_innodb_plugin.result File 5.26 KB 0644
partition_innodb_semi_consistent.result File 2.92 KB 0644
partition_innodb_stmt.result File 1.12 KB 0644
partition_innodb_tablespace.result File 12.76 KB 0644
partition_key_cache.result File 16.74 KB 0644
partition_list.result File 12.92 KB 0644
partition_locking.result File 238.13 KB 0644
partition_locking_4.result File 1.7 KB 0644
partition_mgm.result File 4.7 KB 0644
partition_mgm_err.result File 7.48 KB 0644
partition_mgm_err2.result File 43 B 0644
partition_myisam.result File 7.67 KB 0644
partition_not_blackhole.result File 456 B 0644
partition_not_windows.result File 3.47 KB 0644
partition_open_files_limit.result File 1.02 KB 0644
partition_order.result File 16.29 KB 0644
partition_pruning.result File 166.97 KB 0644
partition_range.result File 33.91 KB 0644
partition_rename_longfilename.result File 2.89 KB 0644
partition_symlink.result File 4.89 KB 0644
partition_sync.result File 1.34 KB 0644
partition_truncate.result File 751 B 0644
partition_utf8.result File 2 KB 0644
partition_windows.result File 1.18 KB 0644
perror-win.result File 453 B 0644
perror.result File 471 B 0644
plugin.result File 7.73 KB 0644
plugin_auth.result File 23.39 KB 0644
plugin_auth_qa.result File 20.77 KB 0644
plugin_auth_qa_1.result File 13.74 KB 0644
plugin_auth_qa_2.result File 8.87 KB 0644
plugin_auth_qa_3.result File 1.14 KB 0644
plugin_auth_sha256.result File 3.97 KB 0644
plugin_auth_sha256_2.result File 1.49 KB 0644
plugin_auth_sha256_server_default.result File 2.7 KB 0644
plugin_auth_sha256_server_default_tls.result File 2.83 KB 0644
plugin_auth_sha256_tls.result File 1.82 KB 0644
plugin_load.result File 76 B 0644
plugin_load_option.result File 321 B 0644
plugin_not_embedded.result File 474 B 0644
preload.result File 3.84 KB 0644
profiling.result File 16.13 KB 0644
ps.result File 116.73 KB 0644
ps_10nestset.result File 2.08 KB 0644
ps_11bugs.result File 5.92 KB 0644
ps_1general.result File 35.91 KB 0644
ps_2myisam.result File 103.82 KB 0644
ps_3innodb.result File 103.36 KB 0644
ps_4heap.result File 103.28 KB 0644
ps_5merge.result File 202.34 KB 0644
ps_ddl.result File 53.68 KB 0644
ps_ddl1.result File 11.06 KB 0644
ps_grant.result File 3.71 KB 0644
ps_not_windows.result File 516 B 0644
python_with_json.require File 27 B 0644
query_cache.result File 75.57 KB 0644
query_cache_28249.result File 2.29 KB 0644
query_cache_debug.result File 8.63 KB 0644
query_cache_disabled.result File 639 B 0644
query_cache_merge.result File 32.41 KB 0644
query_cache_notembedded.result File 6.61 KB 0644
query_cache_ps_no_prot.result File 11.1 KB 0644
query_cache_ps_ps_prot.result File 11.09 KB 0644
query_cache_size_functionality.result File 6.64 KB 0644
query_cache_type_functionality.result File 6.79 KB 0644
query_cache_with_views.result File 4.96 KB 0644
range_all.result File 81.48 KB 0644
range_icp.result File 81.08 KB 0644
range_icp_mrr.result File 81.42 KB 0644
range_mrr.result File 80.98 KB 0644
range_mrr_cost.result File 80.67 KB 0644
range_none.result File 80.63 KB 0644
read_many_rows_innodb.result File 2.83 KB 0644
read_only.result File 6.3 KB 0644
read_only_innodb.result File 4.76 KB 0644
rename.result File 1.58 KB 0644
renamedb.result File 880 B 0644
repair.result File 7.02 KB 0644
replace.result File 1.09 KB 0644
rewrite_general_log.result File 8.33 KB 0644
rewrite_slow_log.result File 2.92 KB 0644
rollback.result File 582 B 0644
round.result File 6.74 KB 0644
row.result File 15.91 KB 0644
rowid_order_innodb.result File 3.32 KB 0644
rpl_colSize.result File 4.39 KB 0644
rpl_extraColmaster_innodb.result File 23.85 KB 0644
rpl_extraColmaster_myisam.result File 23.85 KB 0644
rpl_mysqldump_slave.result File 867 B 0644
schema.result File 2.37 KB 0644
secure_file_priv_win.result File 1.43 KB 0644
select_all.result File 150.09 KB 0644
select_all_bka.result File 150.86 KB 0644
select_all_bka_nixbnl.result File 150.11 KB 0644
select_found.result File 6.17 KB 0644
select_icp_mrr.result File 150.04 KB 0644
select_icp_mrr_bka.result File 150.8 KB 0644
select_icp_mrr_bka_nixbnl.result File 150.06 KB 0644
select_none.result File 149.37 KB 0644
select_none_bka.result File 149.46 KB 0644
select_none_bka_nixbnl.result File 148.66 KB 0644
select_safe.result File 3.92 KB 0644
server_id.require File 32 B 0644
server_id1.require File 34 B 0644
server_uuid.result File 755 B 0644
server_uuid_embedded.result File 325 B 0644
shm.result File 56.74 KB 0644
show_check.result File 71.33 KB 0644
show_processlist.result File 1.84 KB 0644
show_processlist_state.result File 146 B 0644
show_profile.result File 491 B 0644
signal.result File 63.09 KB 0644
signal_code.result File 1020 B 0644
signal_demo1.result File 6.06 KB 0644
signal_demo2.result File 3.86 KB 0644
signal_demo3.result File 3.33 KB 0644
signal_sqlmode.result File 2.51 KB 0644
single_delete_update.result File 24.41 KB 0644
skip_grants.result File 2.47 KB 0644
skip_log_bin.result File 167 B 0644
skip_name_resolve.result File 1.28 KB 0644
slave-running.result File 71 B 0644
slave-stopped.result File 72 B 0644
sort_buffer_size_functionality.result File 6.48 KB 0644
sp-big.result File 1.47 KB 0644
sp-bugs.result File 7.66 KB 0644
sp-code.result File 28.23 KB 0644
sp-destruct.result File 6.84 KB 0644
sp-dynamic.result File 9.55 KB 0644
sp-error.result File 81.43 KB 0644
sp-fib.result File 656 B 0644
sp-lock.result File 21.45 KB 0644
sp-no-code.result File 307 B 0644
sp-prelocking.result File 7.09 KB 0644
sp-security.result File 23.51 KB 0644
sp-threads.result File 2.01 KB 0644
sp-ucs2.result File 4.78 KB 0644
sp-vars.result File 28.09 KB 0644
sp.result File 183.74 KB 0644
sp_debug.result File 735 B 0644
sp_gis.result File 829 B 0644
sp_notembedded.result File 10 KB 0644
sp_stress_case.result File 2.53 KB 0644
sp_sync.result File 3.17 KB 0644
sp_trans.result File 14.3 KB 0644
sp_trans_log.result File 891 B 0644
sp_validation.result File 34.67 KB 0644
sql_mode.result File 17.53 KB 0644
ssl-big.result File 69 B 0644
ssl-crl-revoked-crl.result File 76 B 0644
ssl-sha512.result File 376 B 0644
ssl.result File 56.89 KB 0644
ssl_8k_key.result File 42 B 0644
ssl_and_innodb.result File 183 B 0644
ssl_ca.result File 857 B 0644
ssl_cipher.result File 254 B 0644
ssl_compress.result File 56.52 KB 0644
ssl_connect.result File 10 B 0644
ssl_crl.result File 1.14 KB 0644
ssl_crl_clients-valid.result File 1.01 KB 0644
ssl_crl_clients.result File 427 B 0644
ssl_crl_clients_valid.result File 620 B 0644
ssl_crl_crlpath.result File 728 B 0644
ssl_mode.result File 1.29 KB 0644
ssl_mode_no_ssl.result File 1.06 KB 0644
ssl_verify_identity.result File 1 KB 0644
status.result File 9.83 KB 0644
status2.result File 1.35 KB 0644
status_bug17954.result File 582 B 0644
status_debug.result File 1.06 KB 0644
strict.result File 64.41 KB 0644
strict_autoinc_1myisam.result File 654 B 0644
strict_autoinc_2innodb.result File 654 B 0644
strict_autoinc_3heap.result File 654 B 0644
subquery_all.result File 258.33 KB 0644
subquery_all_bka.result File 258.65 KB 0644
subquery_all_bka_nixbnl.result File 258.42 KB 0644
subquery_bugs.result File 3.05 KB 0644
subquery_mat.result File 94.96 KB 0644
subquery_mat_all.result File 87.69 KB 0644
subquery_mat_none.result File 89.71 KB 0644
subquery_nomat_nosj.result File 258.39 KB 0644
subquery_nomat_nosj_bka.result File 258.64 KB 0644
subquery_nomat_nosj_bka_nixbnl.result File 258.21 KB 0644
subquery_none.result File 258.29 KB 0644
subquery_none_bka.result File 258.38 KB 0644
subquery_none_bka_nixbnl.result File 257.96 KB 0644
subquery_sj_all.result File 368.6 KB 0644
subquery_sj_all_bka.result File 370.21 KB 0644
subquery_sj_all_bka_nixbnl.result File 359 KB 0644
subquery_sj_all_bkaunique.result File 370.58 KB 0644
subquery_sj_dupsweed.result File 370.17 KB 0644
subquery_sj_dupsweed_bka.result File 370.42 KB 0644
subquery_sj_dupsweed_bka_nixbnl.result File 352.52 KB 0644
subquery_sj_dupsweed_bkaunique.result File 370.45 KB 0644
subquery_sj_firstmatch.result File 363.23 KB 0644
subquery_sj_firstmatch_bka.result File 363.32 KB 0644
subquery_sj_firstmatch_bka_nixbnl.result File 351.28 KB 0644
subquery_sj_firstmatch_bkaunique.result File 363.35 KB 0644
subquery_sj_innodb_all.result File 4.74 KB 0644
subquery_sj_innodb_all_bka.result File 4.93 KB 0644
subquery_sj_innodb_all_bka_nixbnl.result File 4.95 KB 0644
subquery_sj_innodb_all_bkaunique.result File 4.99 KB 0644
subquery_sj_innodb_none.result File 4.62 KB 0644
subquery_sj_innodb_none_bka.result File 4.71 KB 0644
subquery_sj_innodb_none_bka_nixbnl.result File 4.7 KB 0644
subquery_sj_innodb_none_bkaunique.result File 4.75 KB 0644
subquery_sj_loosescan.result File 370.08 KB 0644
subquery_sj_loosescan_bka.result File 370.33 KB 0644
subquery_sj_loosescan_bka_nixbnl.result File 352.5 KB 0644
subquery_sj_loosescan_bkaunique.result File 370.36 KB 0644
subquery_sj_mat.result File 378.77 KB 0644
subquery_sj_mat_bka.result File 378.85 KB 0644
subquery_sj_mat_bka_nixbnl.result File 362.06 KB 0644
subquery_sj_mat_bkaunique.result File 378.88 KB 0644
subquery_sj_mat_nosj.result File 376.23 KB 0644
subquery_sj_none.result File 374.82 KB 0644
subquery_sj_none_bka.result File 374.92 KB 0644
subquery_sj_none_bka_nixbnl.result File 367.91 KB 0644
subquery_sj_none_bkaunique.result File 374.95 KB 0644
subselect_debug.result File 409 B 0644
subselect_gis.result File 305 B 0644
subselect_innodb.result File 28.1 KB 0644
subselect_notembedded.result File 752 B 0644
sum_distinct-big.result File 2 KB 0644
sum_distinct.result File 3.14 KB 0644
symlink.result File 7.75 KB 0644
symlink_windows.result File 321 B 0644
synchronization.result File 4.05 KB 0644
sysdate_is_now.result File 76 B 0644
system_mysql_db.result File 13.5 KB 0644
system_mysql_db_refs.result File 2.96 KB 0644
table_definition_cache_functionality.result File 6.9 KB 0644
table_open_cache_functionality.result File 12.78 KB 0644
tablelock.result File 1.5 KB 0644
tablespace.result File 10.13 KB 0644
temp_pool.result File 538 B 0644
temp_table.result File 7.39 KB 0644
temporal_literal.result File 13.16 KB 0644
testdb_only.require File 45 B 0644
thread_cache_size_functionality.result File 5.26 KB 0644
timezone.result File 1.8 KB 0644
timezone2.result File 11.81 KB 0644
timezone3.result File 2.21 KB 0644
timezone4.result File 148 B 0644
timezone_grant.result File 3.76 KB 0644
trans_read_only.result File 1.03 KB 0644
trigger-compat.result File 7.75 KB 0644
trigger-trans.result File 6.46 KB 0644
trigger.result File 68.46 KB 0644
trigger_notembedded.result File 17.03 KB 0644
true.require File 7 B 0644
truncate.result File 3.58 KB 0644
truncate_coverage.result File 2.4 KB 0644
type_binary.result File 3.62 KB 0644
type_bit.result File 16.92 KB 0644
type_bit_innodb.result File 7.31 KB 0644
type_blob.result File 28.87 KB 0644
type_date.result File 18.46 KB 0644
type_datetime.result File 31.24 KB 0644
type_decimal.result File 36.1 KB 0644
type_enum.result File 101.19 KB 0644
type_float.result File 11.97 KB 0644
type_nchar.result File 1.44 KB 0644
type_newdecimal-big.result File 678 B 0644
type_newdecimal.result File 61.46 KB 0644
type_ranges.result File 17.38 KB 0644
type_set.result File 3.99 KB 0644
type_temporal_fractional.result File 635.43 KB 0644
type_temporal_upgrade.result File 9.9 KB 0644
type_time.result File 109.27 KB 0644
type_timestamp.result File 24.69 KB 0644
type_timestamp_explicit.result File 27.35 KB 0644
type_uint.result File 366 B 0644
type_varchar.result File 16.66 KB 0644
type_year.result File 7.78 KB 0644
udf.result File 16.03 KB 0644
udf_services.result File 499 B 0644
udf_skip_grants.result File 223 B 0644
union.result File 52.6 KB 0644
unsafe_binlog_innodb.result File 4.36 KB 0644
update.result File 16.63 KB 0644
upgrade.result File 4.91 KB 0644
user_limits.result File 3.54 KB 0644
user_var-binlog.result File 2.17 KB 0644
user_var.result File 15.34 KB 0644
validate_password_plugin.result File 12.09 KB 0644
varbinary.result File 3.34 KB 0644
variables-big.result File 972 B 0644
variables-notembedded.result File 5.78 KB 0644
variables-win.result File 347 B 0644
variables.result File 61.67 KB 0644
variables_community.result File 182 B 0644
variables_debug.result File 2.13 KB 0644
view.result File 178.72 KB 0644
view_alias.result File 6.19 KB 0644
view_grant.result File 76.69 KB 0644
wait_timeout.result File 1.07 KB 0644
warnings.result File 11.21 KB 0644
warnings_engine_disabled.result File 475 B 0644
windows.require File 7 B 0644
windows.result File 1.86 KB 0644
wl6219-csv.result File 7.23 KB 0644
wl6219-innodb.result File 7.27 KB 0644
wl6219-memory.result File 7.27 KB 0644
wl6219-merge.result File 5.99 KB 0644
wl6219-myisam.result File 7.27 KB 0644
wl6219-upgrade.result File 7.33 KB 0644
wl6301_1_not_windows.result File 44 B 0644
wl6301_2_not_windows.result File 46 B 0644
wl6301_3.result File 89 B 0644
wl6443_deprecation.result File 10.71 KB 0644
xa.result File 7.13 KB 0644
xml.result File 41.78 KB 0644