use crate::{
backend::QueryBuilder,
types::{DynIden, IntoIden, IntoTableRef, TableRef},
};
use super::traits::{QueryBuilderTrait, QueryStatementBuilder, QueryStatementWriter};
#[derive(Debug, Clone)]
pub struct DropTriggerStatement {
pub(crate) name: Option<DynIden>,
pub(crate) table: Option<TableRef>,
pub(crate) if_exists: bool,
pub(crate) cascade: bool,
pub(crate) restrict: bool,
}
impl DropTriggerStatement {
pub fn new() -> Self {
Self {
name: None,
table: None,
if_exists: false,
cascade: false,
restrict: false,
}
}
pub fn take(&mut self) -> Self {
Self {
name: self.name.take(),
table: self.table.take(),
if_exists: self.if_exists,
cascade: self.cascade,
restrict: self.restrict,
}
}
pub fn name<N>(&mut self, name: N) -> &mut Self
where
N: IntoIden,
{
self.name = Some(name.into_iden());
self
}
pub fn on_table<T>(&mut self, table: T) -> &mut Self
where
T: IntoTableRef,
{
self.table = Some(table.into_table_ref());
self
}
pub fn if_exists(&mut self) -> &mut Self {
self.if_exists = true;
self
}
pub fn cascade(&mut self) -> &mut Self {
self.cascade = true;
self.restrict = false;
self
}
pub fn restrict(&mut self) -> &mut Self {
self.restrict = true;
self.cascade = false;
self
}
}
impl Default for DropTriggerStatement {
fn default() -> Self {
Self::new()
}
}
impl QueryStatementBuilder for DropTriggerStatement {
fn build_any(&self, query_builder: &dyn QueryBuilderTrait) -> (String, crate::value::Values) {
use std::any::Any;
if let Some(builder) =
(query_builder as &dyn Any).downcast_ref::<crate::backend::PostgresQueryBuilder>()
{
return builder.build_drop_trigger(self);
}
if let Some(builder) =
(query_builder as &dyn Any).downcast_ref::<crate::backend::MySqlQueryBuilder>()
{
return builder.build_drop_trigger(self);
}
if let Some(builder) =
(query_builder as &dyn Any).downcast_ref::<crate::backend::SqliteQueryBuilder>()
{
return builder.build_drop_trigger(self);
}
panic!("Unsupported query builder type");
}
}
impl QueryStatementWriter for DropTriggerStatement {}