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 <guofenglinux@gmail.com>
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://www.postgresql.org/message-id/flat/CAMbWs4-LN%3DbF8f9eU2R94dJtF54DfDvBq%2BovqHnOQqbinYDrUw%40mail.gmail.com
This commit is contained in:
Peter Eisentraut 2022-04-27 09:15:09 +02:00
parent 06cafd6f57
commit 9ddf251f94
1 changed files with 9 additions and 2 deletions

View File

@ -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) \