openGauss源码解析(120)

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

10. WorkTableScan算子

WorkTableScan算子用于处理递归项,同RecursiveUnion算子紧密关联,对应的代码源文件是“nodeWorkTableScan.cpp”。WorkTableScan算子处理RecursiveUnion子节点中的工作表,提供了对缓存扫描的支持。算子对应的主要函数如表7-21所示。

表7-21 WorkTableScan算子主要函数

主要函数

说明

ExecInitWorkTableScan

初始化WorkTableScan状态节点

ExecWorkTableScan

迭代获取元组

ExecEndWorkTableScan

清理WorkTableScan状态节点

ExecResScanWorkTableScan

重置WorkTableScan状态节点

11. PartIterator算子

PartIterator算子用于支持分区wise join,从分区中迭代获取元组,对应的代码源文件是“nodePartIterator.cpp”。PartIterator算子通过执行子节点计划获取分区遍历获取元组。算子对应的主要函数如表7-22所示。

表7-22 ParIterator算子主要函数

主要函数

说明

ExecInitPartIteratorScan

初始化PartIteratorScan状态节点

ExecPartIteratorScan

迭代获取元组

ExecEndPartIteratorScan

清理PartIteratorScan状态节点

ExecResScanPartIteratorScan

重置PartIteratorScan状态节点

分区遍历关键数据结构代码如下:

typedef struct PartIterator {

Plan plan;

PartitionType partType; /* 分区类型 */

int itrs; /* 分区数量 */

ScanDirection direction;

PartIteratorParam* param;

int startPartitionId; /* 并行执行起始分区ID */

int endPartitionId; /* 并行执行分区结束ID */

} PartIterator;

typedef struct PartIteratorState {

PlanState ps; /* 状态节点类型 */

int currentItr; /* 当前迭代分区索引编号 */

} PartIteratorState;

ExecInitPartIteratorScan函数用于初始化PartIteratorScan状态节点(PartIteratorState),功能是初始化左子节点并设置初始迭代分区索引号。

ExecPartIteratorScan函数迭代输出元组。主要执行流程是:首先初始化分区索引号,执行左子节点获取元组,如果元组为空则获取下一个分区的元组。

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