From f434b24e63e7bb000529236846350dbbd7a4f17e Mon Sep 17 00:00:00 2001 From: Jussi Saurio Date: Sun, 5 Jan 2025 13:51:34 +0200 Subject: [PATCH] Fix limbo/core to work with new boxed ast types --- core/lib.rs | 2 +- core/translate/delete.rs | 6 +++--- core/translate/insert.rs | 2 +- core/translate/mod.rs | 2 +- core/translate/planner.rs | 2 +- core/translate/select.rs | 4 ++-- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/core/lib.rs b/core/lib.rs index 4e6a59c1f..fd563cb19 100644 --- a/core/lib.rs +++ b/core/lib.rs @@ -304,7 +304,7 @@ impl Connection { Cmd::ExplainQueryPlan(stmt) => { match stmt { ast::Stmt::Select(select) => { - let mut plan = prepare_select_plan(&self.schema.borrow(), select)?; + let mut plan = prepare_select_plan(&self.schema.borrow(), *select)?; optimize_plan(&mut plan)?; println!("{}", plan); } diff --git a/core/translate/delete.rs b/core/translate/delete.rs index be7dd772a..dcaed53e6 100644 --- a/core/translate/delete.rs +++ b/core/translate/delete.rs @@ -15,7 +15,7 @@ pub fn translate_delete( schema: &Schema, tbl_name: &QualifiedName, where_clause: Option, - limit: Option, + limit: Option>, database_header: Rc>, connection: Weak, syms: &SymbolTable, @@ -29,7 +29,7 @@ pub fn prepare_delete_plan( schema: &Schema, tbl_name: &QualifiedName, where_clause: Option, - limit: Option, + limit: Option>, ) -> Result { let table = match schema.get_table(tbl_name.name.0.as_str()) { Some(table) => table, @@ -48,7 +48,7 @@ pub fn prepare_delete_plan( let resolved_where_clauses = parse_where(where_clause, &referenced_tables)?; // Parse the LIMIT clause - let resolved_limit = limit.and_then(parse_limit); + let resolved_limit = limit.and_then(|l| parse_limit(*l)); let plan = DeletePlan { source: SourceOperator::Scan { diff --git a/core/translate/insert.rs b/core/translate/insert.rs index 3f8378ead..3213e89cd 100644 --- a/core/translate/insert.rs +++ b/core/translate/insert.rs @@ -70,7 +70,7 @@ pub fn translate_insert( Table::Pseudo(_) => todo!(), }; let values = match body { - InsertBody::Select(select, None) => match &select.body.select { + InsertBody::Select(select, None) => match &select.body.select.deref() { sqlite3_parser::ast::OneSelect::Values(values) => values, _ => todo!(), }, diff --git a/core/translate/mod.rs b/core/translate/mod.rs index 4c956a894..f8adb0e09 100644 --- a/core/translate/mod.rs +++ b/core/translate/mod.rs @@ -104,7 +104,7 @@ pub fn translate( ast::Stmt::Rollback { .. } => bail_parse_error!("ROLLBACK not supported yet"), ast::Stmt::Savepoint(_) => bail_parse_error!("SAVEPOINT not supported yet"), ast::Stmt::Select(select) => { - translate_select(schema, select, database_header, connection, syms) + translate_select(schema, *select, database_header, connection, syms) } ast::Stmt::Update { .. } => bail_parse_error!("UPDATE not supported yet"), ast::Stmt::Vacuum(_, _) => bail_parse_error!("VACUUM not supported yet"), diff --git a/core/translate/planner.rs b/core/translate/planner.rs index dc2843b6f..1f0bf687b 100644 --- a/core/translate/planner.rs +++ b/core/translate/planner.rs @@ -289,7 +289,7 @@ fn parse_from_clause_table( )) } ast::SelectTable::Select(subselect, maybe_alias) => { - let Plan::Select(mut subplan) = prepare_select_plan(schema, subselect)? else { + let Plan::Select(mut subplan) = prepare_select_plan(schema, *subselect)? else { unreachable!(); }; subplan.query_type = SelectQueryType::Subquery { diff --git a/core/translate/select.rs b/core/translate/select.rs index 173ca544b..44dcb5288 100644 --- a/core/translate/select.rs +++ b/core/translate/select.rs @@ -31,7 +31,7 @@ pub fn translate_select( } pub fn prepare_select_plan(schema: &Schema, select: ast::Select) -> Result { - match select.body.select { + match *select.body.select { ast::OneSelect::Select { mut columns, from, @@ -273,7 +273,7 @@ pub fn prepare_select_plan(schema: &Schema, select: ast::Select) -> Result } // Parse the LIMIT clause - plan.limit = select.limit.and_then(parse_limit); + plan.limit = select.limit.and_then(|l| parse_limit(*l)); // Return the unoptimized query plan Ok(Plan::Select(plan))