openGauss源码解析(151)

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

7. VecSetOp算子

VecSetOp算子用于处理EXECEPT和INTERSECT集合操作。一般一个VecSetOp算子中只能处理两个集合之间的集合操作,对于多个集合之间的集合操作,需要多个SetOp实现。

VecSetOp算子对应的代码源文件是“vecsetop.cpp”。VecSetOp算子对应的主要数据结构是VecSetOpState,继承于SetOpState。相关代码如下:

typedef struct VecSetOpState : public SetOpState {

void* vecSetOpInfo;

} VecSetOpState;

VecSetOp算子中对应的核心函数有:ExecInitVecSetOp(初始化节点)、ExecVecSetOp(执行节点)、ExecEndVecSetOp(退出节点)、ExecReScanVecSetOp(重置节点)。

ExecInitVecSetOp函数用于初始化VecSetOp算子。主要执行流程如下。

(1) 创建并初始化VecSetOpState执行节点。
(2) 调用ExecInitResultTupleSlot函数分配存储投影结果的slot。
(3) 调用ExecInitnode函数初始化子节点。
(4) 调用ExecAssignResultTypeFromTL函数初始化结果扫描描述符。

ExecVecSetOp函数是VecSetOp算子的主体函数,通过执行VecSetOp算子状态机,产生resultBatch。

ExecEndVecSetOp函数用于清理VecSetOp算子执行过程中使用的资源。通过调用freeMemoryContext函数释放内存上下文,通过调用ExecClearTuple函数清理元组缓存,通过调用ExecEndNode函数清理执行节点。

ExecReScanVecSetOp函数用于重新执行扫描计划,通过调用ExecClearTuple函数清理元组结果缓存,通过调用ResetNecessary函数重置相应执行节点。

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