// 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 "gandiva/function_registry_string.h"

#include "gandiva/function_registry_common.h"

namespace gandiva {

#define BINARY_RELATIONAL_SAFE_NULL_IF_NULL_FN(name, ALIASES) \
  VAR_LEN_TYPES(BINARY_RELATIONAL_SAFE_NULL_IF_NULL, name, ALIASES)

#define BINARY_RELATIONAL_SAFE_NULL_IF_NULL_UTF8_FN(name, ALIASES) \
  BINARY_RELATIONAL_SAFE_NULL_IF_NULL(name, ALIASES, utf8)

#define UNARY_OCTET_LEN_FN(name, ALIASES)              \
  UNARY_SAFE_NULL_IF_NULL(name, ALIASES, utf8, int32), \
      UNARY_SAFE_NULL_IF_NULL(name, ALIASES, binary, int32)

#define UNARY_SAFE_NULL_NEVER_BOOL_FN(name, ALIASES) \
  VAR_LEN_TYPES(UNARY_SAFE_NULL_NEVER_BOOL, name, ALIASES)

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::kCanReturnErrors),

      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_;
}

#undef BINARY_RELATIONAL_SAFE_NULL_IF_NULL_FN

#undef BINARY_RELATIONAL_SAFE_NULL_IF_NULL_UTF8_FN

#undef UNARY_OCTET_LEN_FN

#undef UNARY_SAFE_NULL_NEVER_BOOL_FN

}  // namespace gandiva
