Fix AggregateFunctionAvg serialization backwards compatibility

This commit is contained in:
Alexey Milovidov 2020-07-14 11:56:01 +03:00
parent 9490bf7e5b
commit cb0b74af86

View File

@ -20,6 +20,7 @@ template <typename T, typename Denominator>
struct AggregateFunctionAvgData
{
using NumeratorType = T;
using DenominatorType = Denominator;
T numerator = 0;
Denominator denominator = 0;
@ -73,13 +74,21 @@ public:
void serialize(ConstAggregateDataPtr place, WriteBuffer & buf) const override
{
writeBinary(this->data(place).numerator, buf);
writeBinary(this->data(place).denominator, buf);
if constexpr (std::is_integral_v<typename Data::DenominatorType>)
writeVarUInt(this->data(place).denominator, buf);
else /// Floating point denominator type can be used
writeBinary(this->data(place).denominator, buf);
}
void deserialize(AggregateDataPtr place, ReadBuffer & buf, Arena *) const override
{
readBinary(this->data(place).numerator, buf);
readBinary(this->data(place).denominator, buf);
if constexpr (std::is_integral_v<typename Data::DenominatorType>)
readVarUInt(this->data(place).denominator, buf);
else /// Floating point denominator type can be used
readBinary(this->data(place).denominator, buf);
}
void insertResultInto(AggregateDataPtr place, IColumn & to, Arena *) const override