makeDefElem函数笔记

版权声明:转载可以,请发红包 https://blog.csdn.net/akakakak250/article/details/78356224
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。

猜你喜欢

转载自blog.csdn.net/akakakak250/article/details/78356224