1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-10-31 18:30:33 +03:00

Prefer to use floating point instead of decimal to match server behaviour.

This commit is contained in:
Aleksei Antipovskii
2025-09-02 02:40:52 +02:00
committed by Leonid Fedorov
parent 378f964cca
commit da3cc95077

View File

@@ -2949,7 +2949,7 @@ void DataConvert::joinColTypeForUnion(datatypes::SystemCatalog::TypeHolderStd& u
case datatypes::SystemCatalog::UINT: case datatypes::SystemCatalog::UINT:
case datatypes::SystemCatalog::UBIGINT: case datatypes::SystemCatalog::UBIGINT:
case datatypes::SystemCatalog::UDECIMAL: case datatypes::SystemCatalog::UDECIMAL:
{
if (type.scale != 0 && (unionedType.scale != 0 || isDecimal(unionedType.colDataType))) if (type.scale != 0 && (unionedType.scale != 0 || isDecimal(unionedType.colDataType)))
{ {
const unsigned int digitsBeforeDecimal = type.precision - type.scale; const unsigned int digitsBeforeDecimal = type.precision - type.scale;
@@ -3012,7 +3012,7 @@ void DataConvert::joinColTypeForUnion(datatypes::SystemCatalog::TypeHolderStd& u
} }
break; break;
}
case datatypes::SystemCatalog::DATE: case datatypes::SystemCatalog::DATE:
unionedType.colDataType = datatypes::SystemCatalog::CHAR; unionedType.colDataType = datatypes::SystemCatalog::CHAR;
unionedType.colWidth = 20; unionedType.colWidth = 20;
@@ -3042,10 +3042,6 @@ void DataConvert::joinColTypeForUnion(datatypes::SystemCatalog::TypeHolderStd& u
case datatypes::SystemCatalog::UFLOAT: case datatypes::SystemCatalog::UFLOAT:
case datatypes::SystemCatalog::UDOUBLE: case datatypes::SystemCatalog::UDOUBLE:
case datatypes::SystemCatalog::LONGDOUBLE: case datatypes::SystemCatalog::LONGDOUBLE:
if (datatypes::isWideDecimalType(type.colDataType, type.colWidth))
unionedType = type;
break;
default: break; default: break;
} }
@@ -3249,21 +3245,13 @@ void DataConvert::joinColTypeForUnion(datatypes::SystemCatalog::TypeHolderStd& u
case datatypes::SystemCatalog::UBIGINT: case datatypes::SystemCatalog::UBIGINT:
case datatypes::SystemCatalog::UFLOAT: case datatypes::SystemCatalog::UFLOAT:
case datatypes::SystemCatalog::UDOUBLE: case datatypes::SystemCatalog::UDOUBLE:
case datatypes::SystemCatalog::DECIMAL:
case datatypes::SystemCatalog::UDECIMAL:
unionedType.colDataType = datatypes::SystemCatalog::DOUBLE; unionedType.colDataType = datatypes::SystemCatalog::DOUBLE;
unionedType.scale = 0; unionedType.scale = 0;
unionedType.colWidth = sizeof(double); unionedType.colWidth = sizeof(double);
break; break;
case datatypes::SystemCatalog::DECIMAL:
case datatypes::SystemCatalog::UDECIMAL:
if (unionedType.colWidth != datatypes::MAXDECIMALWIDTH)
{
unionedType.colDataType = datatypes::SystemCatalog::DOUBLE;
unionedType.scale = 0;
unionedType.colWidth = sizeof(double);
}
break;
default: break; default: break;
} }
@@ -3313,23 +3301,14 @@ void DataConvert::joinColTypeForUnion(datatypes::SystemCatalog::TypeHolderStd& u
case datatypes::SystemCatalog::UFLOAT: case datatypes::SystemCatalog::UFLOAT:
case datatypes::SystemCatalog::UDOUBLE: case datatypes::SystemCatalog::UDOUBLE:
case datatypes::SystemCatalog::LONGDOUBLE: case datatypes::SystemCatalog::LONGDOUBLE:
case datatypes::SystemCatalog::DECIMAL:
case datatypes::SystemCatalog::UDECIMAL:
unionedType.colDataType = datatypes::SystemCatalog::LONGDOUBLE; unionedType.colDataType = datatypes::SystemCatalog::LONGDOUBLE;
unionedType.scale = (type.scale > unionedType.scale) ? type.scale : unionedType.scale; unionedType.scale = (type.scale > unionedType.scale) ? type.scale : unionedType.scale;
unionedType.colWidth = sizeof(long double); unionedType.colWidth = sizeof(long double);
unionedType.precision = -1; unionedType.precision = -1;
break; break;
case datatypes::SystemCatalog::DECIMAL:
case datatypes::SystemCatalog::UDECIMAL:
if (unionedType.colWidth != datatypes::MAXDECIMALWIDTH)
{
unionedType.colDataType = datatypes::SystemCatalog::LONGDOUBLE;
unionedType.scale = (type.scale > unionedType.scale) ? type.scale : unionedType.scale;
unionedType.colWidth = sizeof(long double);
unionedType.precision = -1;
}
break;
default: break; default: break;
} }