0001-WIP-Fix-RESTRICT-behavior-for-temporal-foreign-keys.patch.nocfbot

text/plain

Filename: 0001-WIP-Fix-RESTRICT-behavior-for-temporal-foreign-keys.patch.nocfbot
Type: text/plain
Part: 0
Message: Re: SQL:2011 application time
From 7d2ae226da67838825120f759a912362cf91e065 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Thu, 13 Feb 2025 13:15:23 +0100
Subject: [PATCH] WIP: Fix RESTRICT behavior for temporal foreign keys

---
 src/backend/utils/adt/ri_triggers.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/backend/utils/adt/ri_triggers.c b/src/backend/utils/adt/ri_triggers.c
index 8473448849c..bbd1d5712f2 100644
--- a/src/backend/utils/adt/ri_triggers.c
+++ b/src/backend/utils/adt/ri_triggers.c
@@ -787,6 +787,12 @@ ri_restrict(TriggerData *trigdata, bool is_no_action)
 			Oid			pk_type = RIAttType(pk_rel, riinfo->pk_attnums[i]);
 			Oid			fk_type = RIAttType(fk_rel, riinfo->fk_attnums[i]);
 
+			if (riinfo->hasperiod && !is_no_action)
+			{
+				if (i == riinfo->nkeys - 1)
+					continue;
+			}
+
 			quoteOneName(attname,
 						 RIAttName(fk_rel, riinfo->fk_attnums[i]));
 			sprintf(paramname, "$%d", i + 1);
@@ -2734,6 +2740,12 @@ ri_ReportViolation(const RI_ConstraintInfo *riinfo,
 			Datum		datum;
 			bool		isnull;
 
+			if (riinfo->hasperiod && is_restrict)
+			{
+				if (idx == riinfo->nkeys - 1)
+					continue;
+			}
+
 			name = NameStr(att->attname);
 
 			datum = slot_getattr(violatorslot, fnum, &isnull);
-- 
2.48.1