diff --git a/src/test/isolation/expected/eval-plan-qual.out b/src/test/isolation/expected/eval-plan-qual.out index 73e0aeb50e..0237271cee 100644 --- a/src/test/isolation/expected/eval-plan-qual.out +++ b/src/test/isolation/expected/eval-plan-qual.out @@ -746,6 +746,36 @@ savings | 600| 1200 (2 rows) +starting permutation: read wx2 wb1 c2 c1 read +step read: SELECT * FROM accounts ORDER BY accountid; +accountid|balance|balance2 +---------+-------+-------- +checking | 600| 1200 +savings | 600| 1200 +(2 rows) + +step wx2: UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking' RETURNING balance; +balance +------- + 1050 +(1 row) + +step wb1: DELETE FROM accounts WHERE balance = 600 RETURNING *; +step c2: COMMIT; +step wb1: <... completed> +accountid|balance|balance2 +---------+-------+-------- +savings | 600| 1200 +(1 row) + +step c1: COMMIT; +step read: SELECT * FROM accounts ORDER BY accountid; +accountid|balance|balance2 +---------+-------+-------- +checking | 1050| 2100 +(1 row) + + starting permutation: upsert1 upsert2 c1 c2 read step upsert1: WITH upsert AS diff --git a/src/test/isolation/specs/eval-plan-qual.spec b/src/test/isolation/specs/eval-plan-qual.spec index 735c671734..edd6d19df3 100644 --- a/src/test/isolation/specs/eval-plan-qual.spec +++ b/src/test/isolation/specs/eval-plan-qual.spec @@ -76,6 +76,8 @@ setup { BEGIN ISOLATION LEVEL READ COMMITTED; } step wx1 { UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; } # wy1 then wy2 checks the case where quals pass then fail step wy1 { UPDATE accounts SET balance = balance + 500 WHERE accountid = 'checking' RETURNING balance; } +# wx2 then wb1 checks the case of re-fetching up-to-date values for DELETE ... RETURNING ... +step wb1 { DELETE FROM accounts WHERE balance = 600 RETURNING *; } step wxext1 { UPDATE accounts_ext SET balance = balance - 200 WHERE accountid = 'checking' RETURNING balance; } step tocds1 { UPDATE accounts SET accountid = 'cds' WHERE accountid = 'checking'; } @@ -353,6 +355,8 @@ permutation wx1 delwcte c1 c2 read # test that a delete to a self-modified row throws error when # previously updated by a different cid permutation wx1 delwctefail c1 c2 read +# test that a delete re-fetches up-to-date values for returning clause +permutation read wx2 wb1 c2 c1 read permutation upsert1 upsert2 c1 c2 read permutation readp1 writep1 readp2 c1 c2