LAB 4 执行器实验文档
实验概述
本次实验主要关注于 SQL 执行流程,重点为 join 算子的实现。
实验任务
- 完成 AndConditionNode 和 OrConditionNode 的构建过程。
- 实现 JoinNode 的构建和执行过程。
相关模块
- optim 模块:负责新建执行算子节点。
- join_node 模块:定义了 join 算子的执行过程。
基础功能实现顺序
- optim/optim.cpp: 实现 AndConditionNode 和 OrConditionNode 的 visit 函数。
- optim/optim.cpp: 实现 JoinConditionNode 的 visit 函数。
- optim/optim.cpp: 在 Select 的 visit 函数中添加连接算子的部分。
- oper/join_node.cpp: 实现 Next 函数,进行连接运算。
可选高级功能
- 实现多种 join 算法(1分):至少实现三种不同的连接算法,如 Nested Loop Join, Sort Merge Join, Hash Join,设计测例比较不同算法的效率(仅要求2表Join的比较,要求涉及测例中join双方涉及条目数量有数量级差异的多组测试)。
- 基于外存的 join 算子(1分):至少实现一种外存算法,如外存 Hash、外存 Sort Merge 等。注意外存算法同样需要进行页式管理,设计的测例要求中间结果超过一个页面存储容量,同时要在报告中写明中间结果占用页面的回收机制。
- 实现聚合算子(1分):实现 SUM, AVG, MIN, MAX, COUNT 算子以及配套的GROUP BY算子,并设计测例验证正确性。其中测例中GROUP BY算子要求至少达到3个分组,其中至少有1个分组涉及的数据条目超过2条。
高级功能满分 3 分。
实现要点
对于多个 AND 或 OR 连接的条件,解析器会将条件解析为左深树,即所有 AND 结点的右孩子均为比较条件或连接条件,不会是其他 AND OR 条件。
所有 visit 函数必须具有返回值,即必须以 return 语句结尾。如不需要返回值可返回 nullptr,没有返回值可能出现 Segmentation fault。
实现 visit 函数时可参考 optim 中其他节点 visit 函数的代码。
使用并查集维护表的连接信息,并查集实现代码位于 utils/uf_set.h 文件。
截止时间
2023 年 5 月 7 日(第十一周周日)晚 23:59 分。