/** * Create an instance that pushes {@link CardinalityEstimate}s through a data flow plan starting at the given * {@code inputSlots} and {@code sourceOperators}, thereby putting {@link CardinalityEstimate}s into the * {@code cache}. * * @param inputSlots open {@link InputSlot}s that will be initially activated * @param borderInputSlots that will not be followed; they are terminal in addition to {@link OutputSlot}s that * have no occupied {@link InputSlot}s * @param sourceOperators {@link Operator} that will be initially activated * @param configuration provides utilties for the estimation */ public static CardinalityEstimationTraversal createPushTraversal(Collection<InputSlot<?>> inputSlots, Collection<InputSlot<?>> borderInputSlots, Collection<Operator> sourceOperators, Configuration configuration) { Validate.notNull(inputSlots); Validate.notNull(sourceOperators); Validate.notNull(configuration); // Starting from the an output, find all required inputs. return new Builder(inputSlots, borderInputSlots, sourceOperators, configuration).build(); }