ClickHouse/dbms/src/Processors/Executors/TreeExecutor.h

42 lines
1.2 KiB
C++
Raw Normal View History

2019-09-13 12:34:05 +00:00
#pragma once
#include <DataStreams/IBlockInputStream.h>
#include <Processors/IProcessor.h>
namespace DB
{
2019-10-04 15:40:05 +00:00
class ISourceWithProgress;
2019-09-13 12:34:05 +00:00
class TreeExecutor : public IBlockInputStream
{
public:
explicit TreeExecutor(Processors processors_) : processors(std::move(processors_)) { init(); }
String getName() const override { return root->getName(); }
Block getHeader() const override { return root->getOutputs().front().getHeader(); }
2019-10-04 15:40:05 +00:00
/// This methods does not affect TreeExecutor as IBlockInputStream itself.
/// They just passed to all SourceWithProgress processors.
void setProgressCallback(const ProgressCallback & callback) final;
void setProcessListElement(QueryStatus * elem) final;
void setLimits(const LocalLimits & limits_) final;
void setQuota(QuotaForIntervals & quota_) final;
void addTotalRowsApprox(size_t value) final;
2019-09-13 12:34:05 +00:00
protected:
Block readImpl() override;
private:
Processors processors;
IProcessor * root = nullptr;
std::unique_ptr<InputPort> port;
2019-10-04 15:40:05 +00:00
/// Remember sources that support progress.
std::vector<ISourceWithProgress *> sources_with_progress;
2019-09-13 12:34:05 +00:00
void init();
void execute();
};
}