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

MCOL-4463 Fix for BETWEEN() and wide DECIMAL columns

This commit is contained in:
Roman Nozdrin
2020-12-18 14:55:32 +00:00
parent cc6c51b540
commit ba4190d200
2 changed files with 29 additions and 22 deletions

View File

@ -461,7 +461,7 @@ class Decimal: public TSInt128
if (scale == rhs.scale) if (scale == rhs.scale)
{ {
return op128(s128Value, rhs.s128Value); return op128(s128Value, (int128_t) rhs.value);
} }
else else
{ {

View File

@ -71,10 +71,10 @@ ConstantColumn::ConstantColumn(const string& sql, TYPE type) :
fResult.longDoubleVal = strtold(sql.c_str(), NULL); fResult.longDoubleVal = strtold(sql.c_str(), NULL);
// decimal for constant should be constructed by the caller and call the decimal constructor // decimal for constant should be constructed by the caller and call the decimal constructor
fResult.decimalVal.value = fResult.intVal; fResult.decimalVal = datatypes::Decimal(fResult.intVal,
fResult.decimalVal.scale = 0; 0,
fResult.decimalVal.precision = 18; 18,
(int128_t) fResult.intVal);
// @bug 3381, default null item to integer type. // @bug 3381, default null item to integer type.
if (fType == ConstantColumn::NULLDATA) if (fType == ConstantColumn::NULLDATA)
{ {
@ -109,9 +109,10 @@ ConstantColumn::ConstantColumn(const string& sql, const double val) :
fResult.floatVal = (float)val; fResult.floatVal = (float)val;
fResult.longDoubleVal = val; fResult.longDoubleVal = val;
// decimal for constant should be constructed by the caller and call the decimal constructor // decimal for constant should be constructed by the caller and call the decimal constructor
fResult.decimalVal.value = fResult.intVal; fResult.decimalVal = datatypes::Decimal(fResult.intVal,
fResult.decimalVal.scale = 0; 0,
fResult.decimalVal.precision = 18; 18,
(int128_t) fResult.intVal);
fResultType.colDataType = CalpontSystemCatalog::DOUBLE; fResultType.colDataType = CalpontSystemCatalog::DOUBLE;
fResultType.colWidth = 8; fResultType.colWidth = 8;
} }
@ -129,9 +130,10 @@ ConstantColumn::ConstantColumn(const string& sql, const long double val) :
fResult.floatVal = (float)val; fResult.floatVal = (float)val;
fResult.longDoubleVal = val; fResult.longDoubleVal = val;
// decimal for constant should be constructed by the caller and call the decimal constructor // decimal for constant should be constructed by the caller and call the decimal constructor
fResult.decimalVal.value = fResult.intVal; fResult.decimalVal = datatypes::Decimal(fResult.intVal,
fResult.decimalVal.scale = 0; 0,
fResult.decimalVal.precision = 18; 18,
(int128_t) fResult.intVal);
fResultType.colDataType = CalpontSystemCatalog::DOUBLE; fResultType.colDataType = CalpontSystemCatalog::DOUBLE;
fResultType.colWidth = 8; fResultType.colWidth = 8;
} }
@ -148,8 +150,10 @@ ConstantColumn::ConstantColumn(const string& sql, const int64_t val, TYPE type)
fResult.floatVal = (float)fResult.intVal; fResult.floatVal = (float)fResult.intVal;
fResult.doubleVal = (double)fResult.intVal; fResult.doubleVal = (double)fResult.intVal;
fResult.longDoubleVal = (long double)fResult.intVal; fResult.longDoubleVal = (long double)fResult.intVal;
fResult.decimalVal.value = fResult.intVal; fResult.decimalVal = datatypes::Decimal(fResult.intVal,
fResult.decimalVal.scale = 0; 0,
0,
(int128_t) fResult.intVal);
fResultType.colDataType = CalpontSystemCatalog::BIGINT; fResultType.colDataType = CalpontSystemCatalog::BIGINT;
fResultType.colWidth = 8; fResultType.colWidth = 8;
} }
@ -166,8 +170,10 @@ ConstantColumn::ConstantColumn(const string& sql, const uint64_t val, TYPE type)
fResult.floatVal = (float)fResult.uintVal; fResult.floatVal = (float)fResult.uintVal;
fResult.doubleVal = (double)fResult.uintVal; fResult.doubleVal = (double)fResult.uintVal;
fResult.longDoubleVal = (long double)fResult.uintVal; fResult.longDoubleVal = (long double)fResult.uintVal;
fResult.decimalVal.value = fResult.uintVal; fResult.decimalVal = datatypes::Decimal(fResult.uintVal,
fResult.decimalVal.scale = 0; 0,
0,
(int128_t) fResult.uintVal);
fResultType.colDataType = CalpontSystemCatalog::UBIGINT; fResultType.colDataType = CalpontSystemCatalog::UBIGINT;
fResultType.colWidth = 8; fResultType.colWidth = 8;
} }
@ -229,9 +235,10 @@ ConstantColumn::ConstantColumn(const int64_t val, TYPE type) :
fResult.floatVal = (float)fResult.intVal; fResult.floatVal = (float)fResult.intVal;
fResult.doubleVal = (double)fResult.intVal; fResult.doubleVal = (double)fResult.intVal;
fResult.longDoubleVal = (long double)fResult.intVal; fResult.longDoubleVal = (long double)fResult.intVal;
fResult.decimalVal.value = fResult.intVal; fResult.decimalVal = datatypes::Decimal(fResult.intVal,
fResult.decimalVal.s128Value = fResult.intVal; 0,
fResult.decimalVal.scale = 0; 0,
(int128_t) fResult.intVal);
fResultType.colDataType = CalpontSystemCatalog::BIGINT; fResultType.colDataType = CalpontSystemCatalog::BIGINT;
fResultType.colWidth = 8; fResultType.colWidth = 8;
} }
@ -251,10 +258,10 @@ ConstantColumn::ConstantColumn(const uint64_t val, TYPE type,
fResult.floatVal = (float)fResult.uintVal; fResult.floatVal = (float)fResult.uintVal;
fResult.doubleVal = (double)fResult.uintVal; fResult.doubleVal = (double)fResult.uintVal;
fResult.longDoubleVal = (long double)fResult.uintVal; fResult.longDoubleVal = (long double)fResult.uintVal;
fResult.decimalVal.value = fResult.uintVal; fResult.decimalVal = datatypes::Decimal(fResult.uintVal,
fResult.decimalVal.s128Value = fResult.uintVal; scale,
fResult.decimalVal.scale = scale; precision,
fResult.decimalVal.precision = precision; (int128_t) fResult.uintVal);
fResultType.colDataType = CalpontSystemCatalog::UBIGINT; fResultType.colDataType = CalpontSystemCatalog::UBIGINT;
fResultType.colWidth = 8; fResultType.colWidth = 8;
} }