This is an automated email from the ASF dual-hosted git repository.
jackie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pinot.git
The following commit(s) were added to refs/heads/master by this push:
new daa6d11839 Add argument check for aggregation functions with single
argument (#11556)
daa6d11839 is described below
commit daa6d118396834135457d253cba0d6540b3cfa61
Author: Xiaotian (Jackie) Jiang <[email protected]>
AuthorDate: Wed Sep 13 00:24:23 2023 -0700
Add argument check for aggregation functions with single argument (#11556)
---
.../function/AggregationFunctionFactory.java | 181 ++++++++++-----------
.../function/AvgAggregationFunction.java | 7 +-
.../function/AvgMVAggregationFunction.java | 5 +-
.../BaseSingleInputAggregationFunction.java | 7 +
.../function/BooleanAndAggregationFunction.java | 9 +-
.../function/BooleanOrAggregationFunction.java | 9 +-
.../function/CountAggregationFunction.java | 12 +-
.../function/CountMVAggregationFunction.java | 9 +-
.../function/DistinctAvgAggregationFunction.java | 5 +-
.../function/DistinctAvgMVAggregationFunction.java | 5 +-
.../function/DistinctCountAggregationFunction.java | 6 +-
.../DistinctCountBitmapAggregationFunction.java | 7 +-
.../DistinctCountBitmapMVAggregationFunction.java | 5 +-
.../DistinctCountMVAggregationFunction.java | 6 +-
.../function/DistinctSumAggregationFunction.java | 5 +-
.../function/DistinctSumMVAggregationFunction.java | 5 +-
.../function/FastHLLAggregationFunction.java | 9 +-
.../function/FourthMomentAggregationFunction.java | 5 +-
.../function/MaxAggregationFunction.java | 7 +-
.../function/MaxMVAggregationFunction.java | 5 +-
.../function/MinAggregationFunction.java | 7 +-
.../function/MinMVAggregationFunction.java | 5 +-
.../function/MinMaxRangeAggregationFunction.java | 7 +-
.../function/MinMaxRangeMVAggregationFunction.java | 5 +-
...artitionedDistinctCountAggregationFunction.java | 5 +-
.../function/StUnionAggregationFunction.java | 10 +-
.../function/SumAggregationFunction.java | 7 +-
.../function/SumMVAggregationFunction.java | 5 +-
.../function/VarianceAggregationFunction.java | 9 +-
.../org/apache/pinot/queries/ExprMinMaxTest.java | 11 +-
30 files changed, 202 insertions(+), 178 deletions(-)
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/AggregationFunctionFactory.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/AggregationFunctionFactory.java
index 504a09391c..7f5695aa6c 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/AggregationFunctionFactory.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/AggregationFunctionFactory.java
@@ -46,6 +46,7 @@ public class AggregationFunctionFactory {
String upperCaseFunctionName =
AggregationFunctionType.getNormalizedAggregationFunctionName(function.getFunctionName());
List<ExpressionContext> arguments = function.getArguments();
+ int numArguments = arguments.size();
ExpressionContext firstArgument = arguments.get(0);
if (upperCaseFunctionName.startsWith("PERCENTILE")) {
String remainingFunctionName = upperCaseFunctionName.substring(10);
@@ -64,7 +65,6 @@ public class AggregationFunctionFactory {
if (remainingFunctionName.equals("RAWKLLMV")) {
return new PercentileRawKLLMVAggregationFunction(arguments);
}
- int numArguments = arguments.size();
if (numArguments == 1) {
// Single argument percentile (e.g. Percentile99(foo),
PercentileTDigest95(bar), etc.)
// NOTE: This convention is deprecated. DO NOT add new functions here
@@ -181,88 +181,85 @@ public class AggregationFunctionFactory {
}
throw new IllegalArgumentException("Invalid percentile function: " +
function);
} else {
- switch (AggregationFunctionType.valueOf(upperCaseFunctionName)) {
+ AggregationFunctionType functionType =
AggregationFunctionType.valueOf(upperCaseFunctionName);
+ switch (functionType) {
case COUNT:
- return new CountAggregationFunction(firstArgument,
nullHandlingEnabled);
+ return new CountAggregationFunction(arguments,
nullHandlingEnabled);
case MIN:
- return new MinAggregationFunction(firstArgument,
nullHandlingEnabled);
+ return new MinAggregationFunction(arguments, nullHandlingEnabled);
case MAX:
- return new MaxAggregationFunction(firstArgument,
nullHandlingEnabled);
+ return new MaxAggregationFunction(arguments, nullHandlingEnabled);
case SUM:
case SUM0:
- return new SumAggregationFunction(firstArgument,
nullHandlingEnabled);
+ return new SumAggregationFunction(arguments, nullHandlingEnabled);
case SUMPRECISION:
return new SumPrecisionAggregationFunction(arguments,
nullHandlingEnabled);
case AVG:
- return new AvgAggregationFunction(firstArgument,
nullHandlingEnabled);
+ return new AvgAggregationFunction(arguments, nullHandlingEnabled);
case MODE:
return new ModeAggregationFunction(arguments);
- case FIRSTWITHTIME:
- if (arguments.size() == 3) {
- ExpressionContext timeCol = arguments.get(1);
- ExpressionContext dataType = arguments.get(2);
- if (dataType.getType() != ExpressionContext.Type.LITERAL) {
- throw new IllegalArgumentException("Third argument of
firstWithTime Function should be literal."
- + " The function can be used as firstWithTime(dataColumn,
timeColumn, 'dataType')");
- }
- DataType fieldDataType =
DataType.valueOf(dataType.getLiteral().getStringValue().toUpperCase());
- switch (fieldDataType) {
- case BOOLEAN:
- case INT:
- return new
FirstIntValueWithTimeAggregationFunction(firstArgument, timeCol,
- fieldDataType == DataType.BOOLEAN);
- case LONG:
- return new
FirstLongValueWithTimeAggregationFunction(firstArgument, timeCol);
- case FLOAT:
- return new
FirstFloatValueWithTimeAggregationFunction(firstArgument, timeCol);
- case DOUBLE:
- return new
FirstDoubleValueWithTimeAggregationFunction(firstArgument, timeCol);
- case STRING:
- return new
FirstStringValueWithTimeAggregationFunction(firstArgument, timeCol);
- default:
- throw new IllegalArgumentException("Unsupported Value Type
for firstWithTime Function:" + dataType);
- }
- } else {
- throw new IllegalArgumentException("Three arguments are required
for firstWithTime Function."
- + " The function can be used as firstWithTime(dataColumn,
timeColumn, 'dataType')");
+ case FIRSTWITHTIME: {
+ Preconditions.checkArgument(numArguments == 3,
+ "FIRST_WITH_TIME expects 3 arguments, got: %s. The function
can be used as "
+ + "firstWithTime(dataColumn, timeColumn, 'dataType')",
numArguments);
+ ExpressionContext timeCol = arguments.get(1);
+ ExpressionContext dataTypeExp = arguments.get(2);
+ Preconditions.checkArgument(dataTypeExp.getType() ==
ExpressionContext.Type.LITERAL,
+ "FIRST_WITH_TIME expects the 3rd argument to be literal, got:
%s. The function can be used as "
+ + "firstWithTime(dataColumn, timeColumn, 'dataType')",
dataTypeExp.getType());
+ DataType dataType =
DataType.valueOf(dataTypeExp.getLiteral().getStringValue().toUpperCase());
+ switch (dataType) {
+ case BOOLEAN:
+ return new
FirstIntValueWithTimeAggregationFunction(firstArgument, timeCol, true);
+ case INT:
+ return new
FirstIntValueWithTimeAggregationFunction(firstArgument, timeCol, false);
+ case LONG:
+ return new
FirstLongValueWithTimeAggregationFunction(firstArgument, timeCol);
+ case FLOAT:
+ return new
FirstFloatValueWithTimeAggregationFunction(firstArgument, timeCol);
+ case DOUBLE:
+ return new
FirstDoubleValueWithTimeAggregationFunction(firstArgument, timeCol);
+ case STRING:
+ return new
FirstStringValueWithTimeAggregationFunction(firstArgument, timeCol);
+ default:
+ throw new IllegalArgumentException("Unsupported data type for
FIRST_WITH_TIME: " + dataType);
}
- case LASTWITHTIME:
- if (arguments.size() == 3) {
- ExpressionContext timeCol = arguments.get(1);
- ExpressionContext dataType = arguments.get(2);
- if (dataType.getType() != ExpressionContext.Type.LITERAL) {
- throw new IllegalArgumentException("Third argument of
lastWithTime Function should be literal."
- + " The function can be used as lastWithTime(dataColumn,
timeColumn, 'dataType')");
- }
- DataType fieldDataType =
DataType.valueOf(dataType.getLiteral().getStringValue().toUpperCase());
- switch (fieldDataType) {
- case BOOLEAN:
- case INT:
- return new
LastIntValueWithTimeAggregationFunction(firstArgument, timeCol,
- fieldDataType == DataType.BOOLEAN);
- case LONG:
- return new
LastLongValueWithTimeAggregationFunction(firstArgument, timeCol);
- case FLOAT:
- return new
LastFloatValueWithTimeAggregationFunction(firstArgument, timeCol);
- case DOUBLE:
- return new
LastDoubleValueWithTimeAggregationFunction(firstArgument, timeCol);
- case STRING:
- return new
LastStringValueWithTimeAggregationFunction(firstArgument, timeCol);
- default:
- throw new IllegalArgumentException("Unsupported Value Type
for lastWithTime Function:" + dataType);
- }
- } else {
- throw new IllegalArgumentException("Three arguments are required
for lastWithTime Function."
- + " The function can be used as lastWithTime(dataColumn,
timeColumn, 'dataType')");
+ }
+ case LASTWITHTIME: {
+ Preconditions.checkArgument(numArguments == 3,
+ "LAST_WITH_TIME expects 3 arguments, got: %s. The function can
be used as "
+ + "lastWithTime(dataColumn, timeColumn, 'dataType')",
numArguments);
+ ExpressionContext timeCol = arguments.get(1);
+ ExpressionContext dataTypeExp = arguments.get(2);
+ Preconditions.checkArgument(dataTypeExp.getType() ==
ExpressionContext.Type.LITERAL,
+ "LAST_WITH_TIME expects the 3rd argument to be literal, got:
%s. The function can be used as "
+ + "lastWithTime(dataColumn, timeColumn, 'dataType')",
dataTypeExp.getType());
+ DataType dataType =
DataType.valueOf(dataTypeExp.getLiteral().getStringValue().toUpperCase());
+ switch (dataType) {
+ case BOOLEAN:
+ return new
LastIntValueWithTimeAggregationFunction(firstArgument, timeCol, true);
+ case INT:
+ return new
LastIntValueWithTimeAggregationFunction(firstArgument, timeCol, false);
+ case LONG:
+ return new
LastLongValueWithTimeAggregationFunction(firstArgument, timeCol);
+ case FLOAT:
+ return new
LastFloatValueWithTimeAggregationFunction(firstArgument, timeCol);
+ case DOUBLE:
+ return new
LastDoubleValueWithTimeAggregationFunction(firstArgument, timeCol);
+ case STRING:
+ return new
LastStringValueWithTimeAggregationFunction(firstArgument, timeCol);
+ default:
+ throw new IllegalArgumentException("Unsupported data type for
LAST_WITH_TIME: " + dataType);
}
+ }
case MINMAXRANGE:
- return new MinMaxRangeAggregationFunction(firstArgument);
+ return new MinMaxRangeAggregationFunction(arguments);
case DISTINCTCOUNT:
- return new DistinctCountAggregationFunction(firstArgument,
nullHandlingEnabled);
+ return new DistinctCountAggregationFunction(arguments,
nullHandlingEnabled);
case DISTINCTCOUNTBITMAP:
- return new DistinctCountBitmapAggregationFunction(firstArgument);
+ return new DistinctCountBitmapAggregationFunction(arguments);
case SEGMENTPARTITIONEDDISTINCTCOUNT:
- return new
SegmentPartitionedDistinctCountAggregationFunction(firstArgument);
+ return new
SegmentPartitionedDistinctCountAggregationFunction(arguments);
case DISTINCTCOUNTHLL:
return new DistinctCountHLLAggregationFunction(arguments);
case DISTINCTCOUNTRAWHLL:
@@ -270,43 +267,43 @@ public class AggregationFunctionFactory {
case DISTINCTCOUNTSMARTHLL:
return new DistinctCountSmartHLLAggregationFunction(arguments);
case FASTHLL:
- return new FastHLLAggregationFunction(firstArgument);
+ return new FastHLLAggregationFunction(arguments);
case DISTINCTCOUNTTHETASKETCH:
return new DistinctCountThetaSketchAggregationFunction(arguments);
case DISTINCTCOUNTRAWTHETASKETCH:
return new
DistinctCountRawThetaSketchAggregationFunction(arguments);
case DISTINCTSUM:
- return new DistinctSumAggregationFunction(firstArgument,
nullHandlingEnabled);
+ return new DistinctSumAggregationFunction(arguments,
nullHandlingEnabled);
case DISTINCTAVG:
- return new DistinctAvgAggregationFunction(firstArgument,
nullHandlingEnabled);
+ return new DistinctAvgAggregationFunction(arguments,
nullHandlingEnabled);
case IDSET:
return new IdSetAggregationFunction(arguments);
case COUNTMV:
- return new CountMVAggregationFunction(firstArgument);
+ return new CountMVAggregationFunction(arguments);
case MINMV:
- return new MinMVAggregationFunction(firstArgument);
+ return new MinMVAggregationFunction(arguments);
case MAXMV:
- return new MaxMVAggregationFunction(firstArgument);
+ return new MaxMVAggregationFunction(arguments);
case SUMMV:
- return new SumMVAggregationFunction(firstArgument);
+ return new SumMVAggregationFunction(arguments);
case AVGMV:
- return new AvgMVAggregationFunction(firstArgument);
+ return new AvgMVAggregationFunction(arguments);
case MINMAXRANGEMV:
- return new MinMaxRangeMVAggregationFunction(firstArgument);
+ return new MinMaxRangeMVAggregationFunction(arguments);
case DISTINCTCOUNTMV:
- return new DistinctCountMVAggregationFunction(firstArgument);
+ return new DistinctCountMVAggregationFunction(arguments);
case DISTINCTCOUNTBITMAPMV:
- return new DistinctCountBitmapMVAggregationFunction(firstArgument);
+ return new DistinctCountBitmapMVAggregationFunction(arguments);
case DISTINCTCOUNTHLLMV:
return new DistinctCountHLLMVAggregationFunction(arguments);
case DISTINCTCOUNTRAWHLLMV:
return new DistinctCountRawHLLMVAggregationFunction(arguments);
case DISTINCTSUMMV:
- return new DistinctSumMVAggregationFunction(firstArgument);
+ return new DistinctSumMVAggregationFunction(arguments);
case DISTINCTAVGMV:
- return new DistinctAvgMVAggregationFunction(firstArgument);
+ return new DistinctAvgMVAggregationFunction(arguments);
case STUNION:
- return new StUnionAggregationFunction(firstArgument);
+ return new StUnionAggregationFunction(arguments);
case HISTOGRAM:
return new HistogramAggregationFunction(arguments);
case COVARPOP:
@@ -314,23 +311,23 @@ public class AggregationFunctionFactory {
case COVARSAMP:
return new CovarianceAggregationFunction(arguments, true);
case BOOLAND:
- return new BooleanAndAggregationFunction(firstArgument,
nullHandlingEnabled);
+ return new BooleanAndAggregationFunction(arguments,
nullHandlingEnabled);
case BOOLOR:
- return new BooleanOrAggregationFunction(firstArgument,
nullHandlingEnabled);
+ return new BooleanOrAggregationFunction(arguments,
nullHandlingEnabled);
case VARPOP:
- return new VarianceAggregationFunction(firstArgument, false,
false, nullHandlingEnabled);
+ return new VarianceAggregationFunction(arguments, false, false,
nullHandlingEnabled);
case VARSAMP:
- return new VarianceAggregationFunction(firstArgument, true, false,
nullHandlingEnabled);
+ return new VarianceAggregationFunction(arguments, true, false,
nullHandlingEnabled);
case STDDEVPOP:
- return new VarianceAggregationFunction(firstArgument, false, true,
nullHandlingEnabled);
+ return new VarianceAggregationFunction(arguments, false, true,
nullHandlingEnabled);
case STDDEVSAMP:
- return new VarianceAggregationFunction(firstArgument, true, true,
nullHandlingEnabled);
+ return new VarianceAggregationFunction(arguments, true, true,
nullHandlingEnabled);
case SKEWNESS:
- return new FourthMomentAggregationFunction(firstArgument,
FourthMomentAggregationFunction.Type.SKEWNESS);
+ return new FourthMomentAggregationFunction(arguments,
FourthMomentAggregationFunction.Type.SKEWNESS);
case KURTOSIS:
- return new FourthMomentAggregationFunction(firstArgument,
FourthMomentAggregationFunction.Type.KURTOSIS);
+ return new FourthMomentAggregationFunction(arguments,
FourthMomentAggregationFunction.Type.KURTOSIS);
case FOURTHMOMENT:
- return new FourthMomentAggregationFunction(firstArgument,
FourthMomentAggregationFunction.Type.MOMENT);
+ return new FourthMomentAggregationFunction(arguments,
FourthMomentAggregationFunction.Type.MOMENT);
case DISTINCTCOUNTTUPLESKETCH:
// mode actually doesn't matter here because we only care about
keys, not values
return new
DistinctCountIntegerTupleSketchAggregationFunction(arguments,
IntegerSummary.Mode.Sum);
@@ -351,12 +348,12 @@ public class AggregationFunctionFactory {
case EXPRMAX:
case EXPRMIN:
throw new IllegalArgumentException(
- "Aggregation function: " + function + " is only supported in
selection without alias.");
+ "Aggregation function: " + functionType + " is only supported
in selection without alias.");
case FUNNELCOUNT:
return new FunnelCountAggregationFunctionFactory(arguments).get();
default:
- throw new IllegalArgumentException();
+ throw new IllegalArgumentException("Unsupported aggregation
function type: " + functionType);
}
}
} catch (Exception e) {
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/AvgAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/AvgAggregationFunction.java
index af25be19fb..9dbfb6cec5 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/AvgAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/AvgAggregationFunction.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.query.aggregation.function;
+import java.util.List;
import java.util.Map;
import org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.common.utils.DataSchema.ColumnDataType;
@@ -37,11 +38,11 @@ public class AvgAggregationFunction extends
BaseSingleInputAggregationFunction<A
private static final double DEFAULT_FINAL_RESULT = Double.NEGATIVE_INFINITY;
private final boolean _nullHandlingEnabled;
- public AvgAggregationFunction(ExpressionContext expression) {
- this(expression, false);
+ public AvgAggregationFunction(List<ExpressionContext> arguments, boolean
nullHandlingEnabled) {
+ this(verifySingleArgument(arguments, "AVG"), nullHandlingEnabled);
}
- public AvgAggregationFunction(ExpressionContext expression, boolean
nullHandlingEnabled) {
+ protected AvgAggregationFunction(ExpressionContext expression, boolean
nullHandlingEnabled) {
super(expression);
_nullHandlingEnabled = nullHandlingEnabled;
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/AvgMVAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/AvgMVAggregationFunction.java
index 39b429117a..50be99a05a 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/AvgMVAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/AvgMVAggregationFunction.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.query.aggregation.function;
+import java.util.List;
import java.util.Map;
import org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.core.common.BlockValSet;
@@ -28,8 +29,8 @@ import org.apache.pinot.segment.spi.AggregationFunctionType;
public class AvgMVAggregationFunction extends AvgAggregationFunction {
- public AvgMVAggregationFunction(ExpressionContext expression) {
- super(expression);
+ public AvgMVAggregationFunction(List<ExpressionContext> arguments) {
+ super(verifySingleArgument(arguments, "AVG_MV"), false);
}
@Override
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/BaseSingleInputAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/BaseSingleInputAggregationFunction.java
index 84ff537a9c..6c15d06e08 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/BaseSingleInputAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/BaseSingleInputAggregationFunction.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.query.aggregation.function;
+import com.google.common.base.Preconditions;
import java.util.Collections;
import java.util.List;
import org.apache.pinot.common.request.context.ExpressionContext;
@@ -60,4 +61,10 @@ public abstract class BaseSingleInputAggregationFunction<I,
F extends Comparable
}
return stringBuilder.append(')').toString();
}
+
+ protected static ExpressionContext
verifySingleArgument(List<ExpressionContext> arguments, String functionName) {
+ Preconditions.checkArgument(arguments.size() == 1, "%s expects 1 argument,
got: %s", functionName,
+ arguments.size());
+ return arguments.get(0);
+ }
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/BooleanAndAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/BooleanAndAggregationFunction.java
index c385e1dcfb..d328356a40 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/BooleanAndAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/BooleanAndAggregationFunction.java
@@ -19,18 +19,15 @@
package org.apache.pinot.core.query.aggregation.function;
+import java.util.List;
import org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.segment.spi.AggregationFunctionType;
public class BooleanAndAggregationFunction extends
BaseBooleanAggregationFunction {
- public BooleanAndAggregationFunction(ExpressionContext expression) {
- this(expression, false);
- }
-
- public BooleanAndAggregationFunction(ExpressionContext expression, boolean
nullHandlingEnabled) {
- super(expression, nullHandlingEnabled, BooleanMerge.AND);
+ public BooleanAndAggregationFunction(List<ExpressionContext> arguments,
boolean nullHandlingEnabled) {
+ super(verifySingleArgument(arguments, "BOOL_AND"), nullHandlingEnabled,
BooleanMerge.AND);
}
@Override
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/BooleanOrAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/BooleanOrAggregationFunction.java
index 6ee96fad49..eb7582e23a 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/BooleanOrAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/BooleanOrAggregationFunction.java
@@ -19,18 +19,15 @@
package org.apache.pinot.core.query.aggregation.function;
+import java.util.List;
import org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.segment.spi.AggregationFunctionType;
public class BooleanOrAggregationFunction extends
BaseBooleanAggregationFunction {
- public BooleanOrAggregationFunction(ExpressionContext expression) {
- this(expression, false);
- }
-
- protected BooleanOrAggregationFunction(ExpressionContext expression, boolean
nullHandlingEnabled) {
- super(expression, nullHandlingEnabled, BooleanMerge.OR);
+ public BooleanOrAggregationFunction(List<ExpressionContext> arguments,
boolean nullHandlingEnabled) {
+ super(verifySingleArgument(arguments, "BOOL_OR"), nullHandlingEnabled,
BooleanMerge.OR);
}
@Override
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/CountAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/CountAggregationFunction.java
index e9861193f4..bc730adb05 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/CountAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/CountAggregationFunction.java
@@ -42,18 +42,18 @@ public class CountAggregationFunction extends
BaseSingleInputAggregationFunction
private final boolean _nullHandlingEnabled;
- public CountAggregationFunction(ExpressionContext expression) {
- this(expression, false);
+ public CountAggregationFunction(List<ExpressionContext> arguments, boolean
nullHandlingEnabled) {
+ this(verifySingleArgument(arguments, "COUNT"), nullHandlingEnabled);
}
- public CountAggregationFunction(ExpressionContext expression, boolean
nullHandlingEnabled) {
+ protected CountAggregationFunction(ExpressionContext expression, boolean
nullHandlingEnabled) {
super(expression);
// Consider null values only when null handling is enabled and function is
not COUNT(*)
// Note COUNT on any literal gives same result as COUNT(*)
// So allow for identifiers that are not * and functions, disable for
literals and *
- _nullHandlingEnabled = nullHandlingEnabled
- && ((expression.getType() == ExpressionContext.Type.IDENTIFIER &&
!expression.getIdentifier().equals("*"))
- || (expression.getType() == ExpressionContext.Type.FUNCTION));
+ _nullHandlingEnabled = nullHandlingEnabled && (
+ (expression.getType() == ExpressionContext.Type.IDENTIFIER &&
!expression.getIdentifier().equals("*")) || (
+ expression.getType() == ExpressionContext.Type.FUNCTION));
}
@Override
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/CountMVAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/CountMVAggregationFunction.java
index cb7ab591fb..6ca1121770 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/CountMVAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/CountMVAggregationFunction.java
@@ -30,14 +30,9 @@ import org.apache.pinot.segment.spi.AggregationFunctionType;
public class CountMVAggregationFunction extends CountAggregationFunction {
- /**
- * Constructor for the class.
- *
- * @param expression Expression to aggregate on.
- */
- public CountMVAggregationFunction(ExpressionContext expression) {
+ public CountMVAggregationFunction(List<ExpressionContext> arguments) {
// TODO(nhejazi): support proper null handling for aggregation functions
on MV columns.
- super(expression);
+ super(verifySingleArgument(arguments, "COUNT_MV"), false);
}
@Override
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctAvgAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctAvgAggregationFunction.java
index f3d45eed27..7194783910 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctAvgAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctAvgAggregationFunction.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.query.aggregation.function;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.pinot.common.request.context.ExpressionContext;
@@ -33,8 +34,8 @@ import org.apache.pinot.segment.spi.AggregationFunctionType;
*/
public class DistinctAvgAggregationFunction extends
BaseDistinctAggregateAggregationFunction<Double> {
- public DistinctAvgAggregationFunction(ExpressionContext expression, boolean
nullHandlingEnabled) {
- super(expression, AggregationFunctionType.DISTINCTAVG,
nullHandlingEnabled);
+ public DistinctAvgAggregationFunction(List<ExpressionContext> arguments,
boolean nullHandlingEnabled) {
+ super(verifySingleArgument(arguments, "DISTINCT_AVG"),
AggregationFunctionType.DISTINCTAVG, nullHandlingEnabled);
}
@Override
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctAvgMVAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctAvgMVAggregationFunction.java
index 5f7f04e8ee..37f877000c 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctAvgMVAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctAvgMVAggregationFunction.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.query.aggregation.function;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.pinot.common.request.context.ExpressionContext;
@@ -33,8 +34,8 @@ import org.apache.pinot.segment.spi.AggregationFunctionType;
*/
public class DistinctAvgMVAggregationFunction extends
BaseDistinctAggregateAggregationFunction<Double> {
- public DistinctAvgMVAggregationFunction(ExpressionContext expression) {
- super(expression, AggregationFunctionType.DISTINCTAVGMV, false);
+ public DistinctAvgMVAggregationFunction(List<ExpressionContext> arguments) {
+ super(verifySingleArgument(arguments, "DISTINCT_AVG_MV"),
AggregationFunctionType.DISTINCTAVGMV, false);
}
@Override
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctCountAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctCountAggregationFunction.java
index a31779ab6b..61588bbecb 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctCountAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctCountAggregationFunction.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.query.aggregation.function;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.pinot.common.request.context.ExpressionContext;
@@ -33,8 +34,9 @@ import org.apache.pinot.segment.spi.AggregationFunctionType;
*/
public class DistinctCountAggregationFunction extends
BaseDistinctAggregateAggregationFunction<Integer> {
- public DistinctCountAggregationFunction(ExpressionContext expression,
boolean nullHandlingEnabled) {
- super(expression, AggregationFunctionType.DISTINCTCOUNT,
nullHandlingEnabled);
+ public DistinctCountAggregationFunction(List<ExpressionContext> arguments,
boolean nullHandlingEnabled) {
+ super(verifySingleArgument(arguments, "DISTINCT_COUNT"),
AggregationFunctionType.DISTINCTCOUNT,
+ nullHandlingEnabled);
}
@Override
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctCountBitmapAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctCountBitmapAggregationFunction.java
index a2faa1d0ea..d37851acf9 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctCountBitmapAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctCountBitmapAggregationFunction.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.query.aggregation.function;
+import java.util.List;
import java.util.Map;
import org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.common.utils.DataSchema.ColumnDataType;
@@ -41,7 +42,11 @@ import org.roaringbitmap.RoaringBitmap;
*/
public class DistinctCountBitmapAggregationFunction extends
BaseSingleInputAggregationFunction<RoaringBitmap, Integer> {
- public DistinctCountBitmapAggregationFunction(ExpressionContext expression) {
+ public DistinctCountBitmapAggregationFunction(List<ExpressionContext>
arguments) {
+ this(verifySingleArgument(arguments, "DISTINCT_COUNT_BITMAP"));
+ }
+
+ protected DistinctCountBitmapAggregationFunction(ExpressionContext
expression) {
super(expression);
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctCountBitmapMVAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctCountBitmapMVAggregationFunction.java
index 14739419a3..cb278ec586 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctCountBitmapMVAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctCountBitmapMVAggregationFunction.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.query.aggregation.function;
+import java.util.List;
import java.util.Map;
import org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.core.common.BlockValSet;
@@ -36,8 +37,8 @@ import org.roaringbitmap.RoaringBitmap;
*/
public class DistinctCountBitmapMVAggregationFunction extends
DistinctCountBitmapAggregationFunction {
- public DistinctCountBitmapMVAggregationFunction(ExpressionContext
expression) {
- super(expression);
+ public DistinctCountBitmapMVAggregationFunction(List<ExpressionContext>
arguments) {
+ super(verifySingleArgument(arguments, "DISTINCT_COUNT_BITMAP_MV"));
}
@Override
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctCountMVAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctCountMVAggregationFunction.java
index cd03a0071f..b0ec975348 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctCountMVAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctCountMVAggregationFunction.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.query.aggregation.function;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.pinot.common.request.context.ExpressionContext;
@@ -33,11 +34,10 @@ import org.apache.pinot.segment.spi.AggregationFunctionType;
*/
public class DistinctCountMVAggregationFunction extends
BaseDistinctAggregateAggregationFunction<Integer> {
- public DistinctCountMVAggregationFunction(ExpressionContext expression) {
- super(expression, AggregationFunctionType.DISTINCTCOUNTMV, false);
+ public DistinctCountMVAggregationFunction(List<ExpressionContext> arguments)
{
+ super(verifySingleArgument(arguments, "DISTINCT_COUNT_MV"),
AggregationFunctionType.DISTINCTCOUNTMV, false);
}
-
@Override
public void aggregate(int length, AggregationResultHolder
aggregationResultHolder,
Map<ExpressionContext, BlockValSet> blockValSetMap) {
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctSumAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctSumAggregationFunction.java
index c0ee5907dd..a7bb1894c3 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctSumAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctSumAggregationFunction.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.query.aggregation.function;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.pinot.common.request.context.ExpressionContext;
@@ -33,8 +34,8 @@ import org.apache.pinot.segment.spi.AggregationFunctionType;
*/
public class DistinctSumAggregationFunction extends
BaseDistinctAggregateAggregationFunction<Double> {
- public DistinctSumAggregationFunction(ExpressionContext expression, boolean
nullHandlingEnabled) {
- super(expression, AggregationFunctionType.DISTINCTSUM,
nullHandlingEnabled);
+ public DistinctSumAggregationFunction(List<ExpressionContext> arguments,
boolean nullHandlingEnabled) {
+ super(verifySingleArgument(arguments, "DISTINCT_SUM"),
AggregationFunctionType.DISTINCTSUM, nullHandlingEnabled);
}
@Override
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctSumMVAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctSumMVAggregationFunction.java
index 78b3d2cf09..acd20a5348 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctSumMVAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/DistinctSumMVAggregationFunction.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.query.aggregation.function;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.pinot.common.request.context.ExpressionContext;
@@ -33,8 +34,8 @@ import org.apache.pinot.segment.spi.AggregationFunctionType;
*/
public class DistinctSumMVAggregationFunction extends
BaseDistinctAggregateAggregationFunction<Double> {
- public DistinctSumMVAggregationFunction(ExpressionContext expression) {
- super(expression, AggregationFunctionType.DISTINCTSUMMV, false);
+ public DistinctSumMVAggregationFunction(List<ExpressionContext> arguments) {
+ super(verifySingleArgument(arguments, "DISTINCT_SUM_MV"),
AggregationFunctionType.DISTINCTSUMMV, false);
}
@Override
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/FastHLLAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/FastHLLAggregationFunction.java
index 009ee9897a..e1c7db767d 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/FastHLLAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/FastHLLAggregationFunction.java
@@ -20,6 +20,7 @@ package org.apache.pinot.core.query.aggregation.function;
import com.clearspring.analytics.stream.cardinality.HyperLogLog;
import com.google.common.base.Preconditions;
+import java.util.List;
import java.util.Map;
import org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.common.utils.DataSchema.ColumnDataType;
@@ -40,8 +41,8 @@ public class FastHLLAggregationFunction extends
BaseSingleInputAggregationFuncti
public static final int DEFAULT_LOG2M = 8;
private static final int BYTE_TO_CHAR_OFFSET = 129;
- public FastHLLAggregationFunction(ExpressionContext expression) {
- super(expression);
+ public FastHLLAggregationFunction(List<ExpressionContext> arguments) {
+ super(verifySingleArgument(arguments, "FAST_HLL"));
}
@Override
@@ -150,8 +151,8 @@ public class FastHLLAggregationFunction extends
BaseSingleInputAggregationFuncti
if (intermediateResult1.cardinality() == 0) {
return intermediateResult2;
} else {
- Preconditions
- .checkState(intermediateResult2.cardinality() == 0, "Cannot merge
HyperLogLogs of different sizes");
+ Preconditions.checkState(intermediateResult2.cardinality() == 0,
+ "Cannot merge HyperLogLogs of different sizes");
return intermediateResult1;
}
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/FourthMomentAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/FourthMomentAggregationFunction.java
index a6f4b707ff..81609cb79b 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/FourthMomentAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/FourthMomentAggregationFunction.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.query.aggregation.function;
+import java.util.List;
import java.util.Map;
import org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.common.utils.DataSchema;
@@ -39,8 +40,8 @@ public class FourthMomentAggregationFunction extends
BaseSingleInputAggregationF
KURTOSIS, SKEWNESS, MOMENT
}
- public FourthMomentAggregationFunction(ExpressionContext expression, Type
type) {
- super(expression);
+ public FourthMomentAggregationFunction(List<ExpressionContext> arguments,
Type type) {
+ super(verifySingleArgument(arguments, type.name()));
_type = type;
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MaxAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MaxAggregationFunction.java
index 79c08bd2be..25654fac59 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MaxAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MaxAggregationFunction.java
@@ -19,6 +19,7 @@
package org.apache.pinot.core.query.aggregation.function;
import java.math.BigDecimal;
+import java.util.List;
import java.util.Map;
import org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.common.utils.DataSchema.ColumnDataType;
@@ -37,11 +38,11 @@ public class MaxAggregationFunction extends
BaseSingleInputAggregationFunction<D
private static final double DEFAULT_INITIAL_VALUE = Double.NEGATIVE_INFINITY;
private final boolean _nullHandlingEnabled;
- public MaxAggregationFunction(ExpressionContext expression) {
- this(expression, false);
+ public MaxAggregationFunction(List<ExpressionContext> arguments, boolean
nullHandlingEnabled) {
+ this(verifySingleArgument(arguments, "MAX"), nullHandlingEnabled);
}
- public MaxAggregationFunction(ExpressionContext expression, boolean
nullHandlingEnabled) {
+ protected MaxAggregationFunction(ExpressionContext expression, boolean
nullHandlingEnabled) {
super(expression);
_nullHandlingEnabled = nullHandlingEnabled;
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MaxMVAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MaxMVAggregationFunction.java
index 81f99775b5..436077c375 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MaxMVAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MaxMVAggregationFunction.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.query.aggregation.function;
+import java.util.List;
import java.util.Map;
import org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.core.common.BlockValSet;
@@ -28,8 +29,8 @@ import org.apache.pinot.segment.spi.AggregationFunctionType;
public class MaxMVAggregationFunction extends MaxAggregationFunction {
- public MaxMVAggregationFunction(ExpressionContext expression) {
- super(expression);
+ public MaxMVAggregationFunction(List<ExpressionContext> arguments) {
+ super(verifySingleArgument(arguments, "MAX_MV"), false);
}
@Override
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MinAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MinAggregationFunction.java
index b2ed9390d3..aa2ca50bbc 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MinAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MinAggregationFunction.java
@@ -19,6 +19,7 @@
package org.apache.pinot.core.query.aggregation.function;
import java.math.BigDecimal;
+import java.util.List;
import java.util.Map;
import org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.common.utils.DataSchema.ColumnDataType;
@@ -37,11 +38,11 @@ public class MinAggregationFunction extends
BaseSingleInputAggregationFunction<D
private static final double DEFAULT_VALUE = Double.POSITIVE_INFINITY;
private final boolean _nullHandlingEnabled;
- public MinAggregationFunction(ExpressionContext expression) {
- this(expression, false);
+ public MinAggregationFunction(List<ExpressionContext> arguments, boolean
nullHandlingEnabled) {
+ this(verifySingleArgument(arguments, "MIN"), nullHandlingEnabled);
}
- public MinAggregationFunction(ExpressionContext expression, boolean
nullHandlingEnabled) {
+ protected MinAggregationFunction(ExpressionContext expression, boolean
nullHandlingEnabled) {
super(expression);
_nullHandlingEnabled = nullHandlingEnabled;
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MinMVAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MinMVAggregationFunction.java
index f6a4edcfa9..ec231407d4 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MinMVAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MinMVAggregationFunction.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.query.aggregation.function;
+import java.util.List;
import java.util.Map;
import org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.core.common.BlockValSet;
@@ -28,8 +29,8 @@ import org.apache.pinot.segment.spi.AggregationFunctionType;
public class MinMVAggregationFunction extends MinAggregationFunction {
- public MinMVAggregationFunction(ExpressionContext expression) {
- super(expression);
+ public MinMVAggregationFunction(List<ExpressionContext> arguments) {
+ super(verifySingleArgument(arguments, "MIN_MV"), false);
}
@Override
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MinMaxRangeAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MinMaxRangeAggregationFunction.java
index f0bcf93ff3..1c039b9d14 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MinMaxRangeAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MinMaxRangeAggregationFunction.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.query.aggregation.function;
+import java.util.List;
import java.util.Map;
import org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.common.utils.DataSchema.ColumnDataType;
@@ -34,7 +35,11 @@ import org.apache.pinot.spi.data.FieldSpec.DataType;
public class MinMaxRangeAggregationFunction extends
BaseSingleInputAggregationFunction<MinMaxRangePair, Double> {
- public MinMaxRangeAggregationFunction(ExpressionContext expression) {
+ public MinMaxRangeAggregationFunction(List<ExpressionContext> arguments) {
+ super(verifySingleArgument(arguments, "MIN_MAX_RANGE"));
+ }
+
+ protected MinMaxRangeAggregationFunction(ExpressionContext expression) {
super(expression);
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MinMaxRangeMVAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MinMaxRangeMVAggregationFunction.java
index a39c0dc1fe..466a6b044f 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MinMaxRangeMVAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/MinMaxRangeMVAggregationFunction.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.query.aggregation.function;
+import java.util.List;
import java.util.Map;
import org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.core.common.BlockValSet;
@@ -28,8 +29,8 @@ import org.apache.pinot.segment.spi.AggregationFunctionType;
public class MinMaxRangeMVAggregationFunction extends
MinMaxRangeAggregationFunction {
- public MinMaxRangeMVAggregationFunction(ExpressionContext expression) {
- super(expression);
+ public MinMaxRangeMVAggregationFunction(List<ExpressionContext> arguments) {
+ super(verifySingleArgument(arguments, "MIN_MAX_RANGE_MV"));
}
@Override
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/SegmentPartitionedDistinctCountAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/SegmentPartitionedDistinctCountAggregationFunction.java
index f273fa8b61..996a077c0a 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/SegmentPartitionedDistinctCountAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/SegmentPartitionedDistinctCountAggregationFunction.java
@@ -23,6 +23,7 @@ import it.unimi.dsi.fastutil.floats.FloatOpenHashSet;
import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet;
import java.util.Collection;
+import java.util.List;
import java.util.Map;
import javax.annotation.Nullable;
import org.apache.pinot.common.request.context.ExpressionContext;
@@ -48,8 +49,8 @@ import org.roaringbitmap.RoaringBitmap;
*/
public class SegmentPartitionedDistinctCountAggregationFunction extends
BaseSingleInputAggregationFunction<Long, Long> {
- public SegmentPartitionedDistinctCountAggregationFunction(ExpressionContext
expression) {
- super(expression);
+ public
SegmentPartitionedDistinctCountAggregationFunction(List<ExpressionContext>
arguments) {
+ super(verifySingleArgument(arguments,
"SEGMENT_PARTITIONED_DISTINCT_COUNT"));
}
@Override
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/StUnionAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/StUnionAggregationFunction.java
index 0e0ff6f493..8b6a6ed45a 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/StUnionAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/StUnionAggregationFunction.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.query.aggregation.function;
+import java.util.List;
import java.util.Map;
import org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.common.utils.DataSchema;
@@ -35,13 +36,8 @@ import org.locationtech.jts.geom.Geometry;
public class StUnionAggregationFunction extends
BaseSingleInputAggregationFunction<Geometry, ByteArray> {
- /**
- * Constructor for the class.
- *
- * @param expression Expression to aggregate on.
- */
- public StUnionAggregationFunction(ExpressionContext expression) {
- super(expression);
+ public StUnionAggregationFunction(List<ExpressionContext> arguments) {
+ super(verifySingleArgument(arguments, "ST_UNION"));
}
@Override
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/SumAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/SumAggregationFunction.java
index 04f63bd4e2..46e734349a 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/SumAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/SumAggregationFunction.java
@@ -19,6 +19,7 @@
package org.apache.pinot.core.query.aggregation.function;
import java.math.BigDecimal;
+import java.util.List;
import java.util.Map;
import org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.common.utils.DataSchema.ColumnDataType;
@@ -37,11 +38,11 @@ public class SumAggregationFunction extends
BaseSingleInputAggregationFunction<D
private static final double DEFAULT_VALUE = 0.0;
private final boolean _nullHandlingEnabled;
- public SumAggregationFunction(ExpressionContext expression) {
- this(expression, false);
+ public SumAggregationFunction(List<ExpressionContext> arguments, boolean
nullHandlingEnabled) {
+ this(verifySingleArgument(arguments, "SUM"), nullHandlingEnabled);
}
- public SumAggregationFunction(ExpressionContext expression, boolean
nullHandlingEnabled) {
+ protected SumAggregationFunction(ExpressionContext expression, boolean
nullHandlingEnabled) {
super(expression);
_nullHandlingEnabled = nullHandlingEnabled;
}
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/SumMVAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/SumMVAggregationFunction.java
index eb39d3adf0..4dfdf50202 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/SumMVAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/SumMVAggregationFunction.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.query.aggregation.function;
+import java.util.List;
import java.util.Map;
import org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.core.common.BlockValSet;
@@ -28,8 +29,8 @@ import org.apache.pinot.segment.spi.AggregationFunctionType;
public class SumMVAggregationFunction extends SumAggregationFunction {
- public SumMVAggregationFunction(ExpressionContext expression) {
- super(expression);
+ public SumMVAggregationFunction(List<ExpressionContext> arguments) {
+ super(verifySingleArgument(arguments, "SUM_MV"), false);
}
@Override
diff --git
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/VarianceAggregationFunction.java
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/VarianceAggregationFunction.java
index 5498731442..6c49dfaa7a 100644
---
a/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/VarianceAggregationFunction.java
+++
b/pinot-core/src/main/java/org/apache/pinot/core/query/aggregation/function/VarianceAggregationFunction.java
@@ -18,6 +18,7 @@
*/
package org.apache.pinot.core.query.aggregation.function;
+import java.util.List;
import java.util.Map;
import org.apache.pinot.common.request.context.ExpressionContext;
import org.apache.pinot.common.utils.DataSchema;
@@ -45,14 +46,18 @@ public class VarianceAggregationFunction extends
BaseSingleInputAggregationFunct
protected final boolean _isStdDev;
protected final boolean _nullHandlingEnabled;
- public VarianceAggregationFunction(ExpressionContext expression, boolean
isSample, boolean isStdDev,
+ public VarianceAggregationFunction(List<ExpressionContext> arguments,
boolean isSample, boolean isStdDev,
boolean nullHandlingEnabled) {
- super(expression);
+ super(verifySingleArgument(arguments, getFunctionName(isSample,
isStdDev)));
_isSample = isSample;
_isStdDev = isStdDev;
_nullHandlingEnabled = nullHandlingEnabled;
}
+ private static String getFunctionName(boolean isSample, boolean isStdDev) {
+ return isSample ? (isStdDev ? "STD_DEV_SAMP" : "VAR_SAMP") : (isStdDev ?
"STD_DEV_POP" : "VAR_POP");
+ }
+
@Override
public AggregationFunctionType getType() {
if (_isSample) {
diff --git
a/pinot-core/src/test/java/org/apache/pinot/queries/ExprMinMaxTest.java
b/pinot-core/src/test/java/org/apache/pinot/queries/ExprMinMaxTest.java
index df7a9bdb58..b4e8f23973 100644
--- a/pinot-core/src/test/java/org/apache/pinot/queries/ExprMinMaxTest.java
+++ b/pinot-core/src/test/java/org/apache/pinot/queries/ExprMinMaxTest.java
@@ -41,6 +41,7 @@ import org.apache.pinot.spi.config.table.TableType;
import org.apache.pinot.spi.data.FieldSpec.DataType;
import org.apache.pinot.spi.data.Schema;
import org.apache.pinot.spi.data.readers.GenericRow;
+import org.apache.pinot.spi.exception.BadQueryRequestException;
import org.apache.pinot.spi.utils.ReadMode;
import org.apache.pinot.spi.utils.builder.TableConfigBuilder;
import org.apache.pinot.sql.parsers.rewriter.QueryRewriterFactory;
@@ -610,9 +611,9 @@ public class ExprMinMaxTest extends BaseQueriesTest {
ResultTable resultTable = brokerResponse.getResultTable();
List<Object[]> rows = resultTable.getRows();
fail();
- } catch (Exception e) {
- assertTrue(e.getMessage().contains("Aggregation function:
exprmax(longColumn,intColumn) "
- + "is only supported in selection without alias."));
+ } catch (BadQueryRequestException e) {
+ assertTrue(
+ e.getMessage().contains("Aggregation function: EXPRMAX is only
supported in selection without alias."));
}
}
@@ -627,8 +628,8 @@ public class ExprMinMaxTest extends BaseQueriesTest {
List<Object[]> rows = resultTable.getRows();
fail();
} catch (Exception e) {
- assertTrue(e.getMessage().contains("Aggregation function:
exprmax(longColumn,intColumn) "
- + "is only supported in selection without alias."));
+ assertTrue(
+ e.getMessage().contains("Aggregation function: EXPRMAX is only
supported in selection without alias."));
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]