blob: e603fc64843047a53bf9ae9a16d49e119e3e04cc [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package org.apache.impala.catalog;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Map;
import org.apache.hadoop.hive.metastore.api.Database;
import org.apache.impala.analysis.ArithmeticExpr;
import org.apache.impala.analysis.BinaryPredicate;
import org.apache.impala.analysis.CaseExpr;
import org.apache.impala.analysis.CastExpr;
import org.apache.impala.analysis.CompoundPredicate;
import org.apache.impala.analysis.InPredicate;
import org.apache.impala.analysis.IsNullPredicate;
import org.apache.impala.analysis.LikePredicate;
import org.apache.impala.builtins.ScalarBuiltins;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
public class BuiltinsDb extends Db {
// Size in bytes of AvgState used for integer, floating point, and timestamp avg().
private static final int AVG_INTERMEDIATE_SIZE = 16;
// Size in bytes of DecimalAvgState used for decimal avg().
private static final int DECIMAL_AVG_INTERMEDIATE_SIZE = 24;
// Size in bytes of KnuthVarianceState used for stddev(), variance(), etc.
private static final int STDDEV_INTERMEDIATE_SIZE = 24;
// Size in bytes of probabilistic counting bitmap, used for distinctpc(), etc.
// Must match PC_INTERMEDIATE_BYTES in aggregate-functions-ir.cc.
private static final int PC_INTERMEDIATE_SIZE = 256;
// Size in bytes of Hyperloglog intermediate value used for ndv().
// Must match HLL_LEN in aggregate-functions-ir.cc.
private static final int HLL_INTERMEDIATE_SIZE = 1024;
// Size in bytes of RankState used for rank() and dense_rank().
private static final int RANK_INTERMEDIATE_SIZE = 16;
public BuiltinsDb(String name, Catalog catalog) {
super(name, catalog, createMetastoreDb(name));
setIsSystemDb(true);
initBuiltins();
}
/**
* Initializes all the builtins.
*/
private void initBuiltins() {
// Populate all aggregate builtins.
initAggregateBuiltins();
// Populate all scalar builtins.
ArithmeticExpr.initBuiltins(this);
BinaryPredicate.initBuiltins(this);
CastExpr.initBuiltins(this);
CaseExpr.initBuiltins(this);
CompoundPredicate.initBuiltins(this);
InPredicate.initBuiltins(this);
IsNullPredicate.initBuiltins(this);
LikePredicate.initBuiltins(this);
ScalarBuiltins.initBuiltins(this);
}
private static final String BUILTINS_DB_COMMENT = "System database for Impala builtin functions";
private static Database createMetastoreDb(String name) {
return new org.apache.hadoop.hive.metastore.api.Database(name,
BUILTINS_DB_COMMENT, "", Collections.<String,String>emptyMap());
}
private static final Map<Type, String> SAMPLE_INIT_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"19ReservoirSampleInitIN10impala_udf10BooleanValEEEvPNS2_15FunctionContextEPNS2_9StringValE")
.put(Type.TINYINT,
"19ReservoirSampleInitIN10impala_udf10TinyIntValEEEvPNS2_15FunctionContextEPNS2_9StringValE")
.put(Type.SMALLINT,
"19ReservoirSampleInitIN10impala_udf11SmallIntValEEEvPNS2_15FunctionContextEPNS2_9StringValE")
.put(Type.INT,
"19ReservoirSampleInitIN10impala_udf6IntValEEEvPNS2_15FunctionContextEPNS2_9StringValE")
.put(Type.BIGINT,
"19ReservoirSampleInitIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextEPNS2_9StringValE")
.put(Type.FLOAT,
"19ReservoirSampleInitIN10impala_udf8FloatValEEEvPNS2_15FunctionContextEPNS2_9StringValE")
.put(Type.DOUBLE,
"19ReservoirSampleInitIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextEPNS2_9StringValE")
.put(Type.STRING,
"19ReservoirSampleInitIN10impala_udf9StringValEEEvPNS2_15FunctionContextEPS3_")
.put(Type.TIMESTAMP,
"19ReservoirSampleInitIN10impala_udf12TimestampValEEEvPNS2_15FunctionContextEPNS2_9StringValE")
.put(Type.DECIMAL,
"19ReservoirSampleInitIN10impala_udf10DecimalValEEEvPNS2_15FunctionContextEPNS2_9StringValE")
.build();
private static final Map<Type, String> SAMPLE_SERIALIZE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"24ReservoirSampleSerializeIN10impala_udf10BooleanValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.TINYINT,
"24ReservoirSampleSerializeIN10impala_udf10TinyIntValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.SMALLINT,
"24ReservoirSampleSerializeIN10impala_udf11SmallIntValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.INT,
"24ReservoirSampleSerializeIN10impala_udf6IntValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.BIGINT,
"24ReservoirSampleSerializeIN10impala_udf9BigIntValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.FLOAT,
"24ReservoirSampleSerializeIN10impala_udf8FloatValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.DOUBLE,
"24ReservoirSampleSerializeIN10impala_udf9DoubleValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.STRING,
"24ReservoirSampleSerializeIN10impala_udf9StringValEEES3_PNS2_15FunctionContextERKS3_")
.put(Type.TIMESTAMP,
"24ReservoirSampleSerializeIN10impala_udf12TimestampValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.DECIMAL,
"24ReservoirSampleSerializeIN10impala_udf10DecimalValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.build();
private static final Map<Type, String> SAMPLE_MERGE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"20ReservoirSampleMergeIN10impala_udf10BooleanValEEEvPNS2_15FunctionContextERKNS2_9StringValEPS6_")
.put(Type.TINYINT,
"20ReservoirSampleMergeIN10impala_udf10TinyIntValEEEvPNS2_15FunctionContextERKNS2_9StringValEPS6_")
.put(Type.SMALLINT,
"20ReservoirSampleMergeIN10impala_udf11SmallIntValEEEvPNS2_15FunctionContextERKNS2_9StringValEPS6_")
.put(Type.INT,
"20ReservoirSampleMergeIN10impala_udf6IntValEEEvPNS2_15FunctionContextERKNS2_9StringValEPS6_")
.put(Type.BIGINT,
"20ReservoirSampleMergeIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextERKNS2_9StringValEPS6_")
.put(Type.FLOAT,
"20ReservoirSampleMergeIN10impala_udf8FloatValEEEvPNS2_15FunctionContextERKNS2_9StringValEPS6_")
.put(Type.DOUBLE,
"20ReservoirSampleMergeIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextERKNS2_9StringValEPS6_")
.put(Type.STRING,
"20ReservoirSampleMergeIN10impala_udf9StringValEEEvPNS2_15FunctionContextERKS3_PS3_")
.put(Type.TIMESTAMP,
"20ReservoirSampleMergeIN10impala_udf12TimestampValEEEvPNS2_15FunctionContextERKNS2_9StringValEPS6_")
.put(Type.DECIMAL,
"20ReservoirSampleMergeIN10impala_udf10DecimalValEEEvPNS2_15FunctionContextERKNS2_9StringValEPS6_")
.build();
private static final Map<Type, String> SAMPLE_UPDATE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"21ReservoirSampleUpdateIN10impala_udf10BooleanValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.TINYINT,
"21ReservoirSampleUpdateIN10impala_udf10TinyIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.SMALLINT,
"21ReservoirSampleUpdateIN10impala_udf11SmallIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.INT,
"21ReservoirSampleUpdateIN10impala_udf6IntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.BIGINT,
"21ReservoirSampleUpdateIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.FLOAT,
"21ReservoirSampleUpdateIN10impala_udf8FloatValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.DOUBLE,
"21ReservoirSampleUpdateIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.STRING,
"21ReservoirSampleUpdateIN10impala_udf9StringValEEEvPNS2_15FunctionContextERKT_PS3_")
.put(Type.TIMESTAMP,
"21ReservoirSampleUpdateIN10impala_udf12TimestampValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.DECIMAL,
"21ReservoirSampleUpdateIN10impala_udf10DecimalValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.build();
private static final Map<Type, String> SAMPLE_FINALIZE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"23ReservoirSampleFinalizeIN10impala_udf10BooleanValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.TINYINT,
"23ReservoirSampleFinalizeIN10impala_udf10TinyIntValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.SMALLINT,
"23ReservoirSampleFinalizeIN10impala_udf11SmallIntValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.INT,
"23ReservoirSampleFinalizeIN10impala_udf6IntValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.BIGINT,
"23ReservoirSampleFinalizeIN10impala_udf9BigIntValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.FLOAT,
"23ReservoirSampleFinalizeIN10impala_udf8FloatValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.DOUBLE,
"23ReservoirSampleFinalizeIN10impala_udf9DoubleValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.STRING,
"23ReservoirSampleFinalizeIN10impala_udf9StringValEEES3_PNS2_15FunctionContextERKS3_")
.put(Type.TIMESTAMP,
"23ReservoirSampleFinalizeIN10impala_udf12TimestampValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.DECIMAL,
"23ReservoirSampleFinalizeIN10impala_udf10DecimalValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.build();
private static final Map<Type, String> UPDATE_VAL_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"9UpdateValIN10impala_udf10BooleanValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.DECIMAL,
"9UpdateValIN10impala_udf10DecimalValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.TINYINT,
"9UpdateValIN10impala_udf10TinyIntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.SMALLINT,
"9UpdateValIN10impala_udf11SmallIntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.TIMESTAMP,
"9UpdateValIN10impala_udf12TimestampValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.INT,
"9UpdateValIN10impala_udf6IntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.FLOAT,
"9UpdateValIN10impala_udf8FloatValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.BIGINT,
"9UpdateValIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.DOUBLE,
"9UpdateValIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.STRING,
"9UpdateValIN10impala_udf9StringValEEEvPNS2_15FunctionContextERKT_PS6_")
.build();
private static final Map<Type, String> APPX_MEDIAN_FINALIZE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"18AppxMedianFinalizeIN10impala_udf10BooleanValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.DECIMAL,
"18AppxMedianFinalizeIN10impala_udf10DecimalValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.TINYINT,
"18AppxMedianFinalizeIN10impala_udf10TinyIntValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.SMALLINT,
"18AppxMedianFinalizeIN10impala_udf11SmallIntValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.TIMESTAMP,
"18AppxMedianFinalizeIN10impala_udf12TimestampValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.INT,
"18AppxMedianFinalizeIN10impala_udf6IntValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.FLOAT,
"18AppxMedianFinalizeIN10impala_udf8FloatValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.BIGINT,
"18AppxMedianFinalizeIN10impala_udf9BigIntValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.DOUBLE,
"18AppxMedianFinalizeIN10impala_udf9DoubleValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.STRING,
"18AppxMedianFinalizeIN10impala_udf9StringValEEET_PNS2_15FunctionContextERKS3_")
.build();
private static final Map<Type, String> HISTOGRAM_FINALIZE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"17HistogramFinalizeIN10impala_udf10BooleanValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.TINYINT,
"17HistogramFinalizeIN10impala_udf10TinyIntValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.SMALLINT,
"17HistogramFinalizeIN10impala_udf11SmallIntValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.INT,
"17HistogramFinalizeIN10impala_udf6IntValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.BIGINT,
"17HistogramFinalizeIN10impala_udf9BigIntValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.FLOAT,
"17HistogramFinalizeIN10impala_udf8FloatValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.DOUBLE,
"17HistogramFinalizeIN10impala_udf9DoubleValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.STRING,
"17HistogramFinalizeIN10impala_udf9StringValEEES3_PNS2_15FunctionContextERKS3_")
.put(Type.TIMESTAMP,
"17HistogramFinalizeIN10impala_udf12TimestampValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.put(Type.DECIMAL,
"17HistogramFinalizeIN10impala_udf10DecimalValEEENS2_9StringValEPNS2_15FunctionContextERKS4_")
.build();
private static final Map<Type, String> HLL_UPDATE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"9HllUpdateIN10impala_udf10BooleanValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.TINYINT,
"9HllUpdateIN10impala_udf10TinyIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.SMALLINT,
"9HllUpdateIN10impala_udf11SmallIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.INT,
"9HllUpdateIN10impala_udf6IntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.BIGINT,
"9HllUpdateIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.FLOAT,
"9HllUpdateIN10impala_udf8FloatValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.DOUBLE,
"9HllUpdateIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.STRING,
"9HllUpdateIN10impala_udf9StringValEEEvPNS2_15FunctionContextERKT_PS3_")
.put(Type.TIMESTAMP,
"9HllUpdateIN10impala_udf12TimestampValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.DECIMAL,
"9HllUpdateIN10impala_udf10DecimalValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.build();
private static final Map<Type, String> PC_UPDATE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"8PcUpdateIN10impala_udf10BooleanValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.TINYINT,
"8PcUpdateIN10impala_udf10TinyIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.SMALLINT,
"8PcUpdateIN10impala_udf11SmallIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.INT,
"8PcUpdateIN10impala_udf6IntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.BIGINT,
"8PcUpdateIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.FLOAT,
"8PcUpdateIN10impala_udf8FloatValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.DOUBLE,
"8PcUpdateIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.STRING,
"8PcUpdateIN10impala_udf9StringValEEEvPNS2_15FunctionContextERKT_PS3_")
.put(Type.TIMESTAMP,
"8PcUpdateIN10impala_udf12TimestampValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.DECIMAL,
"8PcUpdateIN10impala_udf10DecimalValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.build();
private static final Map<Type, String> PCSA_UPDATE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"10PcsaUpdateIN10impala_udf10BooleanValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.TINYINT,
"10PcsaUpdateIN10impala_udf10TinyIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.SMALLINT,
"10PcsaUpdateIN10impala_udf11SmallIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.INT,
"10PcsaUpdateIN10impala_udf6IntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.BIGINT,
"10PcsaUpdateIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.FLOAT,
"10PcsaUpdateIN10impala_udf8FloatValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.DOUBLE,
"10PcsaUpdateIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.STRING,
"10PcsaUpdateIN10impala_udf9StringValEEEvPNS2_15FunctionContextERKT_PS3_")
.put(Type.TIMESTAMP,
"10PcsaUpdateIN10impala_udf12TimestampValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.DECIMAL,
"10PcsaUpdateIN10impala_udf10DecimalValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.build();
private static final Map<Type, String> MIN_UPDATE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"3MinIN10impala_udf10BooleanValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.TINYINT,
"3MinIN10impala_udf10TinyIntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.SMALLINT,
"3MinIN10impala_udf11SmallIntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.INT,
"3MinIN10impala_udf6IntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.BIGINT,
"3MinIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.FLOAT,
"3MinIN10impala_udf8FloatValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.DOUBLE,
"3MinIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.STRING,
"3MinIN10impala_udf9StringValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.TIMESTAMP,
"3MinIN10impala_udf12TimestampValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.DECIMAL,
"3MinIN10impala_udf10DecimalValEEEvPNS2_15FunctionContextERKT_PS6_")
.build();
private static final Map<Type, String> MAX_UPDATE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"3MaxIN10impala_udf10BooleanValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.TINYINT,
"3MaxIN10impala_udf10TinyIntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.SMALLINT,
"3MaxIN10impala_udf11SmallIntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.INT,
"3MaxIN10impala_udf6IntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.BIGINT,
"3MaxIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.FLOAT,
"3MaxIN10impala_udf8FloatValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.DOUBLE,
"3MaxIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.STRING,
"3MaxIN10impala_udf9StringValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.TIMESTAMP,
"3MaxIN10impala_udf12TimestampValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.DECIMAL,
"3MaxIN10impala_udf10DecimalValEEEvPNS2_15FunctionContextERKT_PS6_")
.build();
private static final Map<Type, String> STDDEV_UPDATE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.TINYINT,
"14KnuthVarUpdateIN10impala_udf10TinyIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.SMALLINT,
"14KnuthVarUpdateIN10impala_udf11SmallIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.INT,
"14KnuthVarUpdateIN10impala_udf6IntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.BIGINT,
"14KnuthVarUpdateIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.FLOAT,
"14KnuthVarUpdateIN10impala_udf8FloatValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.DOUBLE,
"14KnuthVarUpdateIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.build();
private static final Map<Type, String> OFFSET_FN_INIT_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"12OffsetFnInitIN10impala_udf10BooleanValEEEvPNS2_15FunctionContextEPT_")
.put(Type.DECIMAL,
"12OffsetFnInitIN10impala_udf10DecimalValEEEvPNS2_15FunctionContextEPT_")
.put(Type.TINYINT,
"12OffsetFnInitIN10impala_udf10TinyIntValEEEvPNS2_15FunctionContextEPT_")
.put(Type.SMALLINT,
"12OffsetFnInitIN10impala_udf11SmallIntValEEEvPNS2_15FunctionContextEPT_")
.put(Type.TIMESTAMP,
"12OffsetFnInitIN10impala_udf12TimestampValEEEvPNS2_15FunctionContextEPT_")
.put(Type.INT,
"12OffsetFnInitIN10impala_udf6IntValEEEvPNS2_15FunctionContextEPT_")
.put(Type.FLOAT,
"12OffsetFnInitIN10impala_udf8FloatValEEEvPNS2_15FunctionContextEPT_")
.put(Type.BIGINT,
"12OffsetFnInitIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextEPT_")
.put(Type.DOUBLE,
"12OffsetFnInitIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextEPT_")
.put(Type.STRING,
"12OffsetFnInitIN10impala_udf9StringValEEEvPNS2_15FunctionContextEPT_")
.build();
private static final Map<Type, String> OFFSET_FN_UPDATE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"14OffsetFnUpdateIN10impala_udf10BooleanValEEEvPNS2_15FunctionContextERKT_RKNS2_9BigIntValES8_PS6_")
.put(Type.DECIMAL,
"14OffsetFnUpdateIN10impala_udf10DecimalValEEEvPNS2_15FunctionContextERKT_RKNS2_9BigIntValES8_PS6_")
.put(Type.TINYINT,
"14OffsetFnUpdateIN10impala_udf10TinyIntValEEEvPNS2_15FunctionContextERKT_RKNS2_9BigIntValES8_PS6_")
.put(Type.SMALLINT,
"14OffsetFnUpdateIN10impala_udf11SmallIntValEEEvPNS2_15FunctionContextERKT_RKNS2_9BigIntValES8_PS6_")
.put(Type.TIMESTAMP,
"14OffsetFnUpdateIN10impala_udf12TimestampValEEEvPNS2_15FunctionContextERKT_RKNS2_9BigIntValES8_PS6_")
.put(Type.INT,
"14OffsetFnUpdateIN10impala_udf6IntValEEEvPNS2_15FunctionContextERKT_RKNS2_9BigIntValES8_PS6_")
.put(Type.FLOAT,
"14OffsetFnUpdateIN10impala_udf8FloatValEEEvPNS2_15FunctionContextERKT_RKNS2_9BigIntValES8_PS6_")
.put(Type.BIGINT,
"14OffsetFnUpdateIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextERKT_RKS3_S8_PS6_")
.put(Type.DOUBLE,
"14OffsetFnUpdateIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextERKT_RKNS2_9BigIntValES8_PS6_")
.put(Type.STRING,
"14OffsetFnUpdateIN10impala_udf9StringValEEEvPNS2_15FunctionContextERKT_RKNS2_9BigIntValES8_PS6_")
.build();
private static final Map<Type, String> FIRST_VALUE_REWRITE_UPDATE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"21FirstValRewriteUpdateIN10impala_udf10BooleanValEEEvPNS2_15FunctionContextERKT_RKNS2_9BigIntValEPS6_")
.put(Type.DECIMAL,
"21FirstValRewriteUpdateIN10impala_udf10DecimalValEEEvPNS2_15FunctionContextERKT_RKNS2_9BigIntValEPS6_")
.put(Type.TINYINT,
"21FirstValRewriteUpdateIN10impala_udf10TinyIntValEEEvPNS2_15FunctionContextERKT_RKNS2_9BigIntValEPS6_")
.put(Type.SMALLINT,
"21FirstValRewriteUpdateIN10impala_udf11SmallIntValEEEvPNS2_15FunctionContextERKT_RKNS2_9BigIntValEPS6_")
.put(Type.TIMESTAMP,
"21FirstValRewriteUpdateIN10impala_udf12TimestampValEEEvPNS2_15FunctionContextERKT_RKNS2_9BigIntValEPS6_")
.put(Type.INT,
"21FirstValRewriteUpdateIN10impala_udf6IntValEEEvPNS2_15FunctionContextERKT_RKNS2_9BigIntValEPS6_")
.put(Type.FLOAT,
"21FirstValRewriteUpdateIN10impala_udf8FloatValEEEvPNS2_15FunctionContextERKT_RKNS2_9BigIntValEPS6_")
.put(Type.BIGINT,
"21FirstValRewriteUpdateIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextERKT_RKS3_PS6_")
.put(Type.DOUBLE,
"21FirstValRewriteUpdateIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextERKT_RKNS2_9BigIntValEPS6_")
.put(Type.STRING,
"21FirstValRewriteUpdateIN10impala_udf9StringValEEEvPNS2_15FunctionContextERKT_RKNS2_9BigIntValEPS6_")
.build();
private static final Map<Type, String> LAST_VALUE_REMOVE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"13LastValRemoveIN10impala_udf10BooleanValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.DECIMAL,
"13LastValRemoveIN10impala_udf10DecimalValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.TINYINT,
"13LastValRemoveIN10impala_udf10TinyIntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.SMALLINT,
"13LastValRemoveIN10impala_udf11SmallIntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.TIMESTAMP,
"13LastValRemoveIN10impala_udf12TimestampValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.INT,
"13LastValRemoveIN10impala_udf6IntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.FLOAT,
"13LastValRemoveIN10impala_udf8FloatValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.BIGINT,
"13LastValRemoveIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.DOUBLE,
"13LastValRemoveIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.STRING,
"13LastValRemoveIN10impala_udf9StringValEEEvPNS2_15FunctionContextERKT_PS6_")
.build();
private static final Map<Type, String> LAST_VALUE_IGNORE_NULLS_INIT_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"22LastValIgnoreNullsInitIN10impala_udf10BooleanValEEEvPNS2_15FunctionContextEPNS2_9StringValE")
.put(Type.TINYINT,
"22LastValIgnoreNullsInitIN10impala_udf10TinyIntValEEEvPNS2_15FunctionContextEPNS2_9StringValE")
.put(Type.SMALLINT,
"22LastValIgnoreNullsInitIN10impala_udf11SmallIntValEEEvPNS2_15FunctionContextEPNS2_9StringValE")
.put(Type.INT,
"22LastValIgnoreNullsInitIN10impala_udf6IntValEEEvPNS2_15FunctionContextEPNS2_9StringValE")
.put(Type.BIGINT,
"22LastValIgnoreNullsInitIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextEPNS2_9StringValE")
.put(Type.FLOAT,
"22LastValIgnoreNullsInitIN10impala_udf8FloatValEEEvPNS2_15FunctionContextEPNS2_9StringValE")
.put(Type.DOUBLE,
"22LastValIgnoreNullsInitIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextEPNS2_9StringValE")
.put(Type.STRING,
"22LastValIgnoreNullsInitIN10impala_udf9StringValEEEvPNS2_15FunctionContextEPS3_")
.put(Type.TIMESTAMP,
"22LastValIgnoreNullsInitIN10impala_udf12TimestampValEEEvPNS2_15FunctionContextEPNS2_9StringValE")
.put(Type.DECIMAL,
"22LastValIgnoreNullsInitIN10impala_udf10DecimalValEEEvPNS2_15FunctionContextEPNS2_9StringValE")
.build();
private static final Map<Type, String> LAST_VALUE_IGNORE_NULLS_UPDATE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"24LastValIgnoreNullsUpdateIN10impala_udf10BooleanValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.DECIMAL,
"24LastValIgnoreNullsUpdateIN10impala_udf10DecimalValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.TINYINT,
"24LastValIgnoreNullsUpdateIN10impala_udf10TinyIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.SMALLINT,
"24LastValIgnoreNullsUpdateIN10impala_udf11SmallIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.TIMESTAMP,
"24LastValIgnoreNullsUpdateIN10impala_udf12TimestampValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.INT,
"24LastValIgnoreNullsUpdateIN10impala_udf6IntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.FLOAT,
"24LastValIgnoreNullsUpdateIN10impala_udf8FloatValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.BIGINT,
"24LastValIgnoreNullsUpdateIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.DOUBLE,
"24LastValIgnoreNullsUpdateIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.STRING,
"24LastValIgnoreNullsUpdateIN10impala_udf9StringValEEEvPNS2_15FunctionContextERKT_PS3_")
.build();
private static final Map<Type, String> LAST_VALUE_IGNORE_NULLS_REMOVE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"24LastValIgnoreNullsRemoveIN10impala_udf10BooleanValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.DECIMAL,
"24LastValIgnoreNullsRemoveIN10impala_udf10DecimalValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.TINYINT,
"24LastValIgnoreNullsRemoveIN10impala_udf10TinyIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.SMALLINT,
"24LastValIgnoreNullsRemoveIN10impala_udf11SmallIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.TIMESTAMP,
"24LastValIgnoreNullsRemoveIN10impala_udf12TimestampValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.INT,
"24LastValIgnoreNullsRemoveIN10impala_udf6IntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.FLOAT,
"24LastValIgnoreNullsRemoveIN10impala_udf8FloatValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.BIGINT,
"24LastValIgnoreNullsRemoveIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.DOUBLE,
"24LastValIgnoreNullsRemoveIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE")
.put(Type.STRING,
"24LastValIgnoreNullsRemoveIN10impala_udf9StringValEEEvPNS2_15FunctionContextERKT_PS3_")
.build();
private static final Map<Type, String> LAST_VALUE_IGNORE_NULLS_GET_VALUE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"26LastValIgnoreNullsGetValueIN10impala_udf10BooleanValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.TINYINT,
"26LastValIgnoreNullsGetValueIN10impala_udf10TinyIntValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.SMALLINT,
"26LastValIgnoreNullsGetValueIN10impala_udf11SmallIntValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.INT,
"26LastValIgnoreNullsGetValueIN10impala_udf6IntValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.BIGINT,
"26LastValIgnoreNullsGetValueIN10impala_udf9BigIntValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.FLOAT,
"26LastValIgnoreNullsGetValueIN10impala_udf8FloatValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.DOUBLE,
"26LastValIgnoreNullsGetValueIN10impala_udf9DoubleValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.STRING,
"26LastValIgnoreNullsGetValueIN10impala_udf9StringValEEET_PNS2_15FunctionContextERKS3_")
.put(Type.TIMESTAMP,
"26LastValIgnoreNullsGetValueIN10impala_udf12TimestampValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.DECIMAL,
"26LastValIgnoreNullsGetValueIN10impala_udf10DecimalValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.build();
private static final Map<Type, String> LAST_VALUE_IGNORE_NULLS_FINALIZE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"26LastValIgnoreNullsFinalizeIN10impala_udf10BooleanValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.TINYINT,
"26LastValIgnoreNullsFinalizeIN10impala_udf10TinyIntValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.SMALLINT,
"26LastValIgnoreNullsFinalizeIN10impala_udf11SmallIntValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.INT,
"26LastValIgnoreNullsFinalizeIN10impala_udf6IntValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.BIGINT,
"26LastValIgnoreNullsFinalizeIN10impala_udf9BigIntValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.FLOAT,
"26LastValIgnoreNullsFinalizeIN10impala_udf8FloatValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.DOUBLE,
"26LastValIgnoreNullsFinalizeIN10impala_udf9DoubleValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.STRING,
"26LastValIgnoreNullsFinalizeIN10impala_udf9StringValEEET_PNS2_15FunctionContextERKS3_")
.put(Type.TIMESTAMP,
"26LastValIgnoreNullsFinalizeIN10impala_udf12TimestampValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.put(Type.DECIMAL,
"26LastValIgnoreNullsFinalizeIN10impala_udf10DecimalValEEET_PNS2_15FunctionContextERKNS2_9StringValE")
.build();
private static final Map<Type, String> FIRST_VALUE_UPDATE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"14FirstValUpdateIN10impala_udf10BooleanValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.DECIMAL,
"14FirstValUpdateIN10impala_udf10DecimalValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.TINYINT,
"14FirstValUpdateIN10impala_udf10TinyIntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.SMALLINT,
"14FirstValUpdateIN10impala_udf11SmallIntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.TIMESTAMP,
"14FirstValUpdateIN10impala_udf12TimestampValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.INT,
"14FirstValUpdateIN10impala_udf6IntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.FLOAT,
"14FirstValUpdateIN10impala_udf8FloatValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.BIGINT,
"14FirstValUpdateIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.DOUBLE,
"14FirstValUpdateIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.STRING,
"14FirstValUpdateIN10impala_udf9StringValEEEvPNS2_15FunctionContextERKT_PS6_")
.build();
private static final Map<Type, String> FIRST_VALUE_IGNORE_NULLS_UPDATE_SYMBOL =
ImmutableMap.<Type, String>builder()
.put(Type.BOOLEAN,
"25FirstValIgnoreNullsUpdateIN10impala_udf10BooleanValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.DECIMAL,
"25FirstValIgnoreNullsUpdateIN10impala_udf10DecimalValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.TINYINT,
"25FirstValIgnoreNullsUpdateIN10impala_udf10TinyIntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.SMALLINT,
"25FirstValIgnoreNullsUpdateIN10impala_udf11SmallIntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.TIMESTAMP,
"25FirstValIgnoreNullsUpdateIN10impala_udf12TimestampValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.INT,
"25FirstValIgnoreNullsUpdateIN10impala_udf6IntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.FLOAT,
"25FirstValIgnoreNullsUpdateIN10impala_udf8FloatValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.BIGINT,
"25FirstValIgnoreNullsUpdateIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.DOUBLE,
"25FirstValIgnoreNullsUpdateIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextERKT_PS6_")
.put(Type.STRING,
"25FirstValIgnoreNullsUpdateIN10impala_udf9StringValEEEvPNS2_15FunctionContextERKT_PS6_")
.build();
// Populate all the aggregate builtins in the catalog.
// null symbols indicate the function does not need that step of the evaluation.
// An empty symbol indicates a TODO for the BE to implement the function.
// TODO: We could also generate this in python but I'm not sure that is easier.
private void initAggregateBuiltins() {
final String prefix = "_ZN6impala18AggregateFunctions";
final String initNullString = prefix +
"14InitNullStringEPN10impala_udf15FunctionContextEPNS1_9StringValE";
final String initNull = prefix +
"8InitNullEPN10impala_udf15FunctionContextEPNS1_6AnyValE";
final String stringValSerializeOrFinalize = prefix +
"28StringValSerializeOrFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE";
final String stringValGetValue = prefix +
"17StringValGetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE";
Db db = this;
// Count (*)
db.addBuiltin(AggregateFunction.createBuiltin(db, "count",
new ArrayList<Type>(), Type.BIGINT, Type.BIGINT,
prefix + "8InitZeroIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextEPT_",
prefix + "15CountStarUpdateEPN10impala_udf15FunctionContextEPNS1_9BigIntValE",
prefix + "10CountMergeEPN10impala_udf15FunctionContextERKNS1_9BigIntValEPS4_",
null, null,
prefix + "15CountStarRemoveEPN10impala_udf15FunctionContextEPNS1_9BigIntValE",
null, false, true, true));
for (Type t: Type.getSupportedTypes()) {
if (t.isNull()) continue; // NULL is handled through type promotion.
if (t.isScalarType(PrimitiveType.CHAR)) continue; // promoted to STRING
if (t.isScalarType(PrimitiveType.VARCHAR)) continue; // promoted to STRING
// Count
db.addBuiltin(AggregateFunction.createBuiltin(db, "count",
Lists.newArrayList(t), Type.BIGINT, Type.BIGINT,
prefix + "8InitZeroIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextEPT_",
prefix + "11CountUpdateEPN10impala_udf15FunctionContextERKNS1_6AnyValEPNS1_9BigIntValE",
prefix + "10CountMergeEPN10impala_udf15FunctionContextERKNS1_9BigIntValEPS4_",
null, null,
prefix + "11CountRemoveEPN10impala_udf15FunctionContextERKNS1_6AnyValEPNS1_9BigIntValE",
null, false, true, true));
// Min
String minMaxInit = t.isStringType() ? initNullString : initNull;
String minMaxSerializeOrFinalize = t.isStringType() ?
stringValSerializeOrFinalize : null;
String minMaxGetValue = t.isStringType() ? stringValGetValue : null;
db.addBuiltin(AggregateFunction.createBuiltin(db, "min",
Lists.newArrayList(t), t, t, minMaxInit,
prefix + MIN_UPDATE_SYMBOL.get(t),
prefix + MIN_UPDATE_SYMBOL.get(t),
minMaxSerializeOrFinalize, minMaxGetValue,
null, minMaxSerializeOrFinalize, true, true, false));
// Max
db.addBuiltin(AggregateFunction.createBuiltin(db, "max",
Lists.newArrayList(t), t, t, minMaxInit,
prefix + MAX_UPDATE_SYMBOL.get(t),
prefix + MAX_UPDATE_SYMBOL.get(t),
minMaxSerializeOrFinalize, minMaxGetValue,
null, minMaxSerializeOrFinalize, true, true, false));
// Sample
db.addBuiltin(AggregateFunction.createBuiltin(db, "sample",
Lists.newArrayList(t), Type.STRING, Type.STRING,
prefix + SAMPLE_INIT_SYMBOL.get(t),
prefix + SAMPLE_UPDATE_SYMBOL.get(t),
prefix + SAMPLE_MERGE_SYMBOL.get(t),
prefix + SAMPLE_SERIALIZE_SYMBOL.get(t),
prefix + SAMPLE_FINALIZE_SYMBOL.get(t),
false, false, true));
// Approximate median
db.addBuiltin(AggregateFunction.createBuiltin(db, "appx_median",
Lists.newArrayList(t), t, Type.STRING,
prefix + SAMPLE_INIT_SYMBOL.get(t),
prefix + SAMPLE_UPDATE_SYMBOL.get(t),
prefix + SAMPLE_MERGE_SYMBOL.get(t),
prefix + SAMPLE_SERIALIZE_SYMBOL.get(t),
prefix + APPX_MEDIAN_FINALIZE_SYMBOL.get(t),
false, false, true));
// Histogram
db.addBuiltin(AggregateFunction.createBuiltin(db, "histogram",
Lists.newArrayList(t), Type.STRING, Type.STRING,
prefix + SAMPLE_INIT_SYMBOL.get(t),
prefix + SAMPLE_UPDATE_SYMBOL.get(t),
prefix + SAMPLE_MERGE_SYMBOL.get(t),
prefix + SAMPLE_SERIALIZE_SYMBOL.get(t),
prefix + HISTOGRAM_FINALIZE_SYMBOL.get(t),
false, false, true));
// NDV
Type hllIntermediateType =
ScalarType.createFixedUdaIntermediateType(HLL_INTERMEDIATE_SIZE);
db.addBuiltin(AggregateFunction.createBuiltin(db, "ndv",
Lists.newArrayList(t), Type.BIGINT, hllIntermediateType,
prefix + "7HllInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + HLL_UPDATE_SYMBOL.get(t),
prefix + "8HllMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "11HllFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
true, false, true));
db.addBuiltin(AggregateFunction.createBuiltin(db, "ndv_no_finalize",
Lists.newArrayList(t), Type.STRING, hllIntermediateType,
prefix + "7HllInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + HLL_UPDATE_SYMBOL.get(t),
prefix + "8HllMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
"_Z20IncrementNdvFinalizePN10impala_udf15FunctionContextERKNS_9StringValE",
true, false, true));
Type pcIntermediateType =
ScalarType.createFixedUdaIntermediateType(PC_INTERMEDIATE_SIZE);
// distinctpc
db.addBuiltin(AggregateFunction.createBuiltin(db, "distinctpc",
Lists.newArrayList(t), Type.BIGINT, pcIntermediateType,
prefix + "6PcInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + PC_UPDATE_SYMBOL.get(t),
prefix + "7PcMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "10PcFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, true));
// distinctpcsa
db.addBuiltin(AggregateFunction.createBuiltin(db, "distinctpcsa",
Lists.newArrayList(t), Type.BIGINT, pcIntermediateType,
prefix + "6PcInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + PCSA_UPDATE_SYMBOL.get(t),
prefix + "7PcMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "12PcsaFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, true));
if (STDDEV_UPDATE_SYMBOL.containsKey(t)) {
Type stddevIntermediateType =
ScalarType.createFixedUdaIntermediateType(STDDEV_INTERMEDIATE_SIZE);
db.addBuiltin(AggregateFunction.createBuiltin(db, "stddev",
Lists.newArrayList(t), Type.DOUBLE, stddevIntermediateType,
prefix + "12KnuthVarInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + "13KnuthVarMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "19KnuthStddevFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "stddev_samp",
Lists.newArrayList(t), Type.DOUBLE, stddevIntermediateType,
prefix + "12KnuthVarInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + "13KnuthVarMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "19KnuthStddevFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "stddev_pop",
Lists.newArrayList(t), Type.DOUBLE, stddevIntermediateType,
prefix + "12KnuthVarInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + "13KnuthVarMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "22KnuthStddevPopFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "variance",
Lists.newArrayList(t), Type.DOUBLE, stddevIntermediateType,
prefix + "12KnuthVarInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + "13KnuthVarMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "16KnuthVarFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "variance_samp",
Lists.newArrayList(t), Type.DOUBLE, stddevIntermediateType,
prefix + "12KnuthVarInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + "13KnuthVarMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "16KnuthVarFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "var_samp",
Lists.newArrayList(t), Type.DOUBLE, stddevIntermediateType,
prefix + "12KnuthVarInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + "13KnuthVarMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "16KnuthVarFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "variance_pop",
Lists.newArrayList(t), Type.DOUBLE, stddevIntermediateType,
prefix + "12KnuthVarInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + "13KnuthVarMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "19KnuthVarPopFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "var_pop",
Lists.newArrayList(t), Type.DOUBLE, stddevIntermediateType,
prefix + "12KnuthVarInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + STDDEV_UPDATE_SYMBOL.get(t),
prefix + "13KnuthVarMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "19KnuthVarPopFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, false));
}
}
// Sum
db.addBuiltin(AggregateFunction.createBuiltin(db, "sum",
Lists.<Type>newArrayList(Type.BIGINT), Type.BIGINT, Type.BIGINT, initNull,
prefix + "9SumUpdateIN10impala_udf9BigIntValES3_EEvPNS2_15FunctionContextERKT_PT0_",
prefix + "9SumUpdateIN10impala_udf9BigIntValES3_EEvPNS2_15FunctionContextERKT_PT0_",
null, null,
prefix + "9SumRemoveIN10impala_udf9BigIntValES3_EEvPNS2_15FunctionContextERKT_PT0_",
null, false, true, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "sum",
Lists.<Type>newArrayList(Type.DOUBLE), Type.DOUBLE, Type.DOUBLE, initNull,
prefix + "9SumUpdateIN10impala_udf9DoubleValES3_EEvPNS2_15FunctionContextERKT_PT0_",
prefix + "9SumUpdateIN10impala_udf9DoubleValES3_EEvPNS2_15FunctionContextERKT_PT0_",
null, null,
prefix + "9SumRemoveIN10impala_udf9DoubleValES3_EEvPNS2_15FunctionContextERKT_PT0_",
null, false, true, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "sum",
Lists.<Type>newArrayList(Type.DECIMAL), Type.DECIMAL, Type.DECIMAL, initNull,
prefix + "16SumDecimalUpdateEPN10impala_udf15FunctionContextERKNS1_10DecimalValEPS4_",
prefix + "15SumDecimalMergeEPN10impala_udf15FunctionContextERKNS1_10DecimalValEPS4_",
null, null,
prefix + "16SumDecimalRemoveEPN10impala_udf15FunctionContextERKNS1_10DecimalValEPS4_",
null, false, true, false));
// Sum that returns zero on an empty input.
db.addBuiltin(AggregateFunction.createBuiltin(db, "sum_init_zero",
Lists.<Type>newArrayList(Type.BIGINT), Type.BIGINT, Type.BIGINT,
prefix + "8InitZeroIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextEPT_",
prefix + "9SumUpdateIN10impala_udf9BigIntValES3_EEvPNS2_15FunctionContextERKT_PT0_",
prefix + "9SumUpdateIN10impala_udf9BigIntValES3_EEvPNS2_15FunctionContextERKT_PT0_",
null, null,
prefix + "9SumRemoveIN10impala_udf9BigIntValES3_EEvPNS2_15FunctionContextERKT_PT0_",
null, false, true, true));
// Avg
Type avgIntermediateType =
ScalarType.createFixedUdaIntermediateType(AVG_INTERMEDIATE_SIZE);
Type decimalAvgIntermediateType =
ScalarType.createFixedUdaIntermediateType(DECIMAL_AVG_INTERMEDIATE_SIZE);
db.addBuiltin(AggregateFunction.createBuiltin(db, "avg",
Lists.<Type>newArrayList(Type.BIGINT), Type.DOUBLE, avgIntermediateType,
prefix + "7AvgInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "9AvgUpdateIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE",
prefix + "8AvgMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "11AvgGetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "9AvgRemoveIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE",
prefix + "11AvgFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, true, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "avg",
Lists.<Type>newArrayList(Type.DOUBLE), Type.DOUBLE, avgIntermediateType,
prefix + "7AvgInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "9AvgUpdateIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE",
prefix + "8AvgMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "11AvgGetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "9AvgRemoveIN10impala_udf9DoubleValEEEvPNS2_15FunctionContextERKT_PNS2_9StringValE",
prefix + "11AvgFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, true, false));
db.addBuiltin(AggregateFunction.createBuiltin(db, "avg",
Lists.<Type>newArrayList(Type.DECIMAL), Type.DECIMAL, decimalAvgIntermediateType,
prefix + "14DecimalAvgInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "16DecimalAvgUpdateEPN10impala_udf15FunctionContextERKNS1_10DecimalValEPNS1_9StringValE",
prefix + "15DecimalAvgMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "18DecimalAvgGetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "16DecimalAvgRemoveEPN10impala_udf15FunctionContextERKNS1_10DecimalValEPNS1_9StringValE",
prefix + "18DecimalAvgFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, true, false));
// Avg(Timestamp)
db.addBuiltin(AggregateFunction.createBuiltin(db, "avg",
Lists.<Type>newArrayList(Type.TIMESTAMP), Type.TIMESTAMP, avgIntermediateType,
prefix + "7AvgInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "18TimestampAvgUpdateEPN10impala_udf15FunctionContextERKNS1_12TimestampValEPNS1_9StringValE",
prefix + "8AvgMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
null,
prefix + "20TimestampAvgGetValueEPN10impala_udf15FunctionContextERKNS1_9StringValE",
prefix + "18TimestampAvgRemoveEPN10impala_udf15FunctionContextERKNS1_12TimestampValEPNS1_9StringValE",
prefix + "20TimestampAvgFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, true, false));
// Group_concat(string)
db.addBuiltin(AggregateFunction.createBuiltin(db, "group_concat",
Lists.<Type>newArrayList(Type.STRING), Type.STRING, Type.STRING, initNullString,
prefix +
"18StringConcatUpdateEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
prefix +
"17StringConcatMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
stringValSerializeOrFinalize,
prefix +
"20StringConcatFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, false));
// Group_concat(string, string)
db.addBuiltin(AggregateFunction.createBuiltin(db, "group_concat",
Lists.<Type>newArrayList(Type.STRING, Type.STRING), Type.STRING, Type.STRING,
initNullString,
prefix +
"18StringConcatUpdateEPN10impala_udf15FunctionContextERKNS1_9StringValES6_PS4_",
prefix +
"17StringConcatMergeEPN10impala_udf15FunctionContextERKNS1_9StringValEPS4_",
stringValSerializeOrFinalize,
prefix +
"20StringConcatFinalizeEPN10impala_udf15FunctionContextERKNS1_9StringValE",
false, false, false));
// analytic functions
// Rank
Type rankIntermediateType =
ScalarType.createFixedUdaIntermediateType(RANK_INTERMEDIATE_SIZE);
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(db, "rank",
Lists.<Type>newArrayList(), Type.BIGINT, rankIntermediateType,
prefix + "8RankInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "10RankUpdateEPN10impala_udf15FunctionContextEPNS1_9StringValE",
null,
prefix + "12RankGetValueEPN10impala_udf15FunctionContextERNS1_9StringValE",
prefix + "12RankFinalizeEPN10impala_udf15FunctionContextERNS1_9StringValE"));
// Dense rank
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(db, "dense_rank",
Lists.<Type>newArrayList(), Type.BIGINT, rankIntermediateType,
prefix + "8RankInitEPN10impala_udf15FunctionContextEPNS1_9StringValE",
prefix + "15DenseRankUpdateEPN10impala_udf15FunctionContextEPNS1_9StringValE",
null,
prefix + "17DenseRankGetValueEPN10impala_udf15FunctionContextERNS1_9StringValE",
prefix + "12RankFinalizeEPN10impala_udf15FunctionContextERNS1_9StringValE"));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "row_number", new ArrayList<Type>(), Type.BIGINT, Type.BIGINT,
prefix + "8InitZeroIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextEPT_",
prefix + "15CountStarUpdateEPN10impala_udf15FunctionContextEPNS1_9BigIntValE",
prefix + "10CountMergeEPN10impala_udf15FunctionContextERKNS1_9BigIntValEPS4_",
null, null));
// The following 3 functions are never directly executed because they get rewritten
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "percent_rank", Lists.<Type>newArrayList(), Type.DOUBLE, Type.STRING));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "cume_dist", Lists.<Type>newArrayList(), Type.DOUBLE, Type.STRING));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "ntile", Lists.<Type>newArrayList(Type.BIGINT), Type.BIGINT, Type.STRING));
for (Type t: Type.getSupportedTypes()) {
if (t.isNull()) continue; // NULL is handled through type promotion.
if (t.isScalarType(PrimitiveType.CHAR)) continue; // promoted to STRING
if (t.isScalarType(PrimitiveType.VARCHAR)) continue; // promoted to STRING
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "first_value", Lists.newArrayList(t), t, t,
t.isStringType() ? initNullString : initNull,
prefix + FIRST_VALUE_UPDATE_SYMBOL.get(t),
null,
t == Type.STRING ? stringValGetValue : null,
t == Type.STRING ? stringValSerializeOrFinalize : null));
// Implements FIRST_VALUE for some windows that require rewrites during planning.
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "first_value_rewrite", Lists.newArrayList(t, Type.BIGINT), t, t,
t.isStringType() ? initNullString : initNull,
prefix + FIRST_VALUE_REWRITE_UPDATE_SYMBOL.get(t),
null,
t == Type.STRING ? stringValGetValue : null,
t == Type.STRING ? stringValSerializeOrFinalize : null,
false));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "first_value_ignore_nulls", Lists.newArrayList(t), t, t,
t.isStringType() ? initNullString : initNull,
prefix + FIRST_VALUE_IGNORE_NULLS_UPDATE_SYMBOL.get(t),
null,
t == Type.STRING ? stringValGetValue : null,
t == Type.STRING ? stringValSerializeOrFinalize : null,
false));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "last_value", Lists.newArrayList(t), t, t,
t.isStringType() ? initNullString : initNull,
prefix + UPDATE_VAL_SYMBOL.get(t),
prefix + LAST_VALUE_REMOVE_SYMBOL.get(t),
t == Type.STRING ? stringValGetValue : null,
t == Type.STRING ? stringValSerializeOrFinalize : null));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "last_value_ignore_nulls", Lists.newArrayList(t), t, Type.STRING,
prefix + LAST_VALUE_IGNORE_NULLS_INIT_SYMBOL.get(t),
prefix + LAST_VALUE_IGNORE_NULLS_UPDATE_SYMBOL.get(t),
prefix + LAST_VALUE_IGNORE_NULLS_REMOVE_SYMBOL.get(t),
prefix + LAST_VALUE_IGNORE_NULLS_GET_VALUE_SYMBOL.get(t),
prefix + LAST_VALUE_IGNORE_NULLS_FINALIZE_SYMBOL.get(t),
false));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "lag", Lists.newArrayList(t, Type.BIGINT, t), t, t,
prefix + OFFSET_FN_INIT_SYMBOL.get(t),
prefix + OFFSET_FN_UPDATE_SYMBOL.get(t),
null,
t == Type.STRING ? stringValGetValue : null,
t == Type.STRING ? stringValSerializeOrFinalize : null));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "lead", Lists.newArrayList(t, Type.BIGINT, t), t, t,
prefix + OFFSET_FN_INIT_SYMBOL.get(t),
prefix + OFFSET_FN_UPDATE_SYMBOL.get(t),
null,
t == Type.STRING ? stringValGetValue : null,
t == Type.STRING ? stringValSerializeOrFinalize : null));
// lead() and lag() the default offset and the default value should be
// rewritten to call the overrides that take all parameters.
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "lag", Lists.newArrayList(t), t, t));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "lag", Lists.newArrayList(t, Type.BIGINT), t, t));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "lead", Lists.newArrayList(t), t, t));
db.addBuiltin(AggregateFunction.createAnalyticBuiltin(
db, "lead", Lists.newArrayList(t, Type.BIGINT), t, t));
}
}
}