diff --git a/src/AggregateFunctions/AggregateFunctionSum.h b/src/AggregateFunctions/AggregateFunctionSum.h index 7dd5c0eee8e..2783f2cd43e 100644 --- a/src/AggregateFunctions/AggregateFunctionSum.h +++ b/src/AggregateFunctions/AggregateFunctionSum.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include @@ -400,12 +401,12 @@ public: if (if_argument_pos >= 0) { /// Merge the 2 sets of flags (null and if) into a single one. This allows us to use parallelizable sums when available - UInt8 final_flags[batch_size]; - memcpy(final_flags, assert_cast(*columns[if_argument_pos]).getData().data(), batch_size * sizeof(UInt8)); + const auto * if_flags = assert_cast(*columns[if_argument_pos]).getData().data(); + auto final_flags = std::make_unique(batch_size); for (size_t i = 0; i < batch_size; ++i) - final_flags[i] = !null_map[i] && final_flags[i]; + final_flags[i] = !null_map[i] && if_flags[i]; - this->data(place).addManyConditional(column.getData().data(), final_flags, batch_size); + this->data(place).addManyConditional(column.getData().data(), final_flags.get(), batch_size); } else {