这篇文章主要介绍PostgreSQL如何构建表达式解析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!EEO_XXX宏定义
opcode分发器宏定义ExprState
解析表达式中运行期状态节点ExprEvalStep
表达式解析步骤结构体ExprEvalOp
ExprEvalSteps的鉴频器,定义哪个操作将被执行并且联合体ExprEvalStep->d中的哪个struct将被使用.ExecInitIndexScan
初始化Index Scan运行期状态信息,调用ExecAssignScanProjectionInfo->…->ExecBuildProjectionInfo函数构建投影信息.ExecBuildProjectionInfo
为给定的econtext中的tlist构建ProjectionInfo,并把结果存储在tuple slot中.(调用者必须确保元组slot与此tlist匹配)
其主要逻辑是:
1.初始化
2.如需要,插入EEOP*_FETCHSOME步骤(调用ExecInitExprSlots)
3.遍历targetList,处理targetList(目标列)中的每一个列
3.1.对于”安全”Var则只需要生成EEOP_ASSIGN*_VAR步骤
3.2对于非”安全”VAr,使用常规办法处理列表达式,调用ExecInitExprRec函数处理,并通过ExprEvalPushStep压步骤
4.压入EEOP_DONE步骤测试脚本调用栈执行跟踪,进入函数ExecBuildProjectionInfo1.初始化查看相关变量目标列链表第一个元素是1+id,第二个元素是c22.如需要,插入EEOP_*_FETCHSOME步骤(调用ExecInitExprSlots)第一个步骤,opcode = 3,即EEOP_SCAN_FETCHSOME3.遍历targetList,处理targetList(目标列)中的每一个列
3.1.对于”安全”Var则只需要生成EEOPASSIGN*_VAR步骤
3.2.对于非”安全”VAr,使用常规办法处理列表达式,调用ExecInitExprRec函数处理,并通过ExprEvalPushStep压步骤进入ExecInitExprRec,Node节点为OpExpr,执行免费云主机域名ExprEvalPushStep压入步骤中ExecInitExprRec调用完毕,增加了2个步骤,分别是:
1.opcode = 6,即EEOP_SCAN_VAR
2.opcode = 18,即EEOP_FUNCEXPR_STRICT压入对应该表达式列的编号,opcode = 14,即EEOP_ASSIGN_TMP继续处理下一个列,这是一个”安全”列,压入EEOP_ASSIGN_SCAN_VAR步骤4.压入EEOP_DONE步骤结束调用以上是“PostgreSQL如何构建表达式解析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注百云行业资讯频道!
相关推荐: 怎么使用PostgreSQL中的lightweight locks.
这篇文章主要介绍“怎么使用PostgreSQL中的lightweight locks.”,在日常操作中,相信很多人在怎么使用PostgreSQL中的lightweight locks.问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。