From: Peter Eisentraut Date: Wed, 27 Apr 2022 07:15:09 +0000 (+0200) Subject: Handle NULL fields in WRITE_INDEX_ARRAY X-Git-Tag: REL_15_BETA1~102 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9ddf251f94090cebf1bd8fc18396cb8a4b580d04;p=thirdparty%2Fpostgresql.git Handle NULL fields in WRITE_INDEX_ARRAY Unlike existing WRITE_*_ARRAY macros, WRITE_INDEX_ARRAY needs to handle the case that the field is NULL. We already have the convention to print NULL fields as "<>", so we do that here as well. There is currently no corresponding read function for this, so reading this back in is not implemented, but it could be if needed. Reported-by: Richard Guo Reviewed-by: Tom Lane Discussion: https://www.postgresql.org/message-id/flat/CAMbWs4-LN%3DbF8f9eU2R94dJtF54DfDvBq%2BovqHnOQqbinYDrUw%40mail.gmail.com --- diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index 6a02f81ad5c..b1f2de8b28d 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -124,11 +124,18 @@ static void outChar(StringInfo str, char c); appendStringInfo(str, " %u", node->fldname[i]); \ } while(0) +/* + * This macro supports the case that the field is NULL. For the other array + * macros, that is currently not needed. + */ #define WRITE_INDEX_ARRAY(fldname, len) \ do { \ appendStringInfoString(str, " :" CppAsString(fldname) " "); \ - for (int i = 0; i < len; i++) \ - appendStringInfo(str, " %u", node->fldname[i]); \ + if (node->fldname) \ + for (int i = 0; i < len; i++) \ + appendStringInfo(str, " %u", node->fldname[i]); \ + else \ + appendStringInfoString(str, "<>"); \ } while(0) #define WRITE_INT_ARRAY(fldname, len) \