vibesql_executor/advanced_objects/
triggers.rs1use vibesql_ast::*;
4use vibesql_storage::Database;
5
6use crate::errors::ExecutorError;
7
8pub fn execute_create_trigger(
16 stmt: &CreateTriggerStmt,
17 db: &mut Database,
18) -> Result<(), ExecutorError> {
19 crate::TriggerExecutor::create_trigger(db, stmt).map(|_| ())
20}
21
22pub fn execute_alter_trigger(
24 stmt: &AlterTriggerStmt,
25 db: &mut Database,
26) -> Result<(), ExecutorError> {
27 use vibesql_ast::AlterTriggerAction;
28
29 let mut trigger = db
31 .catalog
32 .get_trigger(&stmt.trigger_name)
33 .ok_or_else(|| ExecutorError::TriggerNotFound(stmt.trigger_name.clone()))?
34 .clone();
35
36 match stmt.action {
38 AlterTriggerAction::Enable => {
39 trigger.enable();
40 }
41 AlterTriggerAction::Disable => {
42 trigger.disable();
43 }
44 }
45
46 db.catalog.update_trigger(trigger)?;
48 Ok(())
49}
50
51pub fn execute_drop_trigger(
53 stmt: &DropTriggerStmt,
54 db: &mut Database,
55) -> Result<(), ExecutorError> {
56 if stmt.if_exists && db.catalog.get_trigger(&stmt.trigger_name).is_none() {
59 return Ok(());
60 }
61 db.catalog.drop_trigger(&stmt.trigger_name)?;
62 Ok(())
63}