| 147 | } |
| 148 | |
| 149 | static std::pair<ColumnPtr, DataTypePtr> convertObjectColumnToTuple( |
| 150 | const ColumnObject & column_object, const DataTypeObject & type_object) |
| 151 | { |
| 152 | if (!column_object.isFinalized()) |
| 153 | { |
| 154 | auto finalized = column_object.cloneFinalized(); |
| 155 | const auto & finalized_object = assert_cast<const ColumnObject &>(*finalized); |
| 156 | return convertObjectColumnToTuple(finalized_object, type_object); |
| 157 | } |
| 158 | |
| 159 | const auto & subcolumns = column_object.getSubcolumns(); |
| 160 | |
| 161 | PathsInData tuple_paths; |
| 162 | DataTypes tuple_types; |
| 163 | Columns tuple_columns; |
| 164 | |
| 165 | for (const auto & entry : subcolumns) |
| 166 | { |
| 167 | tuple_paths.emplace_back(entry->path); |
| 168 | tuple_types.emplace_back(entry->data.getLeastCommonType()); |
| 169 | tuple_columns.emplace_back(entry->data.getFinalizedColumnPtr()); |
| 170 | } |
| 171 | |
| 172 | return unflattenTuple(tuple_paths, tuple_types, tuple_columns); |
| 173 | } |
| 174 | |
| 175 | static std::pair<ColumnPtr, DataTypePtr> recursivelyConvertDynamicColumnToTuple( |
| 176 | const ColumnPtr & column, const DataTypePtr & type) |
no test coverage detected