blob: 06ae53e909f0f3a49aef841b54867614a5ce289a [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.
*/
#include "dbcommon/function/func.h"
#include <cassert>
#include "dbcommon/function/agg-func.h"
#include "dbcommon/function/arith-cmp-func.cg.h"
#include "dbcommon/function/array-function.h"
#include "dbcommon/function/date-function.h"
#include "dbcommon/function/decimal-function.h"
#include "dbcommon/function/func-kind.cg.h"
#include "dbcommon/function/mathematical-function.h"
#include "dbcommon/function/string-binary-function.h"
#include "dbcommon/function/typecast-func.cg.h"
#include "dbcommon/function/typecast-function.h"
#include "dbcommon/function/typecast-texttonum-func.h"
#include "dbcommon/function/volatile-func.h"
// [[[cog
#if false
from cog import out, outl
import sys, os
python_path = os.path.dirname(cog.inFile) + "/../python"
python_path = os.path.abspath(python_path)
sys.path.append(python_path)
from code_generator import *
cog.outl("""
/*
* DO NOT EDIT!"
* This file is generated from : %s
*/
""" % cog.inFile)
#endif
// ]]]
// [[[end]]]
namespace dbcommon {
Func *Func::inst = new Func();
Func::Func() {
inst = this;
setupFunctionTable();
setupAggTable();
}
//
// Setup function tables
//
void Func::setupFunctionTable() {
// clang-format off
// [[[cog
#if false
def call_function_table(opmap, ltypemap, rtypemap) :
for op_key in opmap:
for ta in ltypemap:
for tb in rtypemap:
rettype = get_func_return_type(ta, tb, op_key)
functionId = "%s_%s_%s" % (ltypemap[ta].sqltype, opmap[op_key].name, rtypemap[tb].sqltype)
funcImpl = "%s_%s_%s" % (ltypemap[ta].name, opmap[op_key].name, rtypemap[tb].name)
funcName = "%s_%s_%s" % (ltypemap[ta].name, opmap[op_key].name, rtypemap[tb].name)
if ltypemap[ta].name == ltypemap[tb].name and ltypemap[ta].name == "string":
funcImpl = "%s_%s_%s" % ("binary", opmap[op_key].name, "binary")
cog.out("""
FuncEntryArray.push_back({%s, \"%s\", %s, {%s, %s}, %s, true});
""" % (functionId.upper(), funcName, rettype.typekind, ltypemap[ta].typekind, rtypemap[tb].typekind, funcImpl))
#endif
// ]]]
// [[[end]]]
// [[[cog
#if false
cog.outl("//%s:%d" % (cog.inFile,cog.firstLineNum))
call_function_table(CMP_OP, NUMERIC_TYPES, NUMERIC_TYPES)
#endif
// ]]]
// [[[end]]]
// [[[cog
#if false
cog.outl("//%s:%d" % (cog.inFile,cog.firstLineNum))
call_function_table(CMP_OP, STRING_TYPES, STRING_TYPES)
call_function_table(CMP_OP, BINARY_TYPES, BINARY_TYPES)
#endif
// ]]]
// [[[end]]]
// [[[cog
#if false
cog.outl("//%s:%d" % (cog.inFile,cog.firstLineNum))
call_function_table(CMP_OP, BOOL_TYPE, BOOL_TYPE)
#endif
// ]]]
// [[[end]]]
// [[[cog
#if false
cog.outl("//%s:%d" % (cog.inFile,cog.firstLineNum))
call_function_table(CMP_OP, TIMESTAMP_TYPE, TIMESTAMP_TYPE)
call_function_table(CMP_OP, DECIMAL_TYPE, DECIMAL_TYPE)
#endif
// ]]]
// [[[end]]]
// [[[cog
#if false
cog.outl("//%s:%d" % (cog.inFile,cog.firstLineNum))
call_function_table(ARITH_OP, NUMERIC_TYPES, NUMERIC_TYPES)
call_function_table(ARITH_OP, DECIMAL_TYPE, DECIMAL_TYPE)
#endif
// ]]]
// [[[end]]]
FuncEntryArray.push_back({AVG_TINYINT, "avg", DOUBLEID, {TINYINTID}});
FuncEntryArray.push_back({AVG_TINYINT_ACCU, "avg_tinyint_accu", AVG_DECIMAL_TRANS_DATA_ID, {TINYINTID}, avg_int8_accu});
FuncEntryArray.push_back({AVG_TINYINT_AMALG, "avg_tinyint_amalg", AVG_DECIMAL_TRANS_DATA_ID, {AVG_DECIMAL_TRANS_DATA_ID}, avg_int8_amalg});
FuncEntryArray.push_back({AVG_TINYINT_AVG, "avg_tinyint_avg", DOUBLEID, {AVG_DECIMAL_TRANS_DATA_ID}, avg_double_avg});
FuncEntryArray.push_back({AVG_SMALLINT, "avg", DOUBLEID, {SMALLINTID}});
FuncEntryArray.push_back({AVG_SMALLINT_ACCU, "avg_smallint_accu", AVG_DECIMAL_TRANS_DATA_ID, {SMALLINTID}, avg_int16_accu});
FuncEntryArray.push_back({AVG_SMALLINT_AMALG, "avg_smallint_amalg", AVG_DECIMAL_TRANS_DATA_ID, {AVG_DECIMAL_TRANS_DATA_ID}, avg_int16_amalg});
FuncEntryArray.push_back({AVG_SMALLINT_AVG, "avg_smallint_avg", DOUBLEID, {AVG_DECIMAL_TRANS_DATA_ID}, avg_double_avg});
FuncEntryArray.push_back({AVG_INT, "avg", DOUBLEID, {INTID}});
FuncEntryArray.push_back({AVG_INT_ACCU, "avg_int_accu", AVG_DECIMAL_TRANS_DATA_ID, {INTID}, avg_int32_accu});
FuncEntryArray.push_back({AVG_INT_AMALG, "avg_int_amalg", AVG_DECIMAL_TRANS_DATA_ID, {AVG_DECIMAL_TRANS_DATA_ID}, avg_int32_amalg});
FuncEntryArray.push_back({AVG_INT_AVG, "avg_int_avg", DOUBLEID, {AVG_DECIMAL_TRANS_DATA_ID}, avg_double_avg});
FuncEntryArray.push_back({AVG_BIGINT, "avg", DOUBLEID, {BIGINTID}});
FuncEntryArray.push_back({AVG_BIGINT_ACCU, "avg_bigint_accu", AVG_DECIMAL_TRANS_DATA_ID, {BIGINTID}, avg_int64_accu});
FuncEntryArray.push_back({AVG_BIGINT_AMALG, "avg_bigint_amalg", AVG_DECIMAL_TRANS_DATA_ID, {AVG_DECIMAL_TRANS_DATA_ID}, avg_int64_amalg});
FuncEntryArray.push_back({AVG_BIGINT_AVG, "avg_bigint_avg", DOUBLEID, {AVG_DECIMAL_TRANS_DATA_ID}, avg_double_avg});
FuncEntryArray.push_back({AVG_FLOAT, "avg", DOUBLEID, {FLOATID}});
FuncEntryArray.push_back({AVG_FLOAT_ACCU, "avg_float_accu", AVG_DECIMAL_TRANS_DATA_ID, {FLOATID}, avg_float_accu});
FuncEntryArray.push_back({AVG_FLOAT_AMALG, "avg_float_amalg", AVG_DECIMAL_TRANS_DATA_ID, {AVG_DECIMAL_TRANS_DATA_ID}, avg_float_amalg});
FuncEntryArray.push_back({AVG_FLOAT_AVG, "avg_float_avg", DOUBLEID, {AVG_DECIMAL_TRANS_DATA_ID}, avg_double_avg});
FuncEntryArray.push_back({AVG_DOUBLE, "avg", DOUBLEID, {DOUBLEID}});
FuncEntryArray.push_back({AVG_DOUBLE_ACCU, "avg_double_accu", AVG_DECIMAL_TRANS_DATA_ID, {DOUBLEID}, avg_double_accu});
FuncEntryArray.push_back({AVG_DOUBLE_AMALG, "avg_double_amalg", AVG_DECIMAL_TRANS_DATA_ID, {AVG_DECIMAL_TRANS_DATA_ID}, avg_double_amalg});
FuncEntryArray.push_back({AVG_DOUBLE_AVG, "avg_double_avg", DOUBLEID, {AVG_DECIMAL_TRANS_DATA_ID}, avg_double_avg});
FuncEntryArray.push_back({AVG_DECIMAL, "avg", DECIMALNEWID, {DECIMALNEWID}});
FuncEntryArray.push_back({AVG_DECIMAL_ACCU, "avg_decimal_accu", AVG_DECIMAL_TRANS_DATA_ID, {DECIMALNEWID}, avg_decimal_accu});
FuncEntryArray.push_back({AVG_DECIMAL_AMALG, "avg_decimal_amalg", AVG_DECIMAL_TRANS_DATA_ID, {AVG_DECIMAL_TRANS_DATA_ID}, avg_decimal_amalg});
FuncEntryArray.push_back({AVG_DECIMAL_AVG, "avg_decimal_avg", DECIMALNEWID, {AVG_DECIMAL_TRANS_DATA_ID}, avg_decimal_avg});
FuncEntryArray.push_back({SUM_TINYINT, "sum", BIGINTID, {TINYINTID}});
FuncEntryArray.push_back({SUM_TINYINT_SUM, "sum_tinyint_sum", BIGINTID, {BIGINTID}, sum_int8_sum});
FuncEntryArray.push_back({SUM_TINYINT_ADD, "sum_tinyint_add", BIGINTID, {TINYINTID}, sum_int8_add});
FuncEntryArray.push_back({SUM_SMALLINT, "sum", BIGINTID, {SMALLINTID}});
FuncEntryArray.push_back({SUM_SMALLINT_SUM, "sum_smallint_sum", BIGINTID, {BIGINTID}, sum_int16_sum});
FuncEntryArray.push_back({SUM_SMALLINT_ADD, "sum_smallint_add", BIGINTID, {SMALLINTID}, sum_int16_add});
FuncEntryArray.push_back({SUM_INT, "sum", BIGINTID, {INTID}});
FuncEntryArray.push_back({SUM_INT_SUM, "sum_int_sum", BIGINTID, {BIGINTID}, sum_int32_sum});
FuncEntryArray.push_back({SUM_INT_ADD, "sum_int_add", BIGINTID, {INTID}, sum_int32_add});
FuncEntryArray.push_back({SUM_BIGINT, "sum", BIGINTID, {BIGINTID}});
FuncEntryArray.push_back({SUM_BIGINT_SUM, "sum_bigint_sum", BIGINTID, {BIGINTID}, sum_int64_sum});
FuncEntryArray.push_back({SUM_BIGINT_ADD, "sum_bigint_add", BIGINTID, {BIGINTID}, sum_int64_add});
FuncEntryArray.push_back({SUM_FLOAT, "sum", DOUBLEID, {FLOATID}});
FuncEntryArray.push_back({SUM_FLOAT_SUM, "sum_float_sum", DOUBLEID, {DOUBLEID}, sum_float_sum});
FuncEntryArray.push_back({SUM_FLOAT_ADD, "sum_float_add", DOUBLEID, {FLOATID}, sum_float_add});
FuncEntryArray.push_back({SUM_DOUBLE, "sum", DOUBLEID, {DOUBLEID}});
FuncEntryArray.push_back({SUM_DOUBLE_SUM, "sum_double_sum", DOUBLEID, {DOUBLEID}, sum_double_sum});
FuncEntryArray.push_back({SUM_DOUBLE_ADD, "sum_double_add", DOUBLEID, {DOUBLEID}, sum_double_add});
FuncEntryArray.push_back({SUM_DECIMAL, "sum", DECIMALNEWID, {DECIMALNEWID}});
FuncEntryArray.push_back({SUM_DECIMAL_SUM, "sum_decimal_sum", DECIMALNEWID, {DECIMALNEWID}, sum_decimal_sum});
FuncEntryArray.push_back({SUM_DECIMAL_ADD, "sum_decimal_add", DECIMALNEWID, {DECIMALNEWID}, sum_decimal_add});
FuncEntryArray.push_back({MIN_TINYINT, "min", TINYINTID, {TINYINTID}});
FuncEntryArray.push_back({MIN_TINYINT_SMALLER, "min_tinyint_smaller", TINYINTID, {TINYINTID}, min_int8_smaller});
FuncEntryArray.push_back({MIN_SMALLINT, "min", SMALLINTID, {SMALLINTID}});
FuncEntryArray.push_back({MIN_SMALLINT_SMALLER, "min_smallint_smaller", SMALLINTID, {SMALLINTID}, min_int16_smaller});
FuncEntryArray.push_back({MIN_INT, "min", INTID, {INTID}});
FuncEntryArray.push_back({MIN_INT_SMALLER, "min_int_smaller", INTID, {INTID}, min_int32_smaller});
FuncEntryArray.push_back({MIN_BIGINT, "min", BIGINTID, {BIGINTID}});
FuncEntryArray.push_back({MIN_BIGINT_SMALLER, "min_bigint_smaller", BIGINTID, {BIGINTID}, min_int64_smaller});
FuncEntryArray.push_back({MIN_FLOAT, "min", FLOATID, {FLOATID}});
FuncEntryArray.push_back({MIN_FLOAT_SMALLER, "min_float_smaller", FLOATID, {FLOATID}, min_float_smaller});
FuncEntryArray.push_back({MIN_DOUBLE, "min", DOUBLEID, {DOUBLEID}});
FuncEntryArray.push_back({MIN_DOUBLE_SMALLER, "min_double_smaller", DOUBLEID, {DOUBLEID}, min_double_smaller});
FuncEntryArray.push_back({MIN_STRING, "min", STRINGID, {STRINGID}});
FuncEntryArray.push_back({MIN_STRING_SMALLER, "min_string_smaller", STRINGID, {STRINGID}, min_string_smaller});
FuncEntryArray.push_back({MIN_BPCHAR, "min", CHARID, {CHARID}});
FuncEntryArray.push_back({MIN_BPCHAR_SMALLER, "min_bpchar_smaller", CHARID, {CHARID}, min_string_smaller});
FuncEntryArray.push_back({MIN_DATE, "min", DATEID, {DATEID}});
FuncEntryArray.push_back({MIN_DATE_SMALLER, "min_date_smaller", DATEID, {DATEID}, min_date_smaller});
FuncEntryArray.push_back({MIN_TIME, "min", TIMEID, {TIMEID}});
FuncEntryArray.push_back({MIN_TIME_SMALLER, "min_time_smaller", TIMEID, {TIMEID}, min_time_smaller});
FuncEntryArray.push_back({MIN_TIMESTAMP, "min", TIMESTAMPID, {TIMESTAMPID}});
FuncEntryArray.push_back({MIN_TIMESTAMP_SMALLER, "min_timestamp_smaller", TIMESTAMPID, {TIMESTAMPID}, min_timestamp_smaller});
FuncEntryArray.push_back({MIN_DECIMAL, "min", DECIMALNEWID, {DECIMALNEWID}});
FuncEntryArray.push_back({MIN_DECIMAL_SMALLER, "min_decimal_smaller", DECIMALNEWID, {DECIMALNEWID}, min_decimal_smaller});
FuncEntryArray.push_back({MAX_TINYINT, "max", TINYINTID, {TINYINTID}});
FuncEntryArray.push_back({MAX_TINYINT_LARGER, "max_tinyint_larger", TINYINTID, {TINYINTID}, max_int8_larger});
FuncEntryArray.push_back({MAX_SMALLINT, "max", SMALLINTID, {SMALLINTID}});
FuncEntryArray.push_back({MAX_SMALLINT_LARGER, "max_smallint_larger", SMALLINTID, {SMALLINTID}, max_int16_larger});
FuncEntryArray.push_back({MAX_INT, "max", INTID, {INTID}});
FuncEntryArray.push_back({MAX_INT_LARGER, "max_int_larger", INTID, {INTID}, max_int32_larger});
FuncEntryArray.push_back({MAX_BIGINT, "max", BIGINTID, {BIGINTID}});
FuncEntryArray.push_back({MAX_BIGINT_LARGER, "max_bigint_larger", BIGINTID, {BIGINTID}, max_int64_larger});
FuncEntryArray.push_back({MAX_FLOAT, "max", FLOATID, {FLOATID}});
FuncEntryArray.push_back({MAX_FLOAT_LARGER, "max_float_larger", FLOATID, {FLOATID}, max_float_larger});
FuncEntryArray.push_back({MAX_DOUBLE, "max", DOUBLEID, {DOUBLEID}});
FuncEntryArray.push_back({MAX_DOUBLE_LARGER, "max_double_larger", DOUBLEID, {DOUBLEID}, max_double_larger});
FuncEntryArray.push_back({MAX_STRING, "max", STRINGID, {STRINGID}});
FuncEntryArray.push_back({MAX_STRING_LARGER, "max_string_larger", STRINGID, {STRINGID}, max_string_larger});
FuncEntryArray.push_back({MAX_BPCHAR, "max", CHARID, {CHARID}});
FuncEntryArray.push_back({MAX_BPCHAR_LARGER, "max_bpchar_larger", CHARID, {CHARID}, max_string_larger});
FuncEntryArray.push_back({MAX_DATE, "max", DATEID, {DATEID}});
FuncEntryArray.push_back({MAX_DATE_LARGER, "max_date_larger", DATEID, {DATEID}, max_date_larger});
FuncEntryArray.push_back({MAX_TIME, "max", TIMEID, {TIMEID}});
FuncEntryArray.push_back({MAX_TIME_LARGER, "max_time_larger", TIMEID, {TIMEID}, max_time_larger});
FuncEntryArray.push_back({MAX_TIMESTAMP, "max", TIMESTAMPID, {TIMESTAMPID}});
FuncEntryArray.push_back({MAX_TIMESTAMP_LARGER, "max_timestamp_larger", TIMESTAMPID, {TIMESTAMPID}, max_timestamp_larger});
FuncEntryArray.push_back({MAX_DECIMAL, "max", DECIMALNEWID, {DECIMALNEWID}});
FuncEntryArray.push_back({MAX_DECIMAL_LARGER, "max_decimal_larger", DECIMALNEWID, {DECIMALNEWID}, max_decimal_larger});
FuncEntryArray.push_back({COUNT, "count", BIGINTID, {ANYID}});
FuncEntryArray.push_back({COUNT_INC, "count_inc", BIGINTID, {ANYID}, count_inc});
FuncEntryArray.push_back({COUNT_ADD, "count_add", BIGINTID, {ANYID}, count_add});
FuncEntryArray.push_back({COUNT_STAR, "count", BIGINTID, {}, count_star});
// [[[cog
#if false
def generate_typecast_table(typemap) :
typeList = sorted(typemap.keys())
for i in range(len(typeList)):
for j in xrange(len(typeList)):
if i < j:
paramtype = typemap[typeList[i]].typekind
rettype = typemap[typeList[j]].typekind
functionId = "%s_TO_%s" % (typemap[typeList[i]].sqltype, typemap[typeList[j]].sqltype)
funcImpl = "%s_to_%s" % (typemap[typeList[i]].name, typemap[typeList[j]].name)
cog.out("""
FuncEntryArray.push_back({%s, \"%s\", %s, {%s}, %s, true});""" % (functionId.upper(), functionId.lower(), rettype, paramtype, funcImpl))
elif i > j:
paramtype = typemap[typeList[i]].typekind
rettype = typemap[typeList[j]].typekind
functionId = "%s_TO_%s" % (typemap[typeList[i]].sqltype, typemap[typeList[j]].sqltype)
funcImpl = "%s_to_%s" % (typemap[typeList[i]].name, typemap[typeList[j]].name)
cog.out("""
FuncEntryArray.push_back({%s, \"%s\", %s, {%s}, %s, true});""" % (functionId.upper(), functionId.lower(), rettype, paramtype, funcImpl))
#endif
// ]]]
// [[[end]]]
// [[[cog
#if false
cog.outl("//%s:%d" % (cog.inFile, cog.firstLineNum))
generate_typecast_table(NUMERIC_AND_DECIMAL_TYPES)
#endif
// ]]]
// [[[end]]]
// [[[cog
#if false
cog.outl("//%s:%d" % (cog.inFile,cog.firstLineNum))
call_function_table(CMP_OP, INTERVAL_TYPE, INTERVAL_TYPE)
#endif
// ]]]
// [[[end]]]
// [[[cog
#if false
cog.outl("//%s:%d" % (cog.inFile,cog.firstLineNum))
call_function_table(ARITH_OP, INTERVAL_TYPE, INTERVAL_TYPE)
#endif
// ]]]
// [[[end]]]
FuncEntryArray.push_back({SMALLINT_TO_TEXT, "smallint_to_text", STRINGID, {SMALLINTID}, int2_to_text});
FuncEntryArray.push_back({INT_TO_TEXT, "int_to_text", STRINGID, {INTID}, int4_to_text});
FuncEntryArray.push_back({BIGINT_TO_TEXT, "bigint_to_text", STRINGID, {BIGINTID}, int8_to_text});
FuncEntryArray.push_back({FLOAT_TO_TEXT, "float_to_text", STRINGID, {FLOATID}, float4_to_text});
FuncEntryArray.push_back({DOUBLE_TO_TEXT, "double_to_text", STRINGID, {DOUBLEID}, float8_to_text});
FuncEntryArray.push_back({DECIMAL_TO_TEXT, "decimal_to_text", STRINGID, {DECIMALNEWID}, decimal_to_text});
FuncEntryArray.push_back({BOOL_TO_TEXT, "bool_to_text", STRINGID, {BOOLEANID}, bool_to_text});
FuncEntryArray.push_back({TEXT_TO_CHAR, "text_to_char", TINYINTID, {STRINGID}, text_to_char});
FuncEntryArray.push_back({INT_TO_CHAR, "int4_to_char", TINYINTID, {INTID}, int4_to_char});
FuncEntryArray.push_back({DOUBLE_TO_TIMESTAMP, "double_to_timestamp", TIMESTAMPTZID, {DOUBLEID}, double_to_timestamp});
FuncEntryArray.push_back({CHAR_TO_STRING, "char_to_string", STRINGID, {CHARID},char_to_string, false});
FuncEntryArray.push_back({DATE_TO_TIMESTAMP, "date_to_timestamp", TIMESTAMPID, {DATEID}, date_to_timestamp, false});
FuncEntryArray.push_back({TIMESTAMP_TO_DATE, "timestamp_to_date", DATEID, {TIMESTAMPID}, timestamp_to_date, false});
FuncEntryArray.push_back({IS_TIMESTAMP_FINITE, "is_timestamp_finite", BOOLEANID, {TIMESTAMPID}, is_timestamp_finite, false});
FuncEntryArray.push_back({TIMESTAMP_DATE_PART, "timestamp_date_part",DOUBLEID , {STRINGID,TIMESTAMPID}, timestamp_date_part, false});
FuncEntryArray.push_back({TIMESTAMP_TO_TEXT, "timestamp_to_text",STRINGID, {TIMESTAMPID}, timestamp_to_text,false});
FuncEntryArray.push_back({TIMESTAMP_DATE_TRUNC, "timestamp_date_trunc",TIMESTAMPID, {STRINGID,TIMESTAMPID}, timestamp_date_trunc,false});
FuncEntryArray.push_back({TIME_SUB_TIME, "time_sub_time", INTERVALID, {TIMEID, TIMEID}, time_sub_time, false});
FuncEntryArray.push_back({TIMESTAMP_SUB_TIMESTAMP, "timestamp_sub_timestamp", INTERVALID, {TIMESTAMPID, TIMESTAMPID}, timestamp_sub_timestamp, false});
FuncEntryArray.push_back({DATE_ADD_INTERVAL, "date_add_interval", TIMESTAMPID, {DATEID, INTERVALID}, date_add_interval, false});
FuncEntryArray.push_back({DATE_SUB_INTERVAL, "date_sub_interval", TIMESTAMPID, {DATEID, INTERVALID}, date_sub_interval, false});
FuncEntryArray.push_back({TIME_ADD_INTERVAL, "time_add_interval", TIMEID, {TIMEID, INTERVALID}, time_add_interval, false});
FuncEntryArray.push_back({TIME_SUB_INTERVAL, "time_sub_interval", TIMEID, {TIMEID, INTERVALID}, time_sub_interval, false});
FuncEntryArray.push_back({TIMESTAMP_ADD_INTERVAL, "timestamp_add_interval", TIMESTAMPID, {TIMESTAMPID, INTERVALID}, timestamp_add_interval, false});
FuncEntryArray.push_back({TIMESTAMP_SUB_INTERVAL, "timestamp_sub_interval", TIMESTAMPID, {TIMESTAMPID, INTERVALID}, timestamp_sub_interval, false});
FuncEntryArray.push_back({RANDOMF, "random", DOUBLEID, {}, random_function, false});
FuncEntryArray.push_back({STRING_OCTET_LENGTH, "string_octet_length", INTID, {STRINGID}, binary_octet_length, false});
FuncEntryArray.push_back({BPCHAR_OCTET_LENGTH, "bpchar_octet_length", INTID, {CHARID}, binary_octet_length, false});
FuncEntryArray.push_back({STRING_CHAR_LENGTH, "string_char_length", INTID, {STRINGID}, string_char_length, false});
FuncEntryArray.push_back({BPCHAR_CHAR_LENGTH, "bpchar_char_length", INTID, {CHARID}, bpchar_char_length, false});
FuncEntryArray.push_back({STRING_LIKE, "string_like", BOOLEANID, {STRINGID, STRINGID}, string_like, false});
FuncEntryArray.push_back({BPCHAR_LIKE, "bpchar_like", BOOLEANID, {CHARID, STRINGID}, bpchar_like, false});
FuncEntryArray.push_back({STRING_NOT_LIKE, "string_not_like", BOOLEANID, {STRINGID, STRINGID}, string_not_like, false});
FuncEntryArray.push_back({BPCHAR_NOT_LIKE, "bpchar_not_like", BOOLEANID, {CHARID, STRINGID}, bpchar_not_like, false});
FuncEntryArray.push_back({STRING_SUBSTRING, "string_substring", STRINGID, {STRINGID, INTID, INTID}, string_substring, false});
FuncEntryArray.push_back({STRING_SUBSTRING_NOLEN, "string_substring_nolen", STRINGID, {STRINGID, INTID}, string_substring_nolen, false});
FuncEntryArray.push_back({STRING_LOWER, "string_lower", STRINGID, {STRINGID}, string_lower, false});
FuncEntryArray.push_back({STRING_UPPER, "string_upper", STRINGID, {STRINGID}, string_upper, false});
FuncEntryArray.push_back({STRING_CONCAT, "string_concat", STRINGID, {STRINGID, STRINGID}, string_concat, false});
FuncEntryArray.push_back({STRING_POSITION, "string_position", INTID, {STRINGID, STRINGID}, string_position, false});
FuncEntryArray.push_back({STRING_STRPOS, "string_strpos", INTID, {STRINGID, STRINGID}, string_position, false});
FuncEntryArray.push_back({STRING_INITCAP, "string_initcap", STRINGID, {STRINGID}, string_initcap, false});
FuncEntryArray.push_back({STRING_ASCII, "string_ascii", INTID, {STRINGID}, string_ascii, false});
FuncEntryArray.push_back({STRING_VARCHAR, "string_varchar", STRINGID, {STRINGID, INTID, BOOLEANID}, string_varchar, false});
FuncEntryArray.push_back({STRING_LTRIM_BLANK, "string_ltrim_blank", STRINGID, {STRINGID}, string_ltrim_blank});
FuncEntryArray.push_back({STRING_LTRIM_CHARS, "string_ltrim_chars", STRINGID, {STRINGID, STRINGID}, string_ltrim_chars});
FuncEntryArray.push_back({STRING_RTRIM_BLANK, "string_rtrim_blank", STRINGID, {STRINGID}, string_rtrim_blank});
FuncEntryArray.push_back({STRING_RTRIM_CHARS, "string_rtrim_chars", STRINGID, {STRINGID, STRINGID}, string_rtrim_chars});
FuncEntryArray.push_back({STRING_BTRIM_BLANK, "string_btrim_blank", STRINGID, {STRINGID}, string_btrim_blank});
FuncEntryArray.push_back({STRING_BTRIM_CHARS, "string_btrim_chars", STRINGID, {STRINGID, STRINGID}, string_btrim_chars});
FuncEntryArray.push_back({STRING_REPEAT, "string_repeat", STRINGID, {STRINGID, INTID}, string_repeat, false});
FuncEntryArray.push_back({STRING_CHR, "string_chr", STRINGID, {INTID}, string_chr, false});
FuncEntryArray.push_back({STRING_BPCHAR, "string_bpchar", CHARID, {CHARID, INTID, BOOLEANID}, string_bpchar, false});
FuncEntryArray.push_back({STRING_LPAD, "string_lpad", STRINGID, {STRINGID, INTID, STRINGID}, string_lpad, false});
FuncEntryArray.push_back({STRING_RPAD, "string_rpad", STRINGID, {STRINGID, INTID, STRINGID}, string_rpad, false});
FuncEntryArray.push_back({STRING_LPAD_NOFILL, "string_lpad_nofill", STRINGID, {STRINGID, INTID}, string_lpad_nofill, false});
FuncEntryArray.push_back({STRING_RPAD_NOFILL, "string_rpad_nofill", STRINGID, {STRINGID, INTID}, string_rpad_nofill, false});
FuncEntryArray.push_back({STRING_TRANSLATE, "string_translate", STRINGID, {STRINGID, STRINGID, STRINGID}, string_translate, false});
FuncEntryArray.push_back({BINARY_OCTET_LENGTH, "binary_octet_length", INTID, {BINARYID}, binary_octet_length, false});
FuncEntryArray.push_back({FLOAT_ARRAY_EUCLIDEAN_METRIC, "float_array_euclidean_metric", FLOATID, {FLOATARRAYID, FLOATARRAYID}, float_array_euclidean_metric, false});
FuncEntryArray.push_back({DOUBLE_ARRAY_EUCLIDEAN_METRIC, "double_array_euclidean_metric", DOUBLEID, {DOUBLEARRAYID, DOUBLEARRAYID}, double_array_euclidean_metric, false});
FuncEntryArray.push_back({FLOAT_ARRAY_COSINE_DISTANCE, "float_array_cosine_distance", DOUBLEID, {FLOATARRAYID, FLOATARRAYID}, float_array_cosine_distance, false});
FuncEntryArray.push_back({DOUBLE_ARRAY_COSINE_DISTANCE, "double_array_cosine_distance", DOUBLEID, {DOUBLEARRAYID, DOUBLEARRAYID}, double_array_cosine_distance, false});
FuncEntryArray.push_back({BIGINT_ARRAY_OVERLAP, "bigint_array_overlap", BOOLEANID, {BIGINTARRAYID, BIGINTARRAYID}, bigint_array_overlap, false});
FuncEntryArray.push_back({BIGINT_ARRAY_CONTAINS, "bigint_array_contains", BOOLEANID, {BIGINTARRAYID, BIGINTARRAYID}, bigint_array_contains, false});
FuncEntryArray.push_back({BIGINT_ARRAY_CONTAINED, "bigint_array_contained", BOOLEANID, {BIGINTARRAYID, BIGINTARRAYID}, bigint_array_contained, false});
FuncEntryArray.push_back({DOUBLE_ABS, "double_abs", DOUBLEID, { DOUBLEID }, double_abs, false});
FuncEntryArray.push_back({FLOAT_ABS, "float_abs", FLOATID, { FLOATID }, float_abs, false});
FuncEntryArray.push_back({INT64_ABS, "int64_abs", BIGINTID, { BIGINTID}, int64_abs, false});
FuncEntryArray.push_back({INT32_ABS, "int32_abs", INTID, { INTID }, int32_abs, false});
FuncEntryArray.push_back({INT16_ABS, "int16_abs", SMALLINTID, {SMALLINTID}, int16_abs, false});
FuncEntryArray.push_back({DOUBLE_CBRT, "double_cbrt", DOUBLEID, { DOUBLEID }, double_cbrt, false});
FuncEntryArray.push_back({INT16_BINARY_NOT, "int16_binary_not", SMALLINTID, { SMALLINTID }, int16_binary_not, false});
FuncEntryArray.push_back({INT32_BINARY_NOT, "int32_binary_not", INTID, { INTID }, int32_binary_not, false});
FuncEntryArray.push_back({INT64_BINARY_NOT, "int64_binary_not", BIGINTID, { BIGINTID }, int64_binary_not, false});
FuncEntryArray.push_back({INT16_BINARY_SHIFT_LEFT, "int16_binary_shift_left", SMALLINTID, { SMALLINTID, INTID }, int16_binary_shift_left, false});
FuncEntryArray.push_back({INT32_BINARY_SHIFT_LEFT, "int32_binary_shift_left", INTID, { INTID, INTID }, int32_binary_shift_left, false});
FuncEntryArray.push_back({INT64_BINARY_SHIFT_LEFT, "int64_binary_shift_left", BIGINTID, { BIGINTID, INTID }, int64_binary_shift_left, false});
FuncEntryArray.push_back({INT16_BINARY_SHIFT_RIGHT, "int16_binary_shift_right", SMALLINTID, { SMALLINTID, INTID }, int16_binary_shift_right, false});
FuncEntryArray.push_back({INT32_BINARY_SHIFT_RIGHT, "int32_binary_shift_right", INTID, { INTID, INTID }, int32_binary_shift_right, false});
FuncEntryArray.push_back({INT64_BINARY_SHIFT_RIGHT, "int64_binary_shift_right", BIGINTID, { BIGINTID, INTID }, int64_binary_shift_right, false});
FuncEntryArray.push_back({INT16_BINARY_AND, "int16_binary_and", SMALLINTID, { SMALLINTID, SMALLINTID }, int16_binary_and, false});
FuncEntryArray.push_back({INT32_BINARY_AND, "int32_binary_and", INTID, { INTID, INTID }, int32_binary_and, false});
FuncEntryArray.push_back({INT64_BINARY_AND, "int64_binary_and", BIGINTID, { BIGINTID, BIGINTID }, int64_binary_and, false});
FuncEntryArray.push_back({INT16_BINARY_OR, "int16_binary_or", SMALLINTID, { SMALLINTID, SMALLINTID }, int16_binary_or, false});
FuncEntryArray.push_back({INT32_BINARY_OR, "int32_binary_or", INTID, { INTID, INTID }, int32_binary_or, false});
FuncEntryArray.push_back({INT64_BINARY_OR, "int64_binary_or", BIGINTID, { BIGINTID, BIGINTID }, int64_binary_or, false});
FuncEntryArray.push_back({INT16_BINARY_XOR, "int16_binary_xor", SMALLINTID, { SMALLINTID, SMALLINTID }, int16_binary_xor, false});
FuncEntryArray.push_back({INT32_BINARY_XOR, "int32_binary_xor", INTID, { INTID, INTID }, int32_binary_xor, false});
FuncEntryArray.push_back({INT64_BINARY_XOR, "int64_binary_xor", BIGINTID, { BIGINTID, BIGINTID }, int64_binary_xor, false});
FuncEntryArray.push_back({INT16_MOD, "int16_mod", SMALLINTID, { SMALLINTID, SMALLINTID }, int16_mod, false});
FuncEntryArray.push_back({INT32_MOD, "int32_mod", INTID, { INTID, INTID }, int32_mod, false});
FuncEntryArray.push_back({INT16_32_MOD, "int16_32_mod", INTID, { SMALLINTID, INTID }, int16_32_mod, false});
FuncEntryArray.push_back({INT32_16_MOD, "int32_16_mod", INTID, { INTID, SMALLINTID }, int32_16_mod, false});
FuncEntryArray.push_back({INT64_MOD, "int64_mod", BIGINTID, { BIGINTID, BIGINTID }, int64_mod, false});
FuncEntryArray.push_back({DOUBLE_SQRT, "double_sqrt", DOUBLEID, { DOUBLEID }, double_sqrt, false});
FuncEntryArray.push_back({DOUBLE_POW, "double_pow", DOUBLEID, { DOUBLEID, DOUBLEID }, double_pow, false});
FuncEntryArray.push_back({DOUBLE_CEIL, "double_ceil", DOUBLEID, {DOUBLEID}, double_ceil, false});
FuncEntryArray.push_back({DOUBLE_FLOOR, "double_floor", DOUBLEID, {DOUBLEID}, double_floor, false});
FuncEntryArray.push_back({DOUBLE_ROUND, "double_round", DOUBLEID, {DOUBLEID}, double_round, false});
FuncEntryArray.push_back({DOUBLE_TRUNC, "double_trunc", DOUBLEID, {DOUBLEID}, double_trunc, false});
FuncEntryArray.push_back({DOUBLE_SIGN, "double_sign", DOUBLEID, {DOUBLEID}, double_sign, false});
FuncEntryArray.push_back({DOUBLE_EXP, "double_exp", DOUBLEID, {DOUBLEID}, double_exp, false});
FuncEntryArray.push_back({DOUBLE_LN, "double_ln", DOUBLEID, {DOUBLEID}, double_ln, false});
FuncEntryArray.push_back({DOUBLE_LG, "double_lg", DOUBLEID, {DOUBLEID}, double_lg, false});
FuncEntryArray.push_back({DOUBLE_LOG, "double_log", DOUBLEID, {DOUBLEID, DOUBLEID}, double_log, false});
FuncEntryArray.push_back({DOUBLE_ACOS, "double_acos", DOUBLEID, { DOUBLEID}, double_acos, false});
FuncEntryArray.push_back({DOUBLE_ASIN, "double_asin", DOUBLEID, { DOUBLEID}, double_asin, false});
FuncEntryArray.push_back({DOUBLE_ATAN, "double_atan", DOUBLEID, { DOUBLEID}, double_atan, false});
FuncEntryArray.push_back({DOUBLE_ATAN2, "double_atan2", DOUBLEID, { DOUBLEID, DOUBLEID}, double_atan2, false});
FuncEntryArray.push_back({DOUBLE_COS, "double_cos", DOUBLEID, { DOUBLEID}, double_cos, false});
FuncEntryArray.push_back({DOUBLE_COT, "double_cot", DOUBLEID, { DOUBLEID}, double_cot, false});
FuncEntryArray.push_back({DOUBLE_SIN, "double_sin", DOUBLEID, { DOUBLEID}, double_sin, false});
FuncEntryArray.push_back({DOUBLE_TAN, "double_tan", DOUBLEID, { DOUBLEID}, double_tan, false});
FuncEntryArray.push_back({DECIMAL_ABS, "decimal_abs", DECIMALNEWID, {DECIMALNEWID}, decimal_abs, false});
FuncEntryArray.push_back({DECIMAL_SIGN, "decimal_sign", DECIMALNEWID, {DECIMALNEWID}, decimal_sign, false});
FuncEntryArray.push_back({DECIMAL_CEIL, "decimal_ceil", DECIMALNEWID, {DECIMALNEWID}, decimal_ceil, false});
FuncEntryArray.push_back({DECIMAL_FLOOR, "decimal_floor", DECIMALNEWID, {DECIMALNEWID}, decimal_floor, false});
FuncEntryArray.push_back({DECIMAL_ROUND, "decimal_round", DECIMALNEWID, {DECIMALNEWID, INTID}, decimal_round, false});
FuncEntryArray.push_back({DECIMAL_ROUND_WITHOUT_SCALE, "decimal_round_without_scale", DECIMALNEWID, {DECIMALNEWID}, decimal_round_without_scale, false});
FuncEntryArray.push_back({DECIMAL_TRUNC, "decimal_trunc", DECIMALNEWID, {DECIMALNEWID, INTID}, decimal_trunc, false});
FuncEntryArray.push_back({DECIMAL_TRUNC_WITHOUT_SCALE, "decimal_trunc_without_scale", DECIMALNEWID, {DECIMALNEWID, INTID}, decimal_trunc_without_scale, false});
FuncEntryArray.push_back({DECIMAL_TO_DECIMAL, "decimal_to_decimal", DECIMALNEWID, {DECIMALNEWID, INTID}, decimal_to_decimal, false});
FuncEntryArray.push_back({DECIMAL_MOD, "decimal_mod", DECIMALNEWID, {DECIMALNEWID, DECIMALNEWID}, decimal_mod, false});
FuncEntryArray.push_back({DECIMAL_SQRT, "decimal_sqrt", DECIMALNEWID, { DECIMALNEWID }, decimal_sqrt, false});
FuncEntryArray.push_back({DECIMAL_EXP, "decimal_exp", DECIMALNEWID, { DECIMALNEWID }, decimal_exp, false});
FuncEntryArray.push_back({DECIMAL_LN, "decimal_ln", DECIMALNEWID, { DECIMALNEWID }, decimal_ln, false});
FuncEntryArray.push_back({DECIMAL_LOG, "decimal_log", DECIMALNEWID, { DECIMALNEWID, DECIMALNEWID}, decimal_log, false});
FuncEntryArray.push_back({DECIMAL_FAC, "decimal_fac", DECIMALNEWID, { BIGINTID }, decimal_fac, false});
FuncEntryArray.push_back({DECIMAL_POW, "decimal_pow", DECIMALNEWID, { DECIMALNEWID, DECIMALNEWID }, decimal_pow, false});
FuncEntryArray.push_back({TEXT_TO_SMALLINT, "text_smallint", SMALLINTID, {STRINGID}, text_to_int2});
FuncEntryArray.push_back({TEXT_TO_INT, "text_int", INTID, {STRINGID}, text_to_int4});
FuncEntryArray.push_back({TEXT_TO_BIGINT, "text_bigint", BIGINTID, {STRINGID}, text_to_int8});
FuncEntryArray.push_back({TEXT_TO_FLOAT, "text_float", FLOATID, {STRINGID}, text_to_float4});
FuncEntryArray.push_back({TEXT_TO_DOUBLE, "text_double", DOUBLEID, {STRINGID}, text_to_float8});
FuncEntryArray.push_back{TEXT_TO_DECIMAL, "text_decimal", DECIMALNEWID, {STRINGID}, textToDecimal});
FuncEntryArray.push_back({TO_NUMBER, "to_number", DECIMALNEWID, {STRINGID, STRINGID}, toNumber});
FuncEntryArray.push_back({INTERVAL_TO_TEXT, "interval_text", STRINGID, {INTERVALID}, intervalToText});
FuncEntryArray.push_back({BOOLEAN_TO_SMALLINT, "boolean_smallint", SMALLINTID, {BOOLEANID}, bool_to_int2});
FuncEntryArray.push_back({BOOLEAN_TO_INT, "boolean_int", INTID, {BOOLEANID}, bool_to_int4});
FuncEntryArray.push_back({BOOLEAN_TO_BIGINT, "boolean_bigint", BIGINTID, {BOOLEANID}, bool_to_int8});
FuncEntryArray.push_back({SMALLINT_TO_BOOLEAN, "smallint_boolean", BOOLEANID, {SMALLINTID}, int2_to_bool});
FuncEntryArray.push_back({INT_TO_BOOLEAN, "int_boolean", BOOLEANID, {INTID}, int4_to_bool});
FuncEntryArray.push_back({BIGINT_TO_BOOLEAN, "bigint_boolean", BOOLEANID, {BIGINTID}, int8_to_bool});
// clang-format on
std::sort(FuncEntryArray.begin(), FuncEntryArray.end(),
[](const FuncEntry &a, const FuncEntry &b) {
return a.funcId < b.funcId;
});
//
// Check if the function table is continuous
//
for (uint64_t i = 0; i < FuncEntryArray.size(); ++i) {
if (i != FuncEntryArray[i].funcId) {
assert(false && "function table is not ordered");
std::terminate();
}
}
//
// Setup function name map
//
for (uint64_t i = 0; i < FuncEntryArray.size(); ++i) {
FuncEntryMap.insert(
std::make_pair(FuncEntryArray[i].funcName, FuncEntryArray[i]));
}
}
const FuncEntry *Func::getFuncEntryById(FuncKind id) {
assert(id >= 0 && id < FuncEntryArray.size());
return &FuncEntryArray[id];
}
bool Func::hasFuncEntryById(FuncKind id) {
return id < FuncEntryArray.size() ? true : false;
}
const FuncEntry *Func::getFuncEntryByName(const std::string &name) {
const FuncMap::const_iterator iter = FuncEntryMap.find(name);
if (iter != FuncEntryMap.end()) {
return &(iter->second);
}
return nullptr;
}
void Func::setupAggTable() {
AggEntryArray = {
// clang-format off
{AVG_TINYINT, AVG_TINYINT_ACCU, AVG_TINYINT_AMALG, AVG_TINYINT_AVG, FUNCINVALID, DOUBLEID, false, false},
{AVG_SMALLINT, AVG_SMALLINT_ACCU, AVG_SMALLINT_AMALG, AVG_SMALLINT_AVG, FUNCINVALID, DOUBLEID, false, false},
{AVG_INT, AVG_INT_ACCU, AVG_INT_AMALG, AVG_INT_AVG, FUNCINVALID, DOUBLEID, false, false},
{AVG_BIGINT, AVG_BIGINT_ACCU, AVG_BIGINT_AMALG, AVG_BIGINT_AVG, FUNCINVALID, DOUBLEID, false, false},
{AVG_FLOAT, AVG_FLOAT_ACCU, AVG_FLOAT_AMALG, AVG_FLOAT_AVG, FUNCINVALID, DOUBLEID, false, false},
{AVG_DOUBLE, AVG_DOUBLE_ACCU, AVG_DOUBLE_AMALG, AVG_DOUBLE_AVG, FUNCINVALID, DOUBLEID, false, false},
{AVG_DECIMAL, AVG_DECIMAL_ACCU, AVG_DECIMAL_AMALG, AVG_DECIMAL_AVG, FUNCINVALID, DECIMALNEWID, false, false},
{SUM_TINYINT, SUM_TINYINT_ADD, SUM_TINYINT_SUM, FUNCINVALID, FUNCINVALID, BIGINTID, false, false},
{SUM_SMALLINT, SUM_SMALLINT_ADD, SUM_SMALLINT_SUM, FUNCINVALID, FUNCINVALID, BIGINTID, false, false},
{SUM_INT, SUM_INT_ADD, SUM_INT_SUM, FUNCINVALID, FUNCINVALID, BIGINTID, false, false},
{SUM_BIGINT, SUM_BIGINT_ADD, SUM_BIGINT_SUM, FUNCINVALID, FUNCINVALID, BIGINTID, false, false},
{SUM_FLOAT, SUM_FLOAT_ADD, SUM_FLOAT_SUM, FUNCINVALID, FUNCINVALID, DOUBLEID, false, false},
{SUM_DOUBLE, SUM_DOUBLE_ADD, SUM_DOUBLE_SUM, FUNCINVALID, FUNCINVALID, DOUBLEID, false, false},
{SUM_DECIMAL, SUM_DECIMAL_ADD, SUM_DECIMAL_SUM, FUNCINVALID, FUNCINVALID, DECIMALNEWID, false, false},
{COUNT, COUNT_INC, COUNT_ADD, FUNCINVALID, FUNCINVALID, BIGINTID, true, false},
{COUNT_STAR, COUNT_STAR, COUNT_ADD, FUNCINVALID, FUNCINVALID, BIGINTID, true, false},
{MIN_TINYINT, MIN_TINYINT_SMALLER, MIN_TINYINT_SMALLER, FUNCINVALID, FUNCINVALID, TINYINTID, false, false},
{MIN_SMALLINT, MIN_SMALLINT_SMALLER, MIN_SMALLINT_SMALLER, FUNCINVALID, FUNCINVALID, SMALLINTID, false, false},
{MIN_INT, MIN_INT_SMALLER, MIN_INT_SMALLER, FUNCINVALID, FUNCINVALID, INTID, false, false},
{MIN_BIGINT, MIN_BIGINT_SMALLER, MIN_BIGINT_SMALLER, FUNCINVALID, FUNCINVALID, BIGINTID, false, false},
{MIN_FLOAT, MIN_FLOAT_SMALLER, MIN_FLOAT_SMALLER, FUNCINVALID, FUNCINVALID, FLOATID, false, false},
{MIN_DOUBLE, MIN_DOUBLE_SMALLER, MIN_DOUBLE_SMALLER, FUNCINVALID, FUNCINVALID, DOUBLEID, false, false},
{MIN_STRING, MIN_STRING_SMALLER, MIN_STRING_SMALLER, FUNCINVALID, FUNCINVALID, STRINGID, false, false},
{MIN_BPCHAR, MIN_BPCHAR_SMALLER, MIN_BPCHAR_SMALLER, FUNCINVALID, FUNCINVALID, CHARID, false, false},
{MIN_DATE, MIN_DATE_SMALLER, MIN_DATE_SMALLER, FUNCINVALID, FUNCINVALID, DATEID, false, false},
{MIN_TIME, MIN_TIME_SMALLER, MIN_TIME_SMALLER, FUNCINVALID, FUNCINVALID, TIMEID, false, false},
{MIN_TIMESTAMP, MIN_TIMESTAMP_SMALLER, MIN_TIMESTAMP_SMALLER, FUNCINVALID, FUNCINVALID, TIMESTAMPID, false, false},
{MIN_DECIMAL, MIN_DECIMAL_SMALLER, MIN_DECIMAL_SMALLER, FUNCINVALID, FUNCINVALID, DECIMALNEWID, false, false},
{MAX_TINYINT, MAX_TINYINT_LARGER, MAX_TINYINT_LARGER, FUNCINVALID, FUNCINVALID, TINYINTID, false, false},
{MAX_SMALLINT, MAX_SMALLINT_LARGER, MAX_SMALLINT_LARGER, FUNCINVALID, FUNCINVALID, SMALLINTID, false, false},
{MAX_INT, MAX_INT_LARGER, MAX_INT_LARGER, FUNCINVALID, FUNCINVALID, INTID, false, false},
{MAX_BIGINT, MAX_BIGINT_LARGER, MAX_BIGINT_LARGER, FUNCINVALID, FUNCINVALID, BIGINTID, false, false},
{MAX_FLOAT, MAX_FLOAT_LARGER, MAX_FLOAT_LARGER, FUNCINVALID, FUNCINVALID, FLOATID, false, false},
{MAX_DOUBLE, MAX_DOUBLE_LARGER, MAX_DOUBLE_LARGER, FUNCINVALID, FUNCINVALID, DOUBLEID, false, false},
{MAX_STRING, MAX_STRING_LARGER, MAX_STRING_LARGER, FUNCINVALID, FUNCINVALID, STRINGID, false, false},
{MAX_BPCHAR, MAX_BPCHAR_LARGER, MAX_BPCHAR_LARGER, FUNCINVALID, FUNCINVALID, CHARID, false, false},
{MAX_DATE, MAX_DATE_LARGER, MAX_DATE_LARGER, FUNCINVALID, FUNCINVALID, DATEID, false, false},
{MAX_TIME, MAX_TIME_LARGER, MAX_TIME_LARGER, FUNCINVALID, FUNCINVALID, TIMEID, false, false},
{MAX_TIMESTAMP, MAX_TIMESTAMP_LARGER, MAX_TIMESTAMP_LARGER, FUNCINVALID, FUNCINVALID, TIMESTAMPID, false, false},
{MAX_DECIMAL, MAX_DECIMAL_LARGER, MAX_DECIMAL_LARGER, FUNCINVALID, FUNCINVALID, DECIMALNEWID, false, false},
// clang-format on
};
uint64_t size = AggEntryArray.size();
for (uint64_t i = 0; i < size; ++i) {
AggEntryMap.insert(
std::make_pair(AggEntryArray[i].aggFnId, AggEntryArray[i]));
}
}
const AggEntry *Func::getAggEntryById(FuncKind id) {
const AggMap::const_iterator iter = AggEntryMap.find(id);
if (iter != AggEntryMap.end()) {
return &(iter->second);
}
return nullptr;
}
Func *Func::instance() { return inst; }
} // namespace dbcommon