v12-0005-fixup-Add-UPDATE-DELETE-FOR-PORTION-OF.patch.nocfbot

text/plain

Filename: v12-0005-fixup-Add-UPDATE-DELETE-FOR-PORTION-OF.patch.nocfbot
Type: text/plain
Part: 1
Message: Re: SQL:2011 application time
From 49932adb8e626036b8d8edf26ed1465f39db82bd Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Wed, 12 Jul 2023 10:16:53 +0200
Subject: [PATCH v12] fixup! Add UPDATE/DELETE FOR PORTION OF

---
 doc/src/sgml/ref/delete.sgml | 2 ++
 doc/src/sgml/ref/update.sgml | 2 ++
 src/backend/parser/analyze.c | 5 +++--
 3 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/doc/src/sgml/ref/delete.sgml b/doc/src/sgml/ref/delete.sgml
index 868cf0d1f9..aec593239b 100644
--- a/doc/src/sgml/ref/delete.sgml
+++ b/doc/src/sgml/ref/delete.sgml
@@ -55,6 +55,7 @@ <title>Description</title>
    circumstances.
   </para>
 
+  <!-- FIXME
   <para>
    If the table has a <link linkend="ddl-periods-application-periods">temporal
    primary key</link>, you may supply a
@@ -63,6 +64,7 @@ <title>Description</title>
    the <literal>FOR PORTION OF</literal> bounds, then new rows spanning the "cut
    off" duration will be inserted to preserve the old values.
   </para>
+  -->
 
   <para>
    The optional <literal>RETURNING</literal> clause causes <command>DELETE</command>
diff --git a/doc/src/sgml/ref/update.sgml b/doc/src/sgml/ref/update.sgml
index f2042e0b25..62e9e0e1f0 100644
--- a/doc/src/sgml/ref/update.sgml
+++ b/doc/src/sgml/ref/update.sgml
@@ -52,6 +52,7 @@ <title>Description</title>
    circumstances.
   </para>
 
+  <!-- FIXME
   <para>
    If the table has a <link linkend="ddl-periods-application-periods">temporal
    primary key</link>, you may supply a
@@ -61,6 +62,7 @@ <title>Description</title>
    within the bounds, and new rows spanning the "cut off" duration will be
    inserted to preserve the old values.
   </para>
+  -->
 
   <para>
    The optional <literal>RETURNING</literal> clause causes <command>UPDATE</command>
diff --git a/src/backend/parser/analyze.c b/src/backend/parser/analyze.c
index 0b2109d1bb..c6d2b7e1d1 100644
--- a/src/backend/parser/analyze.c
+++ b/src/backend/parser/analyze.c
@@ -1247,6 +1247,7 @@ transformForPortionOfClause(ParseState *pstate,
 	char *range_name = forPortionOf->range_name;
 	char *range_type_name = NULL;
 	int range_attno = InvalidAttrNumber;
+	Form_pg_attribute attr;
 	ForPortionOfExpr *result;
 	List *targetList;
 	Node *target_start, *target_end;
@@ -1264,7 +1265,7 @@ transformForPortionOfClause(ParseState *pstate,
 						range_name,
 						RelationGetRelationName(targetrel)),
 				 parser_errposition(pstate, forPortionOf->range_name_location)));
-	Form_pg_attribute attr = TupleDescAttr(targetrel->rd_att, range_attno - 1);
+	attr = TupleDescAttr(targetrel->rd_att, range_attno - 1);
 	// TODO: check attr->attisdropped (?),
 	// and figure out concurrency issues with that in general.
 	// It should work the same as updating any other column.
@@ -1317,12 +1318,12 @@ transformForPortionOfClause(ParseState *pstate,
 		 * Now make sure we update the start/end time of the record.
 		 * For a range col (r) this is `r = r * targetRange`.
 		 */
-		targetList = NIL;
 		Expr *rangeSetExpr = (Expr *) makeSimpleA_Expr(AEXPR_OP, "*",
 				(Node *) copyObject(rangeVar), (Node *) fc,
 				forPortionOf->range_name_location);
 		TargetEntry *tle;
 
+		targetList = NIL;
 		rangeSetExpr = (Expr *) transformExpr(pstate, (Node *) rangeSetExpr, EXPR_KIND_UPDATE_PORTION);
 		tle = makeTargetEntry(rangeSetExpr,
 							  range_attno,
-- 
2.41.0