1--source include/have_rocksdb.inc
2
3--enable_connect_log
4
5# Save the initial number of concurrent sessions
6--source include/count_sessions.inc
7
8--disable_warnings
9DROP TABLE IF EXISTS t1;
10--enable_warnings
11
12connect (con1,localhost,root,,);
13connect (con2,localhost,root,,);
14
15#1. Using all primary key columns, with equal conditions
16connection con1;
17CREATE TABLE t (id1 int, id2 int, id3 int, value int, PRIMARY KEY (id1, id2, id3)) ENGINE=RocksDB;
18
19#1.1 SELECT FOR UPDATE
20SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
21BEGIN;
22SELECT * FROM t WHERE id1=1 AND id2=1 AND id3=1 FOR UPDATE;
23
24connection con2;
25SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
26BEGIN;
27--error ER_LOCK_WAIT_TIMEOUT
28SELECT * FROM t WHERE id1=1 AND id2=1 AND id3=1 FOR UPDATE;
29SELECT * FROM t WHERE id1=1 AND id2=1 AND id3=2 FOR UPDATE;
30
31#1.2 UPDATE
32connection con1;
33ROLLBACK;
34BEGIN;
35UPDATE t SET value=value+100 WHERE id1=1 AND id2=1 AND id3=1;
36
37connection con2;
38ROLLBACK;
39BEGIN;
40--error ER_LOCK_WAIT_TIMEOUT
41UPDATE t SET value=value+100 WHERE id1=1 AND id2=1 AND id3=1;
42UPDATE t SET value=value+100 WHERE id1=1 AND id2=0 AND id3=1;
43
44#1.3 DELETE
45connection con1;
46ROLLBACK;
47BEGIN;
48DELETE FROM t WHERE id1=1 AND id2=1 AND id3=1;
49
50connection con2;
51ROLLBACK;
52BEGIN;
53--error ER_LOCK_WAIT_TIMEOUT
54DELETE FROM t WHERE id1=1 AND id2=1 AND id3=1;
55DELETE FROM t WHERE id1=1 AND id2=1 AND id3=0;
56
57--disable_parsing
58#
59#  The following is commented out because RocksDB's Transaction API doesn't
60#  "support" READ COMMITTED, in particular, it doesn't release row locks
61#   after each statement. (MyRocks is able to request a new snapshot for
62#  every statement, but this won't free the locks. TODO: Is the behavior
63#  that is tested below really needed?)
64#
65connection con1;
66ROLLBACK;
67SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
68BEGIN;
69SELECT * FROM t WHERE id1=1 AND id2=1 AND id3=1 FOR UPDATE;
70
71connection con2;
72ROLLBACK;
73SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
74BEGIN;
75SELECT * FROM t WHERE id1=1 AND id2=1 AND id3=1 FOR UPDATE;
76SELECT * FROM t WHERE id1=1 AND id2=1 AND id3=2 FOR UPDATE;
77
78connection con1;
79ROLLBACK;
80BEGIN;
81UPDATE t SET value=value+100 WHERE id1=1 AND id2=1 AND id3=1;
82
83connection con2;
84ROLLBACK;
85BEGIN;
86UPDATE t SET value=value+100 WHERE id1=1 AND id2=1 AND id3=1;
87UPDATE t SET value=value+100 WHERE id1=1 AND id2=0 AND id3=1;
88
89connection con1;
90ROLLBACK;
91BEGIN;
92DELETE FROM t WHERE id1=1 AND id2=1 AND id3=1;
93
94connection con2;
95ROLLBACK;
96BEGIN;
97DELETE FROM t WHERE id1=1 AND id2=1 AND id3=1;
98DELETE FROM t WHERE id1=1 AND id2=1 AND id3=0;
99
100connection con1;
101ROLLBACK;
102connection con2;
103ROLLBACK;
104
105--enable_parsing
106connection default;
107disconnect con1;
108disconnect con2;
109
110DROP TABLE t;
111