gluesql_core/store/
planner.rs

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