1 | #pragma once |
2 | |
3 | #include <Interpreters/IJoin.h> |
4 | |
5 | namespace DB |
6 | { |
7 | |
8 | struct ColumnWithTypeAndName; |
9 | class Block; |
10 | class IColumn; |
11 | using ColumnRawPtrs = std::vector<const IColumn *>; |
12 | |
13 | namespace JoinCommon |
14 | { |
15 | |
16 | void convertColumnToNullable(ColumnWithTypeAndName & column); |
17 | void convertColumnsToNullable(Block & block, size_t starting_pos = 0); |
18 | void removeColumnNullability(ColumnWithTypeAndName & column); |
19 | Columns materializeColumns(const Block & block, const Names & names); |
20 | ColumnRawPtrs materializeColumnsInplace(Block & block, const Names & names); |
21 | ColumnRawPtrs getRawPointers(const Columns & columns); |
22 | void removeLowCardinalityInplace(Block & block); |
23 | |
24 | /// Split key and other columns by keys name list |
25 | ColumnRawPtrs (const Names & key_names_right, const Block & right_sample_block, |
26 | Block & sample_block_with_keys, Block & sample_block_with_columns_to_add); |
27 | |
28 | /// Throw an exception if blocks have different types of key columns. Compare up to Nullability. |
29 | void checkTypesOfKeys(const Block & block_left, const Names & key_names_left, const Block & block_right, const Names & key_names_right); |
30 | |
31 | void createMissedColumns(Block & block); |
32 | void joinTotals(const Block & totals, const Block & columns_to_add, const Names & key_names_right, Block & block); |
33 | |
34 | } |
35 | |
36 | } |
37 | |