You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datafusion.apache.org by lu...@apache.org on 2026/09/22 14:05:04 UTC
(datafusion-sqlparser-rs) 01/01: MsSql: Disallow unquoted FROM keyword as alias assignment expression
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 <ca...@gmail.com>
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: commits-unsubscribe@datafusion.apache.org
For additional commands, e-mail: commits-help@datafusion.apache.org