From 293b38c9c72cd69fc49964e841efb02f0f5a97f7 Mon Sep 17 00:00:00 2001 From: Revital Krichevsky Date: Wed, 27 May 2026 20:03:52 +0300 Subject: [PATCH] Fix issue #2353: Incorrect canonicalization of NATURAL JOIN with INNER JOIN in Snowflake dialect produces non-equivalent query --- src/parser/mod.rs | 1 + tests/sqlparser_common.rs | 12 +----------- 2 files changed, 2 insertions(+), 11 deletions(-) diff --git a/src/parser/mod.rs b/src/parser/mod.rs index cbd315e92..54b25abfc 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -15994,6 +15994,7 @@ impl<'a> Parser<'a> { if !self .dialect .supports_left_associative_joins_without_parens() + && !natural && self.peek_parens_less_nested_join() { let joins = self.parse_joins()?; diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs index f470b93ca..a8cde0b19 100644 --- a/tests/sqlparser_common.rs +++ b/tests/sqlparser_common.rs @@ -17439,8 +17439,7 @@ fn column_check_enforced() { #[test] fn join_precedence() { - all_dialects_except(|d| !d.supports_left_associative_joins_without_parens()) - .verified_query_with_canonical( + all_dialects().verified_query_with_canonical( "SELECT * FROM t1 NATURAL JOIN t5 @@ -17449,15 +17448,6 @@ fn join_precedence() { // canonical string without parentheses "SELECT * FROM t1 NATURAL JOIN t5 INNER JOIN t0 ON (t0.v1 + t5.v0) > 0 WHERE t0.v1 = t1.v0", ); - all_dialects_except(|d| d.supports_left_associative_joins_without_parens()).verified_query_with_canonical( - "SELECT * - FROM t1 - NATURAL JOIN t5 - INNER JOIN t0 ON (t0.v1 + t5.v0) > 0 - WHERE t0.v1 = t1.v0", - // canonical string with parentheses - "SELECT * FROM t1 NATURAL JOIN (t5 INNER JOIN t0 ON (t0.v1 + t5.v0) > 0) WHERE t0.v1 = t1.v0", - ); } #[test]