Minor change

This commit is contained in:
Alexey Milovidov 2021-06-14 06:05:27 +03:00
parent 39515083e4
commit cae9b25074
4 changed files with 13 additions and 13 deletions

View File

@ -269,12 +269,6 @@ public:
void operator() (const AggregateFunctionStateData & x) const; void operator() (const AggregateFunctionStateData & x) const;
}; };
template <typename T> constexpr bool isDecimalField() { return false; }
template <> constexpr bool isDecimalField<DecimalField<Decimal32>>() { return true; }
template <> constexpr bool isDecimalField<DecimalField<Decimal64>>() { return true; }
template <> constexpr bool isDecimalField<DecimalField<Decimal128>>() { return true; }
template <> constexpr bool isDecimalField<DecimalField<Decimal256>>() { return true; }
/** Implements `+=` operation. /** Implements `+=` operation.
* Returns false if the result is zero. * Returns false if the result is zero.

View File

@ -37,13 +37,13 @@ public:
return accurate::equalsOp(l, r); return accurate::equalsOp(l, r);
/// TODO This is wrong (does not respect scale). /// TODO This is wrong (does not respect scale).
if constexpr (isDecimalField<T>() && isDecimalField<U>()) if constexpr (is_decimal_field<T> && is_decimal_field<U>)
return l == r; return l == r;
if constexpr (isDecimalField<T>() && std::is_arithmetic_v<U>) if constexpr (is_decimal_field<T> && std::is_arithmetic_v<U>)
return l == DecimalField<Decimal256>(Decimal256(r), 0); return l == DecimalField<Decimal256>(Decimal256(r), 0);
if constexpr (std::is_arithmetic_v<T> && isDecimalField<U>()) if constexpr (std::is_arithmetic_v<T> && is_decimal_field<U>)
return DecimalField<Decimal256>(Decimal256(l), 0) == r; return DecimalField<Decimal256>(Decimal256(l), 0) == r;
if constexpr (std::is_same_v<T, String> && std::is_arithmetic_v<U>) if constexpr (std::is_same_v<T, String> && std::is_arithmetic_v<U>)
@ -86,13 +86,13 @@ public:
return accurate::lessOp(l, r); return accurate::lessOp(l, r);
/// TODO This is wrong (does not respect scale). /// TODO This is wrong (does not respect scale).
if constexpr (isDecimalField<T>() && isDecimalField<U>()) if constexpr (is_decimal_field<T> && is_decimal_field<U>)
return l < r; return l < r;
if constexpr (isDecimalField<T>() && std::is_arithmetic_v<U>) if constexpr (is_decimal_field<T> && std::is_arithmetic_v<U>)
return l < DecimalField<Decimal256>(Decimal256(r), 0); return l < DecimalField<Decimal256>(Decimal256(r), 0);
if constexpr (std::is_arithmetic_v<T> && isDecimalField<U>()) if constexpr (std::is_arithmetic_v<T> && is_decimal_field<U>)
return DecimalField<Decimal256>(Decimal256(l), 0) < r; return DecimalField<Decimal256>(Decimal256(l), 0) < r;
if constexpr (std::is_same_v<T, String> && std::is_arithmetic_v<U>) if constexpr (std::is_same_v<T, String> && std::is_arithmetic_v<U>)

View File

@ -162,6 +162,12 @@ private:
#pragma GCC diagnostic pop #pragma GCC diagnostic pop
#endif #endif
template <typename T> constexpr bool is_decimal_field = false;
template <> constexpr bool is_decimal_field<DecimalField<Decimal32>> = true;
template <> constexpr bool is_decimal_field<DecimalField<Decimal64>> = true;
template <> constexpr bool is_decimal_field<DecimalField<Decimal128>> = true;
template <> constexpr bool is_decimal_field<DecimalField<Decimal256>> = true;
/// char may be signed or unsigned, and behave identically to signed char or unsigned char, /// char may be signed or unsigned, and behave identically to signed char or unsigned char,
/// but they are always three different types. /// but they are always three different types.
/// signedness of char is different in Linux on x86 and Linux on ARM. /// signedness of char is different in Linux on x86 and Linux on ARM.

View File

@ -252,7 +252,7 @@ void ASTFunction::formatImplWithoutAlias(const FormatSettings & settings, Format
NO_SANITIZE_UNDEFINED NO_SANITIZE_UNDEFINED
{ {
using ValueType = std::decay_t<decltype(value)>; using ValueType = std::decay_t<decltype(value)>;
if constexpr (isDecimalField<ValueType>()) if constexpr (is_decimal_field<ValueType>)
{ {
// The parser doesn't create decimal literals, but // The parser doesn't create decimal literals, but
// they can be produced by constant folding or the // they can be produced by constant folding or the