openGauss源码解析(121)

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

7.3.3 物化算子

物化算子用于把元组缓存起来供后续使用。物化算子有多种类型,将介绍部分物化算子。如表7-23所示。

表7-23 物化算子列表

算子名称

说明

Material算子

用于缓存子节点执行结果

Sort算子

用于元组排序(查询包含ORDER BY)

Limit算子

用于限定获取元组数量(查询包含LIMIT/OFFSET子句)

Group算子

用于处理ORDER BY子句

Agg算子

用于执行含有聚集函数的操作

Unique算子

用于对子计划返回的元组去重

hash算子

提供哈希表创建接口

Setop算子

处理Execept与Intersect两种集合操作

WindowAgg算子

处理元组窗口聚合

LockRows算子

用于处理子句包含“FOR UPDATE/FOR SHARE”

1. Material算子

Material算子用于缓存子节点执行结果,对应的代码源文件是“nodeMaterial.cpp”。Material算子使用函数tuplestorestate缓存迭代输出的元组。算子对应的主要函数如表7-24所示。

表7-24 Material算子主要函数

主要函数

说明

ExecInitMaterial

初始化Material状态节点

ExecMaterial

迭代获取元组

ExecEndMaterial

清理Material状态节点

ExecResScanMaterial

重置Material状态节点

ExecInitMaterial函数用于初始化Material状态节点,并初始化左子节点。

ExecMaterial函数用于迭代获取元组。根据计划选择ExecMaterialOne函数和ExecMaterialAll函数输出元组:ExecMaterialOne函数从子计划中迭代获取一个元组并放入tuplestorestate对象中;ExecMaterialAll函数从子计划中迭代获取所有的元组并存储在tuplestorestate对象中。

ExecEndMaterial函数是清理函数,主要清理元组缓存。

posted @ 2024-04-30 10:50  openGauss-bot  阅读(20)  评论(0)    收藏  举报