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