diff --git a/crates/pglt_statement_splitter/src/lib.rs b/crates/pglt_statement_splitter/src/lib.rs index 57744cdf..7d74db03 100644 --- a/crates/pglt_statement_splitter/src/lib.rs +++ b/crates/pglt_statement_splitter/src/lib.rs @@ -165,6 +165,12 @@ alter table deal_type add column key text not null; ]); } + #[test] + fn policy() { + Tester::from("create policy employee_tokenauthed_select on provider_template_approval for select to authenticated, tokenauthed using ( select true );") + .expect_statements(vec!["create policy employee_tokenauthed_select on provider_template_approval for select to authenticated, tokenauthed using ( select true );"]); + } + #[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 1bb3283b..f156be0c 100644 --- a/crates/pglt_statement_splitter/src/parser/common.rs +++ b/crates/pglt_statement_splitter/src/parser/common.rs @@ -126,6 +126,8 @@ pub(crate) fn unknown(p: &mut Parser, exclude: &[SyntaxKind]) { Some(SyntaxKind::Select) => { let prev = p.look_back().map(|t| t.kind); if [ + // for policies, with for select + SyntaxKind::For, // for create view / table as SyntaxKind::As, // for create rule @@ -149,6 +151,8 @@ pub(crate) fn unknown(p: &mut Parser, exclude: &[SyntaxKind]) { // for create trigger SyntaxKind::Before, SyntaxKind::After, + // for policies, e.g. for insert + SyntaxKind::For, // e.g. on insert or delete SyntaxKind::Or, // for create rule