AddingDefaultBlockOutputStream.h 1.2 KB
Newer Older
S
Sergey Fedorov 已提交
1 2
#pragma once

3 4
#include <DataStreams/IBlockOutputStream.h>
#include <Columns/ColumnConst.h>
A
alesapin 已提交
5
#include <Storages/ColumnsDescription.h>
S
Sergey Fedorov 已提交
6 7 8 9 10


namespace DB
{

11 12 13
class ExpressionActions;
using ExpressionActionsPtr = std::shared_ptr<ExpressionActions>;

14
class Context;
S
Sergey Fedorov 已提交
15

A
alesapin 已提交
16 17 18 19 20
/** This stream adds three types of columns into block
  * 1. Columns, that are missed inside request, but present in table without defaults (missed columns)
  * 2. Columns, that are missed inside request, but present in table with defaults (columns with default values)
  * 3. Columns that materialized from other columns (materialized columns)
  * All three types of columns are materialized (not constants).
S
Sergey Fedorov 已提交
21 22 23 24
  */
class AddingDefaultBlockOutputStream : public IBlockOutputStream
{
public:
25
    AddingDefaultBlockOutputStream(
26
        const BlockOutputStreamPtr & output_,
27
        const Block & header_,
A
alesapin 已提交
28
        const ColumnsDescription & columns_,
29
        const Context & context_);
S
Sergey Fedorov 已提交
30

31
    Block getHeader() const override { return header; }
32
    void write(const Block & block) override;
S
Sergey Fedorov 已提交
33

34
    void flush() override;
35

36 37
    void writePrefix() override;
    void writeSuffix() override;
38

S
Sergey Fedorov 已提交
39
private:
40
    BlockOutputStreamPtr output;
A
alesapin 已提交
41
    const Block header;
N
Nikolai Kochetov 已提交
42
    ExpressionActionsPtr adding_defaults_actions;
S
Sergey Fedorov 已提交
43 44
};

45

S
Sergey Fedorov 已提交
46
}