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

Function writeFieldsToColumn

src/Databases/MySQL/MaterializeMySQLSyncThread.cpp:379–499  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

377
378template <bool assert_nullable = false>
379static void writeFieldsToColumn(
380 IColumn & column_to, const Row & rows_data, size_t column_index, const std::vector<bool> & mask, ColumnUInt8 * null_map_column = nullptr)
381{
382 if (ColumnNullable * column_nullable = typeid_cast<ColumnNullable *>(&column_to))
383 writeFieldsToColumn<true>(column_nullable->getNestedColumn(), rows_data, column_index, mask, &column_nullable->getNullMapColumn());
384 else
385 {
386 const auto & write_data_to_null_map = [&](const Field & field, size_t row_index)
387 {
388 if (!mask.empty() && !mask.at(row_index))
389 return false;
390
391 if constexpr (assert_nullable)
392 {
393 if (field.isNull())
394 {
395 column_to.insertDefault();
396 null_map_column->insertValue(1);
397 return false;
398 }
399
400 null_map_column->insertValue(0);
401 }
402
403 return true;
404 };
405
406 const auto & write_data_to_column = [&](auto * casted_column, auto from_type, auto to_type)
407 {
408 for (size_t index = 0; index < rows_data.size(); ++index)
409 {
410 const Tuple & row_data = DB::get<const Tuple &>(rows_data[index]);
411 const Field & value = row_data[column_index];
412
413 if (write_data_to_null_map(value, index))
414 casted_column->insertValue(static_cast<decltype(to_type)>(value.template get<decltype(from_type)>()));
415 }
416 };
417
418 if (ColumnInt8 * casted_int8_column = typeid_cast<ColumnInt8 *>(&column_to))
419 write_data_to_column(casted_int8_column, UInt64(), Int8());
420 else if (ColumnInt16 * casted_int16_column = typeid_cast<ColumnInt16 *>(&column_to))
421 write_data_to_column(casted_int16_column, UInt64(), Int16());
422 else if (ColumnInt64 * casted_int64_column = typeid_cast<ColumnInt64 *>(&column_to))
423 write_data_to_column(casted_int64_column, UInt64(), Int64());
424 else if (ColumnUInt8 * casted_uint8_column = typeid_cast<ColumnUInt8 *>(&column_to))
425 write_data_to_column(casted_uint8_column, UInt64(), UInt8());
426 else if (ColumnUInt16 * casted_uint16_column = typeid_cast<ColumnUInt16 *>(&column_to))
427 write_data_to_column(casted_uint16_column, UInt64(), UInt16());
428 else if (ColumnUInt32 * casted_uint32_column = typeid_cast<ColumnUInt32 *>(&column_to))
429 write_data_to_column(casted_uint32_column, UInt64(), UInt32());
430 else if (ColumnUInt64 * casted_uint64_column = typeid_cast<ColumnUInt64 *>(&column_to))
431 write_data_to_column(casted_uint64_column, UInt64(), UInt64());
432 else if (ColumnFloat32 * casted_float32_column = typeid_cast<ColumnFloat32 *>(&column_to))
433 write_data_to_column(casted_float32_column, Float64(), Float32());
434 else if (ColumnFloat64 * casted_float64_column = typeid_cast<ColumnFloat64 *>(&column_to))
435 write_data_to_column(casted_float64_column, Float64(), Float64());
436 else if (ColumnDecimal<Decimal32> * casted_decimal_32_column = typeid_cast<ColumnDecimal<Decimal32> *>(&column_to))

Callers 2

onWriteOrDeleteDataFunction · 0.85
onUpdateDataFunction · 0.85

Calls 11

DateTime64Class · 0.85
ExceptionClass · 0.50
emptyMethod · 0.45
atMethod · 0.45
isNullMethod · 0.45
insertDefaultMethod · 0.45
insertValueMethod · 0.45
sizeMethod · 0.45
getTypeMethod · 0.45
insertDataMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected