@Override public Comparator getComparator() { return delegate.getComparator(); }
@Override public Comparator getComparator() { return delegate.getComparator(); }
@Override public FinalizingFieldAccessPostAggregator decorate(final Map<String, AggregatorFactory> aggregators) { final Comparator<Object> theComparator; final Function<Object, Object> theFinalizer; if (aggregators != null && aggregators.containsKey(fieldName)) { //noinspection unchecked theComparator = aggregators.get(fieldName).getComparator(); } else { //noinspection unchecked theComparator = (Comparator) Comparators.naturalNullsFirst(); } if (aggregators != null && aggregators.containsKey(fieldName)) { theFinalizer = aggregators.get(fieldName)::finalizeComputation; } else { theFinalizer = Function.identity(); } return new FinalizingFieldAccessPostAggregator( name, fieldName, theComparator, theFinalizer ); }
@Override public Comparator getComparator(List<AggregatorFactory> aggregatorSpecs, List<PostAggregator> postAggregatorSpecs) { Comparator comp = null; for (AggregatorFactory factory : aggregatorSpecs) { if (metric.equals(factory.getName())) { comp = factory.getComparator(); break; } } for (PostAggregator pf : postAggregatorSpecs) { if (metric.equals(pf.getName())) { comp = pf.getComparator(); break; } } return comp; }
return aggregatorFactory.getComparator() .compare( aggregatorFactory.deserialize(metricValueObj),
nextOrdering = metricOrdering(columnName, postAggregatorsMap.get(columnName).getComparator()); } else if (aggregatorsMap.containsKey(columnName)) { nextOrdering = metricOrdering(columnName, aggregatorsMap.get(columnName).getComparator()); } else if (dimensionsMap.containsKey(columnName)) { nextOrdering = dimensionOrdering(columnName, columnSpec.getDimensionComparator());
@Test public void testComputedWithFinalizing() { String aggName = "biily"; AggregatorFactory aggFactory = EasyMock.createMock(AggregatorFactory.class); EasyMock.expect(aggFactory.getComparator()).andReturn(Comparators.naturalNullsFirst()).once(); EasyMock.expect(aggFactory.finalizeComputation("test")).andReturn(3L).once(); EasyMock.replay(aggFactory); FinalizingFieldAccessPostAggregator postAgg = buildDecorated( "final_billy", aggName, ImmutableMap.of(aggName, aggFactory) ); // Check that the class matches exactly; see https://github.com/apache/incubator-druid/issues/6063 Assert.assertEquals(FinalizingFieldAccessPostAggregator.class, postAgg.getClass()); Map<String, Object> metricValues = new HashMap<>(); metricValues.put(aggName, "test"); Assert.assertEquals(new Long(3L), postAgg.compute(metricValues)); EasyMock.verify(aggFactory); }
@Test public void testComparatorsWithFinalizingAndComparatorNull() { String aggName = "billy"; AggregatorFactory aggFactory = EasyMock.createMock(AggregatorFactory.class); EasyMock.expect(aggFactory.getComparator()) .andReturn(null) .times(1); EasyMock.replay(aggFactory); FinalizingFieldAccessPostAggregator postAgg = buildDecorated( "final_billy", "joe", ImmutableMap.of(aggName, aggFactory)); List<Object> computedValues = new ArrayList<>(); Map<String, Object> forNull = new HashMap<>(); forNull.put("joe", null); // guava does not allow the value to be null. computedValues.add(postAgg.compute(ImmutableMap.of("joe", "test_val1"))); computedValues.add(postAgg.compute(ImmutableMap.of("joe", "test_val2"))); computedValues.add(postAgg.compute(forNull)); computedValues.add(postAgg.compute(ImmutableMap.of("joe", "test_val4"))); Collections.sort(computedValues, postAgg.getComparator()); Assert.assertArrayEquals( new Object[]{null, "test_val1", "test_val2", "test_val4"}, computedValues.toArray(new Object[0]) ); EasyMock.verify(); }
@Test public void testComputedInArithmeticPostAggregator() { String aggName = "billy"; AggregatorFactory aggFactory = EasyMock.createMock(AggregatorFactory.class); EasyMock.expect(aggFactory.getComparator()).andReturn(Comparators.naturalNullsFirst()).once(); EasyMock.expect(aggFactory.finalizeComputation("test")).andReturn(3L).once(); EasyMock.replay(aggFactory); FinalizingFieldAccessPostAggregator postAgg = buildDecorated( "final_billy", aggName, ImmutableMap.of(aggName, aggFactory) ); Map<String, Object> metricValues = new HashMap<>(); metricValues.put(aggName, "test"); List<PostAggregator> postAggsList = Lists.newArrayList( new ConstantPostAggregator("roku", 6), postAgg); ArithmeticPostAggregator arithmeticPostAggregator = new ArithmeticPostAggregator("add", "+", postAggsList); Assert.assertEquals(new Double(9.0f), arithmeticPostAggregator.compute(metricValues)); EasyMock.verify(); }
.andReturn(null) .times(1); EasyMock.expect(aggFactory.getComparator()) .andReturn(Ordering.natural().<Long>nullsLast()) .times(1);
@Override public Comparator getComparator() { return delegate.getComparator(); }
@Override public Comparator getComparator() { return delegate.getComparator(); }
@Override public FinalizingFieldAccessPostAggregator decorate(final Map<String, AggregatorFactory> aggregators) { final Comparator<Object> theComparator; final Function<Object, Object> theFinalizer; if (aggregators != null && aggregators.containsKey(fieldName)) { //noinspection unchecked theComparator = aggregators.get(fieldName).getComparator(); } else { //noinspection unchecked theComparator = (Comparator) Comparators.naturalNullsFirst(); } if (aggregators != null && aggregators.containsKey(fieldName)) { theFinalizer = aggregators.get(fieldName)::finalizeComputation; } else { theFinalizer = Function.identity(); } return new FinalizingFieldAccessPostAggregator( name, fieldName, theComparator, theFinalizer ); }
@Override public Comparator getComparator(List<AggregatorFactory> aggregatorSpecs, List<PostAggregator> postAggregatorSpecs) { Comparator comp = null; for (AggregatorFactory factory : aggregatorSpecs) { if (metric.equals(factory.getName())) { comp = factory.getComparator(); break; } } for (PostAggregator pf : postAggregatorSpecs) { if (metric.equals(pf.getName())) { comp = pf.getComparator(); break; } } return comp; }
nextOrdering = metricOrdering(columnName, postAggregatorsMap.get(columnName).getComparator()); } else if (aggregatorsMap.containsKey(columnName)) { nextOrdering = metricOrdering(columnName, aggregatorsMap.get(columnName).getComparator()); } else if (dimensionsMap.containsKey(columnName)) { nextOrdering = dimensionOrdering(columnName, columnSpec.getDimensionComparator());