@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)); // this must be before FilterStatsRule 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()); } }
@Test public void verifyTestInputConsistent() { // if tests' input is not normalized, other tests don't make sense checkConsistent( new StatsNormalizer(), "standardInputStatistics", standardInputStatistics, standardInputStatistics.getSymbolsWithKnownStatistics(), types); }
statsCalculator = new FilterStatsCalculator(metadata, new ScalarStatsCalculator(metadata), new StatsNormalizer());
filterStatsCalculator = new FilterStatsCalculator(metadata, new ScalarStatsCalculator(metadata), new StatsNormalizer());