Simplify CitusNewNode

postgres refactored newNode() in PG 17, the main point for doing
this is the original tricks is no longer neccessary for modern
compilers[1].

I think Citus should follow up.

This should have no backward compatibility issues since it just
replaces palloc0fast with palloc0.

This is good for forward compatibility since palloc0fast is no
longer exists in PG 17.

[1] https://www.postgresql.org/message-id/b51f1fa7-7e6a-4ecc-936d-90a8a1659e7c@iki.fi

Signed-off-by: Zhao Junwang <zhjwpku@gmail.com>
pull/7434/head
Zhao Junwang 2024-01-22 12:26:13 +08:00
parent 14ecebe47c
commit ba040cff04
1 changed files with 11 additions and 28 deletions

View File

@ -92,38 +92,21 @@ CitusNodeTagI(Node *node)
return ((CitusNode*)(node))->citus_tag;
}
/*
* Postgres's nodes/nodes.h has more information on why we do this.
*/
#ifdef __GNUC__
/* Citus variant of newNode(), don't use directly. */
#define CitusNewNode(size, tag) \
({ CitusNode *_result; \
AssertMacro((size) >= sizeof(CitusNode)); /* need the tag, at least */ \
_result = (CitusNode *) palloc0fast(size); \
_result->extensible.type = T_ExtensibleNode; \
_result->extensible.extnodename = CitusNodeTagNames[tag - CITUS_NODE_TAG_START]; \
_result->citus_tag =(int) (tag); \
_result; \
})
static inline CitusNode *
CitusNewNode(size_t size, CitusNodeTag tag)
{
CitusNode *result;
#else
extern CitusNode *newCitusNodeMacroHolder;
#define CitusNewNode(size, tag) \
( \
AssertMacro((size) >= sizeof(CitusNode)), /* need the tag, at least */ \
newCitusNodeMacroHolder = (CitusNode *) palloc0fast(size), \
newCitusNodeMacroHolder->extensible.type = T_ExtensibleNode, \
newCitusNodeMacroHolder->extensible.extnodename = CitusNodeTagNames[tag - CITUS_NODE_TAG_START], \
newCitusNodeMacroHolder->citus_tag =(int) (tag), \
newCitusNodeMacroHolder \
)
#endif
Assert(size >= sizeof(CitusNode)); /* need the ExtensibleNode and the tag, at least */
result = (CitusNode *) palloc0(size);
result->extensible.type = T_ExtensibleNode;
result->extensible.extnodename = CitusNodeTagNames[tag - CITUS_NODE_TAG_START];
result->citus_tag = (int) (tag);
return result;
}
/*
* IsA equivalent that compares node tags, including Citus-specific nodes.