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

MCOL-4188 Regression fixes for MCOL-641.

1. In TupleAggregateStep::configDeliveredRowGroup(), use
jobInfo.projectionCols instead of jobInfo.nonConstCols
for setting scale and precision if the source column is
wide decimal.

2. Tighten rules for wide decimal processing. Specifically:
  a. Replace (precision > INT64MAXPRECISION) checks with
     (precision > INT64MAXPRECISION && precision <= INT128MAXPRECISION)
  b. At places where (colWidth == MAXDECIMALWIDTH) is not enough to
     determine if a column is wide decimal or not, also add a check on
     type being DECIMAL/UDECIMAL.
This commit is contained in:
Gagan Goel
2020-11-24 20:15:33 -05:00
parent c707f72f0c
commit c5d4a918ee
12 changed files with 55 additions and 71 deletions

View File

@ -1068,7 +1068,7 @@ dec3: /* have to pick a scale to use for the double. using 5..
case CalpontSystemCatalog::DECIMAL:
case CalpontSystemCatalog::UDECIMAL:
{
dec4: /* have to pick a scale to use for the double. using 5... */
dec4: /* have to pick a scale to use for the double. using 5... */
uint32_t scale = 5;
uint64_t ival = (uint64_t) (double) (val * pow((double) 10, (double) scale));
int diff = out->getScale(i) - scale;
@ -1128,7 +1128,8 @@ dec4: /* have to pick a scale to use for the double. using 5... */
case CalpontSystemCatalog::DECIMAL:
case CalpontSystemCatalog::UDECIMAL:
{
if (out->getColumnWidth(i) == datatypes::MAXDECIMALWIDTH)
if (datatypes::isWideDecimalType(out->getColTypes()[i],
out->getColumnWidth(i)))
{
if (out->getScale(i) == scale)
out->setInt128Field(isInputWide ? val128 : val, i);