# When a tuple that has been updated is locked, the locking command # should traverse the update chain; thus, a DELETE should not be able # to proceed until the lock has been released. setup { CREATE TABLE foo ( key int PRIMARY KEY, value int ); INSERT INTO foo VALUES (1, 1); } teardown { DROP TABLE foo; } session s1 setup { BEGIN; } step s1s { SAVEPOINT f; } step s1u { UPDATE foo SET key = 2; } # obtain KEY REVOKE step s1r { ROLLBACK TO f; } # lose KEY REVOKE step s1l { SELECT * FROM foo FOR KEY SHARE; } step s1c { COMMIT; } session s2 setup { BEGIN; } step s2l { SELECT * FROM foo FOR KEY SHARE; } step s2c { COMMIT; } permutation s1s s1u s1r s1l s1c s2l s2c permutation s1s s1u s1r s1l s2l s1c s2c permutation s1s s1u s1r s1l s2l s2c s1c permutation s1s s1u s1r s2l s1l s1c s2c permutation s1s s1u s1r s2l s1l s2c s1c permutation s1s s1u s1r s2l s2c s1l s1c permutation s1s s1u s2l s1r s1l s1c s2c permutation s1s s1u s2l s1r s1l s2c s1c permutation s1s s1u s2l s1r s2c s1l s1c permutation s1s s2l s1u s2c s1r s1l s1c permutation s1s s2l s2c s1u s1r s1l s1c permutation s2l s1s s1u s2c s1r s1l s1c permutation s2l s1s s2c s1u s1r s1l s1c permutation s2l s2c s1s s1u s1r s1l s1c