openGauss源码解析(146)

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

4. VecSubqueryScan算子

VecSubqueryScan算子将子计划作为扫描对象,实际执行中会转换为调用子节点计划,对应的代码源文件是vecsubqueryscan.cpp;VecSubqueryScan算子对应的主要数据结构是VecSubqueryScanState,继承于SubqueryScanState。包含的核心函数有:ExecInitVecSubqueryScan(初始化节点)、ExecVecSubqueryScan(执行节点)、ExecEndVecSubqueryScan(退出节点)、ExecReScanVecSubqueryScan(重置节点)。

ExecInitVecSubqueryScan函数是用于初始化VecSubqueryScan算子。主要执行流程是:首先初始化VecSubqueryScan执行算子,并为节点创建表达式上下文,接着初始化子查询计划,最后初始化元组和投影信息。

ExecVecSubqueryScan函数是VecSubqueryScan算子的主体函数。主要执行流程是:调用ExecVecScan执行算子,得到查询结果。

ExecReScanVecSubqueryScan函数用于重新执行扫描计划,通过调用ExecScanReScan函数重新扫描。

ExecEndVecSubqueryScan函数用于在执行结束后清理VecSubqueryScan算子占用的资源,通过调用ExecEndSubqueryScan函数进行清理。

5. VecForeignScan算子

VecForeignScan算子对应的代码源文件是“vecforeignscan.cpp”。VecForeignScan算子对应的主要数据结构是VecForeignScanState,继承于ForeignScanState。该算子包含的核心函数有:ExecInitVecForeignScan(初始化节点)、ExecVecForeignScan(执行节点)、ExecEndVecForeignScan(退出节点)、ExecReScanVecForeignScan(重置节点)。

ExecInitVecForeignScan函数是用于初始化VecForeignScan算子。主要执行流程如下。

(1) 创建VecForeignScanState执行节点。
(2) 设置表达式上下文。
(3) 调用ExecInitVecExpr函数依次为“ss.ps.targetlist”和“ss.ps.qual”初始化表达式。
(4) 调用ExecBuildVecProjectionInfo函数创建投影结构。

ExecVecForeignScan函数是VecForeignScan算子的主体函数,通过调用ExecVecScan执行算子,得到查询结果。

ExecReScanVecForeignScan函数用于重新执行扫描计划,通过调用ExecScanReScan函数实现重新扫描。

ExecEndVecForeignScan函数用于在执行结束后清理VecForeignScan算子占用的资源,通过调用MemoryContextDelete函数清除上下文和ExecEndForeignScan函数清除执行节点。

posted @ 2024-04-30 11:04  openGauss-bot  阅读(7)  评论(0编辑  收藏  举报