diff options
Diffstat (limited to 'mysql-test/suite/perfschema/t/stage_mdl_procedure.test')
-rw-r--r-- | mysql-test/suite/perfschema/t/stage_mdl_procedure.test | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/mysql-test/suite/perfschema/t/stage_mdl_procedure.test b/mysql-test/suite/perfschema/t/stage_mdl_procedure.test new file mode 100644 index 00000000000..7d9dc6d80eb --- /dev/null +++ b/mysql-test/suite/perfschema/t/stage_mdl_procedure.test @@ -0,0 +1,79 @@ +# Tests for the performance schema +# + +--source ../include/stage_setup.inc + +connect (con1, localhost, user1, , ); + +--disable_warnings +drop function if exists test.f1; +drop procedure if exists test.p1; +--enable_warnings + +delimiter $$; + +create function test.f1() returns int +begin + call test.p1(); + return 1; +end +$$ + +delimiter ;$$ + +create procedure test.p1() +begin end; + +begin; +# The procedure is in a sub statement, +# so that the current transaction keeps a reference to it. +select test.f1(); + +connect (con2, localhost, user2, , ); + +# Will wait on con1, "Waiting for stored procedure metadata lock" +--send +drop procedure test.p1; + +--connection default + +# user1: Wait for the statement to complete +let $wait_condition= + select count(*) = 1 from performance_schema.threads + where `TYPE`='FOREGROUND' and PROCESSLIST_USER like 'user1' + and PROCESSLIST_COMMAND = 'Sleep'; +--source include/wait_condition.inc + +# user2: Wait for the drop procedure to block +let $wait_condition= + select count(*) = 1 from performance_schema.threads + where `TYPE`='FOREGROUND' and PROCESSLIST_USER like 'user2' + and PROCESSLIST_STATE = 'Waiting for stored procedure metadata lock'; +--source include/wait_condition.inc + +call dump_one_thread('user1'); +call dump_one_thread('user2'); + +--connection con1 +select test.f1(); +commit; + +--disconnect con1 + +--connection con2 +--reap + +--disconnect con2 + +--connection default + +# Wait for the disconnect to complete +let $wait_condition= + select count(*) = 0 from performance_schema.threads + where `TYPE`='FOREGROUND' and PROCESSLIST_USER like 'user%'; +--source include/wait_condition.inc + +drop function test.f1; + +--source ../include/stage_cleanup.inc + |