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]

Reply via email to