postgresql/src/test/isolation/specs/propagate-lock-delete.spec

43 lines
1.4 KiB
Python

# When an update propagates a preexisting lock on the updated tuple, make sure
# we don't ignore the lock in subsequent operations of the new version. (The
# version with the aborted savepoint uses a slightly different code path).
setup
{
create table parent (i int, c char(3));
create unique index parent_idx on parent (i);
insert into parent values (1, 'AAA');
create table child (i int references parent(i));
}
teardown
{
drop table child, parent;
}
session s1
step s1b { BEGIN; }
step s1l { INSERT INTO child VALUES (1); }
step s1c { COMMIT; }
session s2
step s2b { BEGIN; }
step s2l { INSERT INTO child VALUES (1); }
step s2c { COMMIT; }
session s3
step s3b { BEGIN; }
step s3u { UPDATE parent SET c=lower(c); } # no key update
step s3u2 { UPDATE parent SET i = i; } # key update
step s3svu { SAVEPOINT f; UPDATE parent SET c = 'bbb'; ROLLBACK TO f; }
step s3d { DELETE FROM parent; }
step s3c { COMMIT; }
permutation s1b s1l s2b s2l s3b s3u s3d s1c s2c s3c
permutation s1b s1l s2b s2l s3b s3u s3svu s3d s1c s2c s3c
permutation s1b s1l s2b s2l s3b s3u2 s3d s1c s2c s3c
permutation s1b s1l s2b s2l s3b s3u2 s3svu s3d s1c s2c s3c
permutation s1b s1l s3b s3u s3d s1c s3c
permutation s1b s1l s3b s3u s3svu s3d s1c s3c
permutation s1b s1l s3b s3u2 s3d s1c s3c
permutation s1b s1l s3b s3u2 s3svu s3d s1c s3c