gluesql_core/store/
planner.rs1use {
2 super::Store,
3 crate::{
4 plan::StatementPlan,
5 planner::{
6 fetch_schema_map, plan_aggregate, plan_hash_join, plan_primary_key, plan_schemaless,
7 validate,
8 },
9 result::Result,
10 },
11};
12
13pub trait Planner: Store {
14 fn plan(&self, statement: StatementPlan) -> Result<StatementPlan> {
15 let schema_map = fetch_schema_map(self, &statement)?;
16 validate(&schema_map, &statement)?;
17
18 let statement = plan_schemaless(&schema_map, statement)?;
19 let statement = plan_primary_key(&schema_map, statement);
20 let statement = plan_hash_join(&schema_map, statement);
21 let statement = plan_aggregate(statement);
22
23 Ok(statement)
24 }
25}