use vibesql_ast::*;
use vibesql_storage::Database;
use crate::errors::ExecutorError;
pub fn execute_create_trigger(
stmt: &CreateTriggerStmt,
db: &mut Database,
) -> Result<(), ExecutorError> {
crate::TriggerExecutor::create_trigger(db, stmt).map(|_| ())
}
pub fn execute_alter_trigger(
stmt: &AlterTriggerStmt,
db: &mut Database,
) -> Result<(), ExecutorError> {
use vibesql_ast::AlterTriggerAction;
let mut trigger = db
.catalog
.get_trigger(&stmt.trigger_name)
.ok_or_else(|| ExecutorError::TriggerNotFound(stmt.trigger_name.clone()))?
.clone();
match stmt.action {
AlterTriggerAction::Enable => {
trigger.enable();
}
AlterTriggerAction::Disable => {
trigger.disable();
}
}
db.catalog.update_trigger(trigger)?;
Ok(())
}
pub fn execute_drop_trigger(
stmt: &DropTriggerStmt,
db: &mut Database,
) -> Result<(), ExecutorError> {
if stmt.if_exists && db.catalog.get_trigger(&stmt.trigger_name).is_none() {
return Ok(());
}
db.catalog.drop_trigger(&stmt.trigger_name)?;
Ok(())
}