458 lines
13 KiB
Plaintext
458 lines
13 KiB
Plaintext
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';
|