use glaredb_error::Result;
use super::binder::bind_context::BindContext;
use super::binder::table_list::TableRef;
use super::operator::{LogicalNode, Node};
use crate::arrays::field::Field;
use crate::catalog::create::OnConflict;
use crate::explain::explainable::{EntryBuilder, ExplainConfig, ExplainEntry, Explainable};
use crate::expr::Expression;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct LogicalCreateSchema {
pub catalog: String,
pub name: String,
pub on_conflict: OnConflict,
}
impl Explainable for LogicalCreateSchema {
fn explain_entry(&self, conf: ExplainConfig) -> ExplainEntry {
EntryBuilder::new("CreateSchema", conf)
.with_value("catalog", &self.catalog)
.with_value("name", &self.name)
.build()
}
}
impl LogicalNode for Node<LogicalCreateSchema> {
fn name(&self) -> &'static str {
"CreateSchema"
}
fn get_output_table_refs(&self, _bind_context: &BindContext) -> Vec<TableRef> {
Vec::new()
}
fn for_each_expr<'a, F>(&self, _func: F) -> Result<()>
where
F: FnMut(&'a Expression) -> Result<()>,
{
Ok(())
}
fn for_each_expr_mut<'a, F>(&'a mut self, _func: F) -> Result<()>
where
F: FnMut(&'a mut Expression) -> Result<()>,
{
Ok(())
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct LogicalCreateTable {
pub catalog: String,
pub schema: String,
pub name: String,
pub columns: Vec<Field>,
pub on_conflict: OnConflict,
}
impl Explainable for LogicalCreateTable {
fn explain_entry(&self, conf: ExplainConfig) -> ExplainEntry {
EntryBuilder::new("CreateTable", conf)
.with_value("catalog", &self.catalog)
.with_value("schema", &self.schema)
.with_value("name", &self.name)
.build()
}
}
impl LogicalNode for Node<LogicalCreateTable> {
fn name(&self) -> &'static str {
"CreateTable"
}
fn get_output_table_refs(&self, _bind_context: &BindContext) -> Vec<TableRef> {
Vec::new()
}
fn for_each_expr<'a, F>(&'a self, _func: F) -> Result<()>
where
F: FnMut(&'a Expression) -> Result<()>,
{
Ok(())
}
fn for_each_expr_mut<'a, F>(&'a mut self, _func: F) -> Result<()>
where
F: FnMut(&'a mut Expression) -> Result<()>,
{
Ok(())
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct LogicalCreateView {
pub catalog: String,
pub schema: String,
pub name: String,
pub column_aliases: Option<Vec<String>>,
pub on_conflict: OnConflict,
pub query_string: String,
}
impl Explainable for LogicalCreateView {
fn explain_entry(&self, conf: ExplainConfig) -> ExplainEntry {
EntryBuilder::new("CreateView", conf)
.with_value("catalog", &self.catalog)
.with_value("schema", &self.schema)
.with_value("name", &self.name)
.build()
}
}
impl LogicalNode for Node<LogicalCreateView> {
fn name(&self) -> &'static str {
"CreateView"
}
fn get_output_table_refs(&self, _bind_context: &BindContext) -> Vec<TableRef> {
Vec::new()
}
fn for_each_expr<'a, F>(&'a self, _func: F) -> Result<()>
where
F: FnMut(&'a Expression) -> Result<()>,
{
Ok(())
}
fn for_each_expr_mut<'a, F>(&'a mut self, _func: F) -> Result<()>
where
F: FnMut(&'a mut Expression) -> Result<()>,
{
Ok(())
}
}