1#pragma once
2
3#include <Storages/IStorage.h>
4
5namespace DB
6{
7
8class ProxyStorage : public IStorage
9{
10public:
11 ProxyStorage(StoragePtr storage_, BlockInputStreams streams_, QueryProcessingStage::Enum to_stage_)
12 : storage(std::move(storage_)), streams(std::move(streams_)), to_stage(to_stage_) {}
13
14public:
15 std::string getName() const override { return "ProxyStorage(" + storage->getName() + ")"; }
16 std::string getTableName() const override { return storage->getTableName(); }
17
18 bool isRemote() const override { return storage->isRemote(); }
19 bool supportsSampling() const override { return storage->supportsSampling(); }
20 bool supportsFinal() const override { return storage->supportsFinal(); }
21 bool supportsPrewhere() const override { return storage->supportsPrewhere(); }
22 bool supportsReplication() const override { return storage->supportsReplication(); }
23 bool supportsDeduplication() const override { return storage->supportsDeduplication(); }
24
25 QueryProcessingStage::Enum getQueryProcessingStage(const Context & /*context*/) const override { return to_stage; }
26
27 BlockInputStreams read(
28 const Names & /*column_names*/,
29 const SelectQueryInfo & /*query_info*/,
30 const Context & /*context*/,
31 QueryProcessingStage::Enum /*processed_stage*/,
32 size_t /*max_block_size*/,
33 unsigned /*num_streams*/) override
34 {
35 return streams;
36 }
37
38 bool supportsIndexForIn() const override { return storage->supportsIndexForIn(); }
39 bool mayBenefitFromIndexForIn(const ASTPtr & left_in_operand, const Context & query_context) const override { return storage->mayBenefitFromIndexForIn(left_in_operand, query_context); }
40 ASTPtr getPartitionKeyAST() const override { return storage->getPartitionKeyAST(); }
41 ASTPtr getSortingKeyAST() const override { return storage->getSortingKeyAST(); }
42 ASTPtr getPrimaryKeyAST() const override { return storage->getPrimaryKeyAST(); }
43 ASTPtr getSamplingKeyAST() const override { return storage->getSamplingKeyAST(); }
44 Names getColumnsRequiredForPartitionKey() const override { return storage->getColumnsRequiredForPartitionKey(); }
45 Names getColumnsRequiredForSortingKey() const override { return storage->getColumnsRequiredForSortingKey(); }
46 Names getColumnsRequiredForPrimaryKey() const override { return storage->getColumnsRequiredForPrimaryKey(); }
47 Names getColumnsRequiredForSampling() const override { return storage->getColumnsRequiredForSampling(); }
48 Names getColumnsRequiredForFinal() const override { return storage->getColumnsRequiredForFinal(); }
49
50 const ColumnsDescription & getColumns() const override { return storage->getColumns(); }
51 void setColumns(ColumnsDescription columns_) override { return storage->setColumns(columns_); }
52 NameAndTypePair getColumn(const String & column_name) const override { return storage->getColumn(column_name); }
53 bool hasColumn(const String & column_name) const override { return storage->hasColumn(column_name); }
54 static StoragePtr createProxyStorage(StoragePtr storage, BlockInputStreams streams, QueryProcessingStage::Enum to_stage)
55 {
56 return std::make_shared<ProxyStorage>(std::move(storage), std::move(streams), to_stage);
57 }
58private:
59 StoragePtr storage;
60 BlockInputStreams streams;
61 QueryProcessingStage::Enum to_stage;
62};
63
64
65
66}
67