#include "StorageSystemNamedCollections.h" #include #include #include #include #include #include #include #include #include namespace DB { NamesAndTypesList StorageSystemNamedCollections::getNamesAndTypes() { return { {"name", std::make_shared()}, {"collection", std::make_shared(std::make_shared(), std::make_shared())}, }; } StorageSystemNamedCollections::StorageSystemNamedCollections(const StorageID & table_id_) : IStorageSystemOneBlock(table_id_) { } void StorageSystemNamedCollections::fillData(MutableColumns & res_columns, ContextPtr context, const SelectQueryInfo &) const { context->checkAccess(AccessType::SHOW_NAMED_COLLECTIONS); auto collections = NamedCollectionFactory::instance().getAll(); for (const auto & [name, collection] : collections) { res_columns[0]->insert(name); auto * column_map = typeid_cast(res_columns[1].get()); auto & offsets = column_map->getNestedColumn().getOffsets(); auto & tuple_column = column_map->getNestedData(); auto & key_column = tuple_column.getColumn(0); auto & value_column = tuple_column.getColumn(1); size_t size = 0; for (const auto & [key, value] : collection->dumpStructure()) { key_column.insertData(key.data(), key.size()); value_column.insert(convertFieldToString(value)); size++; } offsets.push_back(offsets.back() + size); } } }