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]
