mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-25 08:24:05 +00:00
snowflake: PIVOT on derived table factors (#1027)
This commit is contained in:
parent
5a3f19310e
commit
dc2ceedeea
2 changed files with 20 additions and 2 deletions
|
@ -6737,9 +6737,20 @@ impl<'a> Parser<'a> {
|
|||
// `parse_derived_table_factor` below will return success after parsing the
|
||||
// subquery, followed by the closing ')', and the alias of the derived table.
|
||||
// In the example above this is case (3).
|
||||
return_ok_if_some!(
|
||||
if let Some(mut table) =
|
||||
self.maybe_parse(|parser| parser.parse_derived_table_factor(NotLateral))
|
||||
);
|
||||
{
|
||||
while let Some(kw) = self.parse_one_of_keywords(&[Keyword::PIVOT, Keyword::UNPIVOT])
|
||||
{
|
||||
table = match kw {
|
||||
Keyword::PIVOT => self.parse_pivot_table_factor(table)?,
|
||||
Keyword::UNPIVOT => self.parse_unpivot_table_factor(table)?,
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
return Ok(table);
|
||||
}
|
||||
|
||||
// A parsing error from `parse_derived_table_factor` indicates that the '(' we've
|
||||
// recently consumed does not start a derived table (cases 1, 2, or 4).
|
||||
// `maybe_parse` will ignore such an error and rewind to be after the opening '('.
|
||||
|
|
|
@ -1140,3 +1140,10 @@ fn parse_division_correctly() {
|
|||
"SELECT tbl1.field / tbl2.field FROM tbl1 JOIN tbl2 ON tbl1.id = tbl2.entity_id",
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_pivot_of_table_factor_derived() {
|
||||
snowflake().verified_stmt(
|
||||
"SELECT * FROM (SELECT place_id, weekday, open FROM times AS p) PIVOT(max(open) FOR weekday IN (0, 1, 2, 3, 4, 5, 6)) AS p (place_id, open_sun, open_mon, open_tue, open_wed, open_thu, open_fri, open_sat)"
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue