/** * Execute this instance, thereby activating new instances and putting them on the queue. * * @param optimizationContext the current {@link OptimizationContext} in which the push should take place * @param activatorQueue accepts newly activated {@link CardinalityEstimator}s */ boolean process(OptimizationContext optimizationContext, Configuration configuration, Queue<Activator> activatorQueue) { OptimizationContext.OperatorContext opCtx = optimizationContext.getOperatorContext(this.operator); assert opCtx != null : String.format("Could not find OperatorContext for %s.", this.operator); // Do the local estimation. boolean isUpdated = this.pusher.push(opCtx, configuration); opCtx.pushCardinalitiesForward(); for (int outputIndex = 0; outputIndex < this.operator.getNumOutputs(); outputIndex++) { // Trigger follow-up operators. this.processDependentActivations(this.dependentActivations[outputIndex], activatorQueue); } return isUpdated; }