mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-18 04:12:19 +00:00
fixing test results
This commit is contained in:
parent
832d37c424
commit
591ebcef49
@ -37,7 +37,7 @@ struct AvgFraction
|
|||||||
{
|
{
|
||||||
if constexpr (IsDecimalNumber<Numerator> && IsDecimalNumber<Denominator>)
|
if constexpr (IsDecimalNumber<Numerator> && IsDecimalNumber<Denominator>)
|
||||||
{
|
{
|
||||||
if constexpr(std::is_same_v<Numerator, Decimal256> && std::is_same_v<Denominator, Decimal128>)
|
if constexpr (std::is_same_v<Numerator, Decimal256> && std::is_same_v<Denominator, Decimal128>)
|
||||||
///Special case as Decimal256 / Decimal128 = compile error (as Decimal128 is not parametrized by a wide
|
///Special case as Decimal256 / Decimal128 = compile error (as Decimal128 is not parametrized by a wide
|
||||||
///int), but an __int128 instead
|
///int), but an __int128 instead
|
||||||
return DecimalUtils::convertTo<Float64>(
|
return DecimalUtils::convertTo<Float64>(
|
||||||
@ -139,10 +139,15 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
class AggregateFunctionAvg final : public AggregateFunctionAvgBase<T, UInt64, AggregateFunctionAvg<T>>
|
using AvgFieldType = std::conditional_t<IsDecimalNumber<T>,
|
||||||
|
std::conditional_t<std::is_same_v<T, Decimal256>, Decimal256, Decimal128>,
|
||||||
|
NearestFieldType<T>>;
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
class AggregateFunctionAvg final : public AggregateFunctionAvgBase<AvgFieldType<T>, UInt64, AggregateFunctionAvg<T>>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using AggregateFunctionAvgBase<T, UInt64, AggregateFunctionAvg<T>>::AggregateFunctionAvgBase;
|
using AggregateFunctionAvgBase<AvgFieldType<T>, UInt64, AggregateFunctionAvg<T>>::AggregateFunctionAvgBase;
|
||||||
|
|
||||||
void add(AggregateDataPtr place, const IColumn ** columns, size_t row_num, Arena *) const final
|
void add(AggregateDataPtr place, const IColumn ** columns, size_t row_num, Arena *) const final
|
||||||
{
|
{
|
||||||
|
@ -6,24 +6,24 @@
|
|||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
template <class T>
|
template <class T>
|
||||||
using FieldType = std::conditional_t<IsDecimalNumber<T>,
|
using AvgWeightedFieldType = std::conditional_t<IsDecimalNumber<T>,
|
||||||
std::conditional_t<std::is_same_v<T, Decimal256>, Decimal256, Decimal128>,
|
std::conditional_t<std::is_same_v<T, Decimal256>, Decimal256, Decimal128>,
|
||||||
std::conditional_t<DecimalOrExtendedInt<T>,
|
std::conditional_t<DecimalOrExtendedInt<T>,
|
||||||
Float64, // no way to do UInt128 * UInt128, better cast to Float64
|
Float64, // no way to do UInt128 * UInt128, better cast to Float64
|
||||||
NearestFieldType<T>>>;
|
NearestFieldType<T>>>;
|
||||||
|
|
||||||
template <class T, class U>
|
template <class T, class U>
|
||||||
using MaxFieldType = std::conditional_t<(sizeof(FieldType<T>) > sizeof(FieldType<U>)),
|
using MaxFieldType = std::conditional_t<(sizeof(AvgWeightedFieldType<T>) > sizeof(AvgWeightedFieldType<U>)),
|
||||||
FieldType<T>, FieldType<U>>;
|
AvgWeightedFieldType<T>, AvgWeightedFieldType<U>>;
|
||||||
|
|
||||||
template <class Value, class Weight>
|
template <class Value, class Weight>
|
||||||
class AggregateFunctionAvgWeighted final :
|
class AggregateFunctionAvgWeighted final :
|
||||||
public AggregateFunctionAvgBase<
|
public AggregateFunctionAvgBase<
|
||||||
MaxFieldType<Value, Weight>, FieldType<Weight>, AggregateFunctionAvgWeighted<Value, Weight>>
|
MaxFieldType<Value, Weight>, AvgWeightedFieldType<Weight>, AggregateFunctionAvgWeighted<Value, Weight>>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Base = AggregateFunctionAvgBase<
|
using Base = AggregateFunctionAvgBase<
|
||||||
MaxFieldType<Value, Weight>, FieldType<Weight>, AggregateFunctionAvgWeighted<Value, Weight>>;
|
MaxFieldType<Value, Weight>, AvgWeightedFieldType<Weight>, AggregateFunctionAvgWeighted<Value, Weight>>;
|
||||||
using Base::Base;
|
using Base::Base;
|
||||||
|
|
||||||
using ValueT = MaxFieldType<Value, Weight>;
|
using ValueT = MaxFieldType<Value, Weight>;
|
||||||
@ -35,7 +35,7 @@ public:
|
|||||||
|
|
||||||
this->data(place).numerator += static_cast<ValueT>(value) * static_cast<ValueT>(weight);
|
this->data(place).numerator += static_cast<ValueT>(value) * static_cast<ValueT>(weight);
|
||||||
|
|
||||||
this->data(place).denominator += static_cast<FieldType<Weight>>(weight);
|
this->data(place).denominator += static_cast<AvgWeightedFieldType<Weight>>(weight);
|
||||||
}
|
}
|
||||||
|
|
||||||
String getName() const override { return "avgWeighted"; }
|
String getName() const override { return "avgWeighted"; }
|
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user