makeDefElem("createdb", (Node *)makeInteger(TRUE));
創建一個DefElem節點,節點中的defname爲createdb
,節點的中的arg指向T_Integer
的節點。其他的參數defnamespace爲NULL,defaction爲DEFELEM_UNSPEC。
備註: 性子急得同學看看上面就行了
makeInteger
爲創建一個節點,type 爲T_Integer
類型。
繼續:
makeDefElem(char *name, Node *arg)
{
DefElem *res = makeNode(DefElem);
res->defnamespace = NULL;
res->defname = name;
res->arg = arg;
res->defaction = DEFELEM_UNSPEC;
return res;
}
分配一塊DefElem
大小的內存,構建一個DefElem
節點,節點中的defname
爲傳入的參數name
,節點中的arg
爲傳入的arg
(根據上下文就是創建一個DefElem
節點,節點defname
爲createdb
, arg
爲指向T_Integer
節點的指針。
#define makeNode(_type_) ((_type_ *) newNode(sizeof(_type_),T_##_type_))
宏定義,直接進行替換,創建一個DefElem 類型Node,Node的類型爲傳入的_type_
,參數tag爲T_type_
//構建一個節點,節點的Tag爲給定的tag,節點的大小爲給定的大小(如果是8的倍數)
typedef struct Node
{
NodeTag type;
} Node;
typedef enum NodeTag;
#define newNode(size, tag) \
({ Node *_result; \
AssertMacro((size) >= sizeof(Node)); /* need the tag, at least */ \
_result = (Node *) palloc0fast(size); \
_result->type = (tag); \
_result; \
})
構建一個Node節點,節點大小爲傳入的 DefElem 大小(8的倍數),type 爲T_Integer。