0004-Simplify-accessing-sequence-tuple-data.patch

text/plain

Filename: 0004-Simplify-accessing-sequence-tuple-data.patch
Type: text/plain
Part: 3
Message: Re: logical decoding and replication of sequences

Patch

Format: format-patch
Series: patch 0004
Subject: Simplify accessing sequence tuple data
File+
src/backend/replication/logical/reorderbuffer.c 8 29
From 9f29fac7e479c255fb247d201fe8691655c11fbf Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Tue, 7 Dec 2021 15:31:36 +0100
Subject: [PATCH 4/4] Simplify accessing sequence tuple data

---
 .../replication/logical/reorderbuffer.c       | 37 ++++---------------
 1 file changed, 8 insertions(+), 29 deletions(-)

diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c
index 434926459f..b4fa16bebe 100644
--- a/src/backend/replication/logical/reorderbuffer.c
+++ b/src/backend/replication/logical/reorderbuffer.c
@@ -120,6 +120,7 @@
 #include "access/xact.h"
 #include "access/xlog_internal.h"
 #include "catalog/catalog.h"
+#include "commands/sequence.h"
 #include "lib/binaryheap.h"
 #include "miscadmin.h"
 #include "pgstat.h"
@@ -1089,9 +1090,7 @@ ReorderBufferQueueSequence(ReorderBuffer *rb, TransactionId xid,
 		{
 			Relation	relation;
 			HeapTuple	tuple;
-			bool		isnull;
-			int64		last_value, log_cnt;
-			bool		is_called;
+			Form_pg_sequence_data seq;
 			Oid			reloid;
 
 			if (using_subtxn)
@@ -1108,19 +1107,10 @@ ReorderBufferQueueSequence(ReorderBuffer *rb, TransactionId xid,
 
 			relation = RelationIdGetRelation(reloid);
 			tuple = &tuplebuf->tuple;
-
-			/*
-			 * Extract the internal sequence values, describing the state.
-			 *
-			 * XXX Seems a bit strange to access it directly. Maybe there's
-			 * a better / more correct way?
-			 */
-			last_value = heap_getattr(tuple, 1, RelationGetDescr(relation), &isnull);
-			log_cnt = heap_getattr(tuple, 2, RelationGetDescr(relation), &isnull);
-			is_called = heap_getattr(tuple, 3, RelationGetDescr(relation), &isnull);
+			seq = (Form_pg_sequence_data) GETSTRUCT(tuple);
 
 			rb->sequence(rb, txn, lsn, relation, transactional, created,
-						 last_value, log_cnt, is_called);
+						 seq->last_value, seq->log_cnt, seq->is_called);
 
 			RelationClose(relation);
 
@@ -2249,31 +2239,20 @@ ReorderBufferApplySequence(ReorderBuffer *rb, ReorderBufferTXN *txn,
 						   bool streaming)
 {
 	HeapTuple	tuple;
-	bool		isnull;
-	int64		last_value, log_cnt;
-	bool		is_called;
+	Form_pg_sequence_data seq;
 
 	tuple = &change->data.sequence.tuple->tuple;
-
-	/*
-	 * Extract the internal sequence values, describing the state.
-	 *
-	 * XXX Seems a bit strange to access it directly. Maybe there's
-	 * a better / more correct way?
-	 */
-	last_value = heap_getattr(tuple, 1, RelationGetDescr(relation), &isnull);
-	log_cnt = heap_getattr(tuple, 2, RelationGetDescr(relation), &isnull);
-	is_called = heap_getattr(tuple, 3, RelationGetDescr(relation), &isnull);
+	seq = (Form_pg_sequence_data) GETSTRUCT(tuple);
 
 	/* Only ever called from ReorderBufferApplySequence, so transational. */
 	if (streaming)
 		rb->stream_sequence(rb, txn, change->lsn, relation, true,
 							change->data.sequence.created,
-							last_value, log_cnt, is_called);
+							seq->last_value, seq->log_cnt, seq->is_called);
 	else
 		rb->sequence(rb, txn, change->lsn, relation, true,
 					 change->data.sequence.created,
-					 last_value, log_cnt, is_called);
+					 seq->last_value, seq->log_cnt, seq->is_called);
 }
 
 /*
-- 
2.34.1