@Provides
@Singleton
public static StatsCalculator createNewStatsCalculator(Metadata metadata)
{
StatsNormalizer normalizer = new StatsNormalizer();
ScalarStatsCalculator scalarStatsCalculator = new ScalarStatsCalculator(metadata);
FilterStatsCalculator filterStatsCalculator = new FilterStatsCalculator(metadata, scalarStatsCalculator, normalizer);
ImmutableList.Builder<ComposableStatsCalculator.Rule<?>> rules = ImmutableList.builder();
rules.add(new OutputStatsRule());
rules.add(new TableScanStatsRule(metadata, normalizer));
rules.add(new SimpleFilterProjectSemiJoinStatsRule(normalizer, filterStatsCalculator));
rules.add(new FilterStatsRule(normalizer, filterStatsCalculator));
rules.add(new ValuesStatsRule(metadata));
rules.add(new LimitStatsRule(normalizer));
rules.add(new EnforceSingleRowStatsRule(normalizer));
rules.add(new ProjectStatsRule(scalarStatsCalculator, normalizer));
rules.add(new ExchangeStatsRule(normalizer));
rules.add(new JoinStatsRule(filterStatsCalculator, normalizer));
rules.add(new SpatialJoinStatsRule(filterStatsCalculator, normalizer));
rules.add(new AggregationStatsRule(normalizer));
rules.add(new UnionStatsRule(normalizer));
rules.add(new AssignUniqueIdStatsRule());
rules.add(new SemiJoinStatsRule());
rules.add(new RowNumberStatsRule(normalizer));
return new ComposableStatsCalculator(rules.build());
}
}