You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-08-01 06:46:55 +03:00
MCOL-3959 Separate processing for decimal
Preserves precision better than double
This commit is contained in:
@ -52,7 +52,6 @@ DateTime getDateTime(rowgroup::Row& row,
|
|||||||
{
|
{
|
||||||
case execplan::CalpontSystemCatalog::FLOAT:
|
case execplan::CalpontSystemCatalog::FLOAT:
|
||||||
case execplan::CalpontSystemCatalog::DOUBLE:
|
case execplan::CalpontSystemCatalog::DOUBLE:
|
||||||
case execplan::CalpontSystemCatalog::DECIMAL:
|
|
||||||
{
|
{
|
||||||
double value = parm[0]->data()->getDoubleVal(row, isNull);
|
double value = parm[0]->data()->getDoubleVal(row, isNull);
|
||||||
double fracpart, intpart;
|
double fracpart, intpart;
|
||||||
@ -61,6 +60,13 @@ DateTime getDateTime(rowgroup::Row& row,
|
|||||||
msec = (uint32_t)(fracpart * IDB_pow[parm[0]->data()->resultType().scale]);
|
msec = (uint32_t)(fracpart * IDB_pow[parm[0]->data()->resultType().scale]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case execplan::CalpontSystemCatalog::DECIMAL:
|
||||||
|
{
|
||||||
|
IDB_Decimal dec = parm[0]->data()->getDecimalVal(row, isNull);
|
||||||
|
val = dec.value / IDB_pow[dec.scale];
|
||||||
|
msec = dec.value % IDB_pow[dec.scale];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
val = parm[0]->data()->getDatetimeIntVal(row, isNull);
|
val = parm[0]->data()->getDatetimeIntVal(row, isNull);
|
||||||
|
Reference in New Issue
Block a user