This is an automated email from the ASF dual-hosted git repository.

LucaCappelletti94 pushed a commit to branch fix-eq-alias-assignment-from
in repository https://gitbox.apache.org/repos/asf/datafusion-sqlparser-rs.git

commit 2b4289c0eafd7b1c451d99bb005ac6a7e681ec10
Author: LucaCappelletti94 <[email protected]>
AuthorDate: Tue Sep 22 16:01:33 2026 +0200

    MsSql: Disallow unquoted FROM keyword as alias assignment expression
---
 src/parser/mod.rs         |  8 ++++++++
 tests/sqlparser_common.rs | 18 ++++++++++++++++++
 tests/sqlparser_mssql.rs  |  5 +++++
 3 files changed, 31 insertions(+)

diff --git a/src/parser/mod.rs b/src/parser/mod.rs
index 74d97a085..cb1e2c5b2 100644
--- a/src/parser/mod.rs
+++ b/src/parser/mod.rs
@@ -19170,6 +19170,14 @@ impl<'a> Parser<'a> {
             } if self.dialect.supports_eq_alias_assignment()
                 && matches!(left.as_ref(), Expr::Identifier(_)) =>
             {
+                if let Expr::Identifier(ref v) = *right {
+                    if v.value.to_lowercase() == "from" && 
v.quote_style.is_none() {
+                        return parser_err!(
+                            format!("Expected an expression, found: {}", v),
+                            self.peek_token_ref().span.start
+                        );
+                    }
+                }
                 let Expr::Identifier(alias) = *left else {
                     return parser_err!(
                         "BUG: expected identifier expression as alias",
diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs
index c4aa607d8..c6c482ba9 100644
--- a/tests/sqlparser_common.rs
+++ b/tests/sqlparser_common.rs
@@ -15232,6 +15232,24 @@ fn test_alias_equal_expr() {
     let expected = r#"SELECT (a * b) AS some_alias FROM some_table"#;
     let _ = dialects.one_statement_parses_to(sql, expected);
 
+    let sql = r#"SELECT some_alias = "from" FROM some_table"#;
+    let expected = r#"SELECT "from" AS some_alias FROM some_table"#;
+    let _ = dialects.one_statement_parses_to(sql, expected);
+
+    assert_eq!(
+        dialects
+            .parse_sql_statements("SELECT a = FROM")
+            .unwrap_err(),
+        ParserError::ParserError("Expected an expression, found: 
FROM".to_string())
+    );
+
+    assert_eq!(
+        dialects
+            .parse_sql_statements("SELECT a = FROM some_table")
+            .unwrap_err(),
+        ParserError::ParserError("Expected an expression, found: 
FROM".to_string())
+    );
+
     let dialects = all_dialects_where(|d| !d.supports_eq_alias_assignment());
     let sql = r#"SELECT x = (a * b) FROM some_table"#;
     let expected = r#"SELECT x = (a * b) FROM some_table"#;
diff --git a/tests/sqlparser_mssql.rs b/tests/sqlparser_mssql.rs
index 4510f953e..efde62c9d 100644
--- a/tests/sqlparser_mssql.rs
+++ b/tests/sqlparser_mssql.rs
@@ -2941,3 +2941,8 @@ fn parse_bracket_quoted_function_argument_name() {
         }])
     );
 }
+
+#[test]
+fn parse_bracket_quoted_eq_alias_assignment() {
+    ms().one_statement_parses_to("SELECT a = [from] FROM t", "SELECT [from] AS 
a FROM t");
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to