blob: eefc1f79d09946322cc205fba18c5172e2a82b10 [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.
#pragma once
#include <cstdint>
#include "gandiva/gdv_function_stubs.h"
// Use the same names as in arrow data types. Makes it easy to write pre-processor macros.
using gdv_boolean = bool;
using gdv_int8 = int8_t;
using gdv_int16 = int16_t;
using gdv_int32 = int32_t;
using gdv_int64 = int64_t;
using gdv_uint8 = uint8_t;
using gdv_uint16 = uint16_t;
using gdv_uint32 = uint32_t;
using gdv_uint64 = uint64_t;
using gdv_float32 = float;
using gdv_float64 = double;
using gdv_date64 = int64_t;
using gdv_date32 = int32_t;
using gdv_time32 = int32_t;
using gdv_timestamp = int64_t;
using gdv_utf8 = char*;
using gdv_binary = char*;
using gdv_day_time_interval = int64_t;
#ifdef GANDIVA_UNIT_TEST
// unit tests may be compiled without O2, so inlining may not happen.
#define FORCE_INLINE
#else
#define FORCE_INLINE __attribute__((always_inline))
#endif
extern "C" {
bool bitMapGetBit(const unsigned char* bmap, int64_t position);
void bitMapSetBit(unsigned char* bmap, int64_t position, bool value);
void bitMapClearBitIfFalse(unsigned char* bmap, int64_t position, bool value);
gdv_int64 extractMillennium_timestamp(gdv_timestamp millis);
gdv_int64 extractCentury_timestamp(gdv_timestamp millis);
gdv_int64 extractDecade_timestamp(gdv_timestamp millis);
gdv_int64 extractYear_timestamp(gdv_timestamp millis);
gdv_int64 extractDoy_timestamp(gdv_timestamp millis);
gdv_int64 extractQuarter_timestamp(gdv_timestamp millis);
gdv_int64 extractMonth_timestamp(gdv_timestamp millis);
gdv_int64 extractWeek_timestamp(gdv_timestamp millis);
gdv_int64 extractDow_timestamp(gdv_timestamp millis);
gdv_int64 extractDay_timestamp(gdv_timestamp millis);
gdv_int64 extractHour_timestamp(gdv_timestamp millis);
gdv_int64 extractMinute_timestamp(gdv_timestamp millis);
gdv_int64 extractSecond_timestamp(gdv_timestamp millis);
gdv_int64 extractHour_time32(gdv_int32 millis_in_day);
gdv_int64 extractMinute_time32(gdv_int32 millis_in_day);
gdv_int64 extractSecond_time32(gdv_int32 millis_in_day);
gdv_int32 hash32(double val, gdv_int32 seed);
gdv_int32 hash32_buf(const gdv_uint8* buf, int len, gdv_int32 seed);
gdv_int64 hash64(double val, gdv_int64 seed);
gdv_int64 hash64_buf(const gdv_uint8* buf, int len, gdv_int64 seed);
gdv_int64 timestampaddSecond_int32_timestamp(gdv_int32, gdv_timestamp);
gdv_int64 timestampaddMinute_int32_timestamp(gdv_int32, gdv_timestamp);
gdv_int64 timestampaddHour_int32_timestamp(gdv_int32, gdv_timestamp);
gdv_int64 timestampaddDay_int32_timestamp(gdv_int32, gdv_timestamp);
gdv_int64 timestampaddWeek_int32_timestamp(gdv_int32, gdv_timestamp);
gdv_int64 timestampaddMonth_int32_timestamp(gdv_int32, gdv_timestamp);
gdv_int64 timestampaddQuarter_int32_timestamp(gdv_int32, gdv_timestamp);
gdv_int64 timestampaddYear_int32_timestamp(gdv_int32, gdv_timestamp);
gdv_int64 timestampaddSecond_int64_timestamp(gdv_int64, gdv_timestamp);
gdv_int64 timestampaddMinute_int64_timestamp(gdv_int64, gdv_timestamp);
gdv_int64 timestampaddHour_int64_timestamp(gdv_int64, gdv_timestamp);
gdv_int64 timestampaddDay_int64_timestamp(gdv_int64, gdv_timestamp);
gdv_int64 timestampaddWeek_int64_timestamp(gdv_int64, gdv_timestamp);
gdv_int64 timestampaddMonth_int64_timestamp(gdv_int64, gdv_timestamp);
gdv_int64 timestampaddQuarter_int64_timestamp(gdv_int64, gdv_timestamp);
gdv_int64 timestampaddYear_int64_timestamp(gdv_int64, gdv_timestamp);
gdv_int64 date_add_int32_timestamp(gdv_int32, gdv_timestamp);
gdv_int64 add_int64_timestamp(gdv_int64, gdv_timestamp);
gdv_int64 add_int32_timestamp(gdv_int32, gdv_timestamp);
gdv_int64 date_add_int64_timestamp(gdv_int64, gdv_timestamp);
gdv_timestamp add_date64_int64(gdv_date64, gdv_int64);
gdv_int64 date_sub_timestamp_int32(gdv_timestamp, gdv_int32);
gdv_int64 subtract_timestamp_int32(gdv_timestamp, gdv_int32);
gdv_int64 date_diff_timestamp_int64(gdv_timestamp, gdv_int64);
bool is_distinct_from_timestamp_timestamp(gdv_int64, bool, gdv_int64, bool);
bool is_not_distinct_from_int32_int32(gdv_int32, bool, gdv_int32, bool);
gdv_int64 date_trunc_Second_date64(gdv_date64);
gdv_int64 date_trunc_Minute_date64(gdv_date64);
gdv_int64 date_trunc_Hour_date64(gdv_date64);
gdv_int64 date_trunc_Day_date64(gdv_date64);
gdv_int64 date_trunc_Month_date64(gdv_date64);
gdv_int64 date_trunc_Quarter_date64(gdv_date64);
gdv_int64 date_trunc_Year_date64(gdv_date64);
gdv_int64 date_trunc_Decade_date64(gdv_date64);
gdv_int64 date_trunc_Century_date64(gdv_date64);
gdv_int64 date_trunc_Millennium_date64(gdv_date64);
gdv_int64 date_trunc_Week_timestamp(gdv_timestamp);
double months_between_timestamp_timestamp(gdv_uint64, gdv_uint64);
gdv_int32 mem_compare(const char* left, gdv_int32 left_len, const char* right,
gdv_int32 right_len);
gdv_int32 mod_int64_int32(gdv_int64 left, gdv_int32 right);
gdv_float64 mod_float64_float64(gdv_int64 context, gdv_float64 left, gdv_float64 right);
gdv_int64 divide_int64_int64(gdv_int64 context, gdv_int64 in1, gdv_int64 in2);
gdv_int64 div_int64_int64(gdv_int64 context, gdv_int64 in1, gdv_int64 in2);
gdv_float32 div_float32_float32(gdv_int64 context, gdv_float32 in1, gdv_float32 in2);
gdv_float64 div_float64_float64(gdv_int64 context, gdv_float64 in1, gdv_float64 in2);
gdv_float32 round_float32(gdv_float32);
gdv_float64 round_float64(gdv_float64);
gdv_float32 round_float32_int32(gdv_float32 number, gdv_int32 out_scale);
gdv_float64 round_float64_int32(gdv_float64 number, gdv_int32 out_scale);
gdv_float64 get_scale_multiplier(gdv_int32);
gdv_int32 round_int32_int32(gdv_int32 number, gdv_int32 precision);
gdv_int64 round_int64_int32(gdv_int64 number, gdv_int32 precision);
gdv_int32 round_int32(gdv_int32);
gdv_int64 round_int64(gdv_int64);
gdv_int64 get_power_of_10(gdv_int32);
gdv_float64 cbrt_int32(gdv_int32);
gdv_float64 cbrt_int64(gdv_int64);
gdv_float64 cbrt_float32(gdv_float32);
gdv_float64 cbrt_float64(gdv_float64);
gdv_float64 exp_int32(gdv_int32);
gdv_float64 exp_int64(gdv_int64);
gdv_float64 exp_float32(gdv_float32);
gdv_float64 exp_float64(gdv_float64);
gdv_float64 log_int32(gdv_int32);
gdv_float64 log_int64(gdv_int64);
gdv_float64 log_float32(gdv_float32);
gdv_float64 log_float64(gdv_float64);
gdv_float64 log10_int32(gdv_int32);
gdv_float64 log10_int64(gdv_int64);
gdv_float64 log10_float32(gdv_float32);
gdv_float64 log10_float64(gdv_float64);
gdv_float64 sin_int32(gdv_int32);
gdv_float64 sin_int64(gdv_int64);
gdv_float64 sin_float32(gdv_float32);
gdv_float64 sin_float64(gdv_float64);
gdv_float64 cos_int32(gdv_int32);
gdv_float64 cos_int64(gdv_int64);
gdv_float64 cos_float32(gdv_float32);
gdv_float64 cos_float64(gdv_float64);
gdv_float64 asin_int32(gdv_int32);
gdv_float64 asin_int64(gdv_int64);
gdv_float64 asin_float32(gdv_float32);
gdv_float64 asin_float64(gdv_float64);
gdv_float64 acos_int32(gdv_int32);
gdv_float64 acos_int64(gdv_int64);
gdv_float64 acos_float32(gdv_float32);
gdv_float64 acos_float64(gdv_float64);
gdv_float64 tan_int32(gdv_int32);
gdv_float64 tan_int64(gdv_int64);
gdv_float64 tan_float32(gdv_float32);
gdv_float64 tan_float64(gdv_float64);
gdv_float64 atan_int32(gdv_int32);
gdv_float64 atan_int64(gdv_int64);
gdv_float64 atan_float32(gdv_float32);
gdv_float64 atan_float64(gdv_float64);
gdv_float64 sinh_int32(gdv_int32);
gdv_float64 sinh_int64(gdv_int64);
gdv_float64 sinh_float32(gdv_float32);
gdv_float64 sinh_float64(gdv_float64);
gdv_float64 cosh_int32(gdv_int32);
gdv_float64 cosh_int64(gdv_int64);
gdv_float64 cosh_float32(gdv_float32);
gdv_float64 cosh_float64(gdv_float64);
gdv_float64 tanh_int32(gdv_int32);
gdv_float64 tanh_int64(gdv_int64);
gdv_float64 tanh_float32(gdv_float32);
gdv_float64 tanh_float64(gdv_float64);
gdv_float64 atan2_int32_int32(gdv_int32 in1, gdv_int32 in2);
gdv_float64 atan2_int64_int64(gdv_int64 in1, gdv_int64 in2);
gdv_float64 atan2_float32_float32(gdv_float32 in1, gdv_float32 in2);
gdv_float64 atan2_float64_float64(gdv_float64 in1, gdv_float64 in2);
gdv_float64 cot_float32(gdv_float32);
gdv_float64 cot_float64(gdv_float64);
gdv_float64 radians_int32(gdv_int32);
gdv_float64 radians_int64(gdv_int64);
gdv_float64 radians_float32(gdv_float32);
gdv_float64 radians_float64(gdv_float64);
gdv_float64 degrees_int32(gdv_int32);
gdv_float64 degrees_int64(gdv_int64);
gdv_float64 degrees_float32(gdv_float32);
gdv_float64 degrees_float64(gdv_float64);
gdv_int32 bitwise_and_int32_int32(gdv_int32 in1, gdv_int32 in2);
gdv_int64 bitwise_and_int64_int64(gdv_int64 in1, gdv_int64 in2);
gdv_int32 bitwise_or_int32_int32(gdv_int32 in1, gdv_int32 in2);
gdv_int64 bitwise_or_int64_int64(gdv_int64 in1, gdv_int64 in2);
gdv_int32 bitwise_xor_int32_int32(gdv_int32 in1, gdv_int32 in2);
gdv_int64 bitwise_xor_int64_int64(gdv_int64 in1, gdv_int64 in2);
gdv_int32 bitwise_not_int32(gdv_int32);
gdv_int64 bitwise_not_int64(gdv_int64);
gdv_float64 power_float64_float64(gdv_float64, gdv_float64);
gdv_float64 log_int32_int32(gdv_int64 context, gdv_int32 base, gdv_int32 value);
bool starts_with_utf8_utf8(const char* data, gdv_int32 data_len, const char* prefix,
gdv_int32 prefix_len);
bool ends_with_utf8_utf8(const char* data, gdv_int32 data_len, const char* suffix,
gdv_int32 suffix_len);
bool is_substr_utf8_utf8(const char* data, gdv_int32 data_len, const char* substr,
gdv_int32 substr_len);
gdv_int32 utf8_length(gdv_int64 context, const char* data, gdv_int32 data_len);
gdv_int32 utf8_last_char_pos(gdv_int64 context, const char* data, gdv_int32 data_len);
gdv_date64 castDATE_utf8(int64_t execution_context, const char* input, gdv_int32 length);
gdv_date64 castDATE_int64(gdv_int64 date);
gdv_date64 castDATE_date32(gdv_date32 date);
gdv_date32 castDATE_int32(gdv_int32 date);
gdv_timestamp castTIMESTAMP_utf8(int64_t execution_context, const char* input,
gdv_int32 length);
gdv_timestamp castTIMESTAMP_date64(gdv_date64);
gdv_timestamp castTIMESTAMP_int64(gdv_int64);
gdv_date64 castDATE_timestamp(gdv_timestamp);
const char* castVARCHAR_timestamp_int64(int64_t, gdv_timestamp, gdv_int64, gdv_int32*);
gdv_date64 last_day_from_timestamp(gdv_date64 millis);
gdv_int64 truncate_int64_int32(gdv_int64 in, gdv_int32 out_scale);
const char* substr_utf8_int64_int64(gdv_int64 context, const char* input,
gdv_int32 in_len, gdv_int64 offset64,
gdv_int64 length, gdv_int32* out_len);
const char* substr_utf8_int64(gdv_int64 context, const char* input, gdv_int32 in_len,
gdv_int64 offset64, gdv_int32* out_len);
const char* concat_utf8_utf8(gdv_int64 context, const char* left, gdv_int32 left_len,
bool left_validity, const char* right, gdv_int32 right_len,
bool right_validity, gdv_int32* out_len);
const char* concat_utf8_utf8_utf8(gdv_int64 context, const char* in1, gdv_int32 in1_len,
bool in1_validity, const char* in2, gdv_int32 in2_len,
bool in2_validity, const char* in3, gdv_int32 in3_len,
bool in3_validity, gdv_int32* out_len);
const char* concat_utf8_utf8_utf8_utf8(gdv_int64 context, const char* in1,
gdv_int32 in1_len, bool in1_validity,
const char* in2, gdv_int32 in2_len,
bool in2_validity, const char* in3,
gdv_int32 in3_len, bool in3_validity,
const char* in4, gdv_int32 in4_len,
bool in4_validity, gdv_int32* out_len);
const char* concat_utf8_utf8_utf8_utf8_utf8(
gdv_int64 context, const char* in1, gdv_int32 in1_len, bool in1_validity,
const char* in2, gdv_int32 in2_len, bool in2_validity, const char* in3,
gdv_int32 in3_len, bool in3_validity, const char* in4, gdv_int32 in4_len,
bool in4_validity, const char* in5, gdv_int32 in5_len, bool in5_validity,
gdv_int32* out_len);
const char* concat_utf8_utf8_utf8_utf8_utf8_utf8(
gdv_int64 context, const char* in1, gdv_int32 in1_len, bool in1_validity,
const char* in2, gdv_int32 in2_len, bool in2_validity, const char* in3,
gdv_int32 in3_len, bool in3_validity, const char* in4, gdv_int32 in4_len,
bool in4_validity, const char* in5, gdv_int32 in5_len, bool in5_validity,
const char* in6, gdv_int32 in6_len, bool in6_validity, gdv_int32* out_len);
const char* concat_utf8_utf8_utf8_utf8_utf8_utf8_utf8(
gdv_int64 context, const char* in1, gdv_int32 in1_len, bool in1_validity,
const char* in2, gdv_int32 in2_len, bool in2_validity, const char* in3,
gdv_int32 in3_len, bool in3_validity, const char* in4, gdv_int32 in4_len,
bool in4_validity, const char* in5, gdv_int32 in5_len, bool in5_validity,
const char* in6, gdv_int32 in6_len, bool in6_validity, const char* in7,
gdv_int32 in7_len, bool in7_validity, gdv_int32* out_len);
const char* concat_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8(
gdv_int64 context, const char* in1, gdv_int32 in1_len, bool in1_validity,
const char* in2, gdv_int32 in2_len, bool in2_validity, const char* in3,
gdv_int32 in3_len, bool in3_validity, const char* in4, gdv_int32 in4_len,
bool in4_validity, const char* in5, gdv_int32 in5_len, bool in5_validity,
const char* in6, gdv_int32 in6_len, bool in6_validity, const char* in7,
gdv_int32 in7_len, bool in7_validity, const char* in8, gdv_int32 in8_len,
bool in8_validity, gdv_int32* out_len);
const char* concat_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8(
gdv_int64 context, const char* in1, gdv_int32 in1_len, bool in1_validity,
const char* in2, gdv_int32 in2_len, bool in2_validity, const char* in3,
gdv_int32 in3_len, bool in3_validity, const char* in4, gdv_int32 in4_len,
bool in4_validity, const char* in5, gdv_int32 in5_len, bool in5_validity,
const char* in6, gdv_int32 in6_len, bool in6_validity, const char* in7,
gdv_int32 in7_len, bool in7_validity, const char* in8, gdv_int32 in8_len,
bool in8_validity, const char* in9, gdv_int32 in9_len, bool in9_validity,
gdv_int32* out_len);
const char* concat_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8(
gdv_int64 context, const char* in1, gdv_int32 in1_len, bool in1_validity,
const char* in2, gdv_int32 in2_len, bool in2_validity, const char* in3,
gdv_int32 in3_len, bool in3_validity, const char* in4, gdv_int32 in4_len,
bool in4_validity, const char* in5, gdv_int32 in5_len, bool in5_validity,
const char* in6, gdv_int32 in6_len, bool in6_validity, const char* in7,
gdv_int32 in7_len, bool in7_validity, const char* in8, gdv_int32 in8_len,
bool in8_validity, const char* in9, gdv_int32 in9_len, bool in9_validity,
const char* in10, gdv_int32 in10_len, bool in10_validity, gdv_int32* out_len);
const char* concatOperator_utf8_utf8(gdv_int64 context, const char* left,
gdv_int32 left_len, const char* right,
gdv_int32 right_len, gdv_int32* out_len);
const char* concatOperator_utf8_utf8_utf8(gdv_int64 context, const char* in1,
gdv_int32 in1_len, const char* in2,
gdv_int32 in2_len, const char* in3,
gdv_int32 in3_len, gdv_int32* out_len);
const char* concatOperator_utf8_utf8_utf8_utf8(gdv_int64 context, const char* in1,
gdv_int32 in1_len, const char* in2,
gdv_int32 in2_len, const char* in3,
gdv_int32 in3_len, const char* in4,
gdv_int32 in4_len, gdv_int32* out_len);
const char* concatOperator_utf8_utf8_utf8_utf8_utf8(
gdv_int64 context, const char* in1, gdv_int32 in1_len, const char* in2,
gdv_int32 in2_len, const char* in3, gdv_int32 in3_len, const char* in4,
gdv_int32 in4_len, const char* in5, gdv_int32 in5_len, gdv_int32* out_len);
const char* concatOperator_utf8_utf8_utf8_utf8_utf8_utf8(
gdv_int64 context, const char* in1, gdv_int32 in1_len, const char* in2,
gdv_int32 in2_len, const char* in3, gdv_int32 in3_len, const char* in4,
gdv_int32 in4_len, const char* in5, gdv_int32 in5_len, const char* in6,
gdv_int32 in6_len, gdv_int32* out_len);
const char* concatOperator_utf8_utf8_utf8_utf8_utf8_utf8_utf8(
gdv_int64 context, const char* in1, gdv_int32 in1_len, const char* in2,
gdv_int32 in2_len, const char* in3, gdv_int32 in3_len, const char* in4,
gdv_int32 in4_len, const char* in5, gdv_int32 in5_len, const char* in6,
gdv_int32 in6_len, const char* in7, gdv_int32 in7_len, gdv_int32* out_len);
const char* concatOperator_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8(
gdv_int64 context, const char* in1, gdv_int32 in1_len, const char* in2,
gdv_int32 in2_len, const char* in3, gdv_int32 in3_len, const char* in4,
gdv_int32 in4_len, const char* in5, gdv_int32 in5_len, const char* in6,
gdv_int32 in6_len, const char* in7, gdv_int32 in7_len, const char* in8,
gdv_int32 in8_len, gdv_int32* out_len);
const char* concatOperator_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8(
gdv_int64 context, const char* in1, gdv_int32 in1_len, const char* in2,
gdv_int32 in2_len, const char* in3, gdv_int32 in3_len, const char* in4,
gdv_int32 in4_len, const char* in5, gdv_int32 in5_len, const char* in6,
gdv_int32 in6_len, const char* in7, gdv_int32 in7_len, const char* in8,
gdv_int32 in8_len, const char* in9, gdv_int32 in9_len, gdv_int32* out_len);
const char* concatOperator_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8_utf8(
gdv_int64 context, const char* in1, gdv_int32 in1_len, const char* in2,
gdv_int32 in2_len, const char* in3, gdv_int32 in3_len, const char* in4,
gdv_int32 in4_len, const char* in5, gdv_int32 in5_len, const char* in6,
gdv_int32 in6_len, const char* in7, gdv_int32 in7_len, const char* in8,
gdv_int32 in8_len, const char* in9, gdv_int32 in9_len, const char* in10,
gdv_int32 in10_len, gdv_int32* out_len);
const char* castVARCHAR_utf8_int64(gdv_int64 context, const char* data,
gdv_int32 data_len, int64_t out_len,
int32_t* out_length);
const char* lower_utf8(gdv_int64 context, const char* data, gdv_int32 data_len,
int32_t* out_length);
const char* reverse_utf8(gdv_int64 context, const char* data, gdv_int32 data_len,
int32_t* out_len);
const char* ltrim_utf8(gdv_int64 context, const char* data, gdv_int32 data_len,
int32_t* out_len);
const char* rtrim_utf8(gdv_int64 context, const char* data, gdv_int32 data_len,
int32_t* out_len);
const char* btrim_utf8(gdv_int64 context, const char* data, gdv_int32 data_len,
int32_t* out_len);
const char* ltrim_utf8_utf8(gdv_int64 context, const char* basetext,
gdv_int32 basetext_len, const char* trimtext,
gdv_int32 trimtext_len, int32_t* out_len);
const char* rtrim_utf8_utf8(gdv_int64 context, const char* basetext,
gdv_int32 basetext_len, const char* trimtext,
gdv_int32 trimtext_len, int32_t* out_len);
const char* btrim_utf8_utf8(gdv_int64 context, const char* basetext,
gdv_int32 basetext_len, const char* trimtext,
gdv_int32 trimtext_len, int32_t* out_len);
gdv_int32 locate_utf8_utf8(gdv_int64 context, const char* sub_str, gdv_int32 sub_str_len,
const char* str, gdv_int32 str_len);
gdv_int32 locate_utf8_utf8_int32(gdv_int64 context, const char* sub_str,
gdv_int32 sub_str_len, const char* str,
gdv_int32 str_len, gdv_int32 start_pos);
const char* replace_with_max_len_utf8_utf8_utf8(gdv_int64 context, const char* text,
gdv_int32 text_len, const char* from_str,
gdv_int32 from_str_len,
const char* to_str, gdv_int32 to_str_len,
gdv_int32 max_length, gdv_int32* out_len);
const char* replace_utf8_utf8_utf8(gdv_int64 context, const char* text,
gdv_int32 text_len, const char* from_str,
gdv_int32 from_str_len, const char* to_str,
gdv_int32 to_str_len, gdv_int32* out_len);
const char* convert_replace_invalid_fromUTF8_binary(int64_t context, const char* text_in,
int32_t text_len,
const char* char_to_replace,
int32_t char_to_replace_len,
int32_t* out_len);
const char* split_part(gdv_int64 context, const char* text, gdv_int32 text_len,
const char* splitter, gdv_int32 split_len, gdv_int32 index,
gdv_int32* out_len);
const char* castVARCHAR_bool_int64(gdv_int64 context, gdv_boolean value,
gdv_int64 out_len, gdv_int32* out_length);
const char* castVARCHAR_int32_int64(int64_t context, int32_t value, int64_t len,
int32_t* out_len);
const char* castVARCHAR_int64_int64(int64_t context, int64_t value, int64_t len,
int32_t* out_len);
const char* castVARCHAR_float32_int64(int64_t context, float value, int64_t len,
int32_t* out_len);
const char* castVARCHAR_float64_int64(int64_t context, double value, int64_t len,
int32_t* out_len);
const char* binary_string(gdv_int64 context, const char* text, gdv_int32 text_len,
gdv_int32* out_len);
int32_t castINT_utf8(int64_t context, const char* data, int32_t len);
int64_t castBIGINT_utf8(int64_t context, const char* data, int32_t len);
float castFLOAT4_utf8(int64_t context, const char* data, int32_t len);
double castFLOAT8_utf8(int64_t context, const char* data, int32_t len);
} // extern "C"