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;
}
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
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);
/*
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 *
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