aboutsummaryrefslogtreecommitdiffstats
path: root/yt/yt/library/column_converters/null_column_converter.cpp
blob: f76886ec9806c9655e98ec2150e9aa437109a70e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "null_column_converter.h"

#include <yt/yt/client/table_client/logical_type.h>

namespace NYT::NColumnConverters {

using namespace NTableClient;

////////////////////////////////////////////////////////////////////////////////

class TNullColumnWriterConverter
    : public IColumnConverter
{
public:
    TNullColumnWriterConverter(int columnIndex)
        : ColumnIndex_(columnIndex)
    { }

    TConvertedColumn Convert(TRange<TUnversionedRowValues> rowsValues) override
    {
        auto rowCount = rowsValues.size();

        auto column = std::make_shared<TBatchColumn>();

        column->Id = ColumnIndex_;
        column->Type = SimpleLogicalType(ESimpleLogicalValueType::Null);
        column->ValueCount = rowCount;

        TOwningColumn owner = {
            .Column = std::move(column),
        };

        return {{owner}, owner.Column.get()};
    }

private:
    const int ColumnIndex_;
};

////////////////////////////////////////////////////////////////////////////////

IColumnConverterPtr CreateNullConverter(int columnIndex)
{
    return std::make_unique<TNullColumnWriterConverter>(columnIndex);
}

////////////////////////////////////////////////////////////////////////////////

} // namespace NYT::NColumnConverters