/** * Recursively clone op and its predecessors from pplan and add them to newplan * * @param op * @param pplan * @param newplan * @return * @throws CloneNotSupportedException * @throws PlanException */ private static PhysicalOperator addPredecessorsToPlan( PhysicalOperator op, PhysicalPlan pplan, PhysicalPlan newplan) throws CloneNotSupportedException, PlanException { PhysicalOperator newOp = op.clone(); newplan.add(newOp); if (pplan.getPredecessors(op) == null || pplan.getPredecessors(op).size() == 0) { return newOp; } for (PhysicalOperator pred : pplan.getPredecessors(op)) { PhysicalOperator newPred = addPredecessorsToPlan(pred, pplan, newplan); newplan.connect(newPred, newOp); } return newOp; }