| 1009 | } |
| 1010 | |
| 1011 | UInt64 getColumnsCommitTimeForJSONTable(const IStorage & table, const NamesAndTypesList & search_part_columns) |
| 1012 | { |
| 1013 | Names exclude_column_names; |
| 1014 | for (const auto & column : table.getInMemoryMetadata().columns) |
| 1015 | { |
| 1016 | if (column.type->hasDynamicSubcolumns()) |
| 1017 | exclude_column_names.emplace_back(column.name); |
| 1018 | } |
| 1019 | |
| 1020 | auto exclude_json_column = [&](const NamesAndTypesList & columns) -> NamesAndTypesList { |
| 1021 | NamesAndTypesList res; |
| 1022 | for (const auto & column : columns) |
| 1023 | { |
| 1024 | if (std::find(exclude_column_names.begin(), exclude_column_names.end(), column.name) == exclude_column_names.end()) |
| 1025 | res.push_back(column); |
| 1026 | } |
| 1027 | return res; |
| 1028 | }; |
| 1029 | |
| 1030 | auto search_part_columns_excluded_json = exclude_json_column(search_part_columns); |
| 1031 | |
| 1032 | if (search_part_columns_excluded_json == exclude_json_column(*table.part_columns)) |
| 1033 | return table.commit_time.toUInt64(); |
| 1034 | for (const auto & version : table.previous_versions_part_columns) |
| 1035 | { |
| 1036 | if (search_part_columns_excluded_json == exclude_json_column(*version.second)) |
| 1037 | return version.first; |
| 1038 | } |
| 1039 | return 0; |
| 1040 | } |
| 1041 | } |
no test coverage detected