@Override public void planRelTransform(PlannerPhase phase, RelOptPlanner planner, RelNode before, RelNode after, long millisTaken) { statusListener.planRelTransform(phase, before, after, millisTaken); switch(phase){ case LOGICAL: builder.addLogicalPlan(before, after); // set final pre-accelerated cost final RelOptCost cost = after.getCluster().getMetadataQuery().getCumulativeCost(after); builder.addCost(cost); break; case JOIN_PLANNING_MULTI_JOIN: // Join planning starts with multi-join analysis phase builder.addPreJoinPlan(before); break; default: return; } }