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函数执行流程
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




