# INSERT...ON CONFLICT DO NOTHING test # # This test tries to expose problems with the interaction between concurrent # sessions during INSERT...ON CONFLICT DO NOTHING. # # The convention here is that session 1 always ends up inserting, and session 2 # always ends up doing nothing. setup { CREATE TABLE ints (key int primary key, val text); } teardown { DROP TABLE ints; } session "s1" setup { BEGIN ISOLATION LEVEL READ COMMITTED; } step "donothing1" { INSERT INTO ints(key, val) VALUES(1, 'donothing1') ON CONFLICT DO NOTHING; } step "c1" { COMMIT; } step "a1" { ABORT; } session "s2" setup { BEGIN ISOLATION LEVEL READ COMMITTED; } step "donothing2" { INSERT INTO ints(key, val) VALUES(1, 'donothing2') ON CONFLICT DO NOTHING; } step "select2" { SELECT * FROM ints; } step "c2" { COMMIT; } step "a2" { ABORT; } # Regular case where one session block-waits on another to determine if it # should proceed with an insert or do nothing. permutation "donothing1" "donothing2" "c1" "select2" "c2" permutation "donothing1" "donothing2" "a1" "select2" "c2"