v17-0001-refactor-move-code-updates-pg_constraint-entry-i.patch

application/octet-stream

Filename: v17-0001-refactor-move-code-updates-pg_constraint-entry-i.patch
Type: application/octet-stream
Part: 0
Message: Re: NOT ENFORCED constraint feature

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: format-patch
Series: patch v17-0001
Subject: refactor: move code updates pg_constraint entry in a separate function
File+
src/backend/commands/tablecmds.c 39 23
From 6f3feef9c98d0b99622a770cc028afbb5bc16e5f Mon Sep 17 00:00:00 2001
From: Amul Sul <amul.sul@enterprisedb.com>
Date: Tue, 11 Mar 2025 18:19:39 +0530
Subject: [PATCH v17 1/6] refactor: move code updates pg_constraint entry in a
 separate function

---
 src/backend/commands/tablecmds.c | 62 ++++++++++++++++++++------------
 1 file changed, 39 insertions(+), 23 deletions(-)

diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 18ff8956577..df4e239b651 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -402,6 +402,8 @@ static void ATExecAlterChildConstr(List **wqueue, ATAlterConstraint *cmdcon,
 								   Relation conrel, Relation tgrel, Relation rel,
 								   HeapTuple contuple, bool recurse, List **otherrelids,
 								   LOCKMODE lockmode);
+static void UpdateConstraintEntry(ATAlterConstraint *cmdcon, Relation conrel,
+								  HeapTuple contuple);
 static ObjectAddress ATExecValidateConstraint(List **wqueue,
 											  Relation rel, char *constrName,
 											  bool recurse, bool recursing, LOCKMODE lockmode);
@@ -12095,23 +12097,9 @@ ATExecAlterConstraintInternal(List **wqueue, ATAlterConstraint *cmdcon,
 		(currcon->condeferrable != cmdcon->deferrable ||
 		 currcon->condeferred != cmdcon->initdeferred))
 	{
-		HeapTuple	copyTuple;
-		Form_pg_constraint copy_con;
-
-		copyTuple = heap_copytuple(contuple);
-		copy_con = (Form_pg_constraint) GETSTRUCT(copyTuple);
-		copy_con->condeferrable = cmdcon->deferrable;
-		copy_con->condeferred = cmdcon->initdeferred;
-		CatalogTupleUpdate(conrel, &copyTuple->t_self, copyTuple);
-
-		InvokeObjectPostAlterHook(ConstraintRelationId, currcon->oid, 0);
-
-		heap_freetuple(copyTuple);
+		UpdateConstraintEntry(cmdcon, conrel, contuple);
 		changed = true;
 
-		/* Make new constraint flags visible to others */
-		CacheInvalidateRelcache(rel);
-
 		/*
 		 * Now we need to update the multiple entries in pg_trigger that
 		 * implement the constraint.
@@ -12142,19 +12130,12 @@ ATExecAlterConstraintInternal(List **wqueue, ATAlterConstraint *cmdcon,
 		AttrNumber	colNum;
 		char	   *colName;
 		List	   *children;
-		HeapTuple	copyTuple;
-		Form_pg_constraint copy_con;
 
 		/* The current implementation only works for NOT NULL constraints */
 		Assert(currcon->contype == CONSTRAINT_NOTNULL);
 
-		copyTuple = heap_copytuple(contuple);
-		copy_con = (Form_pg_constraint) GETSTRUCT(copyTuple);
-		copy_con->connoinherit = cmdcon->noinherit;
-
-		CatalogTupleUpdate(conrel, &copyTuple->t_self, copyTuple);
+		UpdateConstraintEntry(cmdcon, conrel, contuple);
 		CommandCounterIncrement();
-		heap_freetuple(copyTuple);
 		changed = true;
 
 		/* Fetch the column number and name */
@@ -12316,6 +12297,41 @@ ATExecAlterChildConstr(List **wqueue, ATAlterConstraint *cmdcon,
 	systable_endscan(pscan);
 }
 
+/*
+ * Update the constraint entry.
+ */
+static void
+UpdateConstraintEntry(ATAlterConstraint *cmdcon, Relation conrel,
+					  HeapTuple contuple)
+{
+	Form_pg_constraint currcon;
+	HeapTuple	copyTuple;
+	Form_pg_constraint copy_con;
+
+	Assert(cmdcon->alterDeferrability || cmdcon->alterInheritability);
+
+	currcon = (Form_pg_constraint) GETSTRUCT(contuple);
+
+	copyTuple = heap_copytuple(contuple);
+	copy_con = (Form_pg_constraint) GETSTRUCT(copyTuple);
+
+	if (cmdcon->alterDeferrability)
+	{
+		copy_con->condeferrable = cmdcon->deferrable;
+		copy_con->condeferred = cmdcon->initdeferred;
+	}
+	if (cmdcon->alterInheritability)
+		copy_con->connoinherit = cmdcon->noinherit;
+
+	CatalogTupleUpdate(conrel, &copyTuple->t_self, copyTuple);
+	InvokeObjectPostAlterHook(ConstraintRelationId, currcon->oid, 0);
+
+	heap_freetuple(copyTuple);
+
+	/* Make new constraint flags visible to others */
+	CacheInvalidateRelcacheByRelid(currcon->conrelid);
+}
+
 /*
  * ALTER TABLE VALIDATE CONSTRAINT
  *
-- 
2.43.5