MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
|
Public 成员函数 | |
RC | handle_request (SQLStageEvent *event) |
Private 成员函数 | |
RC | create_logical_plan (SQLStageEvent *sql_event, std::unique_ptr< LogicalOperator > &logical_operator) |
根据SQL生成逻辑计划 更多... | |
RC | rewrite (std::unique_ptr< LogicalOperator > &logical_operator) |
重写逻辑计划 更多... | |
RC | optimize (std::unique_ptr< LogicalOperator > &logical_operator) |
优化逻辑计划 更多... | |
RC | generate_physical_plan (std::unique_ptr< LogicalOperator > &logical_operator, std::unique_ptr< PhysicalOperator > &physical_operator) |
根据逻辑计划生成物理计划 更多... | |
Private 属性 | |
LogicalPlanGenerator | logical_plan_generator_ |
根据SQL生成逻辑计划 | |
PhysicalPlanGenerator | physical_plan_generator_ |
根据逻辑计划生成物理计划 | |
Rewriter | rewriter_ |
逻辑计划改写 | |
|
private |
根据SQL生成逻辑计划
由于SQL语句种类比较多,并且SQL语句可能会有嵌套的情况,比如带有SQL子查询的语句,那就需要递归的创建逻辑计划。
sql_event | 包含SQL信息的事件 |
logical_operator | 生成的逻辑计划 |
|
private |
根据逻辑计划生成物理计划
生成的物理计划就可以直接让后面的执行器完全按照物理计划执行了。 物理计划与逻辑计划有些不同,逻辑计划描述要干什么,比如从某张表根据什么条件获取什么数据。 而物理计划描述怎么做,比如如何从某张表按照什么条件获取什么数据,是否使用索引,使用哪个索引等。
physical_operator | 生成的物理计划。通常是一个多叉树的形状,这里就拿着根节点就可以了。 |
|
private |
优化逻辑计划
当前什么都没做。可以增加每个逻辑计划的代价模型,然后根据代价模型进行优化。
logical_operator | 需要优化的逻辑计划 |
|
private |
重写逻辑计划
根据各种规则,对逻辑计划进行重写,比如消除多余的比较(1!=0)等。 规则改写也是一个递归的过程。
logical_operator | 要改写的逻辑计划 |