这篇文章主要介绍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如何构建表达式解析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注云技术行业资讯频道!
相关推荐: 怎么解决Oracle报错ORA-01194、ORA-01110问题
这篇文章主要介绍“怎么解决Oracle报错ORA-01194、ORA-01110问题”,在日常操作中,相信很多人在怎么解决Oracle报错ORA-01194、ORA-01110问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎…