openGauss源码解析(125)

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

6. Unique算子

Unique算子用于对子计划返回的元组去重,对应的代码源文件是“nodeUnique.cpp”。Unique算子的去重逻辑建立在子计划返回的元组已经按照属性排序之上,如果不重复则输出,并放入缓存元组中(用作下一次迭代去重判断),否则继续从子计划中获取元组。

7. hash算子

hash算子用于辅助hash连接算子,对应的代码源文件是“nodeHash.cpp”。hash算子作为辅助算子,仅用来初始化hash状态节点,并提供哈希表创建接口(供hash join算子调用),不迭代输出元组(hash join算子负责输出)。

8. SetOp算子

SetOp算子用于处理Execept与Intersect两种集合操作(INTERSECT、INTERSECT ALL、EXCEPT、EXCECPT ALL),对应的代码源文件是“nodeSetOp.cpp”。Setop算子只有一个左子节点作为输入。SetOp算子在处理集合操作时有2种策略:排序和哈希。哈希模式(SETOP_HASHED)下处理非有序元组集合,而排序模式(SETOP_SORTED)下处理有序元组集合。

9. WindowAgg算子

WindowAgg算子用于处理元组窗口聚合,对应的代码源文件是“nodeWindAgg.cpp”。WindowAgg算子同Agg算子实现的功能类似,实现的模式也类似,主要的差异是窗口聚合处理的元组限定于同一个划分内(窗口),而Agg算子处理的元组是“整个表”(GROUP BY划分)。

10. LockRows算子

LockRows算子提供行级锁,用于SQL语句包含“FOR UPDATE”(排他锁)或“FOR SHARE”(共享锁)时,对元组加锁。对应的源文件是nodeLockRows.cpp。LockRows算子的执行逻辑是从子节点获取元组,然后尝试对元组加锁;如果针对UPDATE操作,需要重新检查子查询(执行EvalPlanQualBegin),并对子查询获得的元组过滤检查,把满足过滤条件的元组返回。

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