TABLE: "prepared_statements_instances" INDEXES: PK (OBJECT_INSTANCE_BEGIN), KEY (STATEMENT_ID), KEY (STATEMENT_NAME), KEY (OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME), KEY (OWNER_THREAD_ID, OWNER_EVENT_ID) ===== SETUP ===== ## Connection Default ## Disable events from the default connection ## Create user1, user2, user3 CREATE USER user1@localhost; CREATE USER user2@localhost; CREATE USER user3@localhost; GRANT ALL ON *.* to 'user1'@localhost; GRANT ALL ON *.* to 'user2'@localhost; GRANT ALL ON *.* to 'user3'@localhost; ## Setup test connection 1 ## Setup test connection 2 ## Setup test connection 3 ## Default connection ## Create data tables CREATE TABLE test.t1(a INT, b INT, c INT, d INT DEFAULT 0, PRIMARY KEY(a), INDEX index_b(b), INDEX index_cb(c, b)); CREATE TABLE test.t2 LIKE test.t1; CREATE TABLE test.t3 LIKE test.t1; ## Generate event data from 3 connections ## Connection 1 ## Connection 2 ## Connection 3 ## Connection 2 ## Create prepared statements on connection 2 PREPARE st1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse'; PREPARE st3 FROM 'INSERT INTO test.t1 SELECT * FROM test.t1 WHERE a<=?'; PREPARE st4 FROM '(SELECT a FROM test.t1) UNION (SELECT a+10 FROM test.t1) ORDER BY RAND()*0+a'; ## Create stored procedure connection 2 CREATE PROCEDURE SampleProc1() BEGIN SET @table = 'test.t1'; SET @s = CONCAT('SELECT * FROM ', @table); PREPARE st2 FROM @s; END| Call SampleProc1() to prepare a statement CALL SampleProc1(); ## Connection default ## Use Connection 2 for default target thread id ## Create index_test() procedure SELECT object_instance_begin, statement_id, owner_thread_id, owner_event_id INTO @object_instance_begin, @target_statement_id, @target_thread_id, @target_event_id FROM performance_schema.prepared_statements_instances WHERE STATEMENT_NAME = 'st2' LIMIT 1; ## Test OBJECT_INSTANCE_BEGIN ===== BEGIN TEST ===== ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE object_instance_begin is null OK: Handler_read_key OK: Result set: Empty Expected: Empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE object_instance_begin is not null OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE object_instance_begin = @object_instance_begin OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE object_instance_begin != @object_instance_begin OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE object_instance_begin = '9999999999' OK: Handler_read_key OK: Result set: Empty Expected: Empty OK: Extra rows: 0 Missing rows: 0 ## Test STATEMENT_ID SET @target_id = @target_statement_id; ===== BEGIN TEST ===== ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE STATEMENT_ID is null OK: Handler_read_key OK: Result set: Empty Expected: Empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE STATEMENT_ID is not null OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE STATEMENT_ID = @target_id OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE STATEMENT_ID = @target_id ORDER BY STATEMENT_ID OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE STATEMENT_ID = @target_id ORDER BY STATEMENT_ID DESC OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE STATEMENT_ID = 9999999 ORDER BY STATEMENT_ID OK: Handler_read_key OK: Result set: Empty Expected: Empty OK: Extra rows: 0 Missing rows: 0 ## Test STATEMENT_NAME ===== BEGIN TEST ===== ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE STATEMENT_NAME is null OK: Handler_read_key OK: Result set: Empty Expected: Empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE STATEMENT_NAME is not null OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE STATEMENT_NAME = 'st2' OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE STATEMENT_NAME != 'st2' OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE STATEMENT_NAME = 'impossible' OK: Handler_read_key OK: Result set: Empty Expected: Empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE STATEMENT_NAME != 'impossible' ORDER BY STATEMENT_NAME DESC OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ## Test OWNER_THREAD_ID, OWNER_EVENT_ID ===== BEGIN TEST ===== ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_thread_id is null OK: Handler_read_key OK: Result set: Empty Expected: Empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_thread_id is not null OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_thread_id = @target_thread_id OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_thread_id = @target_thread_id AND owner_event_id = @target_event_id OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_event_id != 9999999 OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_thread_id = @target_thread_id ORDER BY owner_thread_id OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_thread_id = @target_thread_id ORDER BY owner_thread_id DESC OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_thread_id = @target_thread_id AND owner_event_id is null OK: Handler_read_key OK: Result set: Empty Expected: Empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_thread_id = @target_thread_id AND owner_event_id is not null OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_thread_id = @target_thread_id AND owner_event_id != 99999999 OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_thread_id = @target_thread_id AND owner_event_id = 99999999 OK: Handler_read_key OK: Result set: Empty Expected: Empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_thread_id >= @target_thread_id OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_thread_id <= @target_thread_id OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_thread_id != 9999999 AND owner_event_id = @target_event_id OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_thread_id = 9999999 ORDER BY owner_thread_id OK: Handler_read_key OK: Result set: Empty Expected: Empty OK: Extra rows: 0 Missing rows: 0 ## Test OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME ===== BEGIN TEST ===== ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_object_type is null OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_object_type is not null OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_object_type = 'PROCEDURE' and owner_object_schema is null OK: Handler_read_key OK: Result set: Empty Expected: Empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_object_type = 'PROCEDURE' and owner_object_schema is not null OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_object_type = 'PROCEDURE' and owner_object_schema = 'test' and owner_object_name is null OK: Handler_read_key OK: Result set: Empty Expected: Empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_object_type = 'PROCEDURE' and owner_object_schema = 'test' and owner_object_name is not null OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_object_type = 'PROCEDURE' OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_object_type = 'PROCEDURE' AND owner_object_schema = 'test' OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_object_type = 'PROCEDURE' AND owner_object_schema = 'test' AND owner_object_name = 'SampleProc1' OK: Handler_read_key OK: Result set: Non-empty Expected: Non-empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_object_type = 'impossible' AND owner_object_schema = 'test' AND owner_object_name = 'SampleProc1' OK: Handler_read_key OK: Result set: Empty Expected: Empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_object_type = 'impossible' OK: Handler_read_key OK: Result set: Empty Expected: Empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_object_type = 'PROCEDURE' AND owner_object_schema = 'impossible' OK: Handler_read_key OK: Result set: Empty Expected: Empty OK: Extra rows: 0 Missing rows: 0 ======== SELECT * FROM performance_schema.prepared_statements_instances WHERE owner_object_type = 'PROCEDURE' AND owner_object_schema = 'test' AND owner_object_name = 'impossible' OK: Handler_read_key OK: Result set: Empty Expected: Empty OK: Extra rows: 0 Missing rows: 0 ===== CLEAN UP ===== ## Default connection DEALLOCATE PREPARE st1; DEALLOCATE PREPARE st2; DEALLOCATE PREPARE st3; DEALLOCATE PREPARE st4; DROP PROCEDURE SampleProc1; DROP PROCEDURE index_test; DROP TABLE IF EXISTS test.indexes_off; DROP TABLE IF EXISTS test.indexes_on; DROP TABLE test.t1; DROP TABLE test.t2; DROP TABLE test.t3; REVOKE ALL PRIVILEGES, GRANT OPTION FROM user1@localhost; REVOKE ALL PRIVILEGES, GRANT OPTION FROM user2@localhost; REVOKE ALL PRIVILEGES, GRANT OPTION FROM user3@localhost; DROP USER user1@localhost; DROP USER user2@localhost; DROP USER user3@localhost; UPDATE performance_schema.threads SET INSTRUMENTED = 'YES';