mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-09-27 07:59:11 +00:00
Use TableAlias in Cte
This commit is contained in:
parent
4f239745bc
commit
3c073a4c34
3 changed files with 10 additions and 18 deletions
|
@ -163,18 +163,13 @@ impl ToString for SQLSelect {
|
||||||
/// number of columns in the query matches the number of columns in the query.
|
/// number of columns in the query matches the number of columns in the query.
|
||||||
#[derive(Debug, Clone, PartialEq, Hash)]
|
#[derive(Debug, Clone, PartialEq, Hash)]
|
||||||
pub struct Cte {
|
pub struct Cte {
|
||||||
pub alias: SQLIdent,
|
pub alias: TableAlias,
|
||||||
pub query: SQLQuery,
|
pub query: SQLQuery,
|
||||||
pub renamed_columns: Vec<SQLIdent>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToString for Cte {
|
impl ToString for Cte {
|
||||||
fn to_string(&self) -> String {
|
fn to_string(&self) -> String {
|
||||||
let mut s = self.alias.clone();
|
format!("{} AS ({})", self.alias.to_string(), self.query.to_string())
|
||||||
if !self.renamed_columns.is_empty() {
|
|
||||||
s += &format!(" ({})", comma_separated_string(&self.renamed_columns));
|
|
||||||
}
|
|
||||||
s + &format!(" AS ({})", self.query.to_string())
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1475,14 +1475,15 @@ impl Parser {
|
||||||
fn parse_cte_list(&mut self) -> Result<Vec<Cte>, ParserError> {
|
fn parse_cte_list(&mut self) -> Result<Vec<Cte>, ParserError> {
|
||||||
let mut cte = vec![];
|
let mut cte = vec![];
|
||||||
loop {
|
loop {
|
||||||
let alias = self.parse_identifier()?;
|
let alias = TableAlias {
|
||||||
let renamed_columns = self.parse_parenthesized_column_list(Optional)?;
|
name: self.parse_identifier()?,
|
||||||
|
columns: self.parse_parenthesized_column_list(Optional)?,
|
||||||
|
};
|
||||||
self.expect_keyword("AS")?;
|
self.expect_keyword("AS")?;
|
||||||
self.expect_token(&Token::LParen)?;
|
self.expect_token(&Token::LParen)?;
|
||||||
cte.push(Cte {
|
cte.push(Cte {
|
||||||
alias,
|
alias,
|
||||||
query: self.parse_query()?,
|
query: self.parse_query()?,
|
||||||
renamed_columns,
|
|
||||||
});
|
});
|
||||||
self.expect_token(&Token::RParen)?;
|
self.expect_token(&Token::RParen)?;
|
||||||
if !self.consume_token(&Token::Comma) {
|
if !self.consume_token(&Token::Comma) {
|
||||||
|
|
|
@ -1791,14 +1791,10 @@ fn parse_ctes() {
|
||||||
fn assert_ctes_in_select(expected: &[&str], sel: &SQLQuery) {
|
fn assert_ctes_in_select(expected: &[&str], sel: &SQLQuery) {
|
||||||
let mut i = 0;
|
let mut i = 0;
|
||||||
for exp in expected {
|
for exp in expected {
|
||||||
let Cte {
|
let Cte { alias, query } = &sel.ctes[i];
|
||||||
query,
|
|
||||||
alias,
|
|
||||||
renamed_columns,
|
|
||||||
} = &sel.ctes[i];
|
|
||||||
assert_eq!(*exp, query.to_string());
|
assert_eq!(*exp, query.to_string());
|
||||||
assert_eq!(if i == 0 { "a" } else { "b" }, alias);
|
assert_eq!(if i == 0 { "a" } else { "b" }, alias.name);
|
||||||
assert!(renamed_columns.is_empty());
|
assert!(alias.columns.is_empty());
|
||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1841,7 +1837,7 @@ fn parse_cte_renamed_columns() {
|
||||||
let query = all_dialects().verified_query(sql);
|
let query = all_dialects().verified_query(sql);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
vec!["col1", "col2"],
|
vec!["col1", "col2"],
|
||||||
query.ctes.first().unwrap().renamed_columns
|
query.ctes.first().unwrap().alias.columns
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue