diff --git a/dbms/src/Storages/System/StorageSystemDTLocalIndexes.cpp b/dbms/src/Storages/System/StorageSystemDTLocalIndexes.cpp index 54b1a34446a..053768a3dde 100644 --- a/dbms/src/Storages/System/StorageSystemDTLocalIndexes.cpp +++ b/dbms/src/Storages/System/StorageSystemDTLocalIndexes.cpp @@ -21,11 +21,14 @@ #include #include #include +#include +#include #include #include #include #include #include +#include namespace DB { @@ -55,6 +58,39 @@ StorageSystemDTLocalIndexes::StorageSystemDTLocalIndexes(const std::string & nam })); } +DM::LocalIndexesStats generateLocalIndexesStatsFromTableInfo(const TiDB::TableInfo & table_info) +{ + auto local_index_infos = DM::generateLocalIndexInfos(nullptr, table_info, Logger::get()); + + DM::LocalIndexesStats stats; + if (!local_index_infos) + return stats; + + for (const auto & index_info : *local_index_infos) + { + DM::LocalIndexStats index_stats; + index_stats.column_id = index_info.column_id; + index_stats.index_id = index_info.index_id; + index_stats.column_name = index_info.column_name; + index_stats.index_kind = "HNSW"; + stats.emplace_back(std::move(index_stats)); + } + return stats; +} + +std::optional getLocalIndexesStatsFromStorage(const StorageDeltaMergePtr & dm_storage) +{ + if (dm_storage->isTombstone()) + return std::nullopt; + + const auto & table_info = dm_storage->getTableInfo(); + auto store = dm_storage->getStoreIfInited(); + if (!store) + return generateLocalIndexesStatsFromTableInfo(table_info); + + return store->getLocalIndexStats(); +} + BlockInputStreams StorageSystemDTLocalIndexes::read( const Names & column_names, const SelectQueryInfo &, @@ -87,16 +123,12 @@ BlockInputStreams StorageSystemDTLocalIndexes::read( auto dm_storage = std::dynamic_pointer_cast(storage); const auto & table_info = dm_storage->getTableInfo(); - auto table_id = table_info.id; - auto store = dm_storage->getStoreIfInited(); - if (!store) - continue; + const auto table_id = table_info.id; - if (dm_storage->isTombstone()) + const auto index_stats = getLocalIndexesStatsFromStorage(dm_storage); + if (!index_stats) continue; - - auto index_stats = store->getLocalIndexStats(); - for (auto & stat : index_stats) + for (const auto & stat : *index_stats) { size_t j = 0; res_columns[j++]->insert(database_name);