From: Pavan Deolasee Date: Fri, 29 Jan 2016 09:16:10 +0000 (+0530) Subject: Fix a bug where queries would incorrectly get executed on the coordinator. X-Git-Tag: XL9_5_R1BETA1~48 X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=d20306827604cb2d848198f71653f12bf4702e83;p=postgres-xl.git Fix a bug where queries would incorrectly get executed on the coordinator. Report by Krzysztof Nienartowicz, patch by me. --- diff --git a/src/backend/optimizer/plan/createplan.c b/src/backend/optimizer/plan/createplan.c index f8b3250323..7797040183 100644 --- a/src/backend/optimizer/plan/createplan.c +++ b/src/backend/optimizer/plan/createplan.c @@ -1277,13 +1277,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; } @@ -1292,7 +1292,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 @@ -1301,7 +1301,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); /* @@ -1323,7 +1324,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 * @@ -1332,7 +1333,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