ClickHouse
43 строки · 1.4 Кб
1#include <Processors/QueryPlan/ReadFromStreamLikeEngine.h>
2
3#include <Interpreters/InterpreterSelectQuery.h>
4#include <QueryPipeline/QueryPipelineBuilder.h>
5
6namespace DB
7{
8
9namespace ErrorCodes
10{
11extern const int QUERY_NOT_ALLOWED;
12}
13
14ReadFromStreamLikeEngine::ReadFromStreamLikeEngine(
15const Names & column_names_,
16const StorageSnapshotPtr & storage_snapshot_,
17std::shared_ptr<const StorageLimitsList> storage_limits_,
18ContextPtr context_)
19: ISourceStep{DataStream{.header = storage_snapshot_->getSampleBlockForColumns(column_names_)}}
20, WithContext{context_}
21, storage_limits{std::move(storage_limits_)}
22{
23}
24
25void ReadFromStreamLikeEngine::initializePipeline(QueryPipelineBuilder & pipeline, const BuildQueryPipelineSettings &)
26{
27if (!getContext()->getSettingsRef().stream_like_engine_allow_direct_select)
28throw Exception(
29ErrorCodes::QUERY_NOT_ALLOWED, "Direct select is not allowed. To enable use setting `stream_like_engine_allow_direct_select`");
30
31auto pipe = makePipe();
32
33/// Add storage limits.
34for (const auto & processor : pipe.getProcessors())
35processor->setStorageLimits(storage_limits);
36
37/// Add to processors to get processor info through explain pipeline statement.
38for (const auto & processor : pipe.getProcessors())
39processors.emplace_back(processor);
40
41pipeline.init(std::move(pipe));
42}
43}
44