summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/optimizer/plan/createplan.c10
-rw-r--r--src/backend/optimizer/plan/setrefs.c8
-rw-r--r--src/include/optimizer/planmain.h2
3 files changed, 20 insertions, 0 deletions
diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c
index b65cb0bfe2..e68d7cf270 100644
--- a/src/backend/optimizer/plan/createplan.c
+++ b/src/backend/optimizer/plan/createplan.c
@@ -2499,6 +2499,7 @@ create_remotequery_plan(PlannerInfo *root, Path *best_path,
Datum distcol_value;
bool distcol_isnull;
Oid distcol_type;
+ Node *tmp_node;
Assert(scan_relid > 0);
Assert(best_path->parent->rtekind == RTE_RELATION);
@@ -2566,6 +2567,15 @@ create_remotequery_plan(PlannerInfo *root, Path *best_path,
}
list_free(varlist);
+ /*
+ * Call fix_scan_expr to fix the PlaceHolderVars. This step is not needed if
+ * we construct the query at the time of execution.
+ */
+ tmp_node = pgxc_fix_scan_expr(root->glob, (Node *)query->targetList, 0);
+ Assert(IsA(tmp_node, List));
+ query->targetList = (List *)tmp_node;
+ tmp_node = pgxc_fix_scan_expr(root->glob, (Node *)query->jointree->quals, 0);
+ query->jointree->quals = tmp_node;
initStringInfo(&sql);
deparse_query(query, &sql, NIL);
diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c
index 68981d339d..a9c1153977 100644
--- a/src/backend/optimizer/plan/setrefs.c
+++ b/src/backend/optimizer/plan/setrefs.c
@@ -2019,3 +2019,11 @@ set_remote_references(PlannerGlobal *glob, RemoteQuery *rscan, int rtoffset)
pfree(base_itlist);
}
+
+#ifdef PGXC
+Node *
+pgxc_fix_scan_expr(PlannerGlobal *glob, Node *node, int rtoffset)
+{
+ return fix_scan_expr(glob, node, rtoffset);
+}
+#endif /* PGXC */
diff --git a/src/include/optimizer/planmain.h b/src/include/optimizer/planmain.h
index e30b348ae4..3f9b6b681a 100644
--- a/src/include/optimizer/planmain.h
+++ b/src/include/optimizer/planmain.h
@@ -140,6 +140,8 @@ extern Plan *create_remoteinsert_plan(PlannerInfo *root, Plan *topplan);
extern Plan *create_remoteupdate_plan(PlannerInfo *root, Plan *topplan);
extern Plan *create_remotedelete_plan(PlannerInfo *root, Plan *topplan);
extern Plan *create_remotegrouping_plan(PlannerInfo *root, Plan *local_plan);
+/* Expose fix_scan_expr to create_remotequery_plan() */
+extern Node *pgxc_fix_scan_expr(PlannerGlobal *glob, Node *node, int rtoffset);
#endif
#endif /* PLANMAIN_H */