1# Check if the plugin is present
2# initialize the version token plugin
3INSTALL PLUGIN version_tokens SONAME 'version_token.so';
4CREATE FUNCTION version_tokens_set RETURNS STRING SONAME 'version_token.so';
5CREATE FUNCTION version_tokens_show RETURNS STRING SONAME 'version_token.so';
6CREATE FUNCTION version_tokens_edit RETURNS STRING SONAME 'version_token.so';
7CREATE FUNCTION version_tokens_delete RETURNS STRING SONAME 'version_token.so';
8CREATE FUNCTION version_tokens_lock_shared RETURNS INT SONAME 'version_token.so';
9CREATE FUNCTION version_tokens_lock_exclusive RETURNS INT SONAME 'version_token.so';
10CREATE FUNCTION version_tokens_unlock RETURNS INT SONAME 'version_token.so';
11# Initialize performance_schema
12UPDATE performance_schema.setup_instruments SET enabled = 'NO', timed = 'YES';
13UPDATE performance_schema.setup_instruments SET enabled = 'YES'
14WHERE name IN ('wait/io/table/sql/handler',
15'wait/lock/table/sql/handler',
16'wait/lock/metadata/sql/mdl');
17INSERT INTO performance_schema.setup_objects (object_type, object_schema, object_name, enabled, timed)
18VALUES ('TABLE', 'mtr', '%', 'NO', 'NO');
19#
20# Bug 21280801: VERSION TOKEN LOCKING DOES NOT WORK
21#
22DO version_tokens_set('vt1=11;vt2=22;vt3=33;vt4=44;vt5=55');
23SELECT version_tokens_show();
24version_tokens_show()
25vt1=11;vt2=22;vt5=55;vt4=44;vt3=33;
26DO version_tokens_lock_exclusive('vt3', 'vt5', 'vt1', 0);
27# Must return 3 rows
28SELECT OBJECT_NAME, LOCK_TYPE, LOCK_DURATION, LOCK_STATUS
29FROM performance_schema.metadata_locks
30WHERE OBJECT_NAME in ('vt1','vt3','vt5') AND
31LOCK_TYPE='EXCLUSIVE'
32  ORDER BY OBJECT_NAME;
33OBJECT_NAME	LOCK_TYPE	LOCK_DURATION	LOCK_STATUS
34vt1	EXCLUSIVE	EXPLICIT	GRANTED
35vt3	EXCLUSIVE	EXPLICIT	GRANTED
36vt5	EXCLUSIVE	EXPLICIT	GRANTED
37DO version_tokens_lock_exclusive('vt3', 'vt5', 'vt1', 4);
38ERROR HY000: Service lock wait timeout exceeded.
39DO version_tokens_unlock();
40# Must return 0 rows
41SELECT OBJECT_NAME, LOCK_TYPE, LOCK_DURATION, LOCK_STATUS
42FROM performance_schema.metadata_locks
43WHERE OBJECT_NAME in ('vt1','vt3','vt5') AND
44LOCK_TYPE='EXCLUSIVE'
45  ORDER BY OBJECT_NAME;
46OBJECT_NAME	LOCK_TYPE	LOCK_DURATION	LOCK_STATUS
47# End of 5.7 tests
48# Cleanup
49# wait for all sessions to disconnect
50# Cleanup performance schema
51UPDATE performance_schema.setup_instruments SET enabled = 'YES', timed = 'YES';
52DELETE FROM performance_schema.setup_objects WHERE object_schema='mtr';
53# clean up version token plugin
54UNINSTALL PLUGIN version_tokens;
55Warnings:
56Warning	1620	Plugin is busy and will be uninstalled on shutdown
57DROP FUNCTION version_tokens_set;
58DROP FUNCTION version_tokens_show;
59DROP FUNCTION version_tokens_edit;
60DROP FUNCTION version_tokens_delete;
61DROP FUNCTION version_tokens_lock_shared;
62DROP FUNCTION version_tokens_lock_exclusive;
63DROP FUNCTION version_tokens_unlock;
64# Cleanup done
65