From 7d1d7d6697d03b0a4ad3baaf37f315252f2b70c4 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Tue, 17 Aug 2021 15:51:45 +0200 Subject: [PATCH 3/5] Add WRITE_INDEX_ARRAY We have a few WRITE_{name of type}_ARRAY macros, but the one case using the Index type was hand-coded. Wrap it into a macro as well. This also changes the behavior slightly: Before, the field name was skipped if the length was zero. Now it prints the field name even in that case. This is more consistent with how other array fields are handled. --- src/backend/nodes/outfuncs.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index 87561cbb6f..50ed59bb4a 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -124,6 +124,13 @@ static void outChar(StringInfo str, char c); appendStringInfo(str, " %u", node->fldname[i]); \ } while(0) +#define WRITE_INDEX_ARRAY(fldname, len) \ + do { \ + appendStringInfoString(str, " :" CppAsString(fldname) " "); \ + for (int i = 0; i < len; i++) \ + appendStringInfo(str, " %u", node->fldname[i]); \ + } while(0) + #define WRITE_INT_ARRAY(fldname, len) \ do { \ appendStringInfoString(str, " :" CppAsString(fldname) " "); \ @@ -2510,14 +2517,7 @@ _outPathTarget(StringInfo str, const PathTarget *node) WRITE_NODE_TYPE("PATHTARGET"); WRITE_NODE_FIELD(exprs); - if (node->sortgrouprefs) - { - int i; - - appendStringInfoString(str, " :sortgrouprefs"); - for (i = 0; i < list_length(node->exprs); i++) - appendStringInfo(str, " %u", node->sortgrouprefs[i]); - } + WRITE_INDEX_ARRAY(sortgrouprefs, list_length(node->exprs)); WRITE_FLOAT_FIELD(cost.startup, "%.2f"); WRITE_FLOAT_FIELD(cost.per_tuple, "%.2f"); WRITE_INT_FIELD(width); -- 2.32.0