#include #include #include #include #include #include #include #include #include #include #include #include namespace DB { static Block getSampleBlock() { ColumnsWithTypeAndName columns{ ColumnWithTypeAndName{std::make_shared(), "max_size"}, ColumnWithTypeAndName{std::make_shared(), "max_elements"}, ColumnWithTypeAndName{std::make_shared(), "max_file_segment_size"}, ColumnWithTypeAndName{std::make_shared(), "boundary_alignment"}, ColumnWithTypeAndName{std::make_shared>(), "cache_on_write_operations"}, ColumnWithTypeAndName{std::make_shared>(), "cache_hits_threshold"}, ColumnWithTypeAndName{std::make_shared(), "current_size"}, ColumnWithTypeAndName{std::make_shared(), "current_elements"}, ColumnWithTypeAndName{std::make_shared(), "path"}, ColumnWithTypeAndName{std::make_shared>(), "background_download_threads"}, ColumnWithTypeAndName{std::make_shared>(), "background_download_queue_size_limit"}, ColumnWithTypeAndName{std::make_shared>(), "enable_bypass_cache_with_threshold"}, ColumnWithTypeAndName{std::make_shared>(), "load_metadata_threads"}, }; return Block(columns); } BlockIO InterpreterDescribeCacheQuery::execute() { getContext()->checkAccess(AccessType::SHOW_FILESYSTEM_CACHES); const auto & ast = query_ptr->as(); Block sample_block = getSampleBlock(); MutableColumns res_columns = sample_block.cloneEmptyColumns(); auto cache_data = FileCacheFactory::instance().getByName(ast.cache_name); auto settings = cache_data->getSettings(); const auto & cache = cache_data->cache; size_t i = 0; res_columns[i++]->insert(settings.max_size); res_columns[i++]->insert(settings.max_elements); res_columns[i++]->insert(settings.max_file_segment_size); res_columns[i++]->insert(settings.boundary_alignment); res_columns[i++]->insert(settings.cache_on_write_operations); res_columns[i++]->insert(settings.cache_hits_threshold); res_columns[i++]->insert(cache->getUsedCacheSize()); res_columns[i++]->insert(cache->getFileSegmentsNum()); res_columns[i++]->insert(cache->getBasePath()); res_columns[i++]->insert(settings.background_download_threads); res_columns[i++]->insert(settings.background_download_queue_size_limit); res_columns[i++]->insert(settings.enable_bypass_cache_with_threshold); res_columns[i++]->insert(settings.load_metadata_threads); BlockIO res; size_t num_rows = res_columns[0]->size(); auto source = std::make_shared(sample_block, Chunk(std::move(res_columns), num_rows)); res.pipeline = QueryPipeline(std::move(source)); return res; } void registerInterpreterDescribeCacheQuery(InterpreterFactory & factory) { auto create_fn = [] (const InterpreterFactory::Arguments & args) { return std::make_unique(args.query, args.context); }; factory.registerInterpreter("InterpreterDescribeCacheQuery", create_fn); } }