/** * Try to extract the {@link CardinalityEstimate} for a {@link Channel} within an {@link OptimizationContext}. * * @param channel whose {@link CardinalityEstimate} is sought * @param optimizationContext provides {@link CardinalityEstimate}s * @return the {@link CardinalityEstimate} */ private CardinalityEstimate determineCardinality(Channel channel, OptimizationContext optimizationContext) { final ExecutionOperator sourceOperator = channel.getProducerOperator(); final OptimizationContext.OperatorContext sourceOpCtx = optimizationContext.getOperatorContext(sourceOperator); assert sourceOpCtx != null : String.format("No OperatorContext found for %s.", sourceOperator); final OutputSlot<?> producerSlot = channel.getProducerSlot(); if (producerSlot != null) { return sourceOpCtx.getOutputCardinality(producerSlot.getIndex()); } else if (sourceOperator.getNumInputs() == 1) { return sourceOpCtx.getInputCardinality(0); } throw new IllegalStateException(String.format("Could not determine cardinality of %s.", channel)); }