1# Concurrent update of a partition key and INSERT...ON CONFLICT DO NOTHING
2# test on partitioned table with multiple rows in higher isolation levels.
3#
4# Note: This test is resemble to insert-conflict-do-nothing-2 test
5
6setup
7{
8  CREATE TABLE foo (a int primary key, b text) PARTITION BY LIST(a);
9  CREATE TABLE foo1 PARTITION OF foo FOR VALUES IN (1);
10  CREATE TABLE foo2 PARTITION OF foo FOR VALUES IN (2);
11  INSERT INTO foo VALUES (1, 'initial tuple');
12}
13
14teardown
15{
16  DROP TABLE foo;
17}
18
19session s1
20setup		{ BEGIN ISOLATION LEVEL READ COMMITTED; }
21step s1u	{ UPDATE foo SET a=2, b=b || ' -> moved by session-1' WHERE a=1; }
22step s1c	{ COMMIT; }
23
24session s2
25step s2beginrr	{ BEGIN ISOLATION LEVEL REPEATABLE READ; }
26step s2begins	{ BEGIN ISOLATION LEVEL SERIALIZABLE; }
27step s2donothing { INSERT INTO foo VALUES(1, 'session-2 donothing') ON CONFLICT DO NOTHING; }
28step s2c { COMMIT; }
29step s2select { SELECT * FROM foo ORDER BY a; }
30
31session s3
32step s3beginrr { BEGIN ISOLATION LEVEL REPEATABLE READ; }
33step s3begins { BEGIN ISOLATION LEVEL SERIALIZABLE; }
34step s3donothing { INSERT INTO foo VALUES(2, 'session-3 donothing'), (2, 'session-3 donothing2') ON CONFLICT DO NOTHING; }
35step s3c { COMMIT; }
36
37permutation s2beginrr s3beginrr s1u s2donothing s1c s2c s3donothing s3c s2select
38permutation s2beginrr s3beginrr s1u s3donothing s1c s3c s2donothing s2c s2select
39permutation s2beginrr s3beginrr s1u s2donothing s3donothing s1c s2c s3c s2select
40permutation s2beginrr s3beginrr s1u s3donothing s2donothing s1c s3c s2c s2select
41permutation s2begins s3begins s1u s2donothing s1c s2c s3donothing s3c s2select
42permutation s2begins s3begins s1u s3donothing s1c s3c s2donothing s2c s2select
43permutation s2begins s3begins s1u s2donothing s3donothing s1c s2c s3c s2select
44permutation s2begins s3begins s1u s3donothing s2donothing s1c s3c s2c s2select
45