暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

openGauss 表达式计算初始化阶段

openGauss小助手 2021-10-24
234

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论