use std::fmt::Display;
use std::fmt::Formatter;
use derive_visitor::Drive;
use derive_visitor::DriveMut;
use crate::ast::CreateOption;
use crate::ast::Identifier;
#[derive(Debug, Clone, PartialEq, Drive, DriveMut)]
pub struct CreateSequenceStmt {
pub create_option: CreateOption,
pub sequence: Identifier,
pub comment: Option<String>,
}
impl Display for CreateSequenceStmt {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
write!(f, "CREATE ")?;
if let CreateOption::CreateOrReplace = self.create_option {
write!(f, "OR REPLACE ")?;
}
write!(f, "SEQUENCE ")?;
if let CreateOption::CreateIfNotExists = self.create_option {
write!(f, "IF NOT EXISTS ")?;
}
write!(f, " {}", self.sequence)?;
if let Some(comment) = &self.comment {
write!(f, " COMMENT = '{}'", comment)?;
}
Ok(())
}
}
#[derive(Debug, Clone, PartialEq, Drive, DriveMut)]
pub struct DropSequenceStmt {
pub if_exists: bool,
pub sequence: Identifier,
}
impl Display for DropSequenceStmt {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
write!(f, "DROP SEQUENCE ")?;
if self.if_exists {
write!(f, "IF EXISTS ")?;
}
write!(f, " {}", self.sequence)?;
Ok(())
}
}