MCPcopy Create free account
hub / github.com/ByConity/ByConity / extractNestedColumnsAndNullMap

Function extractNestedColumnsAndNullMap

src/Interpreters/NullableUtils.cpp:8–73  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6{
7
8ColumnPtr extractNestedColumnsAndNullMap(ColumnRawPtrs & key_columns, ConstNullMapPtr & null_map, const std::vector<bool> *null_safeColumns)
9{
10 ColumnPtr null_map_holder;
11
12 /* one additional null_map column was added for each null safe column, size always >= 2 */
13 if (key_columns.size() == 1)
14 {
15 auto & column = key_columns[0];
16 if (const auto * column_nullable = checkAndGetColumn<ColumnNullable>(*column))
17 {
18 null_map_holder = column_nullable->getNullMapColumnPtr();
19 null_map = &column_nullable->getNullMapData();
20 column = &column_nullable->getNestedColumn();
21 }
22 }
23 else
24 {
25 /* mapping with null_map columns for null safe columns */
26 std::vector<bool> expanded_null_safes;
27 if (null_safeColumns) {
28 for (bool b : *null_safeColumns) {
29 expanded_null_safes.push_back(false);
30 if (b)
31 expanded_null_safes.push_back(true);
32 }
33 null_safeColumns = &expanded_null_safes;
34 }
35
36 for (size_t n = 0; n < key_columns.size(); n++)
37 {
38 auto & column = key_columns[n];
39
40 /* do not construct null_map for null safe column */
41 if (const auto * column_nullable = checkAndGetColumn<ColumnNullable>(*column))
42 {
43 column = &column_nullable->getNestedColumn();
44
45 if (!null_map_holder)
46 {
47 if (null_safeColumns && (*null_safeColumns)[n])
48 null_map_holder = ColumnUInt8::create(column->size(), 0);
49 else
50 null_map_holder = column_nullable->getNullMapColumnPtr();
51 }
52 else
53 {
54 if (null_safeColumns && (*null_safeColumns)[n])
55 continue;
56
57 MutableColumnPtr mutable_null_map_holder = IColumn::mutate(std::move(null_map_holder));
58
59 PaddedPODArray<UInt8> & mutable_null_map = assert_cast<ColumnUInt8 &>(*mutable_null_map_holder).getData();
60 const PaddedPODArray<UInt8> & other_null_map = column_nullable->getNullMapData();
61 for (size_t i = 0, size = mutable_null_map.size(); i < size; ++i)
62 mutable_null_map[i] |= other_null_map[i];
63
64 null_map_holder = std::move(mutable_null_map_holder);
65 }

Callers 10

setHeaderMethod · 0.85
insertFromBlockMethod · 0.85
markDistinctBlockMethod · 0.85
executeMethod · 0.85
addJoinedBlockMethod · 0.85
joinBlockImplMethod · 0.85
setGetNumberImplMethod · 0.85
setCheckImplMethod · 0.85
setGetNumberImplMethod · 0.85

Calls 5

getNullMapColumnPtrMethod · 0.80
createFunction · 0.50
sizeMethod · 0.45
push_backMethod · 0.45
getDataMethod · 0.45

Tested by

no test coverage detected