use super::naming::{function_name, NEEDS_BACKFILL_COLUMN};
use super::{function, Trigger};
use crate::database::versions::quote::quote_ident;
impl Trigger<'_> {
pub fn install(&self) -> Vec<String> {
let table = quote_ident(self.table);
let name = quote_ident(&function_name(self.table, self.physical_column));
vec![
format!(
"ALTER TABLE {table} ADD COLUMN IF NOT EXISTS {} BOOLEAN DEFAULT true",
quote_ident(NEEDS_BACKFILL_COLUMN)
),
function::function(self),
format!(
"CREATE OR REPLACE TRIGGER {name}\n \
BEFORE INSERT OR UPDATE ON {table}\n \
FOR EACH ROW EXECUTE PROCEDURE {name}()"
),
]
}
pub fn remove(&self) -> Vec<String> {
let name = quote_ident(&function_name(self.table, self.physical_column));
vec![
format!(
"DROP TRIGGER IF EXISTS {name} ON {}",
quote_ident(self.table)
),
format!("DROP FUNCTION IF EXISTS {name}()"),
]
}
}
pub fn drop_marker(table: &str) -> String {
format!(
"ALTER TABLE {} DROP COLUMN IF EXISTS {}",
quote_ident(table),
quote_ident(NEEDS_BACKFILL_COLUMN)
)
}