From c3df43a7ec2bb8038e8a14c1466c4fa1cd74528b Mon Sep 17 00:00:00 2001 From: Julian Date: Sat, 12 Apr 2025 15:41:41 +0200 Subject: [PATCH 1/2] fix: parse unions --- crates/pgt_statement_splitter/src/parser.rs | 2 ++ crates/pgt_statement_splitter/src/parser/common.rs | 6 ++++++ .../pgt_statement_splitter/tests/data/simple_union__1.sql | 1 + 3 files changed, 9 insertions(+) create mode 100644 crates/pgt_statement_splitter/tests/data/simple_union__1.sql diff --git a/crates/pgt_statement_splitter/src/parser.rs b/crates/pgt_statement_splitter/src/parser.rs index 4cdf1fc6..05de8cb0 100644 --- a/crates/pgt_statement_splitter/src/parser.rs +++ b/crates/pgt_statement_splitter/src/parser.rs @@ -147,6 +147,7 @@ impl Parser { } /// Look ahead to the next relevant token + /// Returns `None` if we are already at the last relevant token fn look_ahead(&self) -> Option<&Token> { // we need to look ahead to the next relevant token let mut look_ahead_pos = self.next_pos + 1; @@ -161,6 +162,7 @@ impl Parser { } } + /// Returns `None` if there are no previous relevant tokens fn look_back(&self) -> Option<&Token> { // we need to look back to the last relevant token let mut look_back_pos = self.next_pos - 1; diff --git a/crates/pgt_statement_splitter/src/parser/common.rs b/crates/pgt_statement_splitter/src/parser/common.rs index af3dc6cc..d145018d 100644 --- a/crates/pgt_statement_splitter/src/parser/common.rs +++ b/crates/pgt_statement_splitter/src/parser/common.rs @@ -145,6 +145,12 @@ pub(crate) fn unknown(p: &mut Parser, exclude: &[SyntaxKind]) { SyntaxKind::Also, // for create rule SyntaxKind::Instead, + // for UNION + SyntaxKind::Union, + // for UNION ALL + SyntaxKind::All, + // for UNION ... EXCEPT + SyntaxKind::Except, ] .iter() .all(|x| Some(x) != prev.as_ref()) diff --git a/crates/pgt_statement_splitter/tests/data/simple_union__1.sql b/crates/pgt_statement_splitter/tests/data/simple_union__1.sql new file mode 100644 index 00000000..c3e185d2 --- /dev/null +++ b/crates/pgt_statement_splitter/tests/data/simple_union__1.sql @@ -0,0 +1 @@ +select 1 union all select 2; \ No newline at end of file From 5dbcfcd07a376f8ecd3b111bdcacf8f38f7b082a Mon Sep 17 00:00:00 2001 From: Julian Date: Sat, 12 Apr 2025 15:42:33 +0200 Subject: [PATCH 2/2] more --- .../pgt_statement_splitter/tests/data/simple_union__1.sql | 1 - .../pgt_statement_splitter/tests/data/simple_union__4.sql | 7 +++++++ 2 files changed, 7 insertions(+), 1 deletion(-) delete mode 100644 crates/pgt_statement_splitter/tests/data/simple_union__1.sql create mode 100644 crates/pgt_statement_splitter/tests/data/simple_union__4.sql diff --git a/crates/pgt_statement_splitter/tests/data/simple_union__1.sql b/crates/pgt_statement_splitter/tests/data/simple_union__1.sql deleted file mode 100644 index c3e185d2..00000000 --- a/crates/pgt_statement_splitter/tests/data/simple_union__1.sql +++ /dev/null @@ -1 +0,0 @@ -select 1 union all select 2; \ No newline at end of file diff --git a/crates/pgt_statement_splitter/tests/data/simple_union__4.sql b/crates/pgt_statement_splitter/tests/data/simple_union__4.sql new file mode 100644 index 00000000..100b59ea --- /dev/null +++ b/crates/pgt_statement_splitter/tests/data/simple_union__4.sql @@ -0,0 +1,7 @@ +select 1 union all select 2; + +select 1 union select 2; + +select 1 union select 2 except select 3; + +select 1 union all select 2 except select 3; \ No newline at end of file