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

MCOL-641 Addition now works for DECIMAL columns with precision > 18.

This commit is contained in:
drrtuy
2020-01-26 11:07:45 +03:00
committed by Roman Nozdrin
parent 54c152d6c8
commit 98213c0094
11 changed files with 175 additions and 14 deletions

View File

@ -472,10 +472,26 @@ void FuncExp::evaluate(rowgroup::Row& row, std::vector<execplan::SRCP>& expressi
{
IDB_Decimal val = expression[i]->getDecimalVal(row, isNull);
if (isNull)
row.setIntField<8>(BIGINTNULL, expression[i]->outputIndex());
// WIP
if (expression[i]->resultType().precision > 18)
{
// WIP make this a separate function w and w/o overflow check
if (expression[i]->resultType().colDataType == execplan::CalpontSystemCatalog::DECIMAL)
row.setBinaryField(reinterpret_cast<uint8_t*>(&val.__v.__s128),
expression[i]->resultType().colWidth,
row.getOffset(expression[i]->outputIndex()));
else
row.setBinaryField(reinterpret_cast<uint8_t*>(&val.__v.__u128),
expression[i]->resultType().colWidth,
row.getOffset(expression[i]->outputIndex()));
}
else
row.setIntField<8>(val.value, expression[i]->outputIndex());
{
if (isNull)
row.setIntField<8>(BIGINTNULL, expression[i]->outputIndex());
else
row.setIntField<8>(val.value, expression[i]->outputIndex());
}
break;
}