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