From d60e8d11800bf1f70621957d76c3fa8de4ae9d7e Mon Sep 17 00:00:00 2001 From: Yoav Cohen Date: Fri, 10 Apr 2026 13:17:19 +0200 Subject: [PATCH 1/2] Redshift/PostgreSQL: Parse optional aliases for wildcard select items --- src/dialect/mod.rs | 3 +-- src/dialect/postgresql.rs | 4 ++++ src/parser/mod.rs | 6 +----- tests/sqlparser_common.rs | 13 +++++++++++++ 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/dialect/mod.rs b/src/dialect/mod.rs index 1a2b9b19f..769e41a90 100644 --- a/src/dialect/mod.rs +++ b/src/dialect/mod.rs @@ -1556,10 +1556,9 @@ pub trait Dialect: Debug + Any { /// /// Example: /// ```sql + /// SELECT t.* alias FROM t /// SELECT t.* AS alias FROM t /// ``` - /// - /// [Redshift](https://docs.aws.amazon.com/redshift/latest/dg/r_SELECT_list.html) fn supports_select_wildcard_with_alias(&self) -> bool { false } diff --git a/src/dialect/postgresql.rs b/src/dialect/postgresql.rs index b99a8b5c3..16b89bc21 100644 --- a/src/dialect/postgresql.rs +++ b/src/dialect/postgresql.rs @@ -307,6 +307,10 @@ impl Dialect for PostgreSqlDialect { true } + fn supports_select_wildcard_with_alias(&self) -> bool { + true + } + fn supports_comma_separated_trim(&self) -> bool { true } diff --git a/src/parser/mod.rs b/src/parser/mod.rs index aeac61868..9d35fdcc3 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -18448,11 +18448,7 @@ impl<'a> Parser<'a> { }; let opt_alias = if self.dialect.supports_select_wildcard_with_alias() { - if self.parse_keyword(Keyword::AS) { - Some(self.parse_identifier()?) - } else { - None - } + self.maybe_parse_select_item_alias()? } else { None }; diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs index f5add3a63..94b2ee31d 100644 --- a/tests/sqlparser_common.rs +++ b/tests/sqlparser_common.rs @@ -1295,16 +1295,29 @@ fn parse_select_wildcard_with_alias() { dialects .parse_sql_statements("SELECT t.* AS all_cols FROM t") .unwrap(); + dialects.one_statement_parses_to( + "SELECT t.* all_cols FROM t", + "SELECT t.* AS all_cols FROM t", + ); + dialects.one_statement_parses_to( + "SELECT t.* all_cols, other_col FROM t", + "SELECT t.* AS all_cols, other_col FROM t", + ); // unqualified wildcard with alias dialects .parse_sql_statements("SELECT * AS all_cols FROM t") .unwrap(); + dialects.one_statement_parses_to("SELECT * all_cols FROM t", "SELECT * AS all_cols FROM t"); // mixed: regular column + qualified wildcard with alias dialects .parse_sql_statements("SELECT a.id, b.* AS b_cols FROM a JOIN b ON (a.id = b.a_id)") .unwrap(); + dialects.one_statement_parses_to( + "SELECT a.id, b.* b_cols FROM a JOIN b ON (a.id = b.a_id)", + "SELECT a.id, b.* AS b_cols FROM a JOIN b ON (a.id = b.a_id)", + ); } #[test] From 94616170692647d4d45d8d1c527c01d37bd6933a Mon Sep 17 00:00:00 2001 From: Yoav Cohen Date: Fri, 10 Apr 2026 14:36:26 +0200 Subject: [PATCH 2/2] Redshift/PostgreSQL: Parse optional aliases for wildcard select items --- src/dialect/redshift.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/dialect/redshift.rs b/src/dialect/redshift.rs index d360ccd34..db5bc53a0 100644 --- a/src/dialect/redshift.rs +++ b/src/dialect/redshift.rs @@ -141,6 +141,8 @@ impl Dialect for RedshiftSqlDialect { true } + /// Redshift supports aliasing wildcard expressions: + /// fn supports_select_wildcard_with_alias(&self) -> bool { true }