mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-10-11 11:00:48 +00:00
41 lines
1.1 KiB
C++
41 lines
1.1 KiB
C++
|
#pragma once
|
||
|
#include <Processors/ISimpleTransform.h>
|
||
|
|
||
|
namespace DB
|
||
|
{
|
||
|
|
||
|
/// Adds a materialized const column to the chunk with a specified value.
|
||
|
template <typename T>
|
||
|
class AddingConstColumnTransform : public ISimpleTransform
|
||
|
{
|
||
|
public:
|
||
|
AddingConstColumnTransform(const Block & header, DataTypePtr data_type_, T value_, const String & column_name_)
|
||
|
: ISimpleTransform(header, addColumn(header, data_type_, column_name_), false)
|
||
|
, data_type(std::move(data_type_)), value(value_) {}
|
||
|
|
||
|
String getName() const override { return "AddingConstColumnTransform"; }
|
||
|
|
||
|
protected:
|
||
|
void transform(Chunk & chunk) override
|
||
|
{
|
||
|
auto num_rows = chunk.getNumRows();
|
||
|
auto columns = chunk.detachColumns();
|
||
|
|
||
|
columns.emplace_back(data_type->createColumnConst(num_rows, value)->convertToFullColumnIfConst());
|
||
|
|
||
|
chunk.setColumns(std::move(columns), num_rows);
|
||
|
}
|
||
|
|
||
|
private:
|
||
|
static Block addColumn(Block header, const DataTypePtr & data_type, const String & column_name)
|
||
|
{
|
||
|
header.insert({data_type->createColumn(), data_type, column_name});
|
||
|
return header;
|
||
|
}
|
||
|
|
||
|
DataTypePtr data_type;
|
||
|
T value;
|
||
|
};
|
||
|
|
||
|
}
|