@Override public CardinalityPusher getCardinalityPusher( final Configuration configuration) { return SubplanCardinalityPusher.createFor(this, configuration); }
/** * Create an instance for the given {@link Subplan}. * * @return the instance if it could be created */ public static CardinalityPusher createFor(OperatorContainer container, Configuration configuration) { final CompositeOperator compositeOperator = container.toOperator(); final InputSlot<?>[] outerInputs = compositeOperator.getAllInputs(); final List<InputSlot<?>> innerInputs = Arrays.stream(outerInputs) .flatMap(inputSlot -> container.followInput(inputSlot).stream()) .collect(Collectors.toList()); final Collection<Operator> sourceOperators = compositeOperator.isSource() ? Collections.singleton(container.getSource()) : Collections.emptySet(); final CardinalityEstimationTraversal traversal = CardinalityEstimationTraversal.createPushTraversal( innerInputs, sourceOperators, configuration); return new SubplanCardinalityPusher(traversal, compositeOperator); }