diff options
| author | Pavan Deolasee | 2016-01-29 09:16:10 +0000 |
|---|---|---|
| committer | Pavan Deolasee | 2016-10-18 09:48:13 +0000 |
| commit | f021b379a1866297f0b1fcbbe5018abe4858b107 (patch) | |
| tree | a383402de275104056259ed8529f1528c3fbaf11 | |
| parent | 52bc23bbed0aeb896a71439bd3888402fd26bcde (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.c | 13 |
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 |
