diff --git a/include/ircd/db/column.h b/include/ircd/db/column.h index c0b194309..c72b3eef8 100644 --- a/include/ircd/db/column.h +++ b/include/ircd/db/column.h @@ -19,6 +19,7 @@ namespace ircd::db uint32_t id(const column &); const std::string &name(const column &); const descriptor &describe(const column &); + std::vector files(const column &); size_t file_count(const column &); size_t bytes(const column &); diff --git a/ircd/db.cc b/ircd/db.cc index faa7e577d..fc29d328b 100644 --- a/ircd/db.cc +++ b/ircd/db.cc @@ -7324,6 +7324,28 @@ ircd::db::describe(const column &column) return describe(c); } +std::vector +ircd::db::files(const column &column) +{ + database::column &c(const_cast(column)); + database &d(*c.d); + + rocksdb::ColumnFamilyMetaData cfmd; + d.d->GetColumnFamilyMetaData(c, &cfmd); + + size_t count(0); + for(const auto &level : cfmd.levels) + count += level.files.size(); + + std::vector ret; + ret.reserve(count); + for(auto &level : cfmd.levels) + for(auto &file : level.files) + ret.emplace_back(std::move(file.name)); + + return ret; +} + void ircd::db::sort(column &column, const bool &blocking)