From 9f29fac7e479c255fb247d201fe8691655c11fbf Mon Sep 17 00:00:00 2001 From: Peter Eisentraut 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