use crate::sql::parser::Statement;
use crate::storage::Database;
use anyhow::Result;
pub struct Optimizer;
#[derive(Debug, Clone)]
pub enum ExecutionStrategy {
SeqScan,
IndexScan(String), }
impl Optimizer {
pub fn plan_select(
db: &mut Database,
table_name: &str,
filter_col: Option<&str>,
) -> Result<ExecutionStrategy> {
if let Some(col) = filter_col {
let idx_key = format!("__index__:{}:{}", table_name, col);
if db.get(idx_key.as_bytes())?.is_some() {
return Ok(ExecutionStrategy::IndexScan(col.to_string()));
}
}
Ok(ExecutionStrategy::SeqScan)
}
pub fn optimize(_db: &mut Database, stmt: Statement) -> Statement {
stmt
}
}