| 14 | } |
| 15 | |
| 16 | ColumnPtr tryGetColumnFromBlock(const Block & block, const NameAndTypePair & requested_column) |
| 17 | { |
| 18 | const auto * elem = block.findByName(requested_column.getNameInStorage()); |
| 19 | if (!elem) |
| 20 | return nullptr; |
| 21 | |
| 22 | auto elem_type = elem->type; |
| 23 | |
| 24 | if (!elem->column) |
| 25 | return nullptr; |
| 26 | |
| 27 | auto elem_column = elem->column->decompress(); |
| 28 | |
| 29 | if (requested_column.isSubcolumn()) |
| 30 | { |
| 31 | auto subcolumn_name = requested_column.getSubcolumnName(); |
| 32 | elem_column = elem_type->tryGetSubcolumn(subcolumn_name, elem_column); |
| 33 | elem_type = elem_type->tryGetSubcolumnType(subcolumn_name); |
| 34 | |
| 35 | if (!elem_type || !elem_column) |
| 36 | return nullptr; |
| 37 | } |
| 38 | |
| 39 | return castColumn({elem_column, elem_type, ""}, requested_column.type); |
| 40 | } |
| 41 | |
| 42 | ColumnPtr tryGetSubcolumnFromBlock(const Block & block, const DataTypePtr & requested_column_type, const NameAndTypePair & requested_subcolumn) |
| 43 | { |
no test coverage detected