# Total Cash test # # Another famous test of snapshot isolation anomaly. # # Any overlap between the transactions must cause a serialization failure. setup { CREATE TABLE accounts (accountid text NOT NULL PRIMARY KEY, balance numeric not null); INSERT INTO accounts VALUES ('checking', 600),('savings',600); } teardown { DROP TABLE accounts; } session "s1" setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } step "wx1" { UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; } step "rxy1" { SELECT SUM(balance) FROM accounts; } step "c1" { COMMIT; } session "s2" setup { BEGIN ISOLATION LEVEL SERIALIZABLE; } step "wy2" { UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; } step "rxy2" { SELECT SUM(balance) FROM accounts; } step "c2" { COMMIT; }