| # 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 |