# Referential Integrity test # # The assumption here is that the application code issuing the SELECT # to test for the presence or absence of a related record would do the # right thing -- this script doesn't include that logic. # # Any overlap between the transactions must cause a serialization failure. setup { CREATE TABLE a (i int PRIMARY KEY); CREATE TABLE b (a_id int); INSERT INTO a VALUES (1); } teardown { DROP TABLE a, b; } session "s1" setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } step "rx1" { SELECT i FROM a WHERE i = 1; } step "wy1" { INSERT INTO b VALUES (1); } step "c1" { COMMIT; } session "s2" setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } step "rx2" { SELECT i FROM a WHERE i = 1; } step "ry2" { SELECT a_id FROM b WHERE a_id = 1; } step "wx2" { DELETE FROM a WHERE i = 1; } step "c2" { COMMIT; }