/** * Traverse the {@link RheemPlan}, thereby updating {@link CardinalityEstimate}s. Also update conversion * {@link Operator} cardinalities as provided by the {@link PlanImplementation}. * * @param planImplementation that has conversion {@link Operator}s * @return whether any {@link CardinalityEstimate}s have been updated */ public boolean pushCardinalities(PlanImplementation planImplementation) { boolean isUpdated = this.getPlanTraversal().traverse(this.optimizationContext, this.configuration); planImplementation.getLoopImplementations().keySet().forEach( loop -> this.optimizationContext.getNestedLoopContext(loop).getAggregateContext().updateOperatorContexts() ); this.updateConversionOperatorCardinalities(planImplementation, this.optimizationContext, 0); this.optimizationContext.clearMarks(); return isUpdated; }
this.updateConversionOperatorCardinalities( loopImplementation.getSingleIterationImplementation().getBodyImplementation(), iterationContext,