/** * Traverse and update {@link CardinalityEstimate}s. * * @param optimizationContext provides input {@link CardinalityEstimate}s and stores all produces * {@link CardinalityEstimate}s alongside the push traversal * @param configuration provides the applicable {@link Configuration} * @return whether any {@link CardinalityEstimate}s have been updated */ public boolean traverse(OptimizationContext optimizationContext, Configuration configuration) { boolean isUpdated = false; try { final Queue<Activator> activators = this.initializeActivatorQueue(); do { assert !activators.isEmpty() : String.format("No source activators. (input activations: %s)", this.inputActivations); final Activator activator = activators.poll(); isUpdated |= activator.process(optimizationContext, configuration, activators); } while (!activators.isEmpty()); } finally { this.reset(); } return isUpdated; }