Skip to content

Commit 16f7d6c

Browse files
committed
Fix join precedence for non-snowflake queries
1 parent 7865de0 commit 16f7d6c

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

src/parser/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12467,7 +12467,7 @@ impl<'a> Parser<'a> {
1246712467
};
1246812468
let mut relation = self.parse_table_factor()?;
1246912469

12470-
if self.peek_parens_less_nested_join() {
12470+
if dialect_of!(self is SnowflakeDialect) && self.peek_parens_less_nested_join() {
1247112471
let joins = self.parse_joins()?;
1247212472
relation = TableFactor::NestedJoin {
1247312473
table_with_joins: Box::new(TableWithJoins { relation, joins }),

tests/sqlparser_common.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15356,3 +15356,25 @@ fn check_enforced() {
1535615356
"CREATE TABLE t (a INT, b INT, c INT, CHECK (a > 0) NOT ENFORCED, CHECK (b > 0) ENFORCED, CHECK (c > 0))",
1535715357
);
1535815358
}
15359+
15360+
#[test]
15361+
fn join_precedence() {
15362+
all_dialects_except(|d| d.is::<SnowflakeDialect>()).verified_query_with_canonical(
15363+
"SELECT *
15364+
FROM t1
15365+
NATURAL JOIN t5
15366+
INNER JOIN t0 ON (t0.v1 + t5.v0) > 0
15367+
WHERE t0.v1 = t1.v0",
15368+
// canonical string without parentheses
15369+
"SELECT * FROM t1 NATURAL JOIN t5 INNER JOIN t0 ON (t0.v1 + t5.v0) > 0 WHERE t0.v1 = t1.v0",
15370+
);
15371+
TestedDialects::new(vec![Box::new(SnowflakeDialect {})]).verified_query_with_canonical(
15372+
"SELECT *
15373+
FROM t1
15374+
NATURAL JOIN t5
15375+
INNER JOIN t0 ON (t0.v1 + t5.v0) > 0
15376+
WHERE t0.v1 = t1.v0",
15377+
// canonical string with parentheses
15378+
"SELECT * FROM t1 NATURAL JOIN (t5 INNER JOIN t0 ON (t0.v1 + t5.v0) > 0) WHERE t0.v1 = t1.v0",
15379+
);
15380+
}

0 commit comments

Comments
 (0)