#include #include #include #include #include #include namespace DB { NamesAndTypesList StorageSystemReplicatedFetches::getNamesAndTypes() { return { {"database", std::make_shared()}, {"table", std::make_shared()}, {"elapsed", std::make_shared()}, {"progress", std::make_shared()}, {"result_part_name", std::make_shared()}, {"result_part_path", std::make_shared()}, {"partition_id", std::make_shared()}, {"total_size_bytes_compressed", std::make_shared()}, {"bytes_read_compressed", std::make_shared()}, {"source_replica_path", std::make_shared()}, {"source_replica_hostname", std::make_shared()}, {"source_replica_port", std::make_shared()}, {"interserver_scheme", std::make_shared()}, {"URI", std::make_shared()}, {"to_detached", std::make_shared()}, {"thread_id", std::make_shared()}, }; } void StorageSystemReplicatedFetches::fillData(MutableColumns & res_columns, const Context & context, const SelectQueryInfo &) const { const auto access = context.getAccess(); const bool check_access_for_tables = !access->isGranted(AccessType::SHOW_TABLES); for (const auto & fetch : context.getReplicatedFetchList().get()) { if (check_access_for_tables && !access->isGranted(AccessType::SHOW_TABLES, fetch.database, fetch.table)) continue; size_t i = 0; res_columns[i++]->insert(fetch.database); res_columns[i++]->insert(fetch.table); res_columns[i++]->insert(fetch.elapsed); res_columns[i++]->insert(fetch.progress); res_columns[i++]->insert(fetch.result_part_name); res_columns[i++]->insert(fetch.result_part_path); res_columns[i++]->insert(fetch.partition_id); res_columns[i++]->insert(fetch.total_size_bytes_compressed); res_columns[i++]->insert(fetch.bytes_read_compressed); res_columns[i++]->insert(fetch.source_replica_path); res_columns[i++]->insert(fetch.source_replica_hostname); res_columns[i++]->insert(fetch.source_replica_port); res_columns[i++]->insert(fetch.interserver_scheme); res_columns[i++]->insert(fetch.uri); res_columns[i++]->insert(fetch.to_detached); res_columns[i++]->insert(fetch.thread_id); } } }