# 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