in fe/fe-core/src/main/java/org/apache/doris/catalog/FunctionSet.java [658:2020]
private void initAggregateBuiltins() {
// Type stringType[] = {Type.CHAR, Type.VARCHAR};
// count(*)
// vectorized
addBuiltin(AggregateFunction.createBuiltin(FunctionSet.COUNT,
new ArrayList<Type>(), Type.BIGINT, Type.BIGINT,
"",
"",
"",
null, null,
"",
null, false, true, true, true));
// regr_intercept
addBuiltin(AggregateFunction.createBuiltin(FunctionSet.REGR_INTERCEPT,
Lists.newArrayList(Type.DOUBLE, Type.DOUBLE), Type.DOUBLE, Type.DOUBLE,
"",
"",
"",
null, null,
"",
null, false, false, false, true));
// regr_slope
addBuiltin(AggregateFunction.createBuiltin(FunctionSet.REGR_SLOPE,
Lists.newArrayList(Type.DOUBLE, Type.DOUBLE), Type.DOUBLE, Type.DOUBLE,
"",
"",
"",
null, null,
"",
null, false, false, false, true));
// count(array/map/struct)
for (Type complexType : Lists.newArrayList(Type.ARRAY, Type.MAP, Type.GENERIC_STRUCT)) {
addBuiltin(AggregateFunction.createBuiltin(FunctionSet.COUNT,
Lists.newArrayList(complexType), Type.BIGINT, Type.BIGINT,
"",
"",
"",
null, null,
"",
null, false, true, true, true));
addBuiltin(AggregateFunction.createBuiltin(FunctionSet.COUNT,
Lists.newArrayList(complexType), Type.BIGINT, Type.BIGINT,
"",
"",
"",
null, null,
"",
null, false, true, true, true));
}
// Vectorization does not need symbol any more, we should clean it in the future.
addBuiltin(AggregateFunction.createBuiltin(FunctionSet.WINDOW_FUNNEL,
Lists.newArrayList(Type.BIGINT, Type.STRING, Type.DATETIME, Type.BOOLEAN),
Type.INT,
Type.VARCHAR,
true,
"",
"",
"",
"",
"",
"",
"",
true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin(FunctionSet.WINDOW_FUNNEL,
Lists.newArrayList(Type.BIGINT, Type.STRING, Type.DATETIMEV2, Type.BOOLEAN),
Type.INT,
Type.VARCHAR,
true,
"",
"",
"",
"",
"",
"",
"",
true, false, true, true));
// retention vectorization
addBuiltin(AggregateFunction.createBuiltin(FunctionSet.RETENTION,
Lists.newArrayList(Type.BOOLEAN),
new ArrayType(Type.BOOLEAN),
Type.VARCHAR,
true,
"",
"",
"",
"",
"",
"",
"",
true, false, true, true));
// sequenceMatch
addBuiltin(AggregateFunction.createBuiltin(FunctionSet.SEQUENCE_MATCH,
Lists.newArrayList(Type.STRING, Type.DATEV2, Type.BOOLEAN),
Type.BOOLEAN,
Type.VARCHAR,
true,
"",
"",
"",
"",
"",
"",
"",
true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin(FunctionSet.SEQUENCE_MATCH,
Lists.newArrayList(Type.STRING, Type.DATETIME, Type.BOOLEAN),
Type.BOOLEAN,
Type.VARCHAR,
true,
"",
"",
"",
"",
"",
"",
"",
true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin(FunctionSet.SEQUENCE_MATCH,
Lists.newArrayList(Type.STRING, Type.DATETIMEV2, Type.BOOLEAN),
Type.BOOLEAN,
Type.VARCHAR,
true,
"",
"",
"",
"",
"",
"",
"",
true, false, true, true));
// sequenceCount
addBuiltin(AggregateFunction.createBuiltin(FunctionSet.SEQUENCE_COUNT,
Lists.newArrayList(Type.STRING, Type.DATEV2, Type.BOOLEAN),
Type.BIGINT,
Type.VARCHAR,
true,
"",
"",
"",
"",
"",
"",
"",
true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin(FunctionSet.SEQUENCE_COUNT,
Lists.newArrayList(Type.STRING, Type.DATETIME, Type.BOOLEAN),
Type.BIGINT,
Type.VARCHAR,
true,
"",
"",
"",
"",
"",
"",
"",
true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin(FunctionSet.SEQUENCE_COUNT,
Lists.newArrayList(Type.STRING, Type.DATETIMEV2, Type.BOOLEAN),
Type.BIGINT,
Type.VARCHAR,
true,
"",
"",
"",
"",
"",
"",
"",
true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin("hll_union_agg",
Lists.newArrayList(Type.HLL), Type.BIGINT, Type.VARCHAR,
"",
"",
"",
"",
"",
null,
"",
true, true, true, true));
addBuiltin(AggregateFunction.createBuiltin(HLL_UNION,
Lists.newArrayList(Type.HLL), Type.HLL, Type.HLL,
"",
"",
"",
"",
"",
true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin("hll_raw_agg",
Lists.newArrayList(Type.HLL), Type.HLL, Type.HLL,
"",
"",
"",
"",
"",
true, false, true, true));
for (Type t : Type.getTrivialTypes()) {
if (t.isNull()) {
continue; // NULL is handled through type promotion.
}
if (t.isScalarType(PrimitiveType.CHAR)) {
continue; // promoted to STRING
}
// Count
// vectorized
addBuiltin(AggregateFunction.createBuiltin(FunctionSet.COUNT,
Lists.newArrayList(t), Type.BIGINT, Type.BIGINT,
"",
"",
"",
null, null,
"",
null, false, true, true, true));
// count in multi distinct
if (t.equals(Type.CHAR) || t.equals(Type.VARCHAR)) {
// vectorized
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_count", Lists.newArrayList(t),
Type.BIGINT,
Type.VARCHAR,
"",
"",
"",
"",
null,
null,
"",
false, true, true, true));
} else if (t.equals(Type.STRING)) {
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_count", Lists.newArrayList(t),
Type.BIGINT,
Type.STRING,
"",
"",
"",
"",
null,
null,
"",
false, true, true, true));
} else if (t.equals(Type.TINYINT) || t.equals(Type.SMALLINT) || t.equals(Type.INT)
|| t.equals(Type.BIGINT) || t.equals(Type.LARGEINT) || t.equals(Type.DOUBLE)) {
// vectorized
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_count", Lists.newArrayList(t),
Type.BIGINT,
t,
"",
"",
"",
"",
null,
null,
"",
false, true, true, true));
} else if (t.equals(Type.DATE) || t.equals(Type.DATETIME)) {
// now we don't support datetime distinct
} else if (t.equals(Type.MAX_DECIMALV2_TYPE)) {
// vectorized
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_count", Lists.newArrayList(t),
Type.BIGINT,
Type.MAX_DECIMALV2_TYPE,
"",
"",
"",
"",
null,
null,
"",
false, true, true, true));
} else if (t.equals(Type.DECIMAL32)) {
// vectorized
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_count", Lists.newArrayList(t),
Type.BIGINT,
Type.DECIMAL32,
"",
"",
"",
"",
null,
null,
"",
false, true, true, true));
} else if (t.equals(Type.DECIMAL64)) {
// vectorized
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_count", Lists.newArrayList(t),
Type.BIGINT,
Type.DECIMAL64,
"",
"",
"",
"",
null,
null,
"",
false, true, true, true));
} else if (t.equals(Type.DECIMAL128)) {
// vectorized
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_count", Lists.newArrayList(t),
Type.BIGINT,
Type.DECIMAL128,
"",
"",
"",
"",
null,
null,
"",
false, true, true, true));
}
// sum in multi distinct
if (t.equals(Type.BIGINT) || t.equals(Type.LARGEINT) || t.equals(Type.DOUBLE)) {
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_sum", Lists.newArrayList(t),
t,
t,
"",
"",
"",
"",
null,
null,
"",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_sum0", Lists.newArrayList(t),
t,
t,
"",
"",
"",
"",
null,
null,
"",
false, true, true, true));
} else if (t.equals(Type.MAX_DECIMALV2_TYPE)) {
// vectorized
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_sum", Lists.newArrayList(t),
MULTI_DISTINCT_SUM_RETURN_TYPE.get(t),
Type.MAX_DECIMALV2_TYPE,
"",
"",
"",
"",
null,
null,
"",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_sum0", Lists.newArrayList(t),
MULTI_DISTINCT_SUM_RETURN_TYPE.get(t),
Type.MAX_DECIMALV2_TYPE,
"",
"",
"",
"",
null,
null,
"",
false, true, true, true));
} else if (t.equals(Type.DECIMAL32)) {
// vectorized
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_sum", Lists.newArrayList(t),
MULTI_DISTINCT_SUM_RETURN_TYPE.get(t),
Type.DECIMAL32,
"",
"",
"",
"",
null,
null,
"",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_sum0", Lists.newArrayList(t),
MULTI_DISTINCT_SUM_RETURN_TYPE.get(t),
Type.DECIMAL32,
"",
"",
"",
"",
null,
null,
"",
false, true, true, true));
} else if (t.equals(Type.DECIMAL64)) {
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_sum", Lists.newArrayList(t),
MULTI_DISTINCT_SUM_RETURN_TYPE.get(t),
Type.DECIMAL64,
"",
"",
"",
"",
null,
null,
"",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_sum0", Lists.newArrayList(t),
MULTI_DISTINCT_SUM_RETURN_TYPE.get(t),
Type.DECIMAL64,
"",
"",
"",
"",
null,
null,
"",
false, true, true, true));
} else if (t.equals(Type.DECIMAL128)) {
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_sum", Lists.newArrayList(t),
MULTI_DISTINCT_SUM_RETURN_TYPE.get(t),
Type.DECIMAL128,
"",
"",
"",
"",
null,
null,
"",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_sum0", Lists.newArrayList(t),
MULTI_DISTINCT_SUM_RETURN_TYPE.get(t),
Type.DECIMAL128,
"",
"",
"",
"",
null,
null,
"",
false, true, true, true));
}
// Min
addBuiltin(AggregateFunction.createBuiltin("min",
Lists.newArrayList(t), t, t, "",
"",
"",
null, null,
null, null, true, true, false, true));
// Max
addBuiltin(AggregateFunction.createBuiltin("max",
Lists.newArrayList(t), t, t, "",
"",
"",
null, null,
null, null, true, true, false, true));
// Any
addBuiltin(AggregateFunction.createBuiltin("any", Lists.newArrayList(t), t, t, null, null, null, null, null,
null, null, true, false, false, true));
// Any_Value
addBuiltin(AggregateFunction.createBuiltin("any_value", Lists.newArrayList(t), t, t, null, null, null, null,
null, null, null, true, false, false, true));
// vectorized
for (Type kt : Type.getTrivialTypes()) {
if (kt.isNull()) {
continue;
}
addBuiltin(AggregateFunction.createBuiltin("max_by", Lists.newArrayList(t, kt), t, Type.VARCHAR,
"", "", "", "", "", null, "",
true, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("min_by", Lists.newArrayList(t, kt), t, Type.VARCHAR,
"", "", "", "", "", null, "",
true, true, false, true));
}
// vectorized
addBuiltin(AggregateFunction.createBuiltin("ndv", Lists.newArrayList(t), Type.BIGINT, Type.VARCHAR,
"",
"",
"",
"",
"",
true, true, true, true));
// vectorized
addBuiltin(AggregateFunction.createBuiltin("approx_count_distinct", Lists.newArrayList(t), Type.BIGINT,
Type.VARCHAR,
"",
"",
"",
"",
"",
true, true, true, true));
// vectorized
addBuiltin(AggregateFunction.createBuiltin(BITMAP_UNION_INT,
Lists.newArrayList(t), Type.BIGINT, t,
"",
"",
"",
"",
"",
true, false, true, true));
// VEC_INTERSECT_COUNT
addBuiltin(
AggregateFunction.createBuiltin(INTERSECT_COUNT, Lists.newArrayList(Type.BITMAP, t, t), Type.BIGINT,
Type.VARCHAR, true, "",
"", "",
"", null, null,
"", true, false, true, true));
// TopN
if (TOPN_UPDATE_SYMBOL.containsKey(t)) {
// vectorized
addBuiltin(AggregateFunction.createBuiltin("topn", Lists.newArrayList(t, Type.INT), Type.VARCHAR,
Type.VARCHAR,
"",
"",
"",
"",
"",
true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin("topn", Lists.newArrayList(t, Type.INT, Type.INT),
Type.VARCHAR, Type.VARCHAR,
"",
"",
"",
"",
"",
true, false, true, true));
}
if (!Type.JSONB.equals(t)) {
for (Type valueType : Type.getMapSubTypes()) {
addBuiltin(AggregateFunction.createBuiltin(MAP_AGG, Lists.newArrayList(t, valueType),
new MapType(t, valueType),
Type.VARCHAR,
"", "", "", "", "", null, "",
true, true, false, true));
}
for (Type v : Type.getArraySubTypes()) {
addBuiltin(AggregateFunction.createBuiltin(MAP_AGG, Lists.newArrayList(t, new ArrayType(v)),
new MapType(t, new ArrayType(v)),
new MapType(t, new ArrayType(v)),
"", "", "", "", "", null, "",
true, true, false, true));
}
}
if (STDDEV_UPDATE_SYMBOL.containsKey(t)) {
//vec stddev stddev_samp stddev_pop
addBuiltin(AggregateFunction.createBuiltin("stddev",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), t,
"",
"",
"",
null, null, null,
"",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("stddev_samp",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), t,
"",
"",
"",
null, null, null,
"",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("stddev_pop",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), t,
"",
"",
"",
null, null, null,
"",
false, true, false, true));
//vec: variance variance_samp var_samp variance_pop var_pop
addBuiltin(AggregateFunction.createBuiltin("variance",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), t,
"",
"",
"",
null, null, null,
"",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("variance_pop",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), t,
"",
"",
"",
null, null, null,
"",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("var_pop",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), t,
"",
"",
"",
null, null, null,
"",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("variance_samp",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), t,
"",
"",
"",
null, null, null,
"",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("var_samp",
Lists.newArrayList(t), STDDEV_RETTYPE_SYMBOL.get(t), t,
"",
"",
"",
null, null, null,
"",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("avg_weighted",
Lists.<Type>newArrayList(t, Type.DOUBLE), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, true, false, true));
}
}
// Sum
// functionName(String) -> returnsNonNullOnEmpty(Boolean)
Map<String, Boolean> sumNames = ImmutableMap.of(
"sum", false,
"sum_distinct", false,
"sum0", true
);
for (Entry<String, Boolean> nameWithReturn : sumNames.entrySet()) {
addBuiltin(AggregateFunction.createBuiltin(nameWithReturn.getKey(),
Lists.<Type>newArrayList(Type.BOOLEAN), Type.BIGINT, Type.BIGINT, "",
"",
"",
null, null,
"",
null, false, true, nameWithReturn.getValue(), true));
addBuiltin(AggregateFunction.createBuiltin(nameWithReturn.getKey(),
Lists.<Type>newArrayList(Type.TINYINT), Type.BIGINT, Type.BIGINT, "",
"",
"",
null, null,
"",
null, false, true, nameWithReturn.getValue(), true));
addBuiltin(AggregateFunction.createBuiltin(nameWithReturn.getKey(),
Lists.<Type>newArrayList(Type.SMALLINT), Type.BIGINT, Type.BIGINT, "",
"",
"",
null, null,
"",
null, false, true, nameWithReturn.getValue(), true));
addBuiltin(AggregateFunction.createBuiltin(nameWithReturn.getKey(),
Lists.<Type>newArrayList(Type.INT), Type.BIGINT, Type.BIGINT, "",
"",
"",
null, null,
"",
null, false, true, nameWithReturn.getValue(), true));
addBuiltin(AggregateFunction.createBuiltin(nameWithReturn.getKey(),
Lists.<Type>newArrayList(Type.BIGINT), Type.BIGINT, Type.BIGINT, "",
"",
"",
null, null,
"",
null, false, true, nameWithReturn.getValue(), true));
addBuiltin(AggregateFunction.createBuiltin(nameWithReturn.getKey(),
Lists.<Type>newArrayList(Type.DOUBLE), Type.DOUBLE, Type.DOUBLE, "",
"",
"",
null, null,
"",
null, false, true, nameWithReturn.getValue(), true));
addBuiltin(AggregateFunction.createBuiltin(nameWithReturn.getKey(),
Lists.<Type>newArrayList(Type.MAX_DECIMALV2_TYPE), Type.MAX_DECIMALV2_TYPE, Type.MAX_DECIMALV2_TYPE, "",
"",
"",
null, null,
"",
null, false, true, nameWithReturn.getValue(), true));
addBuiltin(AggregateFunction.createBuiltin(nameWithReturn.getKey(),
Lists.<Type>newArrayList(Type.DECIMAL32), ScalarType.DECIMAL128, Type.DECIMAL128, "",
"",
"",
null, null,
"",
null, false, true, nameWithReturn.getValue(), true));
addBuiltin(AggregateFunction.createBuiltin(nameWithReturn.getKey(),
Lists.<Type>newArrayList(Type.DECIMAL64), Type.DECIMAL128, Type.DECIMAL128, "",
"",
"",
null, null,
"",
null, false, true, nameWithReturn.getValue(), true));
addBuiltin(AggregateFunction.createBuiltin(nameWithReturn.getKey(),
Lists.<Type>newArrayList(Type.DECIMAL128), Type.DECIMAL128, Type.DECIMAL128, "",
"",
"",
null, null,
"",
null, false, true, nameWithReturn.getValue(), true));
addBuiltin(AggregateFunction.createBuiltin(nameWithReturn.getKey(),
Lists.<Type>newArrayList(Type.LARGEINT), Type.LARGEINT, Type.LARGEINT, "",
"",
"",
null, null,
"",
null, false, true, nameWithReturn.getValue(), true));
}
Type[] types = {Type.SMALLINT, Type.TINYINT, Type.INT, Type.BIGINT, Type.FLOAT, Type.DOUBLE, Type.CHAR,
Type.VARCHAR, Type.STRING};
for (Type t : types) {
//vec ORTHOGONAL_BITMAP_INTERSECT and ORTHOGONAL_BITMAP_INTERSECT_COUNT
addBuiltin(
AggregateFunction.createBuiltin(ORTHOGONAL_BITMAP_INTERSECT, Lists.newArrayList(Type.BITMAP, t, t),
Type.BITMAP, Type.BITMAP, true, "", "", "", "", "", "", "", true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin(ORTHOGONAL_BITMAP_INTERSECT_COUNT,
Lists.newArrayList(Type.BITMAP, t, t), Type.BIGINT, Type.BITMAP, true, "", "", "", "", "", "", "",
true, false, true, true));
}
Type[] ntypes = {Type.CHAR, Type.VARCHAR, Type.STRING};
for (Type t : ntypes) {
//vec ORTHOGONAL_BITMAP_EXPR_CALCULATE and ORTHOGONAL_BITMAP_EXPR_CALCULATE_COUNT
addBuiltin(
AggregateFunction.createBuiltin(ORTHOGONAL_BITMAP_EXPR_CALCULATE, Lists.newArrayList(Type.BITMAP, t, Type.STRING),
Type.BITMAP, Type.BITMAP, true, "", "", "", "", "", "", "", true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin(ORTHOGONAL_BITMAP_EXPR_CALCULATE_COUNT,
Lists.newArrayList(Type.BITMAP, t, Type.STRING), Type.BIGINT, Type.BITMAP, true, "", "", "", "", "", "", "",
true, false, true, true));
}
addBuiltin(AggregateFunction.createBuiltin(BITMAP_UNION, Lists.newArrayList(Type.BITMAP),
Type.BITMAP,
Type.BITMAP,
"",
"",
"",
"",
"",
true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin(BITMAP_UNION_COUNT, Lists.newArrayList(Type.BITMAP),
Type.BIGINT,
Type.BITMAP,
"",
"",
"",
"",
"",
null,
"",
true, true, true, true));
// ORTHOGONAL_BITMAP_UNION_COUNT vectorized
addBuiltin(AggregateFunction.createBuiltin(ORTHOGONAL_BITMAP_UNION_COUNT, Lists.newArrayList(Type.BITMAP),
Type.BIGINT, Type.BITMAP, "", "", "", "", null, null, "", true, true, true, true));
addBuiltin(AggregateFunction.createBuiltin(BITMAP_INTERSECT, Lists.newArrayList(Type.BITMAP),
Type.BITMAP, Type.BITMAP,
"",
"",
"",
"",
"",
true, false, true, true));
// vec group_bitmap_xor
addBuiltin(AggregateFunction.createBuiltin("group_bitmap_xor", Lists.newArrayList(Type.BITMAP),
Type.BITMAP, Type.BITMAP,
"",
"",
"",
"",
"",
true, false, true, true));
//group_bit_function
for (Type t : Type.getIntegerTypes()) {
addBuiltin(AggregateFunction.createBuiltin("group_bit_or",
Lists.newArrayList(t), t, t, "", "", "", "", "",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("group_bit_and",
Lists.newArrayList(t), t, t, "", "", "", "", "",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("group_bit_xor",
Lists.newArrayList(t), t, t, "", "", "", "", "",
false, true, false, true));
if (!t.equals(Type.LARGEINT)) {
addBuiltin(
AggregateFunction.createBuiltin("bitmap_agg", Lists.newArrayList(t), Type.BITMAP, Type.BITMAP,
"",
"",
"",
"",
"",
true, false, true, true));
}
}
addBuiltin(AggregateFunction.createBuiltin(QUANTILE_UNION, Lists.newArrayList(Type.QUANTILE_STATE),
Type.QUANTILE_STATE,
Type.QUANTILE_STATE,
"",
"",
"",
"",
"",
true, false, true, true));
//vec percentile and percentile_approx
addBuiltin(AggregateFunction.createBuiltin("percentile",
Lists.newArrayList(Type.BIGINT, Type.DOUBLE), Type.DOUBLE, Type.VARCHAR,
"",
"",
"",
"",
"",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("percentile_cont",
Lists.newArrayList(Type.BIGINT, Type.DOUBLE), Type.DOUBLE, Type.VARCHAR,
"",
"",
"",
"",
"",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("percentile_approx",
Lists.<Type>newArrayList(Type.DOUBLE, Type.DOUBLE), Type.DOUBLE, Type.VARCHAR,
"",
"",
"",
"",
"",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("percentile_approx",
Lists.<Type>newArrayList(Type.DOUBLE, Type.DOUBLE, Type.DOUBLE), Type.DOUBLE, Type.VARCHAR,
"",
"",
"",
"",
"",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("percentile_array",
Lists.newArrayList(Type.BIGINT, new ArrayType(Type.DOUBLE)), new ArrayType(Type.DOUBLE), Type.VARCHAR,
"", "", "", "", "",
false, true, false, true));
// collect_list
for (Type t : Type.getArraySubTypes()) {
addBuiltin(AggregateFunction.createBuiltin(COLLECT_LIST, Lists.newArrayList(t), new ArrayType(t), t,
"", "", "", "", "", true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin(COLLECT_SET, Lists.newArrayList(t), new ArrayType(t), t,
"", "", "", "", "", true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin(COLLECT_LIST, Lists.newArrayList(t, Type.INT), new ArrayType(t), t,
"", "", "", "", "", true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin(COLLECT_SET, Lists.newArrayList(t, Type.INT), new ArrayType(t), t,
"", "", "", "", "", true, false, true, true));
addBuiltin(
AggregateFunction.createBuiltin("topn_array", Lists.newArrayList(t, Type.INT), new ArrayType(t), t,
"", "", "", "", "", true, false, true, true));
addBuiltin(
AggregateFunction
.createBuiltin("topn_array", Lists.newArrayList(t, Type.INT, Type.INT), new ArrayType(t), t,
"", "", "", "", "", true, false, true, true));
addBuiltin(
AggregateFunction
.createBuiltin("topn_weighted", Lists.newArrayList(t, Type.BIGINT, Type.INT),
new ArrayType(t),
t,
"", "", "", "", "", true, false, true, true));
addBuiltin(
AggregateFunction
.createBuiltin("topn_weighted", Lists.newArrayList(t, Type.BIGINT, Type.INT, Type.INT),
new ArrayType(t), t,
"", "", "", "", "", true, false, true, true));
// histogram | hist
addBuiltin(AggregateFunction.createBuiltin(HIST, Lists.newArrayList(t), Type.VARCHAR, t,
"", "", "", "", "", true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin(HISTOGRAM, Lists.newArrayList(t), Type.VARCHAR, t,
"", "", "", "", "", true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin(HIST, Lists.newArrayList(t, Type.INT), Type.VARCHAR, t,
"", "", "", "", "", true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin(HISTOGRAM, Lists.newArrayList(t, Type.INT), Type.VARCHAR, t,
"", "", "", "", "", true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin(HISTOGRAM, Lists.newArrayList(t, Type.DOUBLE, Type.INT),
Type.VARCHAR, t,
"", "", "", "", "", true, false, true, true));
// linear histogram
addBuiltin(AggregateFunction.createBuiltin(LINEAR_HISTOGRAM,
Lists.<Type>newArrayList(t, Type.DOUBLE), Type.VARCHAR, t,
"", "", "", "", "", true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin(LINEAR_HISTOGRAM,
Lists.<Type>newArrayList(t, Type.DOUBLE, Type.DOUBLE), Type.VARCHAR, t,
"", "", "", "", "", true, false, true, true));
// group array
addBuiltin(AggregateFunction.createBuiltin(GROUP_UNIQ_ARRAY, Lists.newArrayList(t), new ArrayType(t), t,
"", "", "", "", "", true, false, true, true));
addBuiltin(
AggregateFunction.createBuiltin(GROUP_UNIQ_ARRAY, Lists.newArrayList(t, Type.INT), new ArrayType(t),
t, "", "", "", "", "", true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin(GROUP_ARRAY, Lists.newArrayList(t), new ArrayType(t), t,
"", "", "", "", "", true, false, true, true));
addBuiltin(
AggregateFunction.createBuiltin(GROUP_ARRAY, Lists.newArrayList(t, Type.INT), new ArrayType(t),
t, "", "", "", "", "", true, false, true, true));
addBuiltin(
AggregateFunction.createBuiltin(GROUP_ARRAY_INTERSECT, Lists.newArrayList(new ArrayType(t)),
new ArrayType(t), t, "", "", "", "", "", true, false, true, true));
addBuiltin(AggregateFunction.createBuiltin(ARRAY_AGG, Lists.newArrayList(t), new ArrayType(t), t, "", "", "", "", "",
true, false, true, true));
//first_value/last_value for array
addBuiltin(AggregateFunction.createAnalyticBuiltin("first_value",
Lists.newArrayList(new ArrayType(t)), new ArrayType(t), Type.ARRAY,
"",
"",
null,
"",
"", true));
addBuiltin(AggregateFunction.createAnalyticBuiltin("last_value",
Lists.newArrayList(new ArrayType(t)), new ArrayType(t), Type.ARRAY,
"",
"",
null,
"",
"", true));
addBuiltin(AggregateFunction.createAnalyticBuiltin("first_value",
Lists.newArrayList(new ArrayType(t), Type.BOOLEAN), new ArrayType(t), Type.ARRAY,
"",
"",
null,
"",
"", true));
addBuiltin(AggregateFunction.createAnalyticBuiltin("last_value",
Lists.newArrayList(new ArrayType(t), Type.BOOLEAN), new ArrayType(t), Type.ARRAY,
"",
"",
null,
"",
"", true));
}
// Avg
// TODO: switch to CHAR(sizeof(AvgIntermediateType) when that becomes available
// vectorized avg
addBuiltin(AggregateFunction.createBuiltin("avg",
Lists.<Type>newArrayList(Type.BOOLEAN), Type.DOUBLE, Type.TINYINT,
"", "", "", "", "", "", "",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("avg",
Lists.<Type>newArrayList(Type.TINYINT), Type.DOUBLE, Type.TINYINT,
"", "", "", "", "", "", "",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("avg",
Lists.<Type>newArrayList(Type.SMALLINT), Type.DOUBLE, Type.SMALLINT,
"", "", "", "", "", "", "",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("avg",
Lists.<Type>newArrayList(Type.INT), Type.DOUBLE, Type.INT,
"", "", "", "", "", "", "",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("avg",
Lists.<Type>newArrayList(Type.BIGINT), Type.DOUBLE, Type.BIGINT,
"", "", "", "", "", "", "",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("avg",
Lists.<Type>newArrayList(Type.LARGEINT), Type.DOUBLE, Type.LARGEINT,
"", "", "", "", "", "", "",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("avg",
Lists.<Type>newArrayList(Type.DOUBLE), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("avg",
Lists.<Type>newArrayList(Type.MAX_DECIMALV2_TYPE), Type.MAX_DECIMALV2_TYPE, Type.MAX_DECIMALV2_TYPE,
"", "", "", "", "", "", "",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("avg",
Lists.<Type>newArrayList(Type.DECIMAL32), Type.DECIMAL128, Type.DECIMAL128,
"", "", "", "", "", "", "",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("avg",
Lists.<Type>newArrayList(Type.DECIMAL64), Type.DECIMAL128, Type.DECIMAL128,
"", "", "", "", "", "", "",
false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("avg",
Lists.<Type>newArrayList(Type.DECIMAL128), Type.DECIMAL128, Type.DECIMAL128,
"", "", "", "", "", "", "",
false, true, false, true));
// Group_concat(string) vectorized
addBuiltin(AggregateFunction.createBuiltin("group_concat", Lists.<Type>newArrayList(Type.VARCHAR), Type.VARCHAR,
Type.VARCHAR, "", "", "", "", "", false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_group_concat", Lists.<Type>newArrayList(Type.VARCHAR), Type.VARCHAR,
Type.VARCHAR, "", "", "", "", "", false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("group_concat", Lists.<Type>newArrayList(Type.CHAR), Type.CHAR,
Type.CHAR, "", "", "", "", "", false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_group_concat", Lists.<Type>newArrayList(Type.CHAR), Type.CHAR,
Type.CHAR, "", "", "", "", "", false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("group_concat", Lists.<Type>newArrayList(Type.STRING), Type.STRING,
Type.STRING, "", "", "", "", "", false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_group_concat", Lists.<Type>newArrayList(Type.STRING), Type.STRING,
Type.STRING, "", "", "", "", "", false, true, false, true));
// Group_concat(string, string) vectorized
addBuiltin(AggregateFunction.createBuiltin("group_concat", Lists.<Type>newArrayList(Type.VARCHAR, Type.VARCHAR),
Type.VARCHAR, Type.VARCHAR, "", "", "", "", "", false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_group_concat", Lists.<Type>newArrayList(Type.VARCHAR, Type.VARCHAR),
Type.VARCHAR, Type.VARCHAR, "", "", "", "", "", false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("group_concat", Lists.<Type>newArrayList(Type.CHAR, Type.CHAR),
Type.CHAR, Type.CHAR, "", "", "", "", "", false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_group_concat", Lists.<Type>newArrayList(Type.CHAR, Type.CHAR),
Type.CHAR, Type.CHAR, "", "", "", "", "", false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("group_concat", Lists.<Type>newArrayList(Type.STRING, Type.STRING),
Type.STRING, Type.STRING, "", "", "", "", "", false, true, false, true));
addBuiltin(AggregateFunction.createBuiltin("multi_distinct_group_concat", Lists.<Type>newArrayList(Type.STRING, Type.STRING),
Type.STRING, Type.STRING, "", "", "", "", "", false, true, false, true));
// analytic functions
// Rank
addBuiltin(AggregateFunction.createAnalyticBuiltin("rank",
Lists.<Type>newArrayList(), Type.BIGINT, Type.VARCHAR,
"",
"",
null,
"",
""));
// Percent Rank
addBuiltin(AggregateFunction.createAnalyticBuiltin("percent_rank",
Lists.<Type>newArrayList(), Type.DOUBLE, Type.VARCHAR,
"",
"",
null,
"",
""));
// Dense rank
addBuiltin(AggregateFunction.createAnalyticBuiltin("dense_rank",
Lists.<Type>newArrayList(), Type.BIGINT, Type.VARCHAR,
"",
"",
null,
"",
""));
//row_number
addBuiltin(AggregateFunction.createAnalyticBuiltin("row_number",
new ArrayList<Type>(), Type.BIGINT, Type.BIGINT,
"",
"",
"",
null, null));
//ntile, we use rewrite sql for ntile, actually we don't really need this.
addBuiltin(AggregateFunction.createAnalyticBuiltin("ntile",
Collections.singletonList(Type.BIGINT), Type.BIGINT, Type.BIGINT, null, null, null, null, null));
//vec Rank
addBuiltin(AggregateFunction.createAnalyticBuiltin("rank",
Lists.<Type>newArrayList(), Type.BIGINT, Type.VARCHAR,
"",
"",
null,
"",
"", true));
//vec Percent Rank
addBuiltin(AggregateFunction.createAnalyticBuiltin("percent_rank",
Lists.<Type>newArrayList(), Type.DOUBLE, Type.VARCHAR,
"",
"",
null,
"",
"", true));
//vec Dense rank
addBuiltin(AggregateFunction.createAnalyticBuiltin("dense_rank",
Lists.<Type>newArrayList(), Type.BIGINT, Type.VARCHAR,
"",
"",
null,
"",
"", true));
// vec cume_dist
addBuiltin(AggregateFunction.createAnalyticBuiltin("cume_dist",
Lists.<Type>newArrayList(), Type.DOUBLE, Type.VARCHAR,
"",
"",
null,
"",
"", true));
//vec row_number
addBuiltin(AggregateFunction.createAnalyticBuiltin("row_number",
new ArrayList<Type>(), Type.BIGINT, Type.BIGINT,
"",
"",
"",
null, null, true));
//vec ntile
addBuiltin(AggregateFunction.createAnalyticBuiltin("ntile",
Collections.singletonList(Type.BIGINT), Type.BIGINT, Type.BIGINT, null, null, null, null, null, true));
for (Type t : Type.getTrivialTypes()) {
if (t.isNull()) {
continue; // NULL is handled through type promotion.
}
if (t.isScalarType(PrimitiveType.CHAR)) {
continue; // promoted to STRING
}
addBuiltin(AggregateFunction.createAnalyticBuiltin(
"first_value", Lists.newArrayList(t), t, t,
"",
"",
null,
"",
""));
addBuiltin(AggregateFunction.createAnalyticBuiltin(
"last_value", Lists.newArrayList(t), t, t,
"",
"",
"",
"",
""));
//vec first_value
addBuiltin(AggregateFunction.createAnalyticBuiltin(
"first_value", Lists.newArrayList(t, Type.BOOLEAN), t, t,
"",
"",
null,
"",
"", true));
// Implements FIRST_VALUE for some windows that require rewrites during planning.
addBuiltin(AggregateFunction.createAnalyticBuiltin(
"first_value_rewrite", Lists.newArrayList(t, Type.BIGINT), t, t,
"",
"",
null,
"",
"",
false, false));
//vec last_value
addBuiltin(AggregateFunction.createAnalyticBuiltin(
"last_value", Lists.newArrayList(t, Type.BOOLEAN), t, t,
"",
"",
"",
"",
"", true));
addBuiltin(AggregateFunction.createAnalyticBuiltin(
"lag", Lists.newArrayList(t, Type.BIGINT, t), t, t,
"",
"",
null, "", null));
addBuiltin(AggregateFunction.createAnalyticBuiltin(
"lead", Lists.newArrayList(t, Type.BIGINT, t), t, t,
"",
"",
null, "", null));
//vec
addBuiltin(AggregateFunction.createAnalyticBuiltin(
"lag", Lists.newArrayList(t, Type.BIGINT, t), t, t,
"",
"",
null, null, null, true));
addBuiltin(AggregateFunction.createAnalyticBuiltin(
"lead", Lists.newArrayList(t, Type.BIGINT, t), t, t,
"",
"",
null, null, null, true));
// lead() and lag() the default offset and the default value should be
// rewritten to call the overrides that take all parameters.
addBuiltin(AggregateFunction.createAnalyticBuiltin(
"lag", Lists.newArrayList(t), t, t, false));
addBuiltin(AggregateFunction.createAnalyticBuiltin(
"lag", Lists.newArrayList(t, Type.BIGINT), t, t, false));
addBuiltin(AggregateFunction.createAnalyticBuiltin(
"lead", Lists.newArrayList(t), t, t, false));
addBuiltin(AggregateFunction.createAnalyticBuiltin(
"lead", Lists.newArrayList(t, Type.BIGINT), t, t, false));
addBuiltin(AggregateFunction.createAnalyticBuiltin(
"lag", Lists.newArrayList(t), t, t, true));
addBuiltin(AggregateFunction.createAnalyticBuiltin(
"lag", Lists.newArrayList(t, Type.BIGINT), t, t, true));
addBuiltin(AggregateFunction.createAnalyticBuiltin(
"lead", Lists.newArrayList(t), t, t, true));
addBuiltin(AggregateFunction.createAnalyticBuiltin(
"lead", Lists.newArrayList(t, Type.BIGINT), t, t, true));
}
// count_by_enum
addBuiltin(AggregateFunction.createBuiltin(COUNT_BY_ENUM,
Lists.newArrayList(Type.STRING),
Type.STRING,
Type.STRING,
true,
"",
"",
"",
"",
"",
"",
"",
false, true, false, true));
// corr
addBuiltin(AggregateFunction.createBuiltin("corr",
Lists.<Type>newArrayList(Type.TINYINT, Type.TINYINT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("corr",
Lists.<Type>newArrayList(Type.SMALLINT, Type.SMALLINT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("corr",
Lists.<Type>newArrayList(Type.INT, Type.INT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("corr",
Lists.<Type>newArrayList(Type.BIGINT, Type.BIGINT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("corr",
Lists.<Type>newArrayList(Type.FLOAT, Type.FLOAT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("corr",
Lists.<Type>newArrayList(Type.DOUBLE, Type.DOUBLE), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
// covar
addBuiltin(AggregateFunction.createBuiltin("covar",
Lists.<Type>newArrayList(Type.TINYINT, Type.TINYINT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("covar",
Lists.<Type>newArrayList(Type.SMALLINT, Type.SMALLINT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("covar",
Lists.<Type>newArrayList(Type.INT, Type.INT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("covar",
Lists.<Type>newArrayList(Type.BIGINT, Type.BIGINT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("covar",
Lists.<Type>newArrayList(Type.FLOAT, Type.FLOAT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("covar",
Lists.<Type>newArrayList(Type.DOUBLE, Type.DOUBLE), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("covar_pop",
Lists.<Type>newArrayList(Type.TINYINT, Type.TINYINT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("covar_pop",
Lists.<Type>newArrayList(Type.SMALLINT, Type.SMALLINT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("covar_pop",
Lists.<Type>newArrayList(Type.INT, Type.INT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("covar_pop",
Lists.<Type>newArrayList(Type.BIGINT, Type.BIGINT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("covar_pop",
Lists.<Type>newArrayList(Type.FLOAT, Type.FLOAT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("covar_pop",
Lists.<Type>newArrayList(Type.DOUBLE, Type.DOUBLE), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
// covar_samp
addBuiltin(AggregateFunction.createBuiltin("covar_samp",
Lists.<Type>newArrayList(Type.TINYINT, Type.TINYINT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("covar_samp",
Lists.<Type>newArrayList(Type.SMALLINT, Type.SMALLINT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("covar_samp",
Lists.<Type>newArrayList(Type.INT, Type.INT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("covar_samp",
Lists.<Type>newArrayList(Type.BIGINT, Type.BIGINT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("covar_samp",
Lists.<Type>newArrayList(Type.FLOAT, Type.FLOAT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin("covar_samp",
Lists.<Type>newArrayList(Type.DOUBLE, Type.DOUBLE), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
List<String> skewnessAndKurtosis = Lists.newArrayList("skew", "skew_pop", "skewness", "kurt",
"kurt_pop", "kurtosis");
skewnessAndKurtosis.addAll(skewnessAndKurtosis);
for (String name : skewnessAndKurtosis) {
addBuiltin(AggregateFunction.createBuiltin(name,
Lists.<Type>newArrayList(Type.TINYINT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin(name,
Lists.<Type>newArrayList(Type.SMALLINT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin(name,
Lists.<Type>newArrayList(Type.INT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin(name,
Lists.<Type>newArrayList(Type.BIGINT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin(name,
Lists.<Type>newArrayList(Type.LARGEINT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin(name,
Lists.<Type>newArrayList(Type.FLOAT), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
addBuiltin(AggregateFunction.createBuiltin(name,
Lists.<Type>newArrayList(Type.DOUBLE), Type.DOUBLE, Type.DOUBLE,
"", "", "", "", "", "", "",
false, false, false, true));
}
}