41 lines
1009 B
Python
41 lines
1009 B
Python
# 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; }
|
|
|
|
# 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
|