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