| 784 | } |
| 785 | |
| 786 | std::pair<ColumnPtr, DataTypePtr> unflattenObjectToTuple(const ColumnObject & column) |
| 787 | { |
| 788 | const auto & subcolumns = column.getSubcolumns(); |
| 789 | |
| 790 | if (subcolumns.empty()) |
| 791 | { |
| 792 | auto type = std::make_shared<DataTypeTuple>( |
| 793 | DataTypes{std::make_shared<DataTypeUInt8>()}, |
| 794 | Names{ColumnObject::COLUMN_NAME_DUMMY}); |
| 795 | |
| 796 | return {type->createColumn()->cloneResized(column.size()), type}; |
| 797 | } |
| 798 | |
| 799 | PathsInData paths; |
| 800 | DataTypes types; |
| 801 | Columns columns; |
| 802 | |
| 803 | paths.reserve(subcolumns.size()); |
| 804 | types.reserve(subcolumns.size()); |
| 805 | columns.reserve(subcolumns.size()); |
| 806 | |
| 807 | for (const auto & entry : subcolumns) |
| 808 | { |
| 809 | paths.emplace_back(entry->path); |
| 810 | types.emplace_back(entry->data.getLeastCommonType()); |
| 811 | columns.emplace_back(entry->data.getFinalizedColumnPtr()); |
| 812 | } |
| 813 | |
| 814 | return unflattenTuple(paths, types, columns); |
| 815 | } |
| 816 | |
| 817 | std::pair<ColumnPtr, DataTypePtr> unflattenTuple( |
| 818 | const PathsInData & paths, |
no test coverage detected