v3-0008-nodeToString-omit-serializing-0s-in-enum-typed-fi.patch
application/octet-stream
Filename: v3-0008-nodeToString-omit-serializing-0s-in-enum-typed-fi.patch
Type: application/octet-stream
Part: 7
Patch
Format: format-patch
Series: patch v3-0008
Subject: nodeToString: omit serializing 0s in enum-typed fields.
| File | + | − |
|---|---|---|
| src/backend/nodes/outfuncs.c | 1 | 4 |
| src/backend/nodes/readfuncs.c | 11 | 5 |
From 2d7810d6de60eca741ad832dea8521c14d60951d 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 v3 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 5d88d252d8..22dd2d6083 100644
--- a/src/backend/nodes/outfuncs.c
+++ b/src/backend/nodes/outfuncs.c
@@ -112,10 +112,7 @@ static void outDouble(StringInfo str, double d);
(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 49285fa86d..3559e3cb06 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