aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/clickhouse/src/Dictionaries/DictionaryHelpers.cpp
blob: b54b9eabfb6414bbe70d137605338791dfbfb433 (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
#include "DictionaryHelpers.h"

namespace DB
{

MutableColumns deserializeColumnsFromKeys(
    const DictionaryStructure & dictionary_structure,
    const PaddedPODArray<StringRef> & keys,
    size_t start,
    size_t end)
{
    MutableColumns result_columns;
    result_columns.reserve(dictionary_structure.key->size());

    for (const DictionaryAttribute & attribute : *dictionary_structure.key)
        result_columns.emplace_back(attribute.type->createColumn());

    for (size_t index = start; index < end; ++index)
    {
        const auto & key = keys[index];
        const auto * ptr = key.data;

        for (auto & result_column : result_columns)
            ptr = result_column->deserializeAndInsertFromArena(ptr);
    }

    return result_columns;
}

ColumnsWithTypeAndName deserializeColumnsWithTypeAndNameFromKeys(
    const DictionaryStructure & dictionary_structure,
    const PaddedPODArray<StringRef> & keys,
    size_t start,
    size_t end)
{
    ColumnsWithTypeAndName result;
    MutableColumns columns = deserializeColumnsFromKeys(dictionary_structure, keys, start, end);

    for (size_t i = 0, num_columns = columns.size(); i < num_columns; ++i)
    {
        const auto & dictionary_attribute = (*dictionary_structure.key)[i];
        result.emplace_back(ColumnWithTypeAndName{std::move(columns[i]), dictionary_attribute.type, dictionary_attribute.name});
    }

    return result;
}

}