You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-07-29 08:21:15 +03:00
fix(utils): MCOL-4605 handle negative decimals in FROM_UNIXTIME (#3466)
This commit is contained in:
@ -18,6 +18,9 @@ FROM_UNIXTIME(0)
|
||||
SELECT FROM_UNIXTIME(-1) FROM t1 LIMIT 1;
|
||||
FROM_UNIXTIME(-1)
|
||||
NULL
|
||||
SELECT FROM_UNIXTIME(-0.1) FROM t1 LIMIT 1;
|
||||
FROM_UNIXTIME(-0.1)
|
||||
NULL
|
||||
SELECT FROM_UNIXTIME(1) FROM t1 LIMIT 1;
|
||||
FROM_UNIXTIME(1)
|
||||
1970-01-01 00:00:01
|
||||
|
@ -31,6 +31,7 @@ INSERT INTO t1 VALUES(9913, 98765.4321, repeat('q', 5), '09-12-11', '01:08:59');
|
||||
|
||||
SELECT FROM_UNIXTIME(0) FROM t1 LIMIT 1;
|
||||
SELECT FROM_UNIXTIME(-1) FROM t1 LIMIT 1;
|
||||
SELECT FROM_UNIXTIME(-0.1) FROM t1 LIMIT 1;
|
||||
SELECT FROM_UNIXTIME(1) FROM t1 LIMIT 1;
|
||||
SELECT FROM_UNIXTIME(1547432997) FROM t1 LIMIT 1;
|
||||
SELECT FROM_UNIXTIME('1547432997') FROM t1 LIMIT 1;
|
||||
|
@ -51,6 +51,12 @@ DateTime getDateTime(rowgroup::Row& row, FunctionParm& parm, bool& isNull)
|
||||
case execplan::CalpontSystemCatalog::DOUBLE:
|
||||
{
|
||||
double value = parm[0]->data()->getDoubleVal(row, isNull);
|
||||
if (value < 0)
|
||||
{
|
||||
isNull = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
double fracpart, intpart;
|
||||
fracpart = modf(value, &intpart);
|
||||
val = (int64_t)intpart;
|
||||
@ -62,6 +68,12 @@ DateTime getDateTime(rowgroup::Row& row, FunctionParm& parm, bool& isNull)
|
||||
{
|
||||
IDB_Decimal dec = parm[0]->data()->getDecimalVal(row, isNull);
|
||||
|
||||
if (dec.value < 0)
|
||||
{
|
||||
isNull = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (parm[0]->data()->resultType().colWidth == datatypes::MAXDECIMALWIDTH)
|
||||
{
|
||||
auto integralAndFractional = dec.getIntegralAndFractional();
|
||||
|
Reference in New Issue
Block a user