vibesql_executor/advanced_objects/
triggers.rs1use vibesql_ast::*;
4use vibesql_storage::Database;
5
6use crate::errors::ExecutorError;
7
8pub fn execute_create_trigger(
10 stmt: &CreateTriggerStmt,
11 db: &mut Database,
12) -> Result<(), ExecutorError> {
13 use vibesql_catalog::TriggerDefinition;
14
15 let trigger = TriggerDefinition::new(
16 stmt.trigger_name.clone(),
17 stmt.timing.clone(),
18 stmt.event.clone(),
19 stmt.table_name.clone(),
20 stmt.granularity.clone(),
21 stmt.when_condition.clone(),
22 stmt.triggered_action.clone(),
23 );
24
25 db.catalog.create_trigger(trigger)?;
26 Ok(())
27}
28
29pub fn execute_alter_trigger(
31 stmt: &AlterTriggerStmt,
32 db: &mut Database,
33) -> Result<(), ExecutorError> {
34 use vibesql_ast::AlterTriggerAction;
35
36 let mut trigger = db
38 .catalog
39 .get_trigger(&stmt.trigger_name)
40 .ok_or_else(|| ExecutorError::TriggerNotFound(stmt.trigger_name.clone()))?
41 .clone();
42
43 match stmt.action {
45 AlterTriggerAction::Enable => {
46 trigger.enable();
47 }
48 AlterTriggerAction::Disable => {
49 trigger.disable();
50 }
51 }
52
53 db.catalog.update_trigger(trigger)?;
55 Ok(())
56}
57
58pub fn execute_drop_trigger(
60 stmt: &DropTriggerStmt,
61 db: &mut Database,
62) -> Result<(), ExecutorError> {
63 db.catalog.drop_trigger(&stmt.trigger_name)?;
64 Ok(())
65}