in cpp/src/gandiva/function_registry_string.cc [37:546]
std::vector<NativeFunction> GetStringFunctionRegistry() {
static std::vector<NativeFunction> string_fn_registry_ = {
BINARY_RELATIONAL_SAFE_NULL_IF_NULL_FN(equal, {}),
BINARY_RELATIONAL_SAFE_NULL_IF_NULL_FN(not_equal, {}),
BINARY_RELATIONAL_SAFE_NULL_IF_NULL_FN(less_than, {}),
BINARY_RELATIONAL_SAFE_NULL_IF_NULL_FN(less_than_or_equal_to, {}),
BINARY_RELATIONAL_SAFE_NULL_IF_NULL_FN(greater_than, {}),
BINARY_RELATIONAL_SAFE_NULL_IF_NULL_FN(greater_than_or_equal_to, {}),
BINARY_RELATIONAL_SAFE_NULL_IF_NULL_UTF8_FN(starts_with, {}),
BINARY_RELATIONAL_SAFE_NULL_IF_NULL_UTF8_FN(ends_with, {}),
BINARY_RELATIONAL_SAFE_NULL_IF_NULL_UTF8_FN(is_substr, {}),
BINARY_UNSAFE_NULL_IF_NULL(locate, {"position"}, utf8, int32),
BINARY_UNSAFE_NULL_IF_NULL(strpos, {}, utf8, int32),
UNARY_OCTET_LEN_FN(octet_length, {}), UNARY_OCTET_LEN_FN(bit_length, {}),
UNARY_UNSAFE_NULL_IF_NULL(char_length, {"character_length"}, utf8, int32),
UNARY_UNSAFE_NULL_IF_NULL(length, {}, utf8, int32),
UNARY_UNSAFE_NULL_IF_NULL(lengthUtf8, {}, binary, int32),
UNARY_UNSAFE_NULL_IF_NULL(reverse, {}, utf8, utf8),
UNARY_UNSAFE_NULL_IF_NULL(ltrim, {}, utf8, utf8),
UNARY_UNSAFE_NULL_IF_NULL(rtrim, {}, utf8, utf8),
UNARY_UNSAFE_NULL_IF_NULL(btrim, {}, utf8, utf8),
UNARY_UNSAFE_NULL_IF_NULL(space, {}, int32, utf8),
UNARY_UNSAFE_NULL_IF_NULL(space, {}, int64, utf8),
UNARY_SAFE_NULL_NEVER_BOOL_FN(isnull, {}),
UNARY_SAFE_NULL_NEVER_BOOL_FN(isnotnull, {}),
NativeFunction("chr", {}, DataTypeVector{int32()}, utf8(), kResultNullIfNull,
"chr_int32", NativeFunction::kNeedsContext),
NativeFunction("chr", {}, DataTypeVector{int64()}, utf8(), kResultNullIfNull,
"chr_int64", NativeFunction::kNeedsContext),
NativeFunction("ascii", {}, DataTypeVector{utf8()}, int32(), kResultNullIfNull,
"ascii_utf8"),
NativeFunction("base64", {}, DataTypeVector{binary()}, utf8(), kResultNullIfNull,
"gdv_fn_base64_encode_binary", NativeFunction::kNeedsContext),
NativeFunction("unbase64", {}, DataTypeVector{utf8()}, binary(), kResultNullIfNull,
"gdv_fn_base64_decode_utf8", NativeFunction::kNeedsContext),
NativeFunction("repeat", {}, DataTypeVector{utf8(), int32()}, utf8(),
kResultNullIfNull, "repeat_utf8_int32",
NativeFunction::kNeedsContext),
NativeFunction("soundex", {}, DataTypeVector{utf8()}, utf8(), kResultNullInternal,
"soundex_utf8", NativeFunction::kNeedsContext),
NativeFunction("upper", {"ucase"}, DataTypeVector{utf8()}, utf8(),
kResultNullIfNull, "gdv_fn_upper_utf8",
NativeFunction::kNeedsContext),
NativeFunction("lower", {"lcase"}, DataTypeVector{utf8()}, utf8(),
kResultNullIfNull, "gdv_fn_lower_utf8",
NativeFunction::kNeedsContext),
NativeFunction("initcap", {}, DataTypeVector{utf8()}, utf8(), kResultNullIfNull,
"gdv_fn_initcap_utf8",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("concat_ws", {}, DataTypeVector{utf8(), utf8(), utf8()}, utf8(),
kResultNullInternal, "concat_ws_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction("concat_ws", {}, DataTypeVector{utf8(), utf8(), utf8(), utf8()},
utf8(), kResultNullInternal, "concat_ws_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction("concat_ws", {},
DataTypeVector{utf8(), utf8(), utf8(), utf8(), utf8()}, utf8(),
kResultNullInternal, "concat_ws_utf8_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction("concat_ws", {},
DataTypeVector{utf8(), utf8(), utf8(), utf8(), utf8(), utf8()},
utf8(), kResultNullInternal, "concat_ws_utf8_utf8_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction("elt", {}, DataTypeVector{int32(), utf8(), utf8()}, utf8(),
kResultNullInternal, "elt_int32_utf8_utf8"),
NativeFunction("elt", {}, DataTypeVector{int32(), utf8(), utf8(), utf8()}, utf8(),
kResultNullInternal, "elt_int32_utf8_utf8_utf8"),
NativeFunction("elt", {}, DataTypeVector{int32(), utf8(), utf8(), utf8(), utf8()},
utf8(), kResultNullInternal, "elt_int32_utf8_utf8_utf8_utf8"),
NativeFunction("elt", {},
DataTypeVector{int32(), utf8(), utf8(), utf8(), utf8(), utf8()},
utf8(), kResultNullInternal, "elt_int32_utf8_utf8_utf8_utf8_utf8"),
NativeFunction("castBIT", {"castBOOLEAN"}, DataTypeVector{utf8()}, boolean(),
kResultNullIfNull, "castBIT_utf8", NativeFunction::kNeedsContext),
NativeFunction("castINT", {}, DataTypeVector{utf8()}, int32(), kResultNullIfNull,
"gdv_fn_castINT_utf8",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("castBIGINT", {}, DataTypeVector{utf8()}, int64(), kResultNullIfNull,
"gdv_fn_castBIGINT_utf8",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("castFLOAT4", {}, DataTypeVector{utf8()}, float32(),
kResultNullIfNull, "gdv_fn_castFLOAT4_utf8",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("castFLOAT8", {}, DataTypeVector{utf8()}, float64(),
kResultNullIfNull, "gdv_fn_castFLOAT8_utf8",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("castINT", {}, DataTypeVector{binary()}, int32(), kResultNullIfNull,
"gdv_fn_castINT_varbinary",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("castBIGINT", {}, DataTypeVector{binary()}, int64(),
kResultNullIfNull, "gdv_fn_castBIGINT_varbinary",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("castFLOAT4", {}, DataTypeVector{binary()}, float32(),
kResultNullIfNull, "gdv_fn_castFLOAT4_varbinary",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("castFLOAT8", {}, DataTypeVector{binary()}, float64(),
kResultNullIfNull, "gdv_fn_castFLOAT8_varbinary",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("castVARCHAR", {"varchar"}, DataTypeVector{boolean(), int64()},
utf8(), kResultNullIfNull, "castVARCHAR_bool_int64",
NativeFunction::kNeedsContext),
NativeFunction("castVARCHAR", {"varchar"}, DataTypeVector{utf8(), int64()}, utf8(),
kResultNullIfNull, "castVARCHAR_utf8_int64",
NativeFunction::kNeedsContext),
NativeFunction("castVARCHAR", {"varchar"}, DataTypeVector{binary(), int64()},
utf8(), kResultNullIfNull, "castVARCHAR_binary_int64",
NativeFunction::kNeedsContext),
NativeFunction("castVARCHAR", {"varchar"}, DataTypeVector{int32(), int64()}, utf8(),
kResultNullIfNull, "gdv_fn_castVARCHAR_int32_int64",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("castVARCHAR", {"varchar"}, DataTypeVector{int64(), int64()}, utf8(),
kResultNullIfNull, "gdv_fn_castVARCHAR_int64_int64",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("castVARCHAR", {"varchar"}, DataTypeVector{date64(), int64()},
utf8(), kResultNullIfNull, "gdv_fn_castVARCHAR_date64_int64",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("castVARCHAR", {"varchar"}, DataTypeVector{float32(), int64()},
utf8(), kResultNullIfNull, "gdv_fn_castVARCHAR_float32_int64",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("castVARCHAR", {"varchar"}, DataTypeVector{float64(), int64()},
utf8(), kResultNullIfNull, "gdv_fn_castVARCHAR_float64_int64",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("castVARCHAR", {"varchar"}, DataTypeVector{decimal128(), int64()},
utf8(), kResultNullIfNull, "castVARCHAR_decimal128_int64",
NativeFunction::kNeedsContext),
NativeFunction("crc32", {}, DataTypeVector{utf8()}, int64(), kResultNullIfNull,
"gdv_fn_crc_32_utf8", NativeFunction::kNeedsContext),
NativeFunction("crc32", {}, DataTypeVector{binary()}, int64(), kResultNullIfNull,
"gdv_fn_crc_32_binary", NativeFunction::kNeedsContext),
NativeFunction("like", {}, DataTypeVector{utf8(), utf8()}, boolean(),
kResultNullIfNull, "gdv_fn_like_utf8_utf8",
NativeFunction::kNeedsFunctionHolder),
NativeFunction("like", {}, DataTypeVector{utf8(), utf8(), utf8()}, boolean(),
kResultNullIfNull, "gdv_fn_like_utf8_utf8_utf8",
NativeFunction::kNeedsFunctionHolder),
NativeFunction("ilike", {}, DataTypeVector{utf8(), utf8()}, boolean(),
kResultNullIfNull, "gdv_fn_ilike_utf8_utf8",
NativeFunction::kNeedsFunctionHolder),
NativeFunction("ltrim", {}, DataTypeVector{utf8(), utf8()}, utf8(),
kResultNullIfNull, "ltrim_utf8_utf8", NativeFunction::kNeedsContext),
NativeFunction("rtrim", {}, DataTypeVector{utf8(), utf8()}, utf8(),
kResultNullIfNull, "rtrim_utf8_utf8", NativeFunction::kNeedsContext),
NativeFunction("btrim", {}, DataTypeVector{utf8(), utf8()}, utf8(),
kResultNullIfNull, "btrim_utf8_utf8", NativeFunction::kNeedsContext),
NativeFunction("substr", {"substring"},
DataTypeVector{utf8(), int64() /*offset*/, int64() /*length*/},
utf8(), kResultNullIfNull, "substr_utf8_int64_int64",
NativeFunction::kNeedsContext),
NativeFunction("substr", {"substring"}, DataTypeVector{utf8(), int64() /*offset*/},
utf8(), kResultNullIfNull, "substr_utf8_int64",
NativeFunction::kNeedsContext),
NativeFunction("lpad", {}, DataTypeVector{utf8(), int32(), utf8()}, utf8(),
kResultNullIfNull, "lpad_utf8_int32_utf8",
NativeFunction::kNeedsContext),
NativeFunction("lpad", {}, DataTypeVector{utf8(), int32()}, utf8(),
kResultNullIfNull, "lpad_utf8_int32", NativeFunction::kNeedsContext),
NativeFunction("rpad", {}, DataTypeVector{utf8(), int32(), utf8()}, utf8(),
kResultNullIfNull, "rpad_utf8_int32_utf8",
NativeFunction::kNeedsContext),
NativeFunction("rpad", {}, DataTypeVector{utf8(), int32()}, utf8(),
kResultNullIfNull, "rpad_utf8_int32", NativeFunction::kNeedsContext),
NativeFunction("regexp_replace", {}, DataTypeVector{utf8(), utf8(), utf8()}, utf8(),
kResultNullIfNull, "gdv_fn_regexp_replace_utf8_utf8",
NativeFunction::kNeedsContext |
NativeFunction::kNeedsFunctionHolder |
NativeFunction::kCanReturnErrors),
NativeFunction("regexp_extract", {}, DataTypeVector{utf8(), utf8(), int32()},
utf8(), kResultNullIfNull, "gdv_fn_regexp_extract_utf8_utf8_int32",
NativeFunction::kNeedsContext |
NativeFunction::kNeedsFunctionHolder |
NativeFunction::kCanReturnErrors),
NativeFunction("concatOperator", {}, DataTypeVector{utf8(), utf8()}, utf8(),
kResultNullIfNull, "concatOperator_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction("concatOperator", {}, DataTypeVector{utf8(), utf8(), utf8()}, utf8(),
kResultNullIfNull, "concatOperator_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction("concatOperator", {}, DataTypeVector{utf8(), utf8(), utf8(), utf8()},
utf8(), kResultNullIfNull, "concatOperator_utf8_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction("concatOperator", {},
DataTypeVector{utf8(), utf8(), utf8(), utf8(), utf8()}, utf8(),
kResultNullIfNull, "concatOperator_utf8_utf8_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction("concatOperator", {},
DataTypeVector{utf8(), utf8(), utf8(), utf8(), utf8(), utf8()},
utf8(), kResultNullIfNull,
"concatOperator_utf8_utf8_utf8_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction(
"concatOperator", {},
DataTypeVector{utf8(), utf8(), utf8(), utf8(), utf8(), utf8(), utf8()}, utf8(),
kResultNullIfNull, "concatOperator_utf8_utf8_utf8_utf8_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction(
"concatOperator", {},
DataTypeVector{utf8(), utf8(), utf8(), utf8(), utf8(), utf8(), utf8(), utf8()},
utf8(), kResultNullIfNull,
"concatOperator_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction("concatOperator", {},
DataTypeVector{utf8(), utf8(), utf8(), utf8(), utf8(), utf8(),
utf8(), utf8(), utf8()},
utf8(), kResultNullIfNull,
"concatOperator_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction("concatOperator", {},
DataTypeVector{utf8(), utf8(), utf8(), utf8(), utf8(), utf8(),
utf8(), utf8(), utf8(), utf8()},
utf8(), kResultNullIfNull,
"concatOperator_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
// concat treats null inputs as empty strings whereas concatOperator returns null if
// one of the inputs is null
NativeFunction("concat", {}, DataTypeVector{utf8(), utf8()}, utf8(),
kResultNullNever, "concat_utf8_utf8", NativeFunction::kNeedsContext),
NativeFunction("concat", {}, DataTypeVector{utf8(), utf8(), utf8()}, utf8(),
kResultNullNever, "concat_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction("concat", {}, DataTypeVector{utf8(), utf8(), utf8(), utf8()}, utf8(),
kResultNullNever, "concat_utf8_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction("concat", {}, DataTypeVector{utf8(), utf8(), utf8(), utf8(), utf8()},
utf8(), kResultNullNever, "concat_utf8_utf8_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction("concat", {},
DataTypeVector{utf8(), utf8(), utf8(), utf8(), utf8(), utf8()},
utf8(), kResultNullNever, "concat_utf8_utf8_utf8_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction(
"concat", {},
DataTypeVector{utf8(), utf8(), utf8(), utf8(), utf8(), utf8(), utf8()}, utf8(),
kResultNullNever, "concat_utf8_utf8_utf8_utf8_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction(
"concat", {},
DataTypeVector{utf8(), utf8(), utf8(), utf8(), utf8(), utf8(), utf8(), utf8()},
utf8(), kResultNullNever, "concat_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction("concat", {},
DataTypeVector{utf8(), utf8(), utf8(), utf8(), utf8(), utf8(),
utf8(), utf8(), utf8()},
utf8(), kResultNullNever,
"concat_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction("concat", {},
DataTypeVector{utf8(), utf8(), utf8(), utf8(), utf8(), utf8(),
utf8(), utf8(), utf8(), utf8()},
utf8(), kResultNullNever,
"concat_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction("quote", {}, DataTypeVector{utf8()}, utf8(), kResultNullIfNull,
"quote_utf8", NativeFunction::kNeedsContext),
NativeFunction("byte_substr", {"bytesubstring"},
DataTypeVector{binary(), int32(), int32()}, binary(),
kResultNullIfNull, "byte_substr_binary_int32_int32",
NativeFunction::kNeedsContext),
NativeFunction("convert_fromUTF8", {"convert_fromutf8"}, DataTypeVector{binary()},
utf8(), kResultNullIfNull, "convert_fromUTF8_binary",
NativeFunction::kNeedsContext),
NativeFunction("convert_replaceUTF8", {"convert_replaceutf8"},
DataTypeVector{binary(), utf8()}, utf8(), kResultNullIfNull,
"convert_replace_invalid_fromUTF8_binary",
NativeFunction::kNeedsContext),
NativeFunction("convert_toDOUBLE", {}, DataTypeVector{float64()}, binary(),
kResultNullIfNull, "convert_toDOUBLE",
NativeFunction::kNeedsContext),
NativeFunction("convert_toDOUBLE_be", {}, DataTypeVector{float64()}, binary(),
kResultNullIfNull, "convert_toDOUBLE_be",
NativeFunction::kNeedsContext),
NativeFunction("convert_toFLOAT", {}, DataTypeVector{float32()}, binary(),
kResultNullIfNull, "convert_toFLOAT", NativeFunction::kNeedsContext),
NativeFunction("convert_toFLOAT_be", {}, DataTypeVector{float32()}, binary(),
kResultNullIfNull, "convert_toFLOAT_be",
NativeFunction::kNeedsContext),
NativeFunction("convert_toINT", {}, DataTypeVector{int32()}, binary(),
kResultNullIfNull, "convert_toINT", NativeFunction::kNeedsContext),
NativeFunction("convert_toINT_be", {}, DataTypeVector{int32()}, binary(),
kResultNullIfNull, "convert_toINT_be",
NativeFunction::kNeedsContext),
NativeFunction("convert_toBIGINT", {}, DataTypeVector{int64()}, binary(),
kResultNullIfNull, "convert_toBIGINT",
NativeFunction::kNeedsContext),
NativeFunction("convert_toBIGINT_be", {}, DataTypeVector{int64()}, binary(),
kResultNullIfNull, "convert_toBIGINT_be",
NativeFunction::kNeedsContext),
NativeFunction("convert_toBOOLEAN_BYTE", {}, DataTypeVector{boolean()}, binary(),
kResultNullIfNull, "convert_toBOOLEAN",
NativeFunction::kNeedsContext),
NativeFunction("convert_toTIME_EPOCH", {}, DataTypeVector{time32()}, binary(),
kResultNullIfNull, "convert_toTIME_EPOCH",
NativeFunction::kNeedsContext),
NativeFunction("convert_toTIME_EPOCH_be", {}, DataTypeVector{time32()}, binary(),
kResultNullIfNull, "convert_toTIME_EPOCH_be",
NativeFunction::kNeedsContext),
NativeFunction("convert_toTIMESTAMP_EPOCH", {}, DataTypeVector{timestamp()},
binary(), kResultNullIfNull, "convert_toTIMESTAMP_EPOCH",
NativeFunction::kNeedsContext),
NativeFunction("convert_toTIMESTAMP_EPOCH_be", {}, DataTypeVector{timestamp()},
binary(), kResultNullIfNull, "convert_toTIMESTAMP_EPOCH_be",
NativeFunction::kNeedsContext),
NativeFunction("convert_toDATE_EPOCH", {}, DataTypeVector{date64()}, binary(),
kResultNullIfNull, "convert_toDATE_EPOCH",
NativeFunction::kNeedsContext),
NativeFunction("convert_toDATE_EPOCH_be", {}, DataTypeVector{date64()}, binary(),
kResultNullIfNull, "convert_toDATE_EPOCH_be",
NativeFunction::kNeedsContext),
NativeFunction("convert_toUTF8", {}, DataTypeVector{utf8()}, binary(),
kResultNullIfNull, "convert_toUTF8", NativeFunction::kNeedsContext),
NativeFunction("locate", {"position"}, DataTypeVector{utf8(), utf8(), int32()},
int32(), kResultNullIfNull, "locate_utf8_utf8_int32",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("replace", {}, DataTypeVector{utf8(), utf8(), utf8()}, utf8(),
kResultNullIfNull, "replace_utf8_utf8_utf8",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("binary_string", {}, DataTypeVector{utf8()}, binary(),
kResultNullIfNull, "binary_string", NativeFunction::kNeedsContext),
NativeFunction("left", {}, DataTypeVector{utf8(), int32()}, utf8(),
kResultNullIfNull, "left_utf8_int32", NativeFunction::kNeedsContext),
NativeFunction("right", {}, DataTypeVector{utf8(), int32()}, utf8(),
kResultNullIfNull, "right_utf8_int32",
NativeFunction::kNeedsContext),
NativeFunction("binary", {}, DataTypeVector{binary()}, binary(), kResultNullIfNull,
"castBINARY_binary"),
NativeFunction("binary", {}, DataTypeVector{utf8()}, binary(), kResultNullIfNull,
"castBINARY_utf8"),
NativeFunction("castVARBINARY", {}, DataTypeVector{binary(), int64()}, binary(),
kResultNullIfNull, "castVARBINARY_binary_int64",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("castVARBINARY", {}, DataTypeVector{utf8(), int64()}, binary(),
kResultNullIfNull, "castVARBINARY_utf8_int64",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("castVARBINARY", {}, DataTypeVector{int32(), int64()}, binary(),
kResultNullIfNull, "gdv_fn_castVARBINARY_int32_int64",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("castVARBINARY", {}, DataTypeVector{int64(), int64()}, binary(),
kResultNullIfNull, "gdv_fn_castVARBINARY_int64_int64",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("castVARBINARY", {}, DataTypeVector{float32(), int64()}, binary(),
kResultNullIfNull, "gdv_fn_castVARBINARY_float32_int64",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("castVARBINARY", {}, DataTypeVector{float64(), int64()}, binary(),
kResultNullIfNull, "gdv_fn_castVARBINARY_float64_int64",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("levenshtein", {}, DataTypeVector{utf8(), utf8()}, int32(),
kResultNullIfNull, "levenshtein",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("to_hex", {"hex"}, DataTypeVector{binary()}, utf8(),
kResultNullIfNull, "to_hex_binary", NativeFunction::kNeedsContext),
NativeFunction("to_hex", {"hex"}, DataTypeVector{utf8()}, utf8(), kResultNullIfNull,
"to_hex_binary", NativeFunction::kNeedsContext),
NativeFunction("to_hex", {"hex"}, DataTypeVector{int64()}, utf8(),
kResultNullIfNull, "to_hex_int64", NativeFunction::kNeedsContext),
NativeFunction("to_hex", {"hex"}, DataTypeVector{int32()}, utf8(),
kResultNullIfNull, "to_hex_int32", NativeFunction::kNeedsContext),
NativeFunction("from_hex", {"unhex"}, DataTypeVector{utf8()}, binary(),
kResultNullInternal, "from_hex_utf8", NativeFunction::kNeedsContext),
NativeFunction("split_part", {}, DataTypeVector{utf8(), utf8(), int32()}, utf8(),
kResultNullIfNull, "split_part",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("aes_encrypt", {}, DataTypeVector{utf8(), utf8()}, utf8(),
kResultNullIfNull, "gdv_fn_aes_encrypt",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("aes_decrypt", {}, DataTypeVector{utf8(), utf8()}, utf8(),
kResultNullIfNull, "gdv_fn_aes_decrypt",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("mask_first_n", {}, DataTypeVector{utf8(), int32()}, utf8(),
kResultNullIfNull, "gdv_mask_first_n_utf8_int32",
NativeFunction::kNeedsContext),
NativeFunction("mask_last_n", {}, DataTypeVector{utf8(), int32()}, utf8(),
kResultNullIfNull, "gdv_mask_last_n_utf8_int32",
NativeFunction::kNeedsContext),
NativeFunction("instr", {}, DataTypeVector{utf8(), utf8()}, int32(),
kResultNullIfNull, "instr_utf8"),
NativeFunction("translate", {}, DataTypeVector{utf8(), utf8(), utf8()}, utf8(),
kResultNullIfNull, "translate_utf8_utf8_utf8",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("substring_index", {}, DataTypeVector{utf8(), utf8(), int32()},
utf8(), kResultNullIfNull, "gdv_fn_substring_index",
NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors),
NativeFunction("mask_show_first_n", {}, DataTypeVector{utf8(), int32()}, utf8(),
kResultNullIfNull, "gdv_mask_show_first_n_utf8_int32",
NativeFunction::kNeedsContext),
NativeFunction("mask_show_last_n", {}, DataTypeVector{utf8(), int32()}, utf8(),
kResultNullIfNull, "gdv_mask_show_last_n_utf8_int32",
NativeFunction::kNeedsContext),
NativeFunction("mask", {}, DataTypeVector{utf8(), utf8(), utf8(), utf8()}, utf8(),
kResultNullIfNull, "mask_utf8_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction("mask", {}, DataTypeVector{utf8(), utf8(), utf8()}, utf8(),
kResultNullIfNull, "mask_utf8_utf8_utf8",
NativeFunction::kNeedsContext),
NativeFunction("mask", {}, DataTypeVector{utf8(), utf8()}, utf8(),
kResultNullIfNull, "mask_utf8_utf8", NativeFunction::kNeedsContext),
NativeFunction("mask", {}, DataTypeVector{utf8()}, utf8(), kResultNullIfNull,
"mask_utf8", NativeFunction::kNeedsContext)};
return string_fn_registry_;
}