gluesql_core/store/
planner.rs1use {
2 super::Store,
3 crate::{
4 ast::Statement,
5 plan::{fetch_schema_map, plan_join, plan_primary_key, validate},
6 result::Result,
7 },
8 async_trait::async_trait,
9};
10
11#[async_trait]
12pub trait Planner: Store {
13 async fn plan(&self, statement: Statement) -> Result<Statement> {
14 let schema_map = fetch_schema_map(self, &statement).await?;
15 validate(&schema_map, &statement)?;
16
17 let statement = plan_primary_key(&schema_map, statement);
18 let statement = plan_join(&schema_map, statement);
19
20 Ok(statement)
21 }
22}