glaredb_core 25.6.3

Core functionality for GlareDB
Documentation
use glaredb_error::Result;

use super::plan_copy::CopyPlanner;
use super::plan_create_table::CreateTablePlanner;
use super::plan_explain::ExplainPlanner;
use super::plan_insert::InsertPlanner;
use super::plan_query::QueryPlanner;
use crate::logical::binder::bind_attach::{BoundAttach, BoundDetach};
use crate::logical::binder::bind_context::BindContext;
use crate::logical::binder::bind_statement::BoundStatement;
use crate::logical::operator::LogicalOperator;

#[derive(Debug)]
pub struct StatementPlanner;

impl StatementPlanner {
    pub fn plan(
        &self,
        bind_context: &mut BindContext,
        statement: BoundStatement,
    ) -> Result<LogicalOperator> {
        match statement {
            BoundStatement::Query(query) => QueryPlanner.plan(bind_context, query),
            BoundStatement::SetVar(plan) => Ok(LogicalOperator::SetVar(plan)),
            BoundStatement::ShowVar(plan) => Ok(LogicalOperator::ShowVar(plan)),
            BoundStatement::ResetVar(plan) => Ok(LogicalOperator::ResetVar(plan)),
            BoundStatement::Attach(BoundAttach::Database(plan)) => {
                Ok(LogicalOperator::AttachDatabase(plan))
            }
            BoundStatement::Detach(BoundDetach::Database(plan)) => {
                Ok(LogicalOperator::DetachDatabase(plan))
            }
            BoundStatement::Drop(plan) => Ok(LogicalOperator::Drop(plan)),
            BoundStatement::Insert(insert) => InsertPlanner.plan(bind_context, insert),
            BoundStatement::CreateSchema(plan) => Ok(LogicalOperator::CreateSchema(plan)),
            BoundStatement::CreateTable(create) => CreateTablePlanner.plan(bind_context, create),
            BoundStatement::CreateView(create) => Ok(LogicalOperator::CreateView(create)),
            BoundStatement::Describe(plan) => Ok(LogicalOperator::Describe(plan)),
            BoundStatement::Explain(explain) => ExplainPlanner.plan(bind_context, explain),
            BoundStatement::CopyTo(copy_to) => CopyPlanner.plan(bind_context, copy_to),
            BoundStatement::Discard(discard) => Ok(LogicalOperator::Discard(discard)),
        }
    }
}