Skip to content

Commit

Permalink
fix: unnest join constraint with alias parsing for BigQuery dialect (#…
Browse files Browse the repository at this point in the history
…732)

* fix: unnest join constraint with alias parsing for BigQuery dialect

* chore: fix failing tests
  • Loading branch information
Ziinc committed Dec 13, 2022
1 parent 650c53d commit d420001
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 21 deletions.
7 changes: 5 additions & 2 deletions src/parser.rs
Expand Up @@ -5291,12 +5291,15 @@ impl<'a> Parser<'a> {
Err(_) => false,
};

let with_offset_alias =
let with_offset_alias = if with_offset {
match self.parse_optional_alias(keywords::RESERVED_FOR_COLUMN_ALIAS) {
Ok(Some(alias)) => Some(alias),
Ok(None) => None,
Err(e) => return Err(e),
};
}
} else {
None
};

Ok(TableFactor::UNNEST {
alias,
Expand Down
28 changes: 28 additions & 0 deletions tests/sqlparser_bigquery.rs
Expand Up @@ -94,6 +94,34 @@ fn parse_table_identifiers() {
test_table_ident("abc5.GROUP", vec![Ident::new("abc5"), Ident::new("GROUP")]);
}

#[test]
fn parse_join_constraint_unnest_alias() {
assert_eq!(
only(
bigquery()
.verified_only_select("SELECT * FROM t1 JOIN UNNEST(t1.a) AS f ON c1 = c2")
.from
)
.joins,
vec![Join {
relation: TableFactor::UNNEST {
alias: table_alias("f"),
array_expr: Box::new(Expr::CompoundIdentifier(vec![
Ident::new("t1"),
Ident::new("a")
])),
with_offset: false,
with_offset_alias: None
},
join_operator: JoinOperator::Inner(JoinConstraint::On(Expr::BinaryOp {
left: Box::new(Expr::Identifier("c1".into())),
op: BinaryOperator::Eq,
right: Box::new(Expr::Identifier("c2".into())),
})),
}]
);
}

#[test]
fn parse_trailing_comma() {
for (sql, canonical) in [
Expand Down
19 changes: 0 additions & 19 deletions tests/sqlparser_common.rs
Expand Up @@ -3683,25 +3683,6 @@ fn parse_unnest() {
joins: vec![],
}],
);
// 5. WITH OFFSET and WITH OFFSET Alias
chk(
true,
false,
true,
&dialects,
vec![TableWithJoins {
relation: TableFactor::UNNEST {
alias: Some(TableAlias {
name: Ident::new("numbers"),
columns: vec![],
}),
array_expr: Box::new(Expr::Identifier(Ident::new("expr"))),
with_offset: false,
with_offset_alias: Some(Ident::new("with_offset_alias")),
},
joins: vec![],
}],
);
}

#[test]
Expand Down

0 comments on commit d420001

Please sign in to comment.