Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add int8 supported functions #2030

Merged
merged 1 commit into from
Sep 14, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 14 additions & 12 deletions src/common/types/types.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -608,6 +608,7 @@ bool LogicalTypeUtils::isNumerical(const LogicalType& dataType) {
case LogicalTypeID::INT64:
case LogicalTypeID::INT32:
case LogicalTypeID::INT16:
case LogicalTypeID::INT8:
case LogicalTypeID::DOUBLE:
case LogicalTypeID::FLOAT:
case LogicalTypeID::SERIAL:
Expand All @@ -620,16 +621,17 @@ bool LogicalTypeUtils::isNumerical(const LogicalType& dataType) {
std::vector<LogicalType> LogicalTypeUtils::getAllValidComparableLogicalTypes() {
return std::vector<LogicalType>{LogicalType{LogicalTypeID::BOOL},
LogicalType{LogicalTypeID::INT64}, LogicalType{LogicalTypeID::INT32},
LogicalType{LogicalTypeID::INT16}, LogicalType{LogicalTypeID::DOUBLE},
LogicalType{LogicalTypeID::FLOAT}, LogicalType{LogicalTypeID::DATE},
LogicalType{LogicalTypeID::TIMESTAMP}, LogicalType{LogicalTypeID::INTERVAL},
LogicalType{LogicalTypeID::BLOB}, LogicalType{LogicalTypeID::STRING},
LogicalType{LogicalTypeID::SERIAL}};
LogicalType{LogicalTypeID::INT16}, LogicalType{LogicalTypeID::INT8},
LogicalType{LogicalTypeID::DOUBLE}, LogicalType{LogicalTypeID::FLOAT},
LogicalType{LogicalTypeID::DATE}, LogicalType{LogicalTypeID::TIMESTAMP},
LogicalType{LogicalTypeID::INTERVAL}, LogicalType{LogicalTypeID::BLOB},
LogicalType{LogicalTypeID::STRING}, LogicalType{LogicalTypeID::SERIAL}};
}

std::vector<LogicalTypeID> LogicalTypeUtils::getNumericalLogicalTypeIDs() {
return std::vector<LogicalTypeID>{LogicalTypeID::INT64, LogicalTypeID::INT32,
LogicalTypeID::INT16, LogicalTypeID::DOUBLE, LogicalTypeID::FLOAT, LogicalTypeID::SERIAL};
LogicalTypeID::INT16, LogicalTypeID::INT8, LogicalTypeID::DOUBLE, LogicalTypeID::FLOAT,
LogicalTypeID::SERIAL};
}

std::vector<LogicalType> LogicalTypeUtils::getAllValidLogicTypes() {
Expand All @@ -638,12 +640,12 @@ std::vector<LogicalType> LogicalTypeUtils::getAllValidLogicTypes() {
return std::vector<LogicalType>{LogicalType{LogicalTypeID::INTERNAL_ID},
LogicalType{LogicalTypeID::BOOL}, LogicalType{LogicalTypeID::INT64},
LogicalType{LogicalTypeID::INT32}, LogicalType{LogicalTypeID::INT16},
LogicalType{LogicalTypeID::DOUBLE}, LogicalType{LogicalTypeID::STRING},
LogicalType{LogicalTypeID::BLOB}, LogicalType{LogicalTypeID::DATE},
LogicalType{LogicalTypeID::TIMESTAMP}, LogicalType{LogicalTypeID::INTERVAL},
LogicalType{LogicalTypeID::VAR_LIST}, LogicalType{LogicalTypeID::FLOAT},
LogicalType{LogicalTypeID::SERIAL}, LogicalType{LogicalTypeID::NODE},
LogicalType{LogicalTypeID::REL}};
LogicalType{LogicalTypeID::INT8}, LogicalType{LogicalTypeID::DOUBLE},
LogicalType{LogicalTypeID::STRING}, LogicalType{LogicalTypeID::BLOB},
LogicalType{LogicalTypeID::DATE}, LogicalType{LogicalTypeID::TIMESTAMP},
LogicalType{LogicalTypeID::INTERVAL}, LogicalType{LogicalTypeID::VAR_LIST},
LogicalType{LogicalTypeID::FLOAT}, LogicalType{LogicalTypeID::SERIAL},
LogicalType{LogicalTypeID::NODE}, LogicalType{LogicalTypeID::REL}};
}

