Skip to content

Commit 865640f

Browse files
committed
Add BR delete and update triggers for PG18 compat
In version 18, we got a breaking change in the before row delete and update triggers by adding a new parameter to the function signature. This change has been backported with 17.6 hence we need to keep track of 3 versions of these functions. postgres/postgres@5022ff25
1 parent fb88c6d commit 865640f

File tree

2 files changed

+111
-4
lines changed

2 files changed

+111
-4
lines changed

src/compat/compat.h

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,3 +740,108 @@ initReadOnlyStringInfo(StringInfo str, char *data, int len)
740740
#define COMPARE_GT BTGreaterStrategyNumber
741741
#define pk_cmptype pk_strategy
742742
#endif
743+
744+
/* PG18 adds is_merge_delete param to ExecBR{Delete|Update}Triggers function.
745+
* This has been backported to 17.6 but with a new name (ExecBR{Delete|Update}TriggersNew)j
746+
* Add compat function to cover 3 versions (pre 17.6, 17.6 - 18, post 18)
747+
* https://github.com/postgres/postgres/commit/5022ff25
748+
*/
749+
#if PG_VERSION_NUM < 170006
750+
#define ExecBRDeleteTriggersCompat(estate, \
751+
epqstate, \
752+
relinfo, \
753+
tupleid, \
754+
fdw_trigtuple, \
755+
epqslot, \
756+
tmresult, \
757+
tmfd, \
758+
is_merge_delete) \
759+
ExecBRDeleteTriggers(estate, epqstate, relinfo, tupleid, fdw_trigtuple, epqslot, tmresult, tmfd)
760+
#define ExecBRUpdateTriggersCompat(estate, \
761+
epqstate, \
762+
relinfo, \
763+
tupleid, \
764+
fdw_trigtuple, \
765+
epqslot, \
766+
tmresult, \
767+
tmfd, \
768+
is_merge_delete) \
769+
ExecBRUpdateTriggers(estate, epqstate, relinfo, tupleid, fdw_trigtuple, epqslot, tmresult, tmfd)
770+
#endif
771+
772+
#if PG_VERSION_NUM >= 170006 && PG_VERSION_NUM < 180000
773+
#define ExecBRDeleteTriggersCompat(estate, \
774+
epqstate, \
775+
relinfo, \
776+
tupleid, \
777+
fdw_trigtuple, \
778+
epqslot, \
779+
tmresult, \
780+
tmfd, \
781+
is_merge_delete) \
782+
ExecBRDeleteTriggersNew(estate, \
783+
epqstate, \
784+
relinfo, \
785+
tupleid, \
786+
fdw_trigtuple, \
787+
epqslot, \
788+
tmresult, \
789+
tmfd, \
790+
is_merge_delete)
791+
#define ExecBRUpdateTriggersCompat(estate, \
792+
epqstate, \
793+
relinfo, \
794+
tupleid, \
795+
fdw_trigtuple, \
796+
epqslot, \
797+
tmresult, \
798+
tmfd, \
799+
is_merge_delete) \
800+
ExecBRUpdateTriggersNew(estate, \
801+
epqstate, \
802+
relinfo, \
803+
tupleid, \
804+
fdw_trigtuple, \
805+
epqslot, \
806+
tmresult, \
807+
tmfd, \
808+
is_merge_delete)
809+
#endif
810+
#if PG18_GE
811+
#define ExecBRDeleteTriggersCompat(estate, \
812+
epqstate, \
813+
relinfo, \
814+
tupleid, \
815+
fdw_trigtuple, \
816+
epqslot, \
817+
tmresult, \
818+
tmfd, \
819+
is_merge_delete) \
820+
ExecBRDeleteTriggers(estate, \
821+
epqstate, \
822+
relinfo, \
823+
tupleid, \
824+
fdw_trigtuple, \
825+
epqslot, \
826+
tmresult, \
827+
tmfd, \
828+
is_merge_delete)
829+
#define ExecBRUpdateTriggersCompat(estate, \
830+
epqstate, \
831+
relinfo, \
832+
tupleid, \
833+
fdw_trigtuple, \
834+
epqslot, \
835+
tmresult, \
836+
tmfd, \
837+
is_merge_delete) \
838+
ExecBRUpdateTriggers(estate, \
839+
epqstate, \
840+
relinfo, \
841+
tupleid, \
842+
fdw_trigtuple, \
843+
epqslot, \
844+
tmresult, \
845+
tmfd, \
846+
is_merge_delete)
847+
#endif

src/nodes/modify_hypertable_exec.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1155,9 +1155,10 @@ ExecDeletePrologue(ModifyTableContext *context, ResultRelInfo *resultRelInfo,
11551155
if (context->estate->es_insert_pending_result_relations != NIL)
11561156
ExecPendingInserts(context->estate);
11571157

1158-
return ExecBRDeleteTriggers(context->estate, context->epqstate,
1158+
return ExecBRDeleteTriggersCompat(context->estate, context->epqstate,
11591159
resultRelInfo, tupleid, oldtuple,
1160-
epqreturnslot, result, &context->tmfd);
1160+
epqreturnslot, result, &context->tmfd,
1161+
context->mtstate->operation == CMD_MERGE);
11611162
}
11621163

11631164
return true;
@@ -1580,9 +1581,10 @@ ExecUpdatePrologue(ModifyTableContext *context, ResultRelInfo *resultRelInfo,
15801581
if (context->estate->es_insert_pending_result_relations != NIL)
15811582
ExecPendingInserts(context->estate);
15821583

1583-
return ExecBRUpdateTriggers(context->estate, context->epqstate,
1584+
return ExecBRUpdateTriggersCompat(context->estate, context->epqstate,
15841585
resultRelInfo, tupleid, oldtuple, slot,
1585-
result, &context->tmfd);
1586+
result, &context->tmfd,
1587+
context->mtstate->operation == CMD_MERGE);
15861588
}
15871589

15881590
return true;

0 commit comments

Comments
 (0)