From 5fc830eb7cb27254d21690f56218f9e210857989 Mon Sep 17 00:00:00 2001 From: psteinroe Date: Fri, 2 May 2025 19:07:49 +0200 Subject: [PATCH] fix: properly parse trigger with instead of --- crates/pgt_statement_splitter/src/lib.rs | 16 ++++++++++++++++ .../pgt_statement_splitter/src/parser/common.rs | 2 ++ 2 files changed, 18 insertions(+) diff --git a/crates/pgt_statement_splitter/src/lib.rs b/crates/pgt_statement_splitter/src/lib.rs index e44f20f1..e43a1095 100644 --- a/crates/pgt_statement_splitter/src/lib.rs +++ b/crates/pgt_statement_splitter/src/lib.rs @@ -180,6 +180,22 @@ mod tests { Tester::from("/* this is a test */\nselect 1").expect_statements(vec!["select 1"]); } + #[test] + fn trigger_instead_of() { + Tester::from( + "CREATE OR REPLACE TRIGGER my_trigger + INSTEAD OF INSERT ON my_table + FOR EACH ROW + EXECUTE FUNCTION my_table_trigger_fn();", + ) + .expect_statements(vec![ + "CREATE OR REPLACE TRIGGER my_trigger + INSTEAD OF INSERT ON my_table + FOR EACH ROW + EXECUTE FUNCTION my_table_trigger_fn();", + ]); + } + #[test] fn with_check() { Tester::from("create policy employee_insert on journey_execution for insert to authenticated with check ((select private.organisation_id()) = organisation_id);") diff --git a/crates/pgt_statement_splitter/src/parser/common.rs b/crates/pgt_statement_splitter/src/parser/common.rs index d5398016..a5d68df1 100644 --- a/crates/pgt_statement_splitter/src/parser/common.rs +++ b/crates/pgt_statement_splitter/src/parser/common.rs @@ -236,6 +236,8 @@ pub(crate) fn unknown(p: &mut Parser, exclude: &[SyntaxKind]) { SyntaxKind::For, // e.g. on insert or delete SyntaxKind::Or, + // e.g. INSTEAD OF INSERT + SyntaxKind::Of, // for create rule SyntaxKind::On, // for create rule