| 493 | } |
| 494 | |
| 495 | NamesAndTypesList collect(const NamesAndTypesList & names_and_types) |
| 496 | { |
| 497 | NamesAndTypesList res; |
| 498 | auto nested_types = getSubcolumnsOfNested(names_and_types); |
| 499 | |
| 500 | for (const auto & name_type : names_and_types) |
| 501 | { |
| 502 | auto split = splitName(name_type.name); |
| 503 | if (!isArray(name_type.type) || split.second.empty() || !nested_types.contains(split.first)) |
| 504 | res.push_back(name_type); |
| 505 | } |
| 506 | |
| 507 | for (const auto & name_type : nested_types) |
| 508 | res.emplace_back(name_type.first, name_type.second); |
| 509 | |
| 510 | return res; |
| 511 | } |
| 512 | |
| 513 | NamesAndTypesList convertToSubcolumns(const NamesAndTypesList & names_and_types) |
| 514 | { |