diff --git a/extensions-contrib/distinctcount/src/main/java/org/apache/druid/query/aggregation/distinctcount/DistinctCountAggregatorFactory.java b/extensions-contrib/distinctcount/src/main/java/org/apache/druid/query/aggregation/distinctcount/DistinctCountAggregatorFactory.java index 524cc376693..08f5136bc82 100644 --- a/extensions-contrib/distinctcount/src/main/java/org/apache/druid/query/aggregation/distinctcount/DistinctCountAggregatorFactory.java +++ b/extensions-contrib/distinctcount/src/main/java/org/apache/druid/query/aggregation/distinctcount/DistinctCountAggregatorFactory.java @@ -35,6 +35,7 @@ import org.apache.druid.query.dimension.DefaultDimensionSpec; import org.apache.druid.segment.ColumnSelectorFactory; import org.apache.druid.segment.DimensionSelector; +import javax.annotation.Nullable; import java.nio.ByteBuffer; import java.util.Collections; import java.util.Comparator; @@ -147,8 +148,9 @@ public class DistinctCountAggregatorFactory extends AggregatorFactory return object; } + @Nullable @Override - public Object finalizeComputation(Object object) + public Object finalizeComputation(@Nullable Object object) { return object; } diff --git a/extensions-contrib/momentsketch/src/main/java/org/apache/druid/query/aggregation/momentsketch/aggregator/MomentSketchAggregatorFactory.java b/extensions-contrib/momentsketch/src/main/java/org/apache/druid/query/aggregation/momentsketch/aggregator/MomentSketchAggregatorFactory.java index 918ad3e04ed..1abe6a1a9ae 100644 --- a/extensions-contrib/momentsketch/src/main/java/org/apache/druid/query/aggregation/momentsketch/aggregator/MomentSketchAggregatorFactory.java +++ b/extensions-contrib/momentsketch/src/main/java/org/apache/druid/query/aggregation/momentsketch/aggregator/MomentSketchAggregatorFactory.java @@ -206,8 +206,9 @@ public class MomentSketchAggregatorFactory extends AggregatorFactory ); } + @Nullable @Override - public Object finalizeComputation(Object object) + public Object finalizeComputation(@Nullable Object object) { return object; } diff --git a/extensions-contrib/moving-average-query/src/main/java/org/apache/druid/query/movingaverage/AveragerFactoryWrapper.java b/extensions-contrib/moving-average-query/src/main/java/org/apache/druid/query/movingaverage/AveragerFactoryWrapper.java index f6f1d90b4f6..9e4118c5669 100644 --- a/extensions-contrib/moving-average-query/src/main/java/org/apache/druid/query/movingaverage/AveragerFactoryWrapper.java +++ b/extensions-contrib/moving-average-query/src/main/java/org/apache/druid/query/movingaverage/AveragerFactoryWrapper.java @@ -25,6 +25,7 @@ import org.apache.druid.query.aggregation.BufferAggregator; import org.apache.druid.query.movingaverage.averagers.AveragerFactory; import org.apache.druid.segment.ColumnSelectorFactory; +import javax.annotation.Nullable; import java.util.Comparator; import java.util.List; @@ -125,8 +126,9 @@ public class AveragerFactoryWrapper extends AggregatorFactory * Not implemented. Throws UnsupportedOperationException. */ @SuppressWarnings("unchecked") + @Nullable @Override - public Object finalizeComputation(Object object) + public Object finalizeComputation(@Nullable Object object) { return af.finalizeComputation((T) object); } diff --git a/extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/TDigestBuildSketchAggregatorFactory.java b/extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/TDigestBuildSketchAggregatorFactory.java index b12f3b32acd..08f88b66ae5 100644 --- a/extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/TDigestBuildSketchAggregatorFactory.java +++ b/extensions-contrib/tdigestsketch/src/main/java/org/apache/druid/query/aggregation/tdigestsketch/TDigestBuildSketchAggregatorFactory.java @@ -190,8 +190,9 @@ public class TDigestBuildSketchAggregatorFactory extends AggregatorFactory return TDigestSketchUtils.deserialize(serializedSketch); } + @Nullable @Override - public Object finalizeComputation(Object object) + public Object finalizeComputation(@Nullable Object object) { return object; } diff --git a/extensions-contrib/time-min-max/src/main/java/org/apache/druid/query/aggregation/TimestampAggregatorFactory.java b/extensions-contrib/time-min-max/src/main/java/org/apache/druid/query/aggregation/TimestampAggregatorFactory.java index bf9b69020d3..40f9095891a 100644 --- a/extensions-contrib/time-min-max/src/main/java/org/apache/druid/query/aggregation/TimestampAggregatorFactory.java +++ b/extensions-contrib/time-min-max/src/main/java/org/apache/druid/query/aggregation/TimestampAggregatorFactory.java @@ -27,6 +27,7 @@ import org.apache.druid.segment.ColumnSelectorFactory; import org.apache.druid.segment.ColumnValueSelector; import org.joda.time.DateTime; +import javax.annotation.Nullable; import java.nio.ByteBuffer; import java.sql.Timestamp; import java.util.Collections; @@ -157,10 +158,11 @@ public class TimestampAggregatorFactory extends AggregatorFactory return object; } + @Nullable @Override - public Object finalizeComputation(Object object) + public Object finalizeComputation(@Nullable Object object) { - return DateTimes.utc((long) object); + return object == null ? null : DateTimes.utc((long) object); } @Override diff --git a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchAggregatorFactory.java b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchAggregatorFactory.java index b10c8c3b448..dbbeb5b7ae2 100644 --- a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchAggregatorFactory.java +++ b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/hll/HllSketchAggregatorFactory.java @@ -157,9 +157,13 @@ public abstract class HllSketchAggregatorFactory extends AggregatorFactory }; } + @Nullable @Override - public Double finalizeComputation(final Object object) + public Double finalizeComputation(@Nullable final Object object) { + if (object == null) { + return null; + } final HllSketch sketch = (HllSketch) object; return sketch.getEstimate(); } diff --git a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchAggregatorFactory.java b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchAggregatorFactory.java index 6b17ec7733e..f3b817dab89 100644 --- a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchAggregatorFactory.java +++ b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/quantiles/DoublesSketchAggregatorFactory.java @@ -240,10 +240,11 @@ public class DoublesSketchAggregatorFactory extends AggregatorFactory } } + @Nullable @Override - public Object finalizeComputation(final Object object) + public Object finalizeComputation(@Nullable final Object object) { - return ((DoublesSketch) object).getN(); + return object == null ? null : ((DoublesSketch) object).getN(); } @Override diff --git a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchMergeAggregatorFactory.java b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchMergeAggregatorFactory.java index d172b82bb49..2cc5388a538 100644 --- a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchMergeAggregatorFactory.java +++ b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/theta/SketchMergeAggregatorFactory.java @@ -117,9 +117,14 @@ public class SketchMergeAggregatorFactory extends SketchAggregatorFactory * * @return sketch object */ + @Nullable @Override - public Object finalizeComputation(Object object) + public Object finalizeComputation(@Nullable Object object) { + if (object == null) { + return null; + } + if (shouldFinalize) { SketchHolder holder = (SketchHolder) object; if (errorBoundsStdDev != null) { diff --git a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchAggregatorFactory.java b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchAggregatorFactory.java index 504071eb6a2..87590832f4c 100644 --- a/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchAggregatorFactory.java +++ b/extensions-core/datasketches/src/main/java/org/apache/druid/query/aggregation/datasketches/tuple/ArrayOfDoublesSketchAggregatorFactory.java @@ -285,10 +285,11 @@ public class ArrayOfDoublesSketchAggregatorFactory extends AggregatorFactory return new ArrayOfDoublesSketchAggregatorFactory(name, name, nominalEntries, null, numberOfValues); } + @Nullable @Override - public Object finalizeComputation(final Object object) + public Object finalizeComputation(@Nullable final Object object) { - return ((ArrayOfDoublesSketch) object).getEstimate(); + return object == null ? null : ((ArrayOfDoublesSketch) object).getEstimate(); } @Override diff --git a/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/aggregation/bloom/BloomFilterAggregatorFactory.java b/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/aggregation/bloom/BloomFilterAggregatorFactory.java index 74e921c3497..2c633f2dde5 100644 --- a/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/aggregation/bloom/BloomFilterAggregatorFactory.java +++ b/extensions-core/druid-bloom-filter/src/main/java/org/apache/druid/query/aggregation/bloom/BloomFilterAggregatorFactory.java @@ -227,8 +227,9 @@ public class BloomFilterAggregatorFactory extends AggregatorFactory } } + @Nullable @Override - public Object finalizeComputation(Object object) + public Object finalizeComputation(@Nullable Object object) { return object; } diff --git a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogramAggregatorFactory.java b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogramAggregatorFactory.java index 4c8c09a3708..ccf9c534018 100644 --- a/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogramAggregatorFactory.java +++ b/extensions-core/histogram/src/main/java/org/apache/druid/query/aggregation/histogram/ApproximateHistogramAggregatorFactory.java @@ -214,10 +214,11 @@ public class ApproximateHistogramAggregatorFactory extends AggregatorFactory } } + @Nullable @Override - public Object finalizeComputation(Object object) + public Object finalizeComputation(@Nullable Object object) { - return ((ApproximateHistogram) object).toHistogram(numBuckets); + return object == null ? null : ((ApproximateHistogram) object).toHistogram(numBuckets); } @JsonProperty diff --git a/extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceAggregatorFactory.java b/extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceAggregatorFactory.java index d7e9d95eaed..fdc9cb22e69 100644 --- a/extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceAggregatorFactory.java +++ b/extensions-core/stats/src/main/java/org/apache/druid/query/aggregation/variance/VarianceAggregatorFactory.java @@ -39,6 +39,7 @@ import org.apache.druid.segment.ColumnSelectorFactory; import org.apache.druid.segment.ColumnValueSelector; import org.apache.druid.segment.NilColumnValueSelector; +import javax.annotation.Nullable; import java.nio.ByteBuffer; import java.util.Collections; import java.util.Comparator; @@ -202,10 +203,11 @@ public class VarianceAggregatorFactory extends AggregatorFactory return VarianceAggregatorCollector.COMPARATOR; } + @Nullable @Override - public Object finalizeComputation(Object object) + public Object finalizeComputation(@Nullable Object object) { - return ((VarianceAggregatorCollector) object).getVariance(isVariancePop); + return object == null ? null : ((VarianceAggregatorCollector) object).getVariance(isVariancePop); } @Override diff --git a/processing/src/main/java/org/apache/druid/query/aggregation/CountAggregatorFactory.java b/processing/src/main/java/org/apache/druid/query/aggregation/CountAggregatorFactory.java index 23fba55eed5..f4329fef082 100644 --- a/processing/src/main/java/org/apache/druid/query/aggregation/CountAggregatorFactory.java +++ b/processing/src/main/java/org/apache/druid/query/aggregation/CountAggregatorFactory.java @@ -25,6 +25,7 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import org.apache.druid.segment.ColumnSelectorFactory; +import javax.annotation.Nullable; import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -93,8 +94,9 @@ public class CountAggregatorFactory extends AggregatorFactory return object; } + @Nullable @Override - public Object finalizeComputation(Object object) + public Object finalizeComputation(@Nullable Object object) { return object; } diff --git a/processing/src/main/java/org/apache/druid/query/aggregation/FilteredAggregatorFactory.java b/processing/src/main/java/org/apache/druid/query/aggregation/FilteredAggregatorFactory.java index 62ee3ea91c7..52f072be085 100644 --- a/processing/src/main/java/org/apache/druid/query/aggregation/FilteredAggregatorFactory.java +++ b/processing/src/main/java/org/apache/druid/query/aggregation/FilteredAggregatorFactory.java @@ -32,6 +32,7 @@ import org.apache.druid.segment.column.ColumnHolder; import org.apache.druid.segment.filter.Filters; import org.joda.time.Interval; +import javax.annotation.Nullable; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Comparator; @@ -118,8 +119,9 @@ public class FilteredAggregatorFactory extends AggregatorFactory return delegate.deserialize(object); } + @Nullable @Override - public Object finalizeComputation(Object object) + public Object finalizeComputation(@Nullable Object object) { return delegate.finalizeComputation(object); } diff --git a/processing/src/main/java/org/apache/druid/query/aggregation/HistogramAggregatorFactory.java b/processing/src/main/java/org/apache/druid/query/aggregation/HistogramAggregatorFactory.java index 9ca499e0dc6..c32348dfbb3 100644 --- a/processing/src/main/java/org/apache/druid/query/aggregation/HistogramAggregatorFactory.java +++ b/processing/src/main/java/org/apache/druid/query/aggregation/HistogramAggregatorFactory.java @@ -154,10 +154,11 @@ public class HistogramAggregatorFactory extends AggregatorFactory return object; } + @Nullable @Override - public Object finalizeComputation(Object object) + public Object finalizeComputation(@Nullable Object object) { - return ((Histogram) object).asVisual(); + return object == null ? null : ((Histogram) object).asVisual(); } @Override diff --git a/processing/src/main/java/org/apache/druid/query/aggregation/JavaScriptAggregatorFactory.java b/processing/src/main/java/org/apache/druid/query/aggregation/JavaScriptAggregatorFactory.java index b5e9ed173ee..58017e7ed48 100644 --- a/processing/src/main/java/org/apache/druid/query/aggregation/JavaScriptAggregatorFactory.java +++ b/processing/src/main/java/org/apache/druid/query/aggregation/JavaScriptAggregatorFactory.java @@ -35,6 +35,7 @@ import org.apache.druid.segment.ColumnSelectorFactory; import org.apache.druid.segment.ColumnValueSelector; import org.checkerframework.checker.nullness.qual.EnsuresNonNull; import org.checkerframework.checker.nullness.qual.MonotonicNonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.mozilla.javascript.Context; import org.mozilla.javascript.ContextAction; import org.mozilla.javascript.ContextFactory; @@ -202,8 +203,9 @@ public class JavaScriptAggregatorFactory extends AggregatorFactory return object; } + @Nullable @Override - public Object finalizeComputation(Object object) + public Object finalizeComputation(@Nullable Object object) { return object; } diff --git a/processing/src/main/java/org/apache/druid/query/aggregation/SuppressedAggregatorFactory.java b/processing/src/main/java/org/apache/druid/query/aggregation/SuppressedAggregatorFactory.java index 64dcaf08ebb..c19eb581a2d 100644 --- a/processing/src/main/java/org/apache/druid/query/aggregation/SuppressedAggregatorFactory.java +++ b/processing/src/main/java/org/apache/druid/query/aggregation/SuppressedAggregatorFactory.java @@ -104,8 +104,9 @@ public class SuppressedAggregatorFactory extends AggregatorFactory return delegate.deserialize(object); } + @Nullable @Override - public Object finalizeComputation(Object object) + public Object finalizeComputation(@Nullable Object object) { return delegate.finalizeComputation(object); } diff --git a/processing/src/main/java/org/apache/druid/query/aggregation/cardinality/CardinalityAggregatorFactory.java b/processing/src/main/java/org/apache/druid/query/aggregation/cardinality/CardinalityAggregatorFactory.java index 4647c40f825..8b619153cd4 100644 --- a/processing/src/main/java/org/apache/druid/query/aggregation/cardinality/CardinalityAggregatorFactory.java +++ b/processing/src/main/java/org/apache/druid/query/aggregation/cardinality/CardinalityAggregatorFactory.java @@ -44,6 +44,7 @@ import org.apache.druid.query.dimension.DimensionSpec; import org.apache.druid.segment.ColumnSelectorFactory; import org.apache.druid.segment.DimensionHandlerUtils; +import javax.annotation.Nullable; import java.nio.ByteBuffer; import java.util.Collections; import java.util.Comparator; @@ -234,9 +235,9 @@ public class CardinalityAggregatorFactory extends AggregatorFactory return HyperLogLogCollector.makeCollector(buffer); } + @Nullable @Override - - public Object finalizeComputation(Object object) + public Object finalizeComputation(@Nullable Object object) { return HyperUniquesAggregatorFactory.estimateCardinality(object, round); } diff --git a/processing/src/main/java/org/apache/druid/query/aggregation/first/StringFirstAggregatorFactory.java b/processing/src/main/java/org/apache/druid/query/aggregation/first/StringFirstAggregatorFactory.java index 0a898bfc8e3..cceebc0cd21 100644 --- a/processing/src/main/java/org/apache/druid/query/aggregation/first/StringFirstAggregatorFactory.java +++ b/processing/src/main/java/org/apache/druid/query/aggregation/first/StringFirstAggregatorFactory.java @@ -36,6 +36,7 @@ import org.apache.druid.segment.BaseObjectColumnValueSelector; import org.apache.druid.segment.ColumnSelectorFactory; import org.apache.druid.segment.column.ColumnHolder; +import javax.annotation.Nullable; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; @@ -171,10 +172,11 @@ public class StringFirstAggregatorFactory extends NullableAggregatorFactory