From 3d1be12b79c4490b21e358843fd54feff903826d Mon Sep 17 00:00:00 2001 From: Nikolai Kochetov Date: Wed, 10 Apr 2019 17:52:08 +0300 Subject: [PATCH] Fix AggregatingTransform. --- dbms/src/Processors/Transforms/AggregatingTransform.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/dbms/src/Processors/Transforms/AggregatingTransform.cpp b/dbms/src/Processors/Transforms/AggregatingTransform.cpp index 0231cd513e6..8a8fdbcbc9f 100644 --- a/dbms/src/Processors/Transforms/AggregatingTransform.cpp +++ b/dbms/src/Processors/Transforms/AggregatingTransform.cpp @@ -61,8 +61,8 @@ namespace class SourceFromInputStream : public ISource { public: - SourceFromInputStream(Block header, BlockInputStreamPtr stream) - : ISource(std::move(header)), stream(std::move(stream)) {} + SourceFromInputStream(Block header, AggregatingTransformParamsPtr params_, BlockInputStreamPtr stream) + : ISource(std::move(header)), params(std::move(params_)), stream(std::move(stream)) {} String getName() const override { return "SourceFromInputStream"; } @@ -85,6 +85,8 @@ namespace } private: + /// Store params because aggregator must be destroyed after stream. Order is important. + AggregatingTransformParamsPtr params; BlockInputStreamPtr stream; }; } @@ -246,7 +248,7 @@ void AggregatingTransform::initGenerate() if (!params->aggregator.hasTemporaryFiles()) { auto stream = params->aggregator.mergeAndConvertToBlocks(many_data->variants, params->final, max_threads); - processors.emplace_back(std::make_shared(stream->getHeader(), std::move(stream))); + processors.emplace_back(std::make_shared(stream->getHeader(), params, std::move(stream))); } else {