This is an automated email from the ASF dual-hosted git repository.
gian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new 741b4ed add output type information to ExpressionPostAggregator
(#11818)
741b4ed is described below
commit 741b4ed516044ef95e685419ef5cf4aa5c0d1e8e
Author: Clint Wylie <[email protected]>
AuthorDate: Fri Oct 22 13:52:51 2021 -0700
add output type information to ExpressionPostAggregator (#11818)
* add ColumnInspector argument to PostAggregator.getType to allow post-aggs
to compute their output type based on input types
* add test for test for coverage
* simplify
* Remove unused imports.
Co-authored-by: Gian Merlino <[email protected]>
---
.../druid/math/expr/SettableObjectBinding.java | 7 +
.../math/expr/SettableObjectBindingTest.java} | 42 ++----
.../aggregator/MomentSketchMaxPostAggregator.java | 3 +-
.../aggregator/MomentSketchMinPostAggregator.java | 3 +-
.../MomentSketchQuantilePostAggregator.java | 3 +-
.../TDigestSketchToQuantilePostAggregator.java | 3 +-
.../TDigestSketchToQuantilesPostAggregator.java | 3 +-
.../hll/HllSketchToEstimatePostAggregator.java | 3 +-
...llSketchToEstimateWithBoundsPostAggregator.java | 3 +-
.../hll/HllSketchToStringPostAggregator.java | 3 +-
.../hll/HllSketchUnionPostAggregator.java | 4 +-
.../DoublesSketchToCDFPostAggregator.java | 3 +-
.../DoublesSketchToHistogramPostAggregator.java | 4 +-
.../DoublesSketchToQuantilePostAggregator.java | 3 +-
.../DoublesSketchToQuantilesPostAggregator.java | 3 +-
.../DoublesSketchToRankPostAggregator.java | 3 +-
.../DoublesSketchToStringPostAggregator.java | 3 +-
.../theta/SketchConstantPostAggregator.java | 4 +-
.../theta/SketchEstimatePostAggregator.java | 3 +-
.../theta/SketchSetPostAggregator.java | 4 +-
.../theta/SketchToStringPostAggregator.java | 3 +-
.../ArrayOfDoublesSketchSetOpPostAggregator.java | 4 +-
.../ArrayOfDoublesSketchTTestPostAggregator.java | 3 +-
...lesSketchToEstimateAndBoundsPostAggregator.java | 3 +-
...rayOfDoublesSketchToEstimatePostAggregator.java | 3 +-
.../ArrayOfDoublesSketchToMeansPostAggregator.java | 3 +-
...yOfDoublesSketchToNumEntriesPostAggregator.java | 3 +-
...ublesSketchToQuantilesSketchPostAggregator.java | 4 +-
...ArrayOfDoublesSketchToStringPostAggregator.java | 3 +-
...ayOfDoublesSketchToVariancesPostAggregator.java | 3 +-
.../histogram/BucketsPostAggregator.java | 4 +-
.../histogram/CustomBucketsPostAggregator.java | 4 +-
.../histogram/EqualBucketsPostAggregator.java | 4 +-
.../aggregation/histogram/MaxPostAggregator.java | 3 +-
.../aggregation/histogram/MinPostAggregator.java | 3 +-
.../histogram/QuantilePostAggregator.java | 3 +-
.../histogram/QuantilesPostAggregator.java | 4 +-
.../teststats/PvaluefromZscorePostAggregator.java | 3 +-
.../aggregation/teststats/ZtestPostAggregator.java | 3 +-
.../variance/StandardDeviationPostAggregator.java | 3 +-
.../druid/query/aggregation/PostAggregator.java | 4 +-
.../HyperUniqueFinalizingPostAggregator.java | 3 +-
.../aggregation/post/ArithmeticPostAggregator.java | 3 +-
.../aggregation/post/ConstantPostAggregator.java | 3 +-
.../post/DoubleGreatestPostAggregator.java | 3 +-
.../post/DoubleLeastPostAggregator.java | 3 +-
.../aggregation/post/ExpressionPostAggregator.java | 25 ++--
.../post/FieldAccessPostAggregator.java | 13 +-
.../post/FinalizingFieldAccessPostAggregator.java | 3 +-
.../aggregation/post/JavaScriptPostAggregator.java | 3 +-
.../post/LongGreatestPostAggregator.java | 3 +-
.../aggregation/post/LongLeastPostAggregator.java | 3 +-
.../apache/druid/segment/column/RowSignature.java | 5 +-
.../post/ExpressionPostAggregatorTest.java | 144 +++++++++++++++++++++
.../post/FieldAccessPostAggregatorTest.java | 46 ++++++-
55 files changed, 337 insertions(+), 100 deletions(-)
diff --git
a/core/src/main/java/org/apache/druid/math/expr/SettableObjectBinding.java
b/core/src/main/java/org/apache/druid/math/expr/SettableObjectBinding.java
index 8b414e5..600e1e2 100644
--- a/core/src/main/java/org/apache/druid/math/expr/SettableObjectBinding.java
+++ b/core/src/main/java/org/apache/druid/math/expr/SettableObjectBinding.java
@@ -19,6 +19,7 @@
package org.apache.druid.math.expr;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.Maps;
import javax.annotation.Nullable;
@@ -54,4 +55,10 @@ public class SettableObjectBinding implements
Expr.ObjectBinding
bindings.put(name, value);
return this;
}
+
+ @VisibleForTesting
+ public Map<String, Object> asMap()
+ {
+ return bindings;
+ }
}
diff --git
a/core/src/main/java/org/apache/druid/math/expr/SettableObjectBinding.java
b/core/src/test/java/org/apache/druid/math/expr/SettableObjectBindingTest.java
similarity index 55%
copy from
core/src/main/java/org/apache/druid/math/expr/SettableObjectBinding.java
copy to
core/src/test/java/org/apache/druid/math/expr/SettableObjectBindingTest.java
index 8b414e5..399094f 100644
--- a/core/src/main/java/org/apache/druid/math/expr/SettableObjectBinding.java
+++
b/core/src/test/java/org/apache/druid/math/expr/SettableObjectBindingTest.java
@@ -19,39 +19,21 @@
package org.apache.druid.math.expr;
-import com.google.common.collect.Maps;
-import javax.annotation.Nullable;
-import java.util.HashMap;
-import java.util.Map;
+import com.google.common.collect.ImmutableMap;
+import org.junit.Assert;
+import org.junit.Test;
-/**
- * Simple map backed object binding
- */
-public class SettableObjectBinding implements Expr.ObjectBinding
+public class SettableObjectBindingTest
{
- private final Map<String, Object> bindings;
-
- public SettableObjectBinding()
- {
- this.bindings = new HashMap<>();
- }
-
- public SettableObjectBinding(int expectedSize)
- {
- this.bindings = Maps.newHashMapWithExpectedSize(expectedSize);
- }
-
- @Nullable
- @Override
- public Object get(String name)
- {
- return bindings.get(name);
- }
-
- public SettableObjectBinding withBinding(String name, @Nullable Object value)
+ @Test
+ public void testSettableBinding()
{
- bindings.put(name, value);
- return this;
+ SettableObjectBinding binding = new SettableObjectBinding(10);
+ Assert.assertEquals(0, binding.asMap().size());
+ binding = binding.withBinding("x", ExpressionType.LONG);
+ Assert.assertEquals(ExpressionType.LONG, binding.get("x"));
+ Assert.assertNull(binding.get("y"));
+ Assert.assertEquals(ImmutableMap.of("x", ExpressionType.LONG),
binding.asMap());
}
}
diff --git
a/extensions-contrib/momentsketch/src/main/java/org/apache/druid/query/aggregation/momentsketch/aggregator/MomentSketchMaxPostAggregator.java
b/extensions-contrib/momentsketch/src/main/java/org/apache/druid/query/aggregation/momentsketch/aggregator/MomentSketchMaxPostAggregator.java
index 9237041..1e7a625 100644
---
a/extensions-contrib/momentsketch/src/main/java/org/apache/druid/query/aggregation/momentsketch/aggregator/MomentSketchMaxPostAggregator.java
+++
b/extensions-contrib/momentsketch/src/main/java/org/apache/druid/query/aggregation/momentsketch/aggregator/MomentSketchMaxPostAggregator.java
@@ -28,6 +28,7 @@ import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.momentsketch.MomentSketchWrapper;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -59,7 +60,7 @@ public class MomentSketchMaxPostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE;
}
diff --git
a/extensions-contrib/momentsketch/src/main/java/org/apache/druid/query/aggregation/momentsketch/aggregator/MomentSketchMinPostAggregator.java
b/extensions-contrib/momentsketch/src/main/java/org/apache/druid/query/aggregation/momentsketch/aggregator/MomentSketchMinPostAggregator.java
index 34f3af0..f0646f2 100644
---
a/extensions-contrib/momentsketch/src/main/java/org/apache/druid/query/aggregation/momentsketch/aggregator/MomentSketchMinPostAggregator.java
+++
b/extensions-contrib/momentsketch/src/main/java/org/apache/druid/query/aggregation/momentsketch/aggregator/MomentSketchMinPostAggregator.java
@@ -28,6 +28,7 @@ import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.momentsketch.MomentSketchWrapper;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -58,7 +59,7 @@ public class MomentSketchMinPostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE;
}
diff --git
a/extensions-contrib/momentsketch/src/main/java/org/apache/druid/query/aggregation/momentsketch/aggregator/MomentSketchQuantilePostAggregator.java
b/extensions-contrib/momentsketch/src/main/java/org/apache/druid/query/aggregation/momentsketch/aggregator/MomentSketchQuantilePostAggregator.java
index 3852e78..f1710f4 100644
---
a/extensions-contrib/momentsketch/src/main/java/org/apache/druid/query/aggregation/momentsketch/aggregator/MomentSketchQuantilePostAggregator.java
+++
b/extensions-contrib/momentsketch/src/main/java/org/apache/druid/query/aggregation/momentsketch/aggregator/MomentSketchQuantilePostAggregator.java
@@ -28,6 +28,7 @@ import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.momentsketch.MomentSketchWrapper;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Arrays;
@@ -63,7 +64,7 @@ public class MomentSketchQuantilePostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE_ARRAY;
}
diff --git
a/extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/TDigestSketchToQuantilePostAggregator.java
b/extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/TDigestSketchToQuantilePostAggregator.java
index 987a15a..845546c 100644
---
a/extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/TDigestSketchToQuantilePostAggregator.java
+++
b/extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/TDigestSketchToQuantilePostAggregator.java
@@ -28,6 +28,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -68,7 +69,7 @@ public class TDigestSketchToQuantilePostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE;
}
diff --git
a/extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/TDigestSketchToQuantilesPostAggregator.java
b/extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/TDigestSketchToQuantilesPostAggregator.java
index 25f4c25..932a772 100644
---
a/extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/TDigestSketchToQuantilesPostAggregator.java
+++
b/extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/TDigestSketchToQuantilesPostAggregator.java
@@ -28,6 +28,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Arrays;
@@ -69,7 +70,7 @@ public class TDigestSketchToQuantilesPostAggregator
implements PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE_ARRAY;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchToEstimatePostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchToEstimatePostAggregator.java
index df4b4ec..52dc625 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchToEstimatePostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchToEstimatePostAggregator.java
@@ -27,6 +27,7 @@ import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.post.ArithmeticPostAggregator;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -64,7 +65,7 @@ public class HllSketchToEstimatePostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return round ? ColumnType.LONG : ColumnType.DOUBLE;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchToEstimateWithBoundsPostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchToEstimateWithBoundsPostAggregator.java
index ff9d796..e36b41e 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchToEstimateWithBoundsPostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchToEstimateWithBoundsPostAggregator.java
@@ -27,6 +27,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.AggregatorUtil;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import javax.annotation.Nullable;
@@ -70,7 +71,7 @@ public class HllSketchToEstimateWithBoundsPostAggregator
implements PostAggregat
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE_ARRAY;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchToStringPostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchToStringPostAggregator.java
index a673ad2..f213ad9 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchToStringPostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchToStringPostAggregator.java
@@ -26,6 +26,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.AggregatorUtil;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -87,7 +88,7 @@ public class HllSketchToStringPostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.STRING;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchUnionPostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchUnionPostAggregator.java
index f180dbc..833d12d 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchUnionPostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchUnionPostAggregator.java
@@ -28,6 +28,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.AggregatorUtil;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import javax.annotation.Nullable;
@@ -73,9 +74,10 @@ public class HllSketchUnionPostAggregator implements
PostAggregator
/**
* actual type is {@link HllSketch}
+ * @param signature
*/
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return HllSketchMergeAggregatorFactory.TYPE;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToCDFPostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToCDFPostAggregator.java
index 3af4413..7427f94 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToCDFPostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToCDFPostAggregator.java
@@ -28,6 +28,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Arrays;
@@ -73,7 +74,7 @@ public class DoublesSketchToCDFPostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE_ARRAY;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToHistogramPostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToHistogramPostAggregator.java
index 34cdd6a..f707c27 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToHistogramPostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToHistogramPostAggregator.java
@@ -29,6 +29,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.AggregatorUtil;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import javax.annotation.Nullable;
@@ -105,9 +106,10 @@ public class DoublesSketchToHistogramPostAggregator
implements PostAggregator
/**
* actual type is {@link DoublesSketch}
+ * @param signature
*/
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE_ARRAY;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToQuantilePostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToQuantilePostAggregator.java
index f387ee8..97de4e2 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToQuantilePostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToQuantilePostAggregator.java
@@ -28,6 +28,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.AggregatorUtil;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -61,7 +62,7 @@ public class DoublesSketchToQuantilePostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToQuantilesPostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToQuantilesPostAggregator.java
index a4bf3bc..d0c8af2 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToQuantilesPostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToQuantilesPostAggregator.java
@@ -28,6 +28,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.AggregatorUtil;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Arrays;
@@ -61,7 +62,7 @@ public class DoublesSketchToQuantilesPostAggregator
implements PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE_ARRAY;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToRankPostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToRankPostAggregator.java
index 5ab2683..5196029 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToRankPostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToRankPostAggregator.java
@@ -28,6 +28,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -61,7 +62,7 @@ public class DoublesSketchToRankPostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToStringPostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToStringPostAggregator.java
index 8857e6e..1f98f42 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToStringPostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchToStringPostAggregator.java
@@ -28,6 +28,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.AggregatorUtil;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -58,7 +59,7 @@ public class DoublesSketchToStringPostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.STRING;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchConstantPostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchConstantPostAggregator.java
index 708a5e4..b3541bd 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchConstantPostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchConstantPostAggregator.java
@@ -27,6 +27,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Collections;
@@ -80,9 +81,10 @@ public class SketchConstantPostAggregator implements
PostAggregator
/**
* actual type is {@link SketchHolder}
+ * @param signature
*/
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return SketchModule.BUILD_TYPE;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchEstimatePostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchEstimatePostAggregator.java
index ccda663..119fb01 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchEstimatePostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchEstimatePostAggregator.java
@@ -28,6 +28,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import javax.annotation.Nullable;
@@ -102,7 +103,7 @@ public class SketchEstimatePostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return errorBoundsStdDev != null ? SketchModule.MERGE_TYPE :
ColumnType.DOUBLE;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchSetPostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchSetPostAggregator.java
index 92ff6aa..eef2889 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchSetPostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchSetPostAggregator.java
@@ -27,6 +27,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -97,9 +98,10 @@ public class SketchSetPostAggregator implements
PostAggregator
/**
* actual type is {@link SketchHolder}
+ * @param signature
*/
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return SketchModule.MERGE_TYPE;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchToStringPostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchToStringPostAggregator.java
index 9dab445..29265de 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchToStringPostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchToStringPostAggregator.java
@@ -25,6 +25,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -80,7 +81,7 @@ public class SketchToStringPostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.STRING;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchSetOpPostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchSetOpPostAggregator.java
index cd19337..6cbb3a0 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchSetOpPostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchSetOpPostAggregator.java
@@ -27,6 +27,7 @@ import org.apache.druid.java.util.common.IAE;
import org.apache.druid.query.aggregation.AggregatorUtil;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import javax.annotation.Nullable;
@@ -95,9 +96,10 @@ public class ArrayOfDoublesSketchSetOpPostAggregator extends
ArrayOfDoublesSketc
/**
* actual type is {@link ArrayOfDoublesSketch}
+ * @param signature
*/
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ArrayOfDoublesSketchModule.MERGE_TYPE;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchTTestPostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchTTestPostAggregator.java
index 86930b4..e04f558 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchTTestPostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchTTestPostAggregator.java
@@ -29,6 +29,7 @@ import org.apache.druid.java.util.common.IAE;
import org.apache.druid.query.aggregation.AggregatorUtil;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Arrays;
@@ -88,7 +89,7 @@ public class ArrayOfDoublesSketchTTestPostAggregator extends
ArrayOfDoublesSketc
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE_ARRAY;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToEstimateAndBoundsPostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToEstimateAndBoundsPostAggregator.java
index d9519df..ed6008e 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToEstimateAndBoundsPostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToEstimateAndBoundsPostAggregator.java
@@ -26,6 +26,7 @@ import org.apache.druid.java.util.common.IAE;
import org.apache.druid.query.aggregation.AggregatorUtil;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import javax.annotation.Nullable;
@@ -70,7 +71,7 @@ public class
ArrayOfDoublesSketchToEstimateAndBoundsPostAggregator extends Array
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE_ARRAY;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToEstimatePostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToEstimatePostAggregator.java
index 0052e06..bb6cb3f 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToEstimatePostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToEstimatePostAggregator.java
@@ -25,6 +25,7 @@ import
org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch;
import org.apache.druid.query.aggregation.AggregatorUtil;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -53,7 +54,7 @@ public class ArrayOfDoublesSketchToEstimatePostAggregator
extends ArrayOfDoubles
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToMeansPostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToMeansPostAggregator.java
index 4054b64..fb490c8 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToMeansPostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToMeansPostAggregator.java
@@ -28,6 +28,7 @@ import org.apache.druid.java.util.common.IAE;
import org.apache.druid.query.aggregation.AggregatorUtil;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Arrays;
@@ -69,7 +70,7 @@ public class ArrayOfDoublesSketchToMeansPostAggregator
extends ArrayOfDoublesSke
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE_ARRAY;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToNumEntriesPostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToNumEntriesPostAggregator.java
index b4dad0b..d696c82 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToNumEntriesPostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToNumEntriesPostAggregator.java
@@ -25,6 +25,7 @@ import
org.apache.datasketches.tuple.arrayofdoubles.ArrayOfDoublesSketch;
import org.apache.druid.query.aggregation.AggregatorUtil;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -53,7 +54,7 @@ public class ArrayOfDoublesSketchToNumEntriesPostAggregator
extends ArrayOfDoubl
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.LONG;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToQuantilesSketchPostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToQuantilesSketchPostAggregator.java
index 60fc04e..dc95af4 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToQuantilesSketchPostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToQuantilesSketchPostAggregator.java
@@ -29,6 +29,7 @@ import org.apache.druid.query.aggregation.AggregatorUtil;
import org.apache.druid.query.aggregation.PostAggregator;
import
org.apache.druid.query.aggregation.datasketches.quantiles.DoublesSketchAggregatorFactory;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import javax.annotation.Nullable;
@@ -94,9 +95,10 @@ public class
ArrayOfDoublesSketchToQuantilesSketchPostAggregator extends ArrayOf
/**
* actual type is {@link DoublesSketch}
+ * @param signature
*/
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ArrayOfDoublesSketchModule.MERGE_TYPE;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToStringPostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToStringPostAggregator.java
index 8ed72e8..6eacf00 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToStringPostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToStringPostAggregator.java
@@ -26,6 +26,7 @@ import org.apache.druid.java.util.common.IAE;
import org.apache.druid.query.aggregation.AggregatorUtil;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -56,7 +57,7 @@ public class ArrayOfDoublesSketchToStringPostAggregator
extends ArrayOfDoublesSk
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.STRING;
}
diff --git
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToVariancesPostAggregator.java
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToVariancesPostAggregator.java
index 359792b..61579fe 100644
---
a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToVariancesPostAggregator.java
+++
b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchToVariancesPostAggregator.java
@@ -28,6 +28,7 @@ import org.apache.druid.java.util.common.IAE;
import org.apache.druid.query.aggregation.AggregatorUtil;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Arrays;
@@ -69,7 +70,7 @@ public class ArrayOfDoublesSketchToVariancesPostAggregator
extends ArrayOfDouble
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE_ARRAY;
}
diff --git
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/BucketsPostAggregator.java
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/BucketsPostAggregator.java
index d42c15f..34115db 100644
---
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/BucketsPostAggregator.java
+++
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/BucketsPostAggregator.java
@@ -29,6 +29,7 @@ import
org.apache.druid.query.aggregation.HistogramAggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Map;
@@ -72,9 +73,10 @@ public class BucketsPostAggregator extends
ApproximateHistogramPostAggregator
/**
* actual type is {@link Histogram}
+ * @param signature
*/
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return HistogramAggregatorFactory.TYPE;
}
diff --git
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/CustomBucketsPostAggregator.java
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/CustomBucketsPostAggregator.java
index 01e22c5..0caf0bd 100644
---
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/CustomBucketsPostAggregator.java
+++
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/CustomBucketsPostAggregator.java
@@ -28,6 +28,7 @@ import
org.apache.druid.query.aggregation.HistogramAggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Arrays;
@@ -65,9 +66,10 @@ public class CustomBucketsPostAggregator extends
ApproximateHistogramPostAggrega
/**
* actual type is {@link Histogram}
+ * @param signature
*/
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return HistogramAggregatorFactory.TYPE;
}
diff --git
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/EqualBucketsPostAggregator.java
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/EqualBucketsPostAggregator.java
index cad63c7..a1efd79 100644
---
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/EqualBucketsPostAggregator.java
+++
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/EqualBucketsPostAggregator.java
@@ -29,6 +29,7 @@ import
org.apache.druid.query.aggregation.HistogramAggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Map;
@@ -69,9 +70,10 @@ public class EqualBucketsPostAggregator extends
ApproximateHistogramPostAggregat
/**
* actual type is {@link Histogram}
+ * @param signature
*/
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return HistogramAggregatorFactory.TYPE;
}
diff --git
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/MaxPostAggregator.java
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/MaxPostAggregator.java
index 7f0f5ba..d845e8f 100644
---
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/MaxPostAggregator.java
+++
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/MaxPostAggregator.java
@@ -27,6 +27,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -74,7 +75,7 @@ public class MaxPostAggregator extends
ApproximateHistogramPostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE;
}
diff --git
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/MinPostAggregator.java
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/MinPostAggregator.java
index 5d856f7..21c7e21 100644
---
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/MinPostAggregator.java
+++
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/MinPostAggregator.java
@@ -28,6 +28,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -76,7 +77,7 @@ public class MinPostAggregator extends
ApproximateHistogramPostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE;
}
diff --git
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/QuantilePostAggregator.java
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/QuantilePostAggregator.java
index f2efe05..86f6a06 100644
---
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/QuantilePostAggregator.java
+++
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/QuantilePostAggregator.java
@@ -28,6 +28,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -85,7 +86,7 @@ public class QuantilePostAggregator extends
ApproximateHistogramPostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.FLOAT;
}
diff --git
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/QuantilesPostAggregator.java
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/QuantilesPostAggregator.java
index e2cca39..ceee9f1 100644
---
a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/QuantilesPostAggregator.java
+++
b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/QuantilesPostAggregator.java
@@ -29,6 +29,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Arrays;
@@ -95,9 +96,10 @@ public class QuantilesPostAggregator extends
ApproximateHistogramPostAggregator
/**
* actual type is {@link Quantiles}
+ * @param signature
*/
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
// todo: ???
return ColumnType.UNKNOWN_COMPLEX;
diff --git
a/extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/teststats/PvaluefromZscorePostAggregator.java
b/extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/teststats/PvaluefromZscorePostAggregator.java
index c25df5fa..df52cfe 100644
---
a/extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/teststats/PvaluefromZscorePostAggregator.java
+++
b/extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/teststats/PvaluefromZscorePostAggregator.java
@@ -31,6 +31,7 @@ import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.post.ArithmeticPostAggregator;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Collections;
@@ -109,7 +110,7 @@ public class PvaluefromZscorePostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE;
}
diff --git
a/extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/teststats/ZtestPostAggregator.java
b/extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/teststats/ZtestPostAggregator.java
index 2a647bb..f59949e 100644
---
a/extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/teststats/ZtestPostAggregator.java
+++
b/extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/teststats/ZtestPostAggregator.java
@@ -30,6 +30,7 @@ import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.post.ArithmeticPostAggregator;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Collections;
@@ -123,7 +124,7 @@ public class ZtestPostAggregator implements PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE;
}
diff --git
a/extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/StandardDeviationPostAggregator.java
b/extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/StandardDeviationPostAggregator.java
index f7d2bc6..2d01167 100644
---
a/extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/StandardDeviationPostAggregator.java
+++
b/extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/StandardDeviationPostAggregator.java
@@ -30,6 +30,7 @@ import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.post.ArithmeticPostAggregator;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import javax.annotation.Nullable;
@@ -90,7 +91,7 @@ public class StandardDeviationPostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE;
}
diff --git
a/processing/src/main/java/org/apache/druid/query/aggregation/PostAggregator.java
b/processing/src/main/java/org/apache/druid/query/aggregation/PostAggregator.java
index 61e85e4..06e64af 100644
---
a/processing/src/main/java/org/apache/druid/query/aggregation/PostAggregator.java
+++
b/processing/src/main/java/org/apache/druid/query/aggregation/PostAggregator.java
@@ -21,6 +21,7 @@ package org.apache.druid.query.aggregation;
import org.apache.druid.guice.annotations.ExtensionPoint;
import org.apache.druid.java.util.common.Cacheable;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import javax.annotation.Nullable;
@@ -47,9 +48,10 @@ public interface PostAggregator extends Cacheable
/**
* Return the output type of a row processed with this post aggregator.
Refer to the {@link ColumnType} javadocs
* for details on the implications of choosing a type.
+ * @param signature
*/
@Nullable
- ColumnType getType();
+ ColumnType getType(ColumnInspector signature);
/**
* Allows returning an enriched post aggregator, built from contextual
information available from the given map of
diff --git
a/processing/src/main/java/org/apache/druid/query/aggregation/hyperloglog/HyperUniqueFinalizingPostAggregator.java
b/processing/src/main/java/org/apache/druid/query/aggregation/hyperloglog/HyperUniqueFinalizingPostAggregator.java
index 301eff3..b69f3fa 100644
---
a/processing/src/main/java/org/apache/druid/query/aggregation/hyperloglog/HyperUniqueFinalizingPostAggregator.java
+++
b/processing/src/main/java/org/apache/druid/query/aggregation/hyperloglog/HyperUniqueFinalizingPostAggregator.java
@@ -28,6 +28,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.aggregation.post.PostAggregatorIds;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import javax.annotation.Nullable;
@@ -104,7 +105,7 @@ public class HyperUniqueFinalizingPostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return aggregatorFactory != null
? aggregatorFactory.getFinalizedType()
diff --git
a/processing/src/main/java/org/apache/druid/query/aggregation/post/ArithmeticPostAggregator.java
b/processing/src/main/java/org/apache/druid/query/aggregation/post/ArithmeticPostAggregator.java
index a8007fa..d428a2b 100644
---
a/processing/src/main/java/org/apache/druid/query/aggregation/post/ArithmeticPostAggregator.java
+++
b/processing/src/main/java/org/apache/druid/query/aggregation/post/ArithmeticPostAggregator.java
@@ -29,6 +29,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.DoubleSumAggregator;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import javax.annotation.Nullable;
@@ -134,7 +135,7 @@ public class ArithmeticPostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE;
}
diff --git
a/processing/src/main/java/org/apache/druid/query/aggregation/post/ConstantPostAggregator.java
b/processing/src/main/java/org/apache/druid/query/aggregation/post/ConstantPostAggregator.java
index 6f49727..d605d3d 100644
---
a/processing/src/main/java/org/apache/druid/query/aggregation/post/ConstantPostAggregator.java
+++
b/processing/src/main/java/org/apache/druid/query/aggregation/post/ConstantPostAggregator.java
@@ -26,6 +26,7 @@ import org.apache.druid.java.util.common.guava.Comparators;
import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -76,7 +77,7 @@ public class ConstantPostAggregator implements PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return constantValue instanceof Long ? ColumnType.LONG : ColumnType.DOUBLE;
}
diff --git
a/processing/src/main/java/org/apache/druid/query/aggregation/post/DoubleGreatestPostAggregator.java
b/processing/src/main/java/org/apache/druid/query/aggregation/post/DoubleGreatestPostAggregator.java
index 4d28de6..106fb9e 100644
---
a/processing/src/main/java/org/apache/druid/query/aggregation/post/DoubleGreatestPostAggregator.java
+++
b/processing/src/main/java/org/apache/druid/query/aggregation/post/DoubleGreatestPostAggregator.java
@@ -27,6 +27,7 @@ import org.apache.druid.query.Queries;
import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -101,7 +102,7 @@ public class DoubleGreatestPostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE;
}
diff --git
a/processing/src/main/java/org/apache/druid/query/aggregation/post/DoubleLeastPostAggregator.java
b/processing/src/main/java/org/apache/druid/query/aggregation/post/DoubleLeastPostAggregator.java
index ae343c7..828f9fa 100644
---
a/processing/src/main/java/org/apache/druid/query/aggregation/post/DoubleLeastPostAggregator.java
+++
b/processing/src/main/java/org/apache/druid/query/aggregation/post/DoubleLeastPostAggregator.java
@@ -27,6 +27,7 @@ import org.apache.druid.query.Queries;
import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -101,7 +102,7 @@ public class DoubleLeastPostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE;
}
diff --git
a/processing/src/main/java/org/apache/druid/query/aggregation/post/ExpressionPostAggregator.java
b/processing/src/main/java/org/apache/druid/query/aggregation/post/ExpressionPostAggregator.java
index 5fecc98..d3fa29b 100644
---
a/processing/src/main/java/org/apache/druid/query/aggregation/post/ExpressionPostAggregator.java
+++
b/processing/src/main/java/org/apache/druid/query/aggregation/post/ExpressionPostAggregator.java
@@ -31,11 +31,13 @@ import com.google.common.collect.Maps;
import org.apache.druid.java.util.common.guava.Comparators;
import org.apache.druid.math.expr.Expr;
import org.apache.druid.math.expr.ExprMacroTable;
+import org.apache.druid.math.expr.ExpressionType;
import org.apache.druid.math.expr.InputBindings;
import org.apache.druid.math.expr.Parser;
import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import org.apache.druid.utils.CollectionUtils;
@@ -65,11 +67,6 @@ public class ExpressionPostAggregator implements
PostAggregator
@Nullable
private final String ordering;
- // type is ignored from equals and friends because it is computed by
decorate, and all post-aggs should be decorated
- // prior to usage (and is currently done so in the query constructors of all
queries which can have post-aggs)
- @Nullable
- private final ColumnType outputType;
-
private final ExprMacroTable macroTable;
private final Map<String, Function<Object, Object>> finalizers;
@@ -111,7 +108,6 @@ public class ExpressionPostAggregator implements
PostAggregator
name,
expression,
ordering,
- null, // in the future this will be computed by decorate
macroTable,
finalizers,
parsed,
@@ -123,7 +119,6 @@ public class ExpressionPostAggregator implements
PostAggregator
final String name,
final String expression,
@Nullable final String ordering,
- @Nullable final ColumnType outputType,
final ExprMacroTable macroTable,
final Map<String, Function<Object, Object>> finalizers,
final Supplier<Expr> parsed,
@@ -135,9 +130,6 @@ public class ExpressionPostAggregator implements
PostAggregator
this.name = name;
this.expression = expression;
this.ordering = ordering;
- // allow nulls to match previous behavior when type was never specified,
however this should be non-nullable
- // in the future, when expression support type inference
- this.outputType = outputType;
// comparator should be specialized to output type ... someday
this.comparator = ordering == null ? DEFAULT_COMPARATOR :
Ordering.valueOf(ordering);
this.macroTable = macroTable;
@@ -189,10 +181,14 @@ public class ExpressionPostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
- // computed by decorate
- return outputType;
+ final ExpressionType type = parsed.get().getOutputType(signature);
+ if (type == null) {
+ return null;
+ } else {
+ return ExpressionType.toColumnType(type);
+ }
}
@Override
@@ -202,7 +198,6 @@ public class ExpressionPostAggregator implements
PostAggregator
name,
expression,
ordering,
- null, // this should be computed from expression output type once it
supports output type inference
macroTable,
CollectionUtils.mapValues(aggregators, aggregatorFactory ->
aggregatorFactory::finalizeComputation),
parsed,
@@ -245,7 +240,7 @@ public class ExpressionPostAggregator implements
PostAggregator
* Ensures the following order: numeric > NaN > Infinite.
*
* The name may be referenced via Ordering.valueOf(String) in the
constructor {@link
- * ExpressionPostAggregator#ExpressionPostAggregator(String, String,
String, ColumnType, ExprMacroTable, Map, Supplier, Supplier)}.
+ * ExpressionPostAggregator#ExpressionPostAggregator(String, String,
String, ExprMacroTable, Map, Supplier, Supplier)}.
*/
@SuppressWarnings("unused")
numericFirst {
diff --git
a/processing/src/main/java/org/apache/druid/query/aggregation/post/FieldAccessPostAggregator.java
b/processing/src/main/java/org/apache/druid/query/aggregation/post/FieldAccessPostAggregator.java
index 2593567..596fb01 100644
---
a/processing/src/main/java/org/apache/druid/query/aggregation/post/FieldAccessPostAggregator.java
+++
b/processing/src/main/java/org/apache/druid/query/aggregation/post/FieldAccessPostAggregator.java
@@ -26,6 +26,8 @@ import com.google.common.collect.Sets;
import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
+import org.apache.druid.segment.column.ColumnCapabilities;
import org.apache.druid.segment.column.ColumnType;
import javax.annotation.Nullable;
@@ -89,9 +91,16 @@ public class FieldAccessPostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
- return type;
+ if (type != null) {
+ return type;
+ }
+ final ColumnCapabilities capabilities =
signature.getColumnCapabilities(fieldName);
+ if (capabilities != null) {
+ return capabilities.toColumnType();
+ }
+ return null;
}
@Override
diff --git
a/processing/src/main/java/org/apache/druid/query/aggregation/post/FinalizingFieldAccessPostAggregator.java
b/processing/src/main/java/org/apache/druid/query/aggregation/post/FinalizingFieldAccessPostAggregator.java
index 70bf6ca..967e059 100644
---
a/processing/src/main/java/org/apache/druid/query/aggregation/post/FinalizingFieldAccessPostAggregator.java
+++
b/processing/src/main/java/org/apache/druid/query/aggregation/post/FinalizingFieldAccessPostAggregator.java
@@ -26,6 +26,7 @@ import org.apache.druid.java.util.common.guava.Comparators;
import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import javax.annotation.Nullable;
@@ -106,7 +107,7 @@ public class FinalizingFieldAccessPostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return finalizedType;
}
diff --git
a/processing/src/main/java/org/apache/druid/query/aggregation/post/JavaScriptPostAggregator.java
b/processing/src/main/java/org/apache/druid/query/aggregation/post/JavaScriptPostAggregator.java
index dd20b73..cea2937 100644
---
a/processing/src/main/java/org/apache/druid/query/aggregation/post/JavaScriptPostAggregator.java
+++
b/processing/src/main/java/org/apache/druid/query/aggregation/post/JavaScriptPostAggregator.java
@@ -29,6 +29,7 @@ import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.DoubleSumAggregator;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import org.checkerframework.checker.nullness.qual.EnsuresNonNull;
import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
@@ -176,7 +177,7 @@ public class JavaScriptPostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.DOUBLE;
}
diff --git
a/processing/src/main/java/org/apache/druid/query/aggregation/post/LongGreatestPostAggregator.java
b/processing/src/main/java/org/apache/druid/query/aggregation/post/LongGreatestPostAggregator.java
index 2c7a10c..3c02b90 100644
---
a/processing/src/main/java/org/apache/druid/query/aggregation/post/LongGreatestPostAggregator.java
+++
b/processing/src/main/java/org/apache/druid/query/aggregation/post/LongGreatestPostAggregator.java
@@ -27,6 +27,7 @@ import org.apache.druid.query.Queries;
import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -101,7 +102,7 @@ public class LongGreatestPostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.LONG;
}
diff --git
a/processing/src/main/java/org/apache/druid/query/aggregation/post/LongLeastPostAggregator.java
b/processing/src/main/java/org/apache/druid/query/aggregation/post/LongLeastPostAggregator.java
index be8cc6d..70e7fb4 100644
---
a/processing/src/main/java/org/apache/druid/query/aggregation/post/LongLeastPostAggregator.java
+++
b/processing/src/main/java/org/apache/druid/query/aggregation/post/LongLeastPostAggregator.java
@@ -27,6 +27,7 @@ import org.apache.druid.query.Queries;
import org.apache.druid.query.aggregation.AggregatorFactory;
import org.apache.druid.query.aggregation.PostAggregator;
import org.apache.druid.query.cache.CacheKeyBuilder;
+import org.apache.druid.segment.ColumnInspector;
import org.apache.druid.segment.column.ColumnType;
import java.util.Comparator;
@@ -101,7 +102,7 @@ public class LongLeastPostAggregator implements
PostAggregator
}
@Override
- public ColumnType getType()
+ public ColumnType getType(ColumnInspector signature)
{
return ColumnType.LONG;
}
diff --git
a/processing/src/main/java/org/apache/druid/segment/column/RowSignature.java
b/processing/src/main/java/org/apache/druid/segment/column/RowSignature.java
index 5f88ee4..663926f 100644
--- a/processing/src/main/java/org/apache/druid/segment/column/RowSignature.java
+++ b/processing/src/main/java/org/apache/druid/segment/column/RowSignature.java
@@ -276,8 +276,9 @@ public class RowSignature implements ColumnInspector
"postAggregators must have nonnull names"
);
- // unlike aggregators, the type we see here is what we get, no further
finalization will occur
- add(name, postAggregator.getType());
+ // It's OK to call getType in the order that post-aggregators appear,
because post-aggregators are only
+ // allowed to refer to *earlier* post-aggregators (not later ones; the
order is meaningful).
+ add(name, postAggregator.getType(build()));
}
return this;
diff --git
a/processing/src/test/java/org/apache/druid/query/aggregation/post/ExpressionPostAggregatorTest.java
b/processing/src/test/java/org/apache/druid/query/aggregation/post/ExpressionPostAggregatorTest.java
new file mode 100644
index 0000000..4511199
--- /dev/null
+++
b/processing/src/test/java/org/apache/druid/query/aggregation/post/ExpressionPostAggregatorTest.java
@@ -0,0 +1,144 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.druid.query.aggregation.post;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import nl.jqno.equalsverifier.EqualsVerifier;
+import org.apache.druid.java.util.common.granularity.Granularities;
+import org.apache.druid.math.expr.SettableObjectBinding;
+import org.apache.druid.query.Druids;
+import org.apache.druid.query.aggregation.CountAggregatorFactory;
+import org.apache.druid.query.aggregation.DoubleSumAggregatorFactory;
+import org.apache.druid.query.aggregation.FloatSumAggregatorFactory;
+import org.apache.druid.query.expression.TestExprMacroTable;
+import org.apache.druid.query.timeseries.TimeseriesQuery;
+import org.apache.druid.query.timeseries.TimeseriesQueryQueryToolChest;
+import org.apache.druid.segment.TestHelper;
+import org.apache.druid.segment.column.ColumnType;
+import org.apache.druid.segment.column.RowSignature;
+import org.apache.druid.testing.InitializedNullHandlingTest;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class ExpressionPostAggregatorTest extends InitializedNullHandlingTest
+{
+ private static final ObjectMapper JSON_MAPPER = TestHelper.makeJsonMapper();
+
+ @Test
+ public void testSerde() throws JsonProcessingException
+ {
+ ExpressionPostAggregator postAgg = new ExpressionPostAggregator(
+ "p0",
+ "2 + 3",
+ null,
+ TestExprMacroTable.INSTANCE
+ );
+
+ Assert.assertEquals(
+ postAgg,
+ JSON_MAPPER.readValue(JSON_MAPPER.writeValueAsString(postAgg),
ExpressionPostAggregator.class)
+ );
+ }
+
+ @Test
+ public void testEqualsAndHashcode()
+ {
+ EqualsVerifier.forClass(ExpressionPostAggregator.class)
+ .usingGetClass()
+ .withIgnoredFields("macroTable", "finalizers", "parsed",
"dependentFields", "cacheKey")
+ .verify();
+ }
+
+ @Test
+ public void testOutputTypeAndCompute()
+ {
+ ExpressionPostAggregator postAgg = new ExpressionPostAggregator(
+ "p0",
+ "x + y",
+ null,
+ TestExprMacroTable.INSTANCE
+ );
+
+ RowSignature signature = RowSignature.builder()
+ .add("x", ColumnType.LONG)
+ .add("y", ColumnType.DOUBLE)
+ .build();
+
+ SettableObjectBinding binding = new
SettableObjectBinding().withBinding("x", 2L)
+
.withBinding("y", 3.0);
+
+ Assert.assertEquals(ColumnType.DOUBLE, postAgg.getType(signature));
+
+ Assert.assertEquals(5.0, postAgg.compute(binding.asMap()));
+ }
+
+ @Test
+ public void testNilOutputType()
+ {
+ ExpressionPostAggregator postAgg = new ExpressionPostAggregator(
+ "p0",
+ "x + y",
+ null,
+ TestExprMacroTable.INSTANCE
+ );
+
+ RowSignature signature = RowSignature.builder().build();
+
+ // columns not existing in the output signature means they don't exist, so
the output is also null
+ Assert.assertNull(postAgg.getType(signature));
+ }
+
+ @Test
+ public void testResultArraySignature()
+ {
+ final TimeseriesQuery query =
+ Druids.newTimeseriesQueryBuilder()
+ .dataSource("dummy")
+ .intervals("2000/3000")
+ .granularity(Granularities.HOUR)
+ .aggregators(
+ new CountAggregatorFactory("count"),
+ new DoubleSumAggregatorFactory("double", "col1"),
+ new FloatSumAggregatorFactory("float", "col2")
+ )
+ .postAggregators(
+ new ExpressionPostAggregator("a", "double + float", null,
TestExprMacroTable.INSTANCE),
+ new ExpressionPostAggregator("b", "count + count", null,
TestExprMacroTable.INSTANCE),
+ new ExpressionPostAggregator("c", "count + double", null,
TestExprMacroTable.INSTANCE),
+ new ExpressionPostAggregator("d", "float + float", null,
TestExprMacroTable.INSTANCE)
+ )
+ .build();
+
+ Assert.assertEquals(
+ RowSignature.builder()
+ .addTimeColumn()
+ .add("count", ColumnType.LONG)
+ .add("double", ColumnType.DOUBLE)
+ .add("float", ColumnType.FLOAT)
+ .add("a", ColumnType.DOUBLE)
+ .add("b", ColumnType.LONG)
+ .add("c", ColumnType.DOUBLE)
+ .add("d", ColumnType.DOUBLE) // floats don't exist in
expressions
+ .build(),
+ new TimeseriesQueryQueryToolChest().resultArraySignature(query)
+ );
+ }
+}
diff --git
a/processing/src/test/java/org/apache/druid/query/aggregation/post/FieldAccessPostAggregatorTest.java
b/processing/src/test/java/org/apache/druid/query/aggregation/post/FieldAccessPostAggregatorTest.java
index 4748da7..d80eb10 100644
---
a/processing/src/test/java/org/apache/druid/query/aggregation/post/FieldAccessPostAggregatorTest.java
+++
b/processing/src/test/java/org/apache/druid/query/aggregation/post/FieldAccessPostAggregatorTest.java
@@ -19,6 +19,9 @@
package org.apache.druid.query.aggregation.post;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import nl.jqno.equalsverifier.EqualsVerifier;
import org.apache.druid.java.util.common.granularity.Granularities;
import org.apache.druid.query.Druids;
import org.apache.druid.query.aggregation.CountAggregator;
@@ -27,18 +30,55 @@ import
org.apache.druid.query.aggregation.DoubleSumAggregatorFactory;
import org.apache.druid.query.aggregation.FloatSumAggregatorFactory;
import org.apache.druid.query.timeseries.TimeseriesQuery;
import org.apache.druid.query.timeseries.TimeseriesQueryQueryToolChest;
+import org.apache.druid.segment.TestHelper;
import org.apache.druid.segment.column.ColumnType;
import org.apache.druid.segment.column.RowSignature;
+import org.apache.druid.testing.InitializedNullHandlingTest;
import org.junit.Assert;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
-/**
- */
-public class FieldAccessPostAggregatorTest
+public class FieldAccessPostAggregatorTest extends InitializedNullHandlingTest
{
+ private static final ObjectMapper JSON_MAPPER = TestHelper.makeJsonMapper();
+
+ @Test
+ public void testSerde() throws JsonProcessingException
+ {
+ FieldAccessPostAggregator postAgg = new FieldAccessPostAggregator("name",
"column");
+ Assert.assertEquals(
+ postAgg,
+ JSON_MAPPER.readValue(JSON_MAPPER.writeValueAsString(postAgg),
FieldAccessPostAggregator.class)
+ );
+ }
+
+ @Test
+ public void testEqualsAndHashcode()
+ {
+ // type is computed by decorate
+
EqualsVerifier.forClass(FieldAccessPostAggregator.class).usingGetClass().withIgnoredFields("type").verify();
+ }
+
+ @Test
+ public void testGetTypeBeforeDecorate()
+ {
+ FieldAccessPostAggregator postAgg = new FieldAccessPostAggregator("name",
"column");
+ RowSignature signature = RowSignature.builder()
+ .add("column", ColumnType.LONG)
+ .build();
+ Assert.assertEquals(ColumnType.LONG, postAgg.getType(signature));
+ }
+
+ @Test
+ public void testGetTypeBeforeDecorateNil()
+ {
+ FieldAccessPostAggregator postAgg = new FieldAccessPostAggregator("name",
"column");
+ RowSignature signature = RowSignature.builder().build();
+ Assert.assertNull(postAgg.getType(signature));
+ }
+
@Test
public void testCompute()
{
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]