From 2bf517aac3b9579ada20a95c5e698462d72ef07f Mon Sep 17 00:00:00 2001
From: Matthias van de Meent <boekewurm+postgres@gmail.com>
Date: Mon, 19 Feb 2024 13:53:00 +0100
Subject: [PATCH v8 8/8] nodeToString: omit serializing 0s in enum-typed
 fields.

---
 src/backend/nodes/outfuncs.c  |  5 +----
 src/backend/nodes/readfuncs.c | 16 +++++++++++-----
 2 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c
index 986620f7f3..322d0a5f10 100644
--- a/src/backend/nodes/outfuncs.c
+++ b/src/backend/nodes/outfuncs.c
@@ -113,10 +113,7 @@ static bool output_parse_locations = true;
 							 (int) node->fldname); \
 	} while (0)
 #define WRITE_ENUM_FIELD(fldname, enumtype) \
-	do { \
-		appendStringInfo(str, " :" CppAsString(fldname) " %d", \
-						 (int) node->fldname); \
-	} while (0)
+	WRITE_ENUM_FIELD_DEFAULT(fldname, enumtype, 0)
 
 /* Write a float field (actually, they're double) */
 #define WRITE_FLOAT_FIELD_DEFAULT(fldname, default) \
diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c
index 7c000371f0..d5ddafe968 100644
--- a/src/backend/nodes/readfuncs.c
+++ b/src/backend/nodes/readfuncs.c
@@ -142,13 +142,19 @@
 	READ_CHAR_FIELD_DEFAULT(fldname, '\0')
 
 /* Read an enumerated-type field that was written as an integer code */
-#define READ_ENUM_FIELD(fldname, enumtype) \
+
+#define READ_ENUM_FIELD_DEFAULT(fldname, enumtype, default) \
 	do { \
-		token = pg_strtok_fieldname(":" CppAsString(fldname), &length); \
-		Assert(token != NULL); \
-		token = pg_strtok(&length);		/* get field value */ \
-		local_node->fldname = (enumtype) atoi(token); \
+		if ((token = pg_strtok_fieldname(":" CppAsString(fldname), &length))) \
+		{ \
+			token = pg_strtok(&length);		/* get field value */ \
+			local_node->fldname = (enumtype) atoi(token); \
+		} \
+		else \
+			local_node->fldname = (enumtype) default; \
 	} while (0)
+#define READ_ENUM_FIELD(fldname, enumtype) \
+	READ_ENUM_FIELD_DEFAULT(fldname, enumtype, 0)
 
 /* Read a float field */
 #define READ_FLOAT_FIELD_DEFAULT(fldname, default_value) \
-- 
2.40.1

