Skip to content

Commit 3c073a4

Browse files
committed
Use TableAlias in Cte
1 parent 4f23974 commit 3c073a4

File tree

3 files changed

+10
-18
lines changed

3 files changed

+10
-18
lines changed

src/sqlast/query.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -163,18 +163,13 @@ impl ToString for SQLSelect {
163163
/// number of columns in the query matches the number of columns in the query.
164164
#[derive(Debug, Clone, PartialEq, Hash)]
165165
pub struct Cte {
166-
pub alias: SQLIdent,
166+
pub alias: TableAlias,
167167
pub query: SQLQuery,
168-
pub renamed_columns: Vec<SQLIdent>,
169168
}
170169

171170
impl ToString for Cte {
172171
fn to_string(&self) -> String {
173-
let mut s = self.alias.clone();
174-
if !self.renamed_columns.is_empty() {
175-
s += &format!(" ({})", comma_separated_string(&self.renamed_columns));
176-
}
177-
s + &format!(" AS ({})", self.query.to_string())
172+
format!("{} AS ({})", self.alias.to_string(), self.query.to_string())
178173
}
179174
}
180175

src/sqlparser.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1475,14 +1475,15 @@ impl Parser {
14751475
fn parse_cte_list(&mut self) -> Result<Vec<Cte>, ParserError> {
14761476
let mut cte = vec![];
14771477
loop {
1478-
let alias = self.parse_identifier()?;
1479-
let renamed_columns = self.parse_parenthesized_column_list(Optional)?;
1478+
let alias = TableAlias {
1479+
name: self.parse_identifier()?,
1480+
columns: self.parse_parenthesized_column_list(Optional)?,
1481+
};
14801482
self.expect_keyword("AS")?;
14811483
self.expect_token(&Token::LParen)?;
14821484
cte.push(Cte {
14831485
alias,
14841486
query: self.parse_query()?,
1485-
renamed_columns,
14861487
});
14871488
self.expect_token(&Token::RParen)?;
14881489
if !self.consume_token(&Token::Comma) {

tests/sqlparser_common.rs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1791,14 +1791,10 @@ fn parse_ctes() {
17911791
fn assert_ctes_in_select(expected: &[&str], sel: &SQLQuery) {
17921792
let mut i = 0;
17931793
for exp in expected {
1794-
let Cte {
1795-
query,
1796-
alias,
1797-
renamed_columns,
1798-
} = &sel.ctes[i];
1794+
let Cte { alias, query } = &sel.ctes[i];
17991795
assert_eq!(*exp, query.to_string());
1800-
assert_eq!(if i == 0 { "a" } else { "b" }, alias);
1801-
assert!(renamed_columns.is_empty());
1796+
assert_eq!(if i == 0 { "a" } else { "b" }, alias.name);
1797+
assert!(alias.columns.is_empty());
18021798
i += 1;
18031799
}
18041800
}
@@ -1841,7 +1837,7 @@ fn parse_cte_renamed_columns() {
18411837
let query = all_dialects().verified_query(sql);
18421838
assert_eq!(
18431839
vec!["col1", "col2"],
1844-
query.ctes.first().unwrap().renamed_columns
1840+
query.ctes.first().unwrap().alias.columns
18451841
);
18461842
}
18471843

0 commit comments

Comments
 (0)