use crate::common::{ColumnDefinition, FQName, Identifier, WithItem};
use itertools::Itertools;
use std::fmt::{Display, Formatter};
#[derive(PartialEq, Debug, Clone)]
pub struct AlterTable {
pub name: FQName,
pub operation: AlterTableOperation,
}
#[derive(PartialEq, Debug, Clone)]
pub enum AlterTableOperation {
Add(Vec<ColumnDefinition>),
DropColumns(Vec<Identifier>),
DropCompactStorage,
Rename((Identifier, Identifier)),
With(Vec<WithItem>),
}
impl Display for AlterTableOperation {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self {
AlterTableOperation::Add(columns) => write!(
f,
"ADD {}",
columns.iter().map(|x| x.to_string()).join(", ")
),
AlterTableOperation::DropColumns(columns) => write!(
f,
"DROP {}",
columns.iter().map(|c| c.to_string()).join(", ")
),
AlterTableOperation::DropCompactStorage => write!(f, "DROP COMPACT STORAGE"),
AlterTableOperation::Rename((from, to)) => write!(f, "RENAME {} TO {}", from, to),
AlterTableOperation::With(with_element) => write!(
f,
"WITH {}",
with_element.iter().map(|x| x.to_string()).join(" AND ")
),
}
}
}