use {
super::Store,
crate::{
plan::StatementPlan,
planner::{
fetch_schema_map, plan_aggregate, plan_hash_join, plan_primary_key, plan_schemaless,
validate,
},
result::Result,
},
};
pub trait Planner: Store {
fn plan(&self, statement: StatementPlan) -> Result<StatementPlan> {
let schema_map = fetch_schema_map(self, &statement)?;
validate(&schema_map, &statement)?;
let statement = plan_schemaless(&schema_map, statement)?;
let statement = plan_primary_key(&schema_map, statement);
let statement = plan_hash_join(&schema_map, statement);
let statement = plan_aggregate(statement);
Ok(statement)
}
}