|
@@ -16,6 +16,7 @@ import org.apache.lucene.util.BytesRef;
|
|
|
import java.io.IOException;
|
|
|
import java.io.UncheckedIOException;
|
|
|
import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
|
|
|
|
import static org.junit.Assert.assertNotNull;
|
|
@@ -150,7 +151,7 @@ public class TestBlock implements BlockLoader.Block {
|
|
|
|
|
|
@Override
|
|
|
public BlockLoader.AggregateMetricDoubleBuilder aggregateMetricDoubleBuilder(int count) {
|
|
|
- return null;
|
|
|
+ return new AggregateMetricDoubleBlockBuilder();
|
|
|
}
|
|
|
};
|
|
|
}
|
|
@@ -243,4 +244,98 @@ public class TestBlock implements BlockLoader.Block {
|
|
|
// TODO assert that we close the test block builders
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Test implementation of {@link org.elasticsearch.index.mapper.BlockLoader.AggregateMetricDoubleBuilder}.
|
|
|
+ * The implementation here is fairly close to the production one.
|
|
|
+ */
|
|
|
+ private static class AggregateMetricDoubleBlockBuilder implements BlockLoader.AggregateMetricDoubleBuilder {
|
|
|
+ private final DoubleBuilder min = new DoubleBuilder();
|
|
|
+ private final DoubleBuilder max = new DoubleBuilder();
|
|
|
+ private final DoubleBuilder sum = new DoubleBuilder();
|
|
|
+ private final IntBuilder count = new IntBuilder();
|
|
|
+
|
|
|
+ private static class DoubleBuilder extends TestBlock.Builder implements BlockLoader.DoubleBuilder {
|
|
|
+ @Override
|
|
|
+ public BlockLoader.DoubleBuilder appendDouble(double value) {
|
|
|
+ add(value);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private static class IntBuilder extends TestBlock.Builder implements BlockLoader.IntBuilder {
|
|
|
+ @Override
|
|
|
+ public BlockLoader.IntBuilder appendInt(int value) {
|
|
|
+ add(value);
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BlockLoader.DoubleBuilder min() {
|
|
|
+ return min;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BlockLoader.DoubleBuilder max() {
|
|
|
+ return max;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BlockLoader.DoubleBuilder sum() {
|
|
|
+ return sum;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BlockLoader.IntBuilder count() {
|
|
|
+ return count;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BlockLoader.Block build() {
|
|
|
+ var minBlock = min.build();
|
|
|
+ var maxBlock = max.build();
|
|
|
+ var sumBlock = sum.build();
|
|
|
+ var countBlock = count.build();
|
|
|
+
|
|
|
+ assert minBlock.size() == maxBlock.size();
|
|
|
+ assert maxBlock.size() == sumBlock.size();
|
|
|
+ assert sumBlock.size() == countBlock.size();
|
|
|
+
|
|
|
+ var values = new ArrayList<>(minBlock.size());
|
|
|
+
|
|
|
+ for (int i = 0; i < minBlock.size(); i++) {
|
|
|
+ // we need to represent this complex block somehow
|
|
|
+ var value = new HashMap<String, Object>();
|
|
|
+ value.put("min", minBlock.values.get(i));
|
|
|
+ value.put("max", maxBlock.values.get(i));
|
|
|
+ value.put("sum", sumBlock.values.get(i));
|
|
|
+ value.put("value_count", countBlock.values.get(i));
|
|
|
+
|
|
|
+ values.add(value);
|
|
|
+ }
|
|
|
+
|
|
|
+ return new TestBlock(values);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BlockLoader.Builder appendNull() {
|
|
|
+ throw new UnsupportedOperationException();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BlockLoader.Builder beginPositionEntry() {
|
|
|
+ throw new UnsupportedOperationException();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public BlockLoader.Builder endPositionEntry() {
|
|
|
+ throw new UnsupportedOperationException();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void close() {
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|