You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudberry.apache.org by re...@apache.org on 2026/08/17 08:54:35 UTC

(cloudberry) 01/01: Fix JOIN motion type selection for join quals containing outer refs

This is an automated email from the ASF dual-hosted git repository.

reshke pushed a commit to branch jdejii
in repository https://gitbox.apache.org/repos/asf/cloudberry.git

commit 3e75f095ea8d49ca1ba6bf2236e12d7fae9e05f5
Author: reshke <re...@double.cloud>
AuthorDate: Mon Aug 17 08:39:37 2026 +0000

    Fix JOIN motion type selection for join quals containing outer refs
---
 src/backend/optimizer/plan/initsplan.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/src/backend/optimizer/plan/initsplan.c b/src/backend/optimizer/plan/initsplan.c
index b65897043ca..b2af9f7d9f5 100644
--- a/src/backend/optimizer/plan/initsplan.c
+++ b/src/backend/optimizer/plan/initsplan.c
@@ -2798,7 +2798,12 @@ distribute_qual_to_rels(PlannerInfo *root, Node *clause,
 		if (maybe_equivalence)
 		{
 			if (process_equivalence(root, &restrictinfo, jtitem->jdomain))
+			{
+				/* Update infobut we may use in join motion planning */
+				if (contains_outer_params((Node *) restrictinfo->clause, root))
+					restrictinfo->contain_outer_query_references = true;
 				return;
+			}
 			/* EC rejected it, so set left_ec/right_ec the hard way ... */
 			if (restrictinfo->mergeopfamilies)	/* EC might have changed this */
 				initialize_mergeclause_eclasses(root, restrictinfo);
@@ -2822,6 +2827,10 @@ distribute_qual_to_rels(PlannerInfo *root, Node *clause,
 				ojcinfo->sjinfo = sjinfo;
 				root->left_join_clauses = lappend(root->left_join_clauses,
 												  ojcinfo);
+
+				/* Update infobut we may use in join motion planning */
+				if (contains_outer_params((Node *) restrictinfo->clause, root))
+					restrictinfo->contain_outer_query_references = true;
 				return;
 			}
 			if (bms_is_subset(restrictinfo->right_relids,
@@ -2836,6 +2845,10 @@ distribute_qual_to_rels(PlannerInfo *root, Node *clause,
 				ojcinfo->sjinfo = sjinfo;
 				root->right_join_clauses = lappend(root->right_join_clauses,
 												   ojcinfo);
+
+				/* Update infobut we may use in join motion planning */
+				if (contains_outer_params((Node *) restrictinfo->clause, root))
+					restrictinfo->contain_outer_query_references = true;
 				return;
 			}
 			if (sjinfo->jointype == JOIN_FULL)
@@ -2847,6 +2860,10 @@ distribute_qual_to_rels(PlannerInfo *root, Node *clause,
 				ojcinfo->sjinfo = sjinfo;
 				root->full_join_clauses = lappend(root->full_join_clauses,
 												  ojcinfo);
+
+				/* Update infobut we may use in join motion planning */
+				if (contains_outer_params((Node *) restrictinfo->clause, root))
+					restrictinfo->contain_outer_query_references = true;
 				return;
 			}
 			/* nope, so fall through to distribute_restrictinfo_to_rels */


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cloudberry.apache.org
For additional commands, e-mail: commits-help@cloudberry.apache.org