Skip to main content

gluesql_core/store/
planner.rs

1use {
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}