makeDefElem函數筆記

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節點,節點defnamecreatedb, 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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章