1--source include/have_metadata_lock_info.inc
2--source include/have_innodb.inc
3
4--echo #
5--echo # MDEV-12882 - Assertion `mdl_ticket->m_type == MDL_SHARED_UPGRADABLE ||
6--echo #                         mdl_ticket->m_type == MDL_SHARED_NO_WRITE ||
7--echo #                         mdl_ticket->m_type == MDL_SHARED_NO_READ_WRITE ||
8--echo #                         mdl_ticket->m_type == MDL_SHARED_READ'
9--echo #                         failed in MDL_context::upgrade_shared_lock
10--echo #
11
12CREATE TABLE t1(a INT) ENGINE=InnoDB;
13CREATE TABLE t3(a INT) ENGINE=myisam;
14LOCK TABLES t1 WRITE CONCURRENT, t1 AS t2 READ;
15SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA, TABLE_NAME FROM information_schema.metadata_lock_info;
16UNLOCK TABLES;
17LOCK TABLES t1 AS t2 READ, t1 WRITE CONCURRENT;
18SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA, TABLE_NAME FROM information_schema.metadata_lock_info;
19UNLOCK TABLES;
20LOCK TABLES t1 WRITE CONCURRENT, t3 WRITE;
21SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA, TABLE_NAME FROM information_schema.metadata_lock_info;
22UNLOCK TABLES;
23LOCK TABLES t3 WRITE, t1 WRITE CONCURRENT;
24SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA, TABLE_NAME FROM information_schema.metadata_lock_info;
25UNLOCK TABLES;
26LOCK TABLES t1 WRITE, mysql.user WRITE;
27SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA, TABLE_NAME FROM information_schema.metadata_lock_info;
28UNLOCK TABLES;
29--error ER_CANT_LOCK_LOG_TABLE
30LOCK TABLES mysql.general_log WRITE;
31# The following may work in embedded server
32--error 0,ER_DBACCESS_DENIED_ERROR
33LOCK TABLES t1 WRITE,information_schema.tables READ;
34UNLOCK TABLES;
35DROP TABLE t1,t3;
36
37--echo #
38--echo # Check MDL locks taken for different kind of tables by open
39--echo #
40
41CREATE TABLE t1(a INT) ENGINE=InnoDB;
42CREATE TABLE t3(a INT) ENGINE=myisam;
43connect (locker,localhost,root,,);
44connection default;
45
46FLUSH TABLES WITH READ LOCK;
47connection locker;
48--send insert into t1 values (1)
49connection default;
50# Wait till above update gets blocked on a user lock.
51let $wait_condition=
52  select count(*) > 0 from information_schema.processlist
53  where state = "Waiting for backup lock";
54--source include/wait_condition.inc
55connection default;
56SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA, TABLE_NAME FROM information_schema.metadata_lock_info;
57unlock tables;
58connection locker;
59--reap
60unlock tables;
61connection default;
62
63FLUSH TABLES WITH READ LOCK;
64connection locker;
65--send insert into t3 values (2)
66connection default;
67# Wait till above update gets blocked on a user lock.
68let $wait_condition=
69  select count(*) > 0 from information_schema.processlist
70  where state = "Waiting for backup lock";
71--source include/wait_condition.inc
72connection default;
73SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA, TABLE_NAME FROM information_schema.metadata_lock_info;
74unlock tables;
75connection locker;
76--reap
77unlock tables;
78connection default;
79
80disconnect locker;
81DROP TABLE t1,t3;
82