summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavan Deolasee2016-01-29 09:16:10 +0000
committerPavan Deolasee2016-10-18 09:48:13 +0000
commitf021b379a1866297f0b1fcbbe5018abe4858b107 (patch)
treea383402de275104056259ed8529f1528c3fbaf11
parent52bc23bbed0aeb896a71439bd3888402fd26bcde (diff)
Fix a bug where queries would incorrectly get executed on the coordinator.
Report by Krzysztof Nienartowicz, patch by me.
-rw-r--r--src/backend/optimizer/plan/createplan.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c
index acb603f4de..4d437e3a6d 100644
--- a/src/backend/optimizer/plan/createplan.c
+++ b/src/backend/optimizer/plan/createplan.c
@@ -1276,13 +1276,13 @@ create_remotescan_plan(PlannerInfo *root,
static RemoteSubplan *
-find_push_down_plan_int(PlannerInfo *root, Plan *plan, bool force, Plan **parent)
+find_push_down_plan_int(PlannerInfo *root, Plan *plan, bool force, bool delete, Plan **parent)
{
if (IsA(plan, RemoteSubplan) &&
(force || (list_length(((RemoteSubplan *) plan)->nodeList) > 1 &&
((RemoteSubplan *) plan)->execOnAll)))
{
- if (parent)
+ if (delete && (parent))
*parent = plan->lefttree;
return (RemoteSubplan *) plan;
}
@@ -1291,7 +1291,7 @@ find_push_down_plan_int(PlannerInfo *root, Plan *plan, bool force, Plan **parent
IsA(plan, Material) ||
IsA(plan, Unique) ||
IsA(plan, Limit))
- return find_push_down_plan_int(root, plan->lefttree, force, &plan->lefttree);
+ return find_push_down_plan_int(root, plan->lefttree, force, delete, &plan->lefttree);
/*
* If its a subquery scan and we are looking to replace RemoteSubplan then
@@ -1300,7 +1300,8 @@ find_push_down_plan_int(PlannerInfo *root, Plan *plan, bool force, Plan **parent
if (parent && IsA(plan, SubqueryScan))
{
Plan *subplan = ((SubqueryScan *)plan)->subplan;
- RemoteSubplan *remote_plan = find_push_down_plan_int(root, ((SubqueryScan *)plan)->subplan, force,
+ RemoteSubplan *remote_plan = find_push_down_plan_int(root,
+ ((SubqueryScan *)plan)->subplan, force, delete,
&((SubqueryScan *)plan)->subplan);
/*
@@ -1322,7 +1323,7 @@ find_push_down_plan_int(PlannerInfo *root, Plan *plan, bool force, Plan **parent
RemoteSubplan *
find_push_down_plan(Plan *plan, bool force)
{
- return find_push_down_plan_int(NULL, plan, force, NULL);
+ return find_push_down_plan_int(NULL, plan, force, false, NULL);
}
RemoteSubplan *
@@ -1331,7 +1332,7 @@ find_delete_push_down_plan(PlannerInfo *root,
bool force,
Plan **parent)
{
- return find_push_down_plan_int(root, plan, force, parent);
+ return find_push_down_plan_int(root, plan, force, true, parent);
}
#endif