#include #include #include namespace DB { namespace ErrorCodes { } StorageSystemDisks::StorageSystemDisks(const std::string & name_) : IStorage({"system", name_}) { setColumns(ColumnsDescription( { {"name", std::make_shared()}, {"path", std::make_shared()}, {"free_space", std::make_shared()}, {"total_space", std::make_shared()}, {"keep_free_space", std::make_shared()}, })); } Pipes StorageSystemDisks::read( const Names & column_names, const SelectQueryInfo & /*query_info*/, const Context & context, QueryProcessingStage::Enum /*processed_stage*/, const size_t /*max_block_size*/, const unsigned /*num_streams*/) { check(column_names); MutableColumnPtr col_name = ColumnString::create(); MutableColumnPtr col_path = ColumnString::create(); MutableColumnPtr col_free = ColumnUInt64::create(); MutableColumnPtr col_total = ColumnUInt64::create(); MutableColumnPtr col_keep = ColumnUInt64::create(); const auto & disk_selector = context.getDiskSelector(); for (const auto & [disk_name, disk_ptr] : disk_selector->getDisksMap()) { col_name->insert(disk_name); col_path->insert(disk_ptr->getPath()); col_free->insert(disk_ptr->getAvailableSpace()); col_total->insert(disk_ptr->getTotalSpace()); col_keep->insert(disk_ptr->getKeepingFreeSpace()); } Columns res_columns; res_columns.emplace_back(std::move(col_name)); res_columns.emplace_back(std::move(col_path)); res_columns.emplace_back(std::move(col_free)); res_columns.emplace_back(std::move(col_total)); res_columns.emplace_back(std::move(col_keep)); UInt64 num_rows = res_columns.at(0)->size(); Chunk chunk(std::move(res_columns), num_rows); Pipes pipes; pipes.emplace_back(std::make_shared(getSampleBlock(), std::move(chunk))); return pipes; } }