[PATCH] Add isolation test for session variables.
Julien Rouhaud <julien.rouhaud@free.fr>
From: Julien Rouhaud <julien.rouhaud@free.fr>
To:
Date: 2022-08-29T08:38:52Z
Lists: pgsql-hackers
---
.../isolation/expected/session-variable.out | 87 +++++++++++++++++++
src/test/isolation/isolation_schedule | 1 +
.../isolation/specs/session-variable.spec | 34 ++++++++
3 files changed, 122 insertions(+)
create mode 100644 src/test/isolation/expected/session-variable.out
create mode 100644 src/test/isolation/specs/session-variable.spec
diff --git a/src/test/isolation/expected/session-variable.out b/src/test/isolation/expected/session-variable.out
new file mode 100644
index 0000000000..d8c817f05a
--- /dev/null
+++ b/src/test/isolation/expected/session-variable.out
@@ -0,0 +1,87 @@
+Parsed test spec with 2 sessions
+
+starting permutation: let val drop val
+step let: LET myvar = 'test';
+step val: SELECT myvar;
+myvar
+-----
+test
+(1 row)
+
+step drop: DROP VARIABLE myvar;
+step val: SELECT myvar;
+ERROR: column or variable "myvar" does not exist
+
+starting permutation: let val s1 drop val sr1
+step let: LET myvar = 'test';
+step val: SELECT myvar;
+myvar
+-----
+test
+(1 row)
+
+step s1: BEGIN;
+step drop: DROP VARIABLE myvar;
+step val: SELECT myvar;
+ERROR: column or variable "myvar" does not exist
+step sr1: ROLLBACK;
+
+starting permutation: let val dbg drop create dbg val
+step let: LET myvar = 'test';
+step val: SELECT myvar;
+myvar
+-----
+test
+(1 row)
+
+step dbg: SELECT schema, name, removed FROM pg_debug_show_used_session_variables();
+schema|name |removed
+------+-----+-------
+public|myvar|f
+(1 row)
+
+step drop: DROP VARIABLE myvar;
+step create: CREATE VARIABLE myvar AS text
+step dbg: SELECT schema, name, removed FROM pg_debug_show_used_session_variables();
+schema|name |removed
+------+-----+-------
+public|myvar|t
+(1 row)
+
+step val: SELECT myvar;
+myvar
+-----
+
+(1 row)
+
+
+starting permutation: let val s1 dbg drop create dbg val sr1
+step let: LET myvar = 'test';
+step val: SELECT myvar;
+myvar
+-----
+test
+(1 row)
+
+step s1: BEGIN;
+step dbg: SELECT schema, name, removed FROM pg_debug_show_used_session_variables();
+schema|name |removed
+------+-----+-------
+public|myvar|f
+(1 row)
+
+step drop: DROP VARIABLE myvar;
+step create: CREATE VARIABLE myvar AS text
+step dbg: SELECT schema, name, removed FROM pg_debug_show_used_session_variables();
+schema|name |removed
+------+-----+-------
+public|myvar|t
+(1 row)
+
+step val: SELECT myvar;
+myvar
+-----
+
+(1 row)
+
+step sr1: ROLLBACK;
diff --git a/src/test/isolation/isolation_schedule b/src/test/isolation/isolation_schedule
index 529a4cbd4d..96ecf93e32 100644
--- a/src/test/isolation/isolation_schedule
+++ b/src/test/isolation/isolation_schedule
@@ -107,3 +107,4 @@ test: cluster-conflict-partition
test: truncate-conflict
test: serializable-parallel
test: serializable-parallel-2
+test: session-variable
diff --git a/src/test/isolation/specs/session-variable.spec b/src/test/isolation/specs/session-variable.spec
new file mode 100644
index 0000000000..a138f0449e
--- /dev/null
+++ b/src/test/isolation/specs/session-variable.spec
@@ -0,0 +1,34 @@
+#
+
+setup
+{
+ CREATE VARIABLE myvar AS text;
+}
+
+teardown
+{
+ DROP VARIABLE IF EXISTS myvar;
+}
+
+session s1
+step s1 { BEGIN; }
+step let { LET myvar = 'test'; }
+step val { SELECT myvar; }
+step dbg { SELECT schema, name, removed FROM pg_debug_show_used_session_variables(); }
+step sr1 { ROLLBACK; }
+
+
+session s2
+step drop { DROP VARIABLE myvar; }
+step create { CREATE VARIABLE myvar AS text }
+
+# Concurrent drop of a known variable should lead to an error
+permutation let val drop val
+# Same, but with an explicit transaction
+permutation let val s1 drop val sr1
+# Concurrent drop/create of a known variable should lead to empty variable
+permutation let val dbg drop create dbg val
+# Concurrent drop/create of a known variable should lead to empty variable
+# We need a transaction to make sure that we won't accept invalidation when
+# calling the dbg step after the concurrent drop
+permutation let val s1 dbg drop create dbg val sr1
--
2.37.0
--wa5flpjzlpkolrar--