diff --git a/core/translate.rs b/core/translate.rs index 07c8ff0b9..398dfeba5 100644 --- a/core/translate.rs +++ b/core/translate.rs @@ -2,13 +2,20 @@ use std::cell::RefCell; use std::rc::Rc; use crate::pager::Pager; -use crate::schema::Schema; +use crate::schema::{Schema, Table}; use crate::sqlite3_ondisk::{DatabaseHeader, MIN_PAGE_CACHE_SIZE}; use crate::util::normalize_ident; use crate::vdbe::{AggFunc, Insn, Program, ProgramBuilder}; use anyhow::Result; use sqlite3_parser::ast; +struct Select<'a> { + columns: Vec, + column_info: Vec, + from: Option<&'a Table>, + limit: Option, +} + enum AggregationFunc { Avg, Count, @@ -48,14 +55,61 @@ pub fn translate( pager: Rc, ) -> Result { match stmt { - ast::Stmt::Select(select) => translate_select(schema, select), + ast::Stmt::Select(select) => { + let select = build_select(schema, select)?; + translate_select(schema, select) + } ast::Stmt::Pragma(name, body) => translate_pragma(&name, body, database_header, pager), _ => todo!(), } } +fn build_select(schema: &Schema, select: ast::Select) -> Result