From f0447c00598fedddf22b6b6340c9eafe3b08d784 Mon Sep 17 00:00:00 2001 From: Vladimir Cherkasov Date: Mon, 15 Dec 2025 14:13:35 +0000 Subject: [PATCH] Merge pull request #91853 from ClickHouse/vdimir/issue_87016_unexpected_return_type Fix logical error with join_use_nulls and cross join --- src/Analyzer/Resolve/QueryAnalyzer.cpp | 5 +++++ .../03749_cross_join_use_nulls_matcher.reference | 7 +++++++ .../0_stateless/03749_cross_join_use_nulls_matcher.sql | 7 +++++++ 3 files changed, 19 insertions(+) create mode 100644 tests/queries/0_stateless/03749_cross_join_use_nulls_matcher.reference create mode 100644 tests/queries/0_stateless/03749_cross_join_use_nulls_matcher.sql diff --git a/src/Analyzer/Resolve/QueryAnalyzer.cpp b/src/Analyzer/Resolve/QueryAnalyzer.cpp index 34e1d7e54b50..9086da916423 100644 --- a/src/Analyzer/Resolve/QueryAnalyzer.cpp +++ b/src/Analyzer/Resolve/QueryAnalyzer.cpp @@ -292,6 +292,11 @@ bool isFromJoinTree(const IQueryTreeNode * node_source, const IQueryTreeNode * t stack.push(child_join_node->getLeftTableExpression().get()); stack.push(child_join_node->getRightTableExpression().get()); } + + if (const auto * child_join_node = current->as()) + { + stack.push_range(child_join_node->getTableExpressions() | std::views::transform(&QueryTreeNodePtr::get)); + } } return false; } diff --git a/tests/queries/0_stateless/03749_cross_join_use_nulls_matcher.reference b/tests/queries/0_stateless/03749_cross_join_use_nulls_matcher.reference new file mode 100644 index 000000000000..e6b34838e275 --- /dev/null +++ b/tests/queries/0_stateless/03749_cross_join_use_nulls_matcher.reference @@ -0,0 +1,7 @@ +000 +011 +022 +100 +111 +122 +\N diff --git a/tests/queries/0_stateless/03749_cross_join_use_nulls_matcher.sql b/tests/queries/0_stateless/03749_cross_join_use_nulls_matcher.sql new file mode 100644 index 000000000000..7035d1439ed1 --- /dev/null +++ b/tests/queries/0_stateless/03749_cross_join_use_nulls_matcher.sql @@ -0,0 +1,7 @@ +SET enable_analyzer = 1; + +SELECT concat(*) +FROM numbers(2) AS n1, numbers(3) AS n2 +RIGHT JOIN numbers(4) AS n3 + ON n2.number = n3.number +SETTINGS join_use_nulls = true;