openGauss源码解析(129)

openGauss源码解析:执行器解析(22)

7.4.1 初始化阶段

ExecInitExpr函数的作用是在执行的初始化阶段,准备要执行的表达式树。根据传入的表达式node tree,来创建并返回ExprState tree。在真正的执行阶段会根据ExprState tree中记录的处理函数,递归地执行每个节点。ExecInitExpr函数的核心代码如下:

if (node == NULL) { /* 判断输入是否为空 */

gstrace_exit(GS_TRC_ID_ExecInitExpr);

return NULL;}

switch (nodeTag(node)) { /* 根据节点类型初始化节点内容 */

case T_Var:

case T_Const:

case T_Param:

……

case T_CaseTestExpr:

case T_Aggref:

……

case T_CurrentOfExpr:

case T_TargetEntry:

case T_List:

case T_Rownum:

default:…… }

return state; /* 返回表达式节点树 */

ExecInitExpr函数主要执行流程如下。

(1) 判断输入的node节点是否为空,若为空,则直接返回NULL,表示没有表达式限制。
(2) 根据输入的node节点的类型初始化变量evalfunc即node节点对应的执行函数,若节点存在参数或者表达式,则递归调用ExecInitExpr函数,最后生成ExprState tree。
(3) 返回ExprState tree,在执行表达式的时候会根据ExprState tree来递归执行。

ExecInitExpr函数流程如图7-12所示。

图7-12 ExecInitExpr函数执行流程

posted @ 2024-04-30 10:50  openGauss-bot  阅读(5)  评论(0)    收藏  举报