From a0e8f6e2a24ffae4864b4b5e2b53a69212ab058c Mon Sep 17 00:00:00 2001
From: Peter Geoghegan <pg@bowt.ie>
Date: Tue, 18 Apr 2023 13:47:11 -0700
Subject: [PATCH v1] Test has_data in rmgr desc routines.

---
 src/include/access/xlogreader.h        | 2 ++
 src/backend/access/rmgrdesc/heapdesc.c | 8 ++++----
 src/backend/access/rmgrdesc/nbtdesc.c  | 4 ++--
 3 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/include/access/xlogreader.h b/src/include/access/xlogreader.h
index d77bb2ab9..b5d07e16c 100644
--- a/src/include/access/xlogreader.h
+++ b/src/include/access/xlogreader.h
@@ -419,6 +419,8 @@ extern bool DecodeXLogRecord(XLogReaderState *state,
 #define XLogRecHasBlockRef(decoder, block_id)			\
 	(((decoder)->record->max_block_id >= (block_id)) &&	\
 	 ((decoder)->record->blocks[block_id].in_use))
+#define XLogRecHasBlockData(decoder, block_id)		\
+	((decoder)->record->blocks[block_id].has_data)
 #define XLogRecHasBlockImage(decoder, block_id)		\
 	((decoder)->record->blocks[block_id].has_image)
 #define XLogRecBlockImageApply(decoder, block_id)		\
diff --git a/src/backend/access/rmgrdesc/heapdesc.c b/src/backend/access/rmgrdesc/heapdesc.c
index 1c0fbb3e8..d73248abd 100644
--- a/src/backend/access/rmgrdesc/heapdesc.c
+++ b/src/backend/access/rmgrdesc/heapdesc.c
@@ -184,7 +184,7 @@ heap2_desc(StringInfo buf, XLogReaderState *record)
 						 xlrec->nredirected,
 						 xlrec->ndead);
 
-		if (!XLogRecHasBlockImage(record, 0))
+		if (XLogRecHasBlockData(record, 0))
 		{
 			OffsetNumber *end;
 			OffsetNumber *redirected;
@@ -223,7 +223,7 @@ heap2_desc(StringInfo buf, XLogReaderState *record)
 
 		appendStringInfo(buf, "nunused: %u", xlrec->nunused);
 
-		if (!XLogRecHasBlockImage(record, 0))
+		if (XLogRecHasBlockData(record, 0))
 		{
 			OffsetNumber *nowunused;
 
@@ -241,7 +241,7 @@ heap2_desc(StringInfo buf, XLogReaderState *record)
 		appendStringInfo(buf, "snapshotConflictHorizon: %u, nplans: %u",
 						 xlrec->snapshotConflictHorizon, xlrec->nplans);
 
-		if (!XLogRecHasBlockImage(record, 0))
+		if (XLogRecHasBlockData(record, 0))
 		{
 			xl_heap_freeze_plan *plans;
 			OffsetNumber *offsets;
@@ -270,7 +270,7 @@ heap2_desc(StringInfo buf, XLogReaderState *record)
 		appendStringInfo(buf, "ntuples: %d, flags: 0x%02X", xlrec->ntuples,
 						 xlrec->flags);
 
-		if (!XLogRecHasBlockImage(record, 0) && !isinit)
+		if (XLogRecHasBlockData(record, 0) && !isinit)
 		{
 			appendStringInfoString(buf, ", offsets:");
 			array_desc(buf, xlrec->offsets, sizeof(OffsetNumber),
diff --git a/src/backend/access/rmgrdesc/nbtdesc.c b/src/backend/access/rmgrdesc/nbtdesc.c
index c50d5547d..281a015f5 100644
--- a/src/backend/access/rmgrdesc/nbtdesc.c
+++ b/src/backend/access/rmgrdesc/nbtdesc.c
@@ -62,7 +62,7 @@ btree_desc(StringInfo buf, XLogReaderState *record)
 				appendStringInfo(buf, "ndeleted: %u, nupdated: %u",
 								 xlrec->ndeleted, xlrec->nupdated);
 
-				if (!XLogRecHasBlockImage(record, 0))
+				if (XLogRecHasBlockData(record, 0))
 					delvacuum_desc(buf, XLogRecGetBlockData(record, 0, NULL),
 								   xlrec->ndeleted, xlrec->nupdated);
 				break;
@@ -75,7 +75,7 @@ btree_desc(StringInfo buf, XLogReaderState *record)
 								 xlrec->snapshotConflictHorizon,
 								 xlrec->ndeleted, xlrec->nupdated);
 
-				if (!XLogRecHasBlockImage(record, 0))
+				if (XLogRecHasBlockData(record, 0))
 					delvacuum_desc(buf, XLogRecGetBlockData(record, 0, NULL),
 								   xlrec->ndeleted, xlrec->nupdated);
 				break;
-- 
2.40.0