std::vector<std::string> LogicalTypeUtils::parseStructFields(const std::string& structTypeStr) {
Expand Down
13 changes: 13 additions & 0 deletions src/function/aggregate_function.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ std::unique_ptr<AggregateFunction> AggregateFunctionUtil::getAvgFunction(
return std::make_unique<AggregateFunction>(AvgFunction<int16_t>::initialize,
AvgFunction<int16_t>::updateAll, AvgFunction<int16_t>::updatePos,
AvgFunction<int16_t>::combine, AvgFunction<int16_t>::finalize, inputType, isDistinct);
case LogicalTypeID::INT8:
return std::make_unique<AggregateFunction>(AvgFunction<int8_t>::initialize,
AvgFunction<int8_t>::updateAll, AvgFunction<int8_t>::updatePos,
AvgFunction<int8_t>::combine, AvgFunction<int8_t>::finalize, inputType, isDistinct);
case LogicalTypeID::DOUBLE:
return std::make_unique<AggregateFunction>(AvgFunction<double_t>::initialize,
AvgFunction<double_t>::updateAll, AvgFunction<double_t>::updatePos,
Expand Down Expand Up @@ -73,6 +77,10 @@ std::unique_ptr<AggregateFunction> AggregateFunctionUtil::getSumFunction(
return std::make_unique<AggregateFunction>(SumFunction<int16_t>::initialize,
SumFunction<int16_t>::updateAll, SumFunction<int16_t>::updatePos,
SumFunction<int16_t>::combine, SumFunction<int16_t>::finalize, inputType, isDistinct);
case LogicalTypeID::INT8:
return std::make_unique<AggregateFunction>(SumFunction<int8_t>::initialize,
SumFunction<int8_t>::updateAll, SumFunction<int8_t>::updatePos,
SumFunction<int8_t>::combine, SumFunction<int8_t>::finalize, inputType, isDistinct);
case LogicalTypeID::DOUBLE:
return std::make_unique<AggregateFunction>(SumFunction<double_t>::initialize,
SumFunction<double_t>::updateAll, SumFunction<double_t>::updatePos,
Expand Down Expand Up @@ -129,6 +137,11 @@ std::unique_ptr<AggregateFunction> AggregateFunctionUtil::getMinMaxFunction(
MinMaxFunction<int16_t>::updateAll<FUNC>, MinMaxFunction<int16_t>::updatePos<FUNC>,
MinMaxFunction<int16_t>::combine<FUNC>, MinMaxFunction<int16_t>::finalize, inputType,
isDistinct);
case PhysicalTypeID::INT8:
return std::make_unique<AggregateFunction>(MinMaxFunction<int8_t>::initialize,
MinMaxFunction<int8_t>::updateAll<FUNC>, MinMaxFunction<int8_t>::updatePos<FUNC>,
MinMaxFunction<int8_t>::combine<FUNC>, MinMaxFunction<int8_t>::finalize, inputType,
isDistinct);
case PhysicalTypeID::DOUBLE:
return std::make_unique<AggregateFunction>(MinMaxFunction<double_t>::initialize,
MinMaxFunction<double_t>::updateAll<FUNC>, MinMaxFunction<double_t>::updatePos<FUNC>,
Expand Down
19 changes: 19 additions & 0 deletions src/function/built_in_vector_functions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ uint32_t BuiltInVectorFunctions::getCastCost(
return castInt32(targetTypeID);
case LogicalTypeID::INT16:
return castInt16(targetTypeID);
case LogicalTypeID::INT8:
return castInt8(targetTypeID);
case LogicalTypeID::DOUBLE:
return castDouble(targetTypeID);
case LogicalTypeID::FLOAT:
Expand All @@ -99,6 +101,9 @@ uint32_t BuiltInVectorFunctions::getCastCost(

uint32_t BuiltInVectorFunctions::getTargetTypeCost(LogicalTypeID typeID) {
switch (typeID) {
case LogicalTypeID::INT16: {
return 110;
}
case LogicalTypeID::INT32: {
return 103;
}
Expand Down Expand Up @@ -153,6 +158,19 @@ uint32_t BuiltInVectorFunctions::castInt16(LogicalTypeID targetTypeID) {
}
}

uint32_t BuiltInVectorFunctions::castInt8(LogicalTypeID targetTypeID) {
switch (targetTypeID) {
case LogicalTypeID::INT16:
case LogicalTypeID::INT32:
case LogicalTypeID::INT64:
case LogicalTypeID::FLOAT:
case LogicalTypeID::DOUBLE:
return getTargetTypeCost(targetTypeID);
default:
return UNDEFINED_CAST_COST;
}
}

uint32_t BuiltInVectorFunctions::castDouble(LogicalTypeID targetTypeID) {
switch (targetTypeID) {
default:
Expand Down Expand Up @@ -410,6 +428,7 @@ void BuiltInVectorFunctions::registerCastFunctions() {
vectorFunctions.insert({CAST_TO_INT64_FUNC_NAME, CastToInt64VectorFunction::getDefinitions()});
vectorFunctions.insert({CAST_TO_INT32_FUNC_NAME, CastToInt32VectorFunction::getDefinitions()});
vectorFunctions.insert({CAST_TO_INT16_FUNC_NAME, CastToInt16VectorFunction::getDefinitions()});
vectorFunctions.insert({CAST_TO_INT8_FUNC_NAME, CastToInt8VectorFunction::getDefinitions()});
}

void BuiltInVectorFunctions::registerListFunctions() {
Expand Down
5 changes: 5 additions & 0 deletions src/function/comparison_functions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ static void executeNestedOperation(uint8_t& result, ValueVector* leftVector,
rightVector->getValue<int16_t>(rightPos), result, nullptr /* left */,
nullptr /* right */);
} break;
case PhysicalTypeID::INT8: {
OP::operation(leftVector->getValue<int8_t>(leftPos),
rightVector->getValue<int8_t>(rightPos), result, nullptr /* left */,
nullptr /* right */);
} break;
case PhysicalTypeID::DOUBLE: {
OP::operation(leftVector->getValue<double_t>(leftPos),
rightVector->getValue<double_t>(rightPos), result, nullptr /* left */,
Expand Down
37 changes: 37 additions & 0 deletions src/function/vector_cast_functions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@
return CAST_TO_INT32_FUNC_NAME;
case LogicalTypeID::INT16:
return CAST_TO_INT16_FUNC_NAME;
case LogicalTypeID::INT8:
return CAST_TO_INT8_FUNC_NAME;
case LogicalTypeID::FLOAT:
return CAST_TO_FLOAT_FUNC_NAME;
case LogicalTypeID::DOUBLE:
Expand All @@ -66,6 +68,10 @@
void VectorCastFunction::bindImplicitCastFunc(
LogicalTypeID sourceTypeID, LogicalTypeID targetTypeID, scalar_exec_func& func) {
switch (targetTypeID) {
case LogicalTypeID::INT8: {
bindImplicitNumericalCastFunc<int8_t, CastToInt8>(sourceTypeID, func);
return;

Check warning on line 73 in src/function/vector_cast_functions.cpp

View check run for this annotation

Codecov / codecov/patch

src/function/vector_cast_functions.cpp#L71-L73

Added lines #L71 - L73 were not covered by tests
}
case LogicalTypeID::INT16: {
bindImplicitNumericalCastFunc<int16_t, CastToInt16>(sourceTypeID, func);
return;
Expand Down Expand Up @@ -149,6 +155,9 @@
result.push_back(make_unique<VectorFunctionDefinition>(CAST_TO_STRING_FUNC_NAME,
std::vector<LogicalTypeID>{LogicalTypeID::INT16}, LogicalTypeID::STRING,
UnaryCastExecFunction<int16_t, ku_string_t, CastToString>));
result.push_back(make_unique<VectorFunctionDefinition>(CAST_TO_STRING_FUNC_NAME,
std::vector<LogicalTypeID>{LogicalTypeID::INT8}, LogicalTypeID::STRING,
UnaryCastExecFunction<int8_t, ku_string_t, CastToString>));
result.push_back(make_unique<VectorFunctionDefinition>(CAST_TO_STRING_FUNC_NAME,
std::vector<LogicalTypeID>{LogicalTypeID::DOUBLE}, LogicalTypeID::STRING,
UnaryCastExecFunction<double_t, ku_string_t, CastToString>));
Expand Down Expand Up @@ -189,6 +198,8 @@

vector_function_definitions CastToDoubleVectorFunction::getDefinitions() {
vector_function_definitions result;
result.push_back(bindVectorFunction<int8_t, double_t, CastToDouble>(
CAST_TO_DOUBLE_FUNC_NAME, LogicalTypeID::INT8, LogicalTypeID::DOUBLE));
result.push_back(bindVectorFunction<int16_t, double_t, CastToDouble>(
CAST_TO_DOUBLE_FUNC_NAME, LogicalTypeID::INT16, LogicalTypeID::DOUBLE));
result.push_back(bindVectorFunction<int32_t, double_t, CastToDouble>(
Expand All @@ -202,6 +213,8 @@

vector_function_definitions CastToFloatVectorFunction::getDefinitions() {
vector_function_definitions result;
result.push_back(bindVectorFunction<int8_t, float_t, CastToFloat>(
CAST_TO_FLOAT_FUNC_NAME, LogicalTypeID::INT8, LogicalTypeID::FLOAT));
result.push_back(bindVectorFunction<int16_t, float_t, CastToFloat>(
CAST_TO_FLOAT_FUNC_NAME, LogicalTypeID::INT16, LogicalTypeID::FLOAT));
result.push_back(bindVectorFunction<int32_t, float_t, CastToFloat>(
Expand All @@ -216,6 +229,8 @@

vector_function_definitions CastToSerialVectorFunction::getDefinitions() {
vector_function_definitions result;
result.push_back(bindVectorFunction<int8_t, int64_t, CastToSerial>(
CAST_TO_SERIAL_FUNC_NAME, LogicalTypeID::INT8, LogicalTypeID::SERIAL));
result.push_back(bindVectorFunction<int16_t, int64_t, CastToSerial>(
CAST_TO_SERIAL_FUNC_NAME, LogicalTypeID::INT16, LogicalTypeID::SERIAL));
result.push_back(bindVectorFunction<int32_t, int64_t, CastToSerial>(
Expand All @@ -230,6 +245,8 @@

vector_function_definitions CastToInt64VectorFunction::getDefinitions() {
vector_function_definitions result;
result.push_back(bindVectorFunction<int8_t, int64_t, CastToInt64>(
CAST_TO_INT64_FUNC_NAME, LogicalTypeID::INT8, LogicalTypeID::INT64));
result.push_back(bindVectorFunction<int16_t, int64_t, CastToInt64>(
CAST_TO_INT64_FUNC_NAME, LogicalTypeID::INT16, LogicalTypeID::INT64));
result.push_back(bindVectorFunction<int32_t, int64_t, CastToInt64>(
Expand All @@ -244,6 +261,8 @@

vector_function_definitions CastToInt32VectorFunction::getDefinitions() {
vector_function_definitions result;
result.push_back(bindVectorFunction<int8_t, int32_t, CastToInt32>(
CAST_TO_INT32_FUNC_NAME, LogicalTypeID::INT8, LogicalTypeID::INT32));
result.push_back(bindVectorFunction<int16_t, int32_t, CastToInt32>(
CAST_TO_INT32_FUNC_NAME, LogicalTypeID::INT16, LogicalTypeID::INT32));
// down cast
Expand All @@ -258,6 +277,8 @@

vector_function_definitions CastToInt16VectorFunction::getDefinitions() {
vector_function_definitions result;
result.push_back(bindVectorFunction<int8_t, int16_t, CastToInt16>(
CAST_TO_INT16_FUNC_NAME, LogicalTypeID::INT8, LogicalTypeID::INT16));
// down cast
result.push_back(bindVectorFunction<int32_t, int16_t, CastToInt16>(
CAST_TO_INT16_FUNC_NAME, LogicalTypeID::INT32, LogicalTypeID::INT16));
Expand All @@ -270,5 +291,21 @@
return result;
}

vector_function_definitions CastToInt8VectorFunction::getDefinitions() {
vector_function_definitions result;
// down cast
result.push_back(bindVectorFunction<int16_t, int8_t, CastToInt8>(
CAST_TO_INT8_FUNC_NAME, LogicalTypeID::INT16, LogicalTypeID::INT8));
result.push_back(bindVectorFunction<int32_t, int8_t, CastToInt8>(
CAST_TO_INT8_FUNC_NAME, LogicalTypeID::INT32, LogicalTypeID::INT8));
result.push_back(bindVectorFunction<int64_t, int8_t, CastToInt8>(
CAST_TO_INT8_FUNC_NAME, LogicalTypeID::INT64, LogicalTypeID::INT8));
result.push_back(bindVectorFunction<float_t, int8_t, CastToInt8>(
CAST_TO_INT8_FUNC_NAME, LogicalTypeID::FLOAT, LogicalTypeID::INT8));
result.push_back(bindVectorFunction<double_t, int8_t, CastToInt8>(
CAST_TO_INT8_FUNC_NAME, LogicalTypeID::DOUBLE, LogicalTypeID::INT8));
return result;
}

Check warning on line 308 in src/function/vector_cast_functions.cpp

View check run for this annotation

Codecov / codecov/patch

src/function/vector_cast_functions.cpp#L308

Added line #L308 was not covered by tests

} // namespace function
} // namespace kuzu
3 changes: 3 additions & 0 deletions src/function/vector_hash_functions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ void VectorHashFunction::computeHash(ValueVector* operand, ValueVector* result)
case PhysicalTypeID::INT16: {
UnaryHashFunctionExecutor::execute<int16_t, hash_t>(*operand, *result);
} break;
case PhysicalTypeID::INT8: {
UnaryHashFunctionExecutor::execute<int8_t, hash_t>(*operand, *result);
} break;
case PhysicalTypeID::DOUBLE: {
UnaryHashFunctionExecutor::execute<double, hash_t>(*operand, *result);
} break;
Expand Down
30 changes: 30 additions & 0 deletions src/function/vector_list_functions.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,10 @@ std::unique_ptr<FunctionBindData> ListExtractVectorFunction::bindFunc(
vectorFunctionDefinition->execFunc =
BinaryExecListStructFunction<list_entry_t, int64_t, int16_t, ListExtract>;
} break;
case PhysicalTypeID::INT8: {
Ashleyhx marked this conversation as resolved.
Show resolved Hide resolved
vectorFunctionDefinition->execFunc =
BinaryExecListStructFunction<list_entry_t, int64_t, int8_t, ListExtract>;
} break;
case PhysicalTypeID::DOUBLE: {
vectorFunctionDefinition->execFunc =
BinaryExecListStructFunction<list_entry_t, int64_t, double_t, ListExtract>;
Expand Down Expand Up @@ -233,6 +237,10 @@ std::unique_ptr<FunctionBindData> ListPrependVectorFunction::bindFunc(
vectorFunctionDefinition->execFunc =
BinaryExecListStructFunction<int16_t, list_entry_t, list_entry_t, ListPrepend>;
} break;
case PhysicalTypeID::INT8: {
vectorFunctionDefinition->execFunc =
BinaryExecListStructFunction<int8_t, list_entry_t, list_entry_t, ListPrepend>;
} break;
case PhysicalTypeID::DOUBLE: {
vectorFunctionDefinition->execFunc =
BinaryExecListStructFunction<double_t, list_entry_t, list_entry_t, ListPrepend>;
Expand Down Expand Up @@ -359,6 +367,9 @@ std::unique_ptr<FunctionBindData> ListSortVectorFunction::bindFunc(
case LogicalTypeID::INT16: {
getExecFunction<int16_t>(arguments, vectorFunctionDefinition->execFunc);
} break;
case LogicalTypeID::INT8: {
getExecFunction<int8_t>(arguments, vectorFunctionDefinition->execFunc);
} break;
case LogicalTypeID::DOUBLE: {
getExecFunction<double_t>(arguments, vectorFunctionDefinition->execFunc);
} break;
Expand Down Expand Up @@ -430,6 +441,9 @@ std::unique_ptr<FunctionBindData> ListReverseSortVectorFunction::bindFunc(
case LogicalTypeID::INT16: {
getExecFunction<int16_t>(arguments, vectorFunctionDefinition->execFunc);
} break;
case LogicalTypeID::INT8: {
getExecFunction<int8_t>(arguments, vectorFunctionDefinition->execFunc);
} break;
case LogicalTypeID::DOUBLE: {
getExecFunction<double_t>(arguments, vectorFunctionDefinition->execFunc);
} break;
Expand Down Expand Up @@ -499,6 +513,10 @@ std::unique_ptr<FunctionBindData> ListSumVectorFunction::bindFunc(
vectorFunctionDefinition->execFunc =
UnaryExecListStructFunction<list_entry_t, int16_t, ListSum>;
} break;
case LogicalTypeID::INT8: {
vectorFunctionDefinition->execFunc =
UnaryExecListStructFunction<list_entry_t, int8_t, ListSum>;
} break;
case LogicalTypeID::DOUBLE: {
vectorFunctionDefinition->execFunc =
UnaryExecListStructFunction<list_entry_t, double_t, ListSum>;
Expand Down Expand Up @@ -539,6 +557,10 @@ std::unique_ptr<FunctionBindData> ListDistinctVectorFunction::bindFunc(
vectorFunctionDefinition->execFunc =
UnaryExecListStructFunction<list_entry_t, list_entry_t, ListDistinct<int16_t>>;
} break;
case LogicalTypeID::INT8: {
vectorFunctionDefinition->execFunc =
UnaryExecListStructFunction<list_entry_t, list_entry_t, ListDistinct<int8_t>>;
} break;
case LogicalTypeID::DOUBLE: {
vectorFunctionDefinition->execFunc =
UnaryExecListStructFunction<list_entry_t, list_entry_t, ListDistinct<double_t>>;
Expand Down Expand Up @@ -603,6 +625,10 @@ std::unique_ptr<FunctionBindData> ListUniqueVectorFunction::bindFunc(
vectorFunctionDefinition->execFunc =
UnaryExecListStructFunction<list_entry_t, int64_t, ListUnique<int16_t>>;
} break;
case LogicalTypeID::INT8: {
vectorFunctionDefinition->execFunc =
UnaryExecListStructFunction<list_entry_t, int64_t, ListUnique<int8_t>>;
} break;
case LogicalTypeID::DOUBLE: {
vectorFunctionDefinition->execFunc =
UnaryExecListStructFunction<list_entry_t, int64_t, ListUnique<double_t>>;
Expand Down Expand Up @@ -668,6 +694,10 @@ std::unique_ptr<FunctionBindData> ListAnyValueVectorFunction::bindFunc(
vectorFunctionDefinition->execFunc =
UnaryExecListStructFunction<list_entry_t, int16_t, ListAnyValue>;
} break;
case LogicalTypeID::INT8: {
vectorFunctionDefinition->execFunc =
UnaryExecListStructFunction<list_entry_t, int8_t, ListAnyValue>;
} break;
case LogicalTypeID::DOUBLE: {
vectorFunctionDefinition->execFunc =
UnaryExecListStructFunction<list_entry_t, double_t, ListAnyValue>;
Expand Down
1 change: 1 addition & 0 deletions src/include/common/expression_type.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ const std::string CAST_TO_SERIAL_FUNC_NAME = "TO_SERIAL";
const std::string CAST_TO_INT64_FUNC_NAME = "TO_INT64";
const std::string CAST_TO_INT32_FUNC_NAME = "TO_INT32";
const std::string CAST_TO_INT16_FUNC_NAME = "TO_INT16";
const std::string CAST_TO_INT8_FUNC_NAME = "TO_INT8";
const std::string CAST_TO_BLOB_FUNC_NAME = "BLOB";

// list
Expand Down
Loading