diff --git a/crates/pglt_statement_splitter/src/lib.rs b/crates/pglt_statement_splitter/src/lib.rs index 697102b3..b953b8c2 100644 --- a/crates/pglt_statement_splitter/src/lib.rs +++ b/crates/pglt_statement_splitter/src/lib.rs @@ -148,6 +148,23 @@ mod tests { .expect_statements(vec!["select case when select 2 then 1 else 0 end"]); } + #[test] + fn create_trigger() { + Tester::from("alter table appointment_status add constraint valid_key check (private.strip_special_chars(key) = key and length(key) > 0 and length(key) < 60); + +create trigger default_key before insert on appointment_type for each row when (new.key is null) execute procedure default_key (); + +create trigger default_key before insert on appointment_status for each row when (new.key is null) execute procedure default_key (); + +alter table deal_type add column key text not null; +") + .expect_statements(vec!["alter table appointment_status add constraint valid_key check (private.strip_special_chars(key) = key and length(key) > 0 and length(key) < 60);", + "create trigger default_key before insert on appointment_type for each row when (new.key is null) execute procedure default_key ();", + "create trigger default_key before insert on appointment_status for each row when (new.key is null) execute procedure default_key ();", + "alter table deal_type add column key text not null;", + ]); + } + #[test] #[timeout(1000)] fn simple_select() { diff --git a/crates/pglt_statement_splitter/src/parser/common.rs b/crates/pglt_statement_splitter/src/parser/common.rs index 58854612..10b7364d 100644 --- a/crates/pglt_statement_splitter/src/parser/common.rs +++ b/crates/pglt_statement_splitter/src/parser/common.rs @@ -147,6 +147,7 @@ pub(crate) fn unknown(p: &mut Parser, exclude: &[SyntaxKind]) { let prev = p.look_back().map(|t| t.kind); if [ // for create trigger + SyntaxKind::Before, SyntaxKind::After, // for create rule SyntaxKind::On,