ClickHouse/dbms/src/Processors/Transforms/AddingConstColumnTransform.h
2019-10-04 20:49:14 +03:00

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;
};
}