This is an automated email from the ASF dual-hosted git repository.
iffyio pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion-sqlparser-rs.git
The following commit(s) were added to refs/heads/main by this push:
new 45420ced Fix: Snowflake ALTER SESSION cannot be followed by other
statements. (#1786)
45420ced is described below
commit 45420cedd60f64769a8fe9c8f960b9af4e0091fa
Author: Roman Borschel <[email protected]>
AuthorDate: Mon Mar 31 18:09:58 2025 +0200
Fix: Snowflake ALTER SESSION cannot be followed by other statements. (#1786)
Co-authored-by: Roman Borschel <[email protected]>
---
src/dialect/snowflake.rs | 15 +++++++++------
tests/sqlparser_snowflake.rs | 11 +++++++++++
2 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/src/dialect/snowflake.rs b/src/dialect/snowflake.rs
index 2b04f9e9..d1a696a0 100644
--- a/src/dialect/snowflake.rs
+++ b/src/dialect/snowflake.rs
@@ -1013,9 +1013,15 @@ fn parse_session_options(
let mut options: Vec<KeyValueOption> = Vec::new();
let empty = String::new;
loop {
- match parser.next_token().token {
- Token::Comma => continue,
+ let next_token = parser.peek_token();
+ match next_token.token {
+ Token::SemiColon | Token::EOF => break,
+ Token::Comma => {
+ parser.advance_token();
+ continue;
+ }
Token::Word(key) => {
+ parser.advance_token();
if set {
let option = parse_option(parser, key)?;
options.push(option);
@@ -1028,10 +1034,7 @@ fn parse_session_options(
}
}
_ => {
- if parser.peek_token().token == Token::EOF {
- break;
- }
- return parser.expected("another option", parser.peek_token());
+ return parser.expected("another option or end of statement",
next_token);
}
}
}
diff --git a/tests/sqlparser_snowflake.rs b/tests/sqlparser_snowflake.rs
index f37b657e..097af346 100644
--- a/tests/sqlparser_snowflake.rs
+++ b/tests/sqlparser_snowflake.rs
@@ -3505,3 +3505,14 @@ fn test_alter_session() {
);
snowflake().one_statement_parses_to("ALTER SESSION UNSET a\nB", "ALTER
SESSION UNSET a, B");
}
+
+#[test]
+fn test_alter_session_followed_by_statement() {
+ let stmts = snowflake()
+ .parse_sql_statements("ALTER SESSION SET QUERY_TAG='hello'; SELECT 42")
+ .unwrap();
+ match stmts[..] {
+ [Statement::AlterSession { .. }, Statement::Query { .. }] => {}
+ _ => panic!("Unexpected statements: {:?}", stmts),
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]