1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-30 19:23:07 +03:00

Fix truncate and round for char types

This commit is contained in:
mariadb-AndreyPiskunov
2022-09-22 18:14:30 +03:00
committed by Leonid Fedorov
parent 06fa57966b
commit 5b166a9577
2 changed files with 16 additions and 2 deletions

View File

@ -196,6 +196,13 @@ double Func_round::getDoubleVal(Row& row, FunctionParm& parm, bool& isNull,
return x;
}
if (execplan::CalpontSystemCatalog::VARCHAR == op_ct.colDataType ||
execplan::CalpontSystemCatalog::CHAR == op_ct.colDataType ||
execplan::CalpontSystemCatalog::TEXT == op_ct.colDataType)
{
return getIntVal(row, parm, isNull, op_ct);
}
if (isUnsigned(op_ct.colDataType))
{
return getUintVal(row, parm, isNull, op_ct);
@ -263,6 +270,13 @@ long double Func_round::getLongDoubleVal(Row& row, FunctionParm& parm, bool& isN
return x;
}
if (execplan::CalpontSystemCatalog::VARCHAR == op_ct.colDataType ||
execplan::CalpontSystemCatalog::CHAR == op_ct.colDataType ||
execplan::CalpontSystemCatalog::TEXT == op_ct.colDataType)
{
return getIntVal(row, parm, isNull, op_ct);
}
if (isUnsigned(op_ct.colDataType))
{
return getUintVal(row, parm, isNull, op_ct);
@ -484,7 +498,7 @@ IDB_Decimal Func_round::getDecimalVal(Row& row, FunctionParm& parm, bool& isNull
else
x = ceil(x - 0.5);
decimal.value = (int64_t)x;
decimal.value = x <= INT64_MIN ? INT64_MIN : x >= INT64_MAX ? INT64_MAX : int64_t(x);
decimal.scale = s;
}
}

View File

@ -440,7 +440,7 @@ IDB_Decimal Func_truncate::getDecimalVal(Row& row, FunctionParm& parm, bool& isN
if (!isNull)
{
x *= p;
decimal.value = (int64_t)x;
decimal.value = x <= INT64_MIN ? INT64_MIN : x >= INT64_MAX ? INT64_MAX : int64_t(x);
decimal.scale = s;
}
}