基础功能
Note
实验开始前请先更新实验框架
本次实验的目标比较明确,每次任务实现一个算子的 Next 函数,正确实现后便可通过该算子对应的测试。因此本次实验不再给出详细的实验步骤,你只需按照实验任务说明完成相应的算子即可。
基础功能中所有算子仅要求在内存中实现即可,如果你对外存算子的实现感兴趣,可以参考本次实验的高级功能。
任务 1:Limit 算子(3 分)
Limit 算子是本次实验最基础的一个任务,算子本身的实现非常简单,希望你通过这个任务熟悉实验框架中火山模型的运作流程。
你需要补充 executors/limit_executor.cpp
中的 Next 函数,实现过程中你可能会用到对应的 LimitOperator 中的成员变量。你也可以为 LimitExecutor 增加新的成员变量来存储信息。
完成后你将通过 10-limit.test
测例。需要注意的是,为确保 limit 结果的唯一性,在该测例中使用了 order by 语句,而排序算子的实现是任务 2 的内容。但是该测例中所有排序均与插入顺序一致,因此只要你在 lab 1 中的实现可以保证读取顺序与插入顺序保持一致,便可以通过本测例。如果你的实现不能保证这一点,你可以在完成任务 2 后再来进行本测例的测试。
任务 2:排序算子(4 分)
你需要补充 executors/orderby_executor.cpp
中的 Next 函数,与 Limit 算子类似,你可能会使用到 OrderByOperator 中的成员变量,从中获取排序的列以及排序的类型(升序还是降序),实现过程中可以使用 C++ 标准库的 sort 函数。
正确实现后将通过 20-sort.test
测例。
任务 3:嵌套循环连接算子(4 分)
你需要补充 executors/nested_loop_join_executor.cpp
中的 Next 函数,从 NestedLoopJoinOperator 中获取连接条件,本次实验中仅要求实现内连接,不要求实现外连接。
正确实现后将通过 30-nested-loop-join.test
测例。
任务 4:归并连接算子(4 分)
你需要补充 executors/merge_join_executor.cpp
中的 Next 函数,从 MergeJoinOperator 中获取连接条件,本次实验中仅要求实现内连接,不要求实现外连接。注意可能需要对 join 两侧的表存在重复值的情况特殊处理。
在查询计划生成时,已对归并连接的两个子节点添加了 OrderBy 节点进行排序操作,你在实现归并连接时无需再进行排序。
正确实现后将通过 40-merge-join.test
测例。
报告提交要求
本次实验的代码补充位置清晰,请在实验报告中粘贴你的代码,并对代码辅以必要的注释或文字解释。
报告要求
实验报告的通用要求请查看实验提交要求中的实验报告部分。
本次实验的代码补充位置清晰,请在实验报告中分别粘贴四次任务的实现代码,并对代码辅以必要的注释或文字解释,描述每个算子的运行流程。