From 7411fcc907c65513dcb3895aa339007d3ac36aed Mon Sep 17 00:00:00 2001 From: Vasily Nemkov Date: Tue, 28 Nov 2023 12:12:23 +0100 Subject: [PATCH] Filtering of profile UUIDs for SettingsProfilesInfo --- src/Access/SettingsProfilesCache.cpp | 12 ++++++++++-- src/Access/SettingsProfilesCache.h | 6 +++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/Access/SettingsProfilesCache.cpp b/src/Access/SettingsProfilesCache.cpp index f03e68ba455..11cb3a79926 100644 --- a/src/Access/SettingsProfilesCache.cpp +++ b/src/Access/SettingsProfilesCache.cpp @@ -4,6 +4,8 @@ #include #include +#include + namespace DB { @@ -141,7 +143,7 @@ void SettingsProfilesCache::mergeSettingsAndConstraintsFor(EnabledSettings & ena auto info = std::make_shared(access_control); info->profiles = merged_settings.toProfileIDs(); - substituteProfiles(merged_settings, info->profiles_with_implicit, info->names_of_profiles); + substituteProfiles(merged_settings, info->profiles, info->profiles_with_implicit, info->names_of_profiles); info->settings = merged_settings.toSettingsChanges(); info->constraints = merged_settings.toSettingsConstraints(access_control); @@ -152,6 +154,7 @@ void SettingsProfilesCache::mergeSettingsAndConstraintsFor(EnabledSettings & ena void SettingsProfilesCache::substituteProfiles( SettingsProfileElements & elements, + std::vector & profiles, std::vector & substituted_profiles, std::unordered_map & names_of_substituted_profiles) const { @@ -184,6 +187,11 @@ void SettingsProfilesCache::substituteProfiles( names_of_substituted_profiles.emplace(profile_id, profile->getName()); } std::reverse(substituted_profiles.begin(), substituted_profiles.end()); + + boost::range::remove_erase_if(profiles, [&substituted_profiles_set](const UUID & profile_id) + { + return !substituted_profiles_set.contains(profile_id); + }); } std::shared_ptr SettingsProfilesCache::getEnabledSettings( @@ -231,7 +239,7 @@ std::shared_ptr SettingsProfilesCache::getSettingsPr info->profiles.push_back(profile_id); info->profiles_with_implicit.push_back(profile_id); - substituteProfiles(elements, info->profiles_with_implicit, info->names_of_profiles); + substituteProfiles(elements, info->profiles, info->profiles_with_implicit, info->names_of_profiles); info->settings = elements.toSettingsChanges(); info->constraints.merge(elements.toSettingsConstraints(access_control)); diff --git a/src/Access/SettingsProfilesCache.h b/src/Access/SettingsProfilesCache.h index 28914596ccc..afc3c3e13a5 100644 --- a/src/Access/SettingsProfilesCache.h +++ b/src/Access/SettingsProfilesCache.h @@ -37,7 +37,11 @@ private: void profileRemoved(const UUID & profile_id); void mergeSettingsAndConstraints(); void mergeSettingsAndConstraintsFor(EnabledSettings & enabled) const; - void substituteProfiles(SettingsProfileElements & elements, std::vector & substituted_profiles, std::unordered_map & names_of_substituted_profiles) const; + + void substituteProfiles(SettingsProfileElements & elements, + std::vector & profiles, + std::vector & substituted_profiles, + std::unordered_map & names_of_substituted_profiles) const; const AccessControl & access_control; std::unordered_map all_profiles;