版权声明:转载可以,请发红包 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
节点,节点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。