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

Function mixNumberColumns

src/Processors/Transforms/AddingDefaultsTransform.cpp:70–118  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

68}
69
70static void mixNumberColumns(
71 TypeIndex type_idx,
72 MutableColumnPtr & column_mixed,
73 const ColumnPtr & col_defaults,
74 const BlockMissingValues::RowsBitMask & defaults_mask)
75{
76 auto call = [&](const auto & types)
77 {
78 using Types = std::decay_t<decltype(types)>;
79 using DataType = typename Types::LeftType;
80
81 if constexpr (!std::is_same_v<DataType, DataTypeString> && !std::is_same_v<DataType, DataTypeFixedString>)
82 {
83 using FieldType = typename DataType::FieldType;
84 using ColVecType = std::conditional_t<IsDecimalNumber<FieldType>, ColumnDecimal<FieldType>, ColumnVector<FieldType>>;
85
86 auto col_read = typeid_cast<ColVecType *>(column_mixed.get());
87 if (!col_read)
88 return false;
89
90 typename ColVecType::Container & dst = col_read->getData();
91
92 if (auto const_col_defs = checkAndGetColumnConst<ColVecType>(col_defaults.get()))
93 {
94 FieldType value = checkAndGetColumn<ColVecType>(const_col_defs->getDataColumnPtr().get())->getData()[0];
95
96 for (size_t i = 0; i < defaults_mask.size(); ++i)
97 if (defaults_mask[i])
98 dst[i] = value;
99
100 return true;
101 }
102 else if (auto col_defs = checkAndGetColumn<ColVecType>(col_defaults.get()))
103 {
104 auto & src = col_defs->getData();
105 for (size_t i = 0; i < defaults_mask.size(); ++i)
106 if (defaults_mask[i])
107 dst[i] = src[i];
108
109 return true;
110 }
111 }
112
113 return false;
114 };
115
116 if (!callOnIndexAndDataType<void>(type_idx, call))
117 throw Exception("Unexpected type on mixNumberColumns", ErrorCodes::LOGICAL_ERROR);
118}
119
120static MutableColumnPtr mixColumns(const ColumnWithTypeAndName & col_read,
121 const ColumnWithTypeAndName & col_defaults,

Callers 1

transformMethod · 0.85

Calls 4

ExceptionClass · 0.50
getMethod · 0.45
getDataMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected