#include #include #include #include #include #include #include #include #include #include #include #include #include namespace DB { NamesAndTypesList StorageSystemSettingsProfiles::getNamesAndTypes() { NamesAndTypesList names_and_types{ {"name", std::make_shared()}, {"id", std::make_shared()}, {"storage", std::make_shared()}, {"num_elements", std::make_shared()}, {"apply_to_all", std::make_shared()}, {"apply_to_list", std::make_shared(std::make_shared())}, {"apply_to_except", std::make_shared(std::make_shared())}, }; return names_and_types; } void StorageSystemSettingsProfiles::fillData(MutableColumns & res_columns, ContextPtr context, const SelectQueryInfo &) const { context->checkAccess(AccessType::SHOW_SETTINGS_PROFILES); const auto & access_control = context->getAccessControlManager(); std::vector ids = access_control.findAll(); size_t column_index = 0; auto & column_name = assert_cast(*res_columns[column_index++]); auto & column_id = assert_cast(*res_columns[column_index++]).getData(); auto & column_storage = assert_cast(*res_columns[column_index++]); auto & column_num_elements = assert_cast(*res_columns[column_index++]).getData(); auto & column_apply_to_all = assert_cast(*res_columns[column_index++]).getData(); auto & column_apply_to_list = assert_cast(assert_cast(*res_columns[column_index]).getData()); auto & column_apply_to_list_offsets = assert_cast(*res_columns[column_index++]).getOffsets(); auto & column_apply_to_except = assert_cast(assert_cast(*res_columns[column_index]).getData()); auto & column_apply_to_except_offsets = assert_cast(*res_columns[column_index++]).getOffsets(); auto add_row = [&](const String & name, const UUID & id, const String & storage_name, const SettingsProfileElements & elements, const RolesOrUsersSet & apply_to) { column_name.insertData(name.data(), name.length()); column_id.push_back(id.toUnderType()); column_storage.insertData(storage_name.data(), storage_name.length()); column_num_elements.push_back(elements.size()); auto apply_to_ast = apply_to.toASTWithNames(access_control); column_apply_to_all.push_back(apply_to_ast->all); for (const auto & role_name : apply_to_ast->names) column_apply_to_list.insertData(role_name.data(), role_name.length()); column_apply_to_list_offsets.push_back(column_apply_to_list.size()); for (const auto & role_name : apply_to_ast->except_names) column_apply_to_except.insertData(role_name.data(), role_name.length()); column_apply_to_except_offsets.push_back(column_apply_to_except.size()); }; for (const auto & id : ids) { auto profile = access_control.tryRead(id); if (!profile) continue; auto storage = access_control.findStorage(id); if (!storage) continue; add_row(profile->getName(), id, storage->getStorageName(), profile->elements, profile->to_roles); } } }