From 2d7810d6de60eca741ad832dea8521c14d60951d Mon Sep 17 00:00:00 2001 From: Matthias van de Meent 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