34 lines
679 B
Ruby
34 lines
679 B
Ruby
# Read-write-unique test.
|
|
# From bug report 9301.
|
|
|
|
setup
|
|
{
|
|
CREATE TABLE test (
|
|
key integer UNIQUE,
|
|
val text
|
|
);
|
|
|
|
CREATE OR REPLACE FUNCTION insert_unique(k integer, v text) RETURNS void
|
|
LANGUAGE SQL AS $$
|
|
INSERT INTO test (key, val) SELECT k, v WHERE NOT EXISTS (SELECT key FROM test WHERE key = k);
|
|
$$;
|
|
}
|
|
|
|
teardown
|
|
{
|
|
DROP FUNCTION insert_unique(integer, text);
|
|
DROP TABLE test;
|
|
}
|
|
|
|
session s1
|
|
setup { BEGIN ISOLATION LEVEL SERIALIZABLE; }
|
|
step rw1 { SELECT insert_unique(1, '1'); }
|
|
step c1 { COMMIT; }
|
|
|
|
session s2
|
|
setup { BEGIN ISOLATION LEVEL SERIALIZABLE; }
|
|
step rw2 { SELECT insert_unique(1, '2'); }
|
|
step c2 { COMMIT; }
|
|
|
|
permutation rw1 rw2 c1 c2
|