MCPcopy Create free account
hub / github.com/ClickHouse/ClickHouse / convertBlockStructure

Function convertBlockStructure

src/Interpreters/DirectJoin.cpp:28–63  ·  view source on GitHub ↗

Converts `columns` from `source_sample_block` structure to `result_sample_block`. Can select subset of columns and change types.

Source from the content-addressed store, hash-verified

26/// Converts `columns` from `source_sample_block` structure to `result_sample_block`.
27/// Can select subset of columns and change types.
28static MutableColumns convertBlockStructure(
29 const Block & source_sample_block, const Block & result_sample_block, MutableColumns && columns, const PaddedPODArray<UInt8> & null_map)
30{
31 MutableColumns result_columns;
32 for (const auto & out_sample_col : result_sample_block)
33 {
34 /// Some columns from result_sample_block may not be in source_sample_block,
35 /// e.g. if they will be calculated later based on joined columns
36 if (!source_sample_block.has(out_sample_col.name))
37 continue;
38
39 auto i = source_sample_block.getPositionByName(out_sample_col.name);
40 if (columns[i] == nullptr)
41 {
42 throw DB::Exception(ErrorCodes::NOT_FOUND_COLUMN_IN_BLOCK, "Can't find column '{}'", out_sample_col.name);
43 }
44
45 ColumnWithTypeAndName col = source_sample_block.getByPosition(i);
46 if (!col.type->equals(*out_sample_col.type))
47 {
48 col.column = std::move(columns[i]);
49 result_columns.push_back(IColumn::mutate(castColumnAccurate(col, out_sample_col.type)));
50 }
51 else
52 {
53 result_columns.push_back(std::move(columns[i]));
54 }
55 columns[i] = nullptr;
56
57 if (result_columns.back()->isNullable())
58 {
59 assert_cast<ColumnNullable *>(result_columns.back().get())->applyNegatedNullMap(null_map);
60 }
61 }
62 return result_columns;
63}
64
65DirectKeyValueJoin::DirectKeyValueJoin(std::shared_ptr<TableJoin> table_join_,
66 const Block & right_sample_block_,

Callers 1

joinBlockMethod · 0.85

Calls 11

castColumnAccurateFunction · 0.85
ExceptionClass · 0.70
mutateFunction · 0.50
hasMethod · 0.45
getPositionByNameMethod · 0.45
equalsMethod · 0.45
push_backMethod · 0.45
isNullableMethod · 0.45
backMethod · 0.45
applyNegatedNullMapMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected