PostgreSQL源码学习执行器#7,8

database

本节介绍ExecProcNodeFirst函数和ExecProcNode函数。

ExecProcNodeFirst函数

//src/backend/executor/execProcnode.c

/* 在调用相关节点方法之前执行一些一次性的检查 */

static TupleTableSlot *

ExecProcNodeFirst(PlanState *node)

{

/* 在第一次执行节点期间执行堆栈深度检查 */

check_stack_depth();

/* instrument内部包含了real的调用 */

if (node->instrument)

node->ExecProcNode = ExecProcNodeInstr;

else

node->ExecProcNode = node->ExecProcNodeReal;

return node->ExecProcNode(node);

}

ExecProcNode函数

//src/include/executor/executor.h

static inline TupleTableSlot *

ExecProcNode(PlanState *node)

{

if (node->chgParam != NULL) /* something changed? */

ExecReScan(node); /* let ReScan handle this */

return node->ExecProcNode(node);

}

以上是 PostgreSQL源码学习执行器#7,8 的全部内容, 来源链接: utcz.com/z/534160.html

回到顶部