v4-0002-Add-EvalPlanQual-delete-returning-isolation-test.patch
application/octet-stream
Filename: v4-0002-Add-EvalPlanQual-delete-returning-isolation-test.patch
Type: application/octet-stream
Part: 0
Patch
Format: format-patch
Series: patch v4-0002
Subject: Add EvalPlanQual delete returning isolation test
| File | + | − |
|---|---|---|
| src/test/isolation/expected/eval-plan-qual-2.out | 37 | 0 |
| src/test/isolation/isolation_schedule | 1 | 0 |
| src/test/isolation/specs/eval-plan-qual-2.spec | 30 | 0 |
From ff5910b02873b2186c28d1078f53d0812624c5f4 Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Wed, 22 Mar 2023 16:47:09 -0700
Subject: [PATCH v4 2/2] Add EvalPlanQual delete returning isolation test
Author: Andres Freund
Reviewed-by: Pavel Borisov
Discussion: https://www.postgresql.org/message-id/flat/CAPpHfdua-YFw3XTprfutzGp28xXLigFtzNbuFY8yPhqeq6X5kg%40mail.gmail.com
---
.../isolation/expected/eval-plan-qual-2.out | 37 +++++++++++++++++++
src/test/isolation/isolation_schedule | 1 +
.../isolation/specs/eval-plan-qual-2.spec | 30 +++++++++++++++
3 files changed, 68 insertions(+)
create mode 100644 src/test/isolation/expected/eval-plan-qual-2.out
create mode 100644 src/test/isolation/specs/eval-plan-qual-2.spec
diff --git a/src/test/isolation/expected/eval-plan-qual-2.out b/src/test/isolation/expected/eval-plan-qual-2.out
new file mode 100644
index 00000000000..117a3d3be8d
--- /dev/null
+++ b/src/test/isolation/expected/eval-plan-qual-2.out
@@ -0,0 +1,37 @@
+Parsed test spec with 3 sessions
+
+starting permutation: read_u wx2 wb1 c2 c1 read_u read
+step read_u: SELECT * FROM accounts;
+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 *; <waiting ...>
+step c2: COMMIT;
+step wb1: <... completed>
+accountid|balance|balance2
+---------+-------+--------
+savings | 600| 1200
+(1 row)
+
+step c1: COMMIT;
+step read_u: SELECT * FROM accounts;
+accountid|balance|balance2
+---------+-------+--------
+checking | 1050| 2100
+(1 row)
+
+step read: SELECT * FROM accounts ORDER BY accountid;
+accountid|balance|balance2
+---------+-------+--------
+checking | 1050| 2100
+(1 row)
+
diff --git a/src/test/isolation/isolation_schedule b/src/test/isolation/isolation_schedule
index 4fc56ae99c9..c75547529e6 100644
--- a/src/test/isolation/isolation_schedule
+++ b/src/test/isolation/isolation_schedule
@@ -36,6 +36,7 @@ test: fk-partitioned-2
test: fk-snapshot
test: subxid-overflow
test: eval-plan-qual
+test: eval-plan-qual-2
test: eval-plan-qual-trigger
test: lock-update-delete
test: lock-update-traversal
diff --git a/src/test/isolation/specs/eval-plan-qual-2.spec b/src/test/isolation/specs/eval-plan-qual-2.spec
new file mode 100644
index 00000000000..30447bef24a
--- /dev/null
+++ b/src/test/isolation/specs/eval-plan-qual-2.spec
@@ -0,0 +1,30 @@
+setup
+{
+ CREATE TABLE accounts (accountid text PRIMARY KEY, balance numeric not null,
+ balance2 numeric GENERATED ALWAYS AS (balance * 2) STORED);
+ INSERT INTO accounts VALUES ('checking', 600), ('savings', 600);
+}
+
+teardown
+{
+ DROP TABLE accounts;
+}
+
+session s1
+setup { BEGIN ISOLATION LEVEL READ COMMITTED; }
+step wb1 { DELETE FROM accounts WHERE balance = 600 RETURNING *; }
+step c1 { COMMIT; }
+
+session s2
+setup { BEGIN ISOLATION LEVEL READ COMMITTED; }
+step wx2 { UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking' RETURNING balance; }
+step c2 { COMMIT; }
+
+session s3
+setup { BEGIN ISOLATION LEVEL READ COMMITTED; }
+step read { SELECT * FROM accounts ORDER BY accountid; }
+step read_u { SELECT * FROM accounts; }
+
+teardown { COMMIT; }
+
+permutation read_u wx2 wb1 c2 c1 read_u read
--
2.37.1 (Apple Git-137.1)