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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to