From 02b89799a2f139a3cab41b1df761103cf8627098 Mon Sep 17 00:00:00 2001 From: Koval Dmitry Date: Wed, 19 Feb 2025 13:09:33 +0300 Subject: [PATCH v1] Triggering Assert on query with ON CONFLICT --- src/backend/executor/nodeModifyTable.c | 2 ++ src/test/modules/injection_points/Makefile | 11 +++---- .../injection_points/specs/onconflict.spec | 30 +++++++++++++++++++ 3 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 src/test/modules/injection_points/specs/onconflict.spec diff --git a/src/backend/executor/nodeModifyTable.c b/src/backend/executor/nodeModifyTable.c index b0fe50075ad..01946fdb0d8 100644 --- a/src/backend/executor/nodeModifyTable.c +++ b/src/backend/executor/nodeModifyTable.c @@ -67,6 +67,7 @@ #include "storage/lmgr.h" #include "utils/builtins.h" #include "utils/datum.h" +#include "utils/injection_point.h" #include "utils/rel.h" #include "utils/snapmgr.h" @@ -1128,6 +1129,7 @@ ExecInsert(ModifyTableContext *context, */ TupleTableSlot *returning = NULL; + INJECTION_POINT("before-on-conflict-update"); if (ExecOnConflictUpdate(context, resultRelInfo, &conflictTid, slot, canSetTag, &returning)) diff --git a/src/test/modules/injection_points/Makefile b/src/test/modules/injection_points/Makefile index e680991f8d4..b1915800760 100644 --- a/src/test/modules/injection_points/Makefile +++ b/src/test/modules/injection_points/Makefile @@ -11,15 +11,16 @@ EXTENSION = injection_points DATA = injection_points--1.0.sql PGFILEDESC = "injection_points - facility for injection points" -REGRESS = injection_points hashagg reindex_conc -REGRESS_OPTS = --dlpath=$(top_builddir)/src/test/regress +#REGRESS = injection_points hashagg reindex_conc +#REGRESS_OPTS = --dlpath=$(top_builddir)/src/test/regress -ISOLATION = basic inplace syscache-update-pruned +#ISOLATION = basic inplace syscache-update-pruned +ISOLATION = onconflict -TAP_TESTS = 1 +#TAP_TESTS = 1 # The injection points are cluster-wide, so disable installcheck -NO_INSTALLCHECK = 1 +#NO_INSTALLCHECK = 1 export enable_injection_points diff --git a/src/test/modules/injection_points/specs/onconflict.spec b/src/test/modules/injection_points/specs/onconflict.spec new file mode 100644 index 00000000000..cdfe7942029 --- /dev/null +++ b/src/test/modules/injection_points/specs/onconflict.spec @@ -0,0 +1,30 @@ +setup +{ + CREATE EXTENSION injection_points; + + CREATE TABLE t_int (i int PRIMARY KEY, v int, x int) PARTITION BY RANGE (i); + CREATE TABLE t_int_1 PARTITION OF t_int FOR VALUES FROM (1) TO (100); + CREATE TABLE t_int_2 PARTITION OF t_int FOR VALUES FROM (100) TO (200); + + INSERT INTO t_int VALUES (1, 10, 100); +} + +teardown +{ + DROP TABLE t_int; + DROP EXTENSION injection_points; +} + +session s1 +step s1 { BEGIN; } +step s1ipa { SELECT injection_points_attach('before-on-conflict-update', 'wait'); } +step s1i { INSERT INTO t_int VALUES (1, 11, 111) ON CONFLICT (i) DO UPDATE SET x = excluded.x; } +step s1c { COMMIT; } + +session s2 +step s2 { BEGIN; } +step s2ipw { SELECT injection_points_wakeup('before-on-conflict-update'); } +step s2u { UPDATE t_int SET i = i + 150 WHERE i = 1; } +step s2c { COMMIT; } + +permutation s1 s1ipa s1i(s2c) s2 s2u s2ipw s2c -- 2.34.1