dbms: fix quantileDeterministic (no hash was saved with samples) [#METR-13932]

This commit is contained in:
Andrey Mironov 2015-09-10 18:07:29 +03:00
parent 540c411aa8
commit 61988e6a37

View File

@ -67,6 +67,7 @@ public:
void insertImpl(const T & v, const UInt32 hash) void insertImpl(const T & v, const UInt32 hash)
{ {
/// @todo why + 1? I don't quite recall
while (samples.size() + 1 >= sample_count) while (samples.size() + 1 >= sample_count)
{ {
if (++skip_degree > detail::MAX_SKIP_DEGREE) if (++skip_degree > detail::MAX_SKIP_DEGREE)
@ -119,6 +120,7 @@ public:
/** Если T не числовой тип, использование этого метода вызывает ошибку компиляции, /** Если T не числовой тип, использование этого метода вызывает ошибку компиляции,
* но использование класса ошибки не вызывает. SFINAE. * но использование класса ошибки не вызывает. SFINAE.
* Не SFINAE. Функции члены шаблонов типов просто не проверяются, пока не используются.
*/ */
double quantileInterpolated(double level) double quantileInterpolated(double level)
{ {
@ -153,9 +155,9 @@ public:
thinOut(); thinOut();
} }
for (size_t i = 0; i < b.samples.size(); ++i) for (const auto & sample : b.samples)
if (good(b.samples[i].second)) if (good(sample.second))
insertImpl(b.samples[i].first, b.samples[i].second); insertImpl(sample.first, sample.second);
total_values += b.total_values; total_values += b.total_values;
} }
@ -167,7 +169,7 @@ public:
samples.resize(std::min(total_values, sample_count)); samples.resize(std::min(total_values, sample_count));
for (size_t i = 0; i < samples.size(); ++i) for (size_t i = 0; i < samples.size(); ++i)
DB::readBinary(samples[i].first, buf); DB::readPODBinary(samples[i], buf);
sorted = false; sorted = false;
} }
@ -178,7 +180,7 @@ public:
DB::writeIntBinary<size_t>(total_values, buf); DB::writeIntBinary<size_t>(total_values, buf);
for (size_t i = 0; i < std::min(sample_count, total_values); ++i) for (size_t i = 0; i < std::min(sample_count, total_values); ++i)
DB::writeBinary(samples[i].first, buf); DB::writePODBinary(samples[i], buf);
} }
private: private: