Skip to content

Commit

Permalink
Fix building select plan order (#34)
Browse files Browse the repository at this point in the history
  • Loading branch information
lewiszlw authored Aug 17, 2023
1 parent 2074024 commit 574daee
Showing 1 changed file with 15 additions and 7 deletions.
22 changes: 15 additions & 7 deletions src/planner/plan_select.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,10 @@ use super::{logical_plan::LogicalPlan, Planner};

impl Planner {
pub fn plan_select(&mut self, stmt: SelectStatement) -> LogicalPlan {
// from table
let mut plan = self.plan_table_ref(stmt.from_table);

if stmt.limit.is_some() || stmt.offset.is_some() {
let mut limit_plan = self.plan_limit(&stmt.limit, &stmt.offset);
limit_plan.children.push(Arc::new(plan));
plan = limit_plan;
}

// filter
if stmt.where_clause.is_some() {
let mut filter_plan = LogicalPlan {
operator: LogicalOperator::new_filter_operator(stmt.where_clause.unwrap()),
Expand All @@ -29,11 +25,23 @@ impl Planner {
plan = filter_plan;
}

let plan = LogicalPlan {
// project
let mut plan = LogicalPlan {
operator: LogicalOperator::new_project_operator(stmt.select_list),
children: vec![Arc::new(plan)],
};

// TODO sort should be here
// order by clause may use computed column, so it should be after project
// for example, `select a+b from t order by a+b limit 10`

// limit
if stmt.limit.is_some() || stmt.offset.is_some() {
let mut limit_plan = self.plan_limit(&stmt.limit, &stmt.offset);
limit_plan.children.push(Arc::new(plan));
plan = limit_plan;
}

plan
}

Expand Down

0 comments on commit 574daee

Please sign in to comment.