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