1
0
mirror of https://github.com/altlinux/admc.git synced 2025-02-09 17:57:28 +03:00

optimize multi-object searches

do in one search by using an OR filter
add filter_dn_list()
This commit is contained in:
kevl 2022-05-23 15:44:23 +04:00
parent 718ec0b039
commit e23bf56e0e
4 changed files with 38 additions and 12 deletions

View File

@ -118,3 +118,20 @@ QList<QString> process_subfilters(const QList<QString> &in) {
return out;
}
QString filter_dn_list(const QList<QString> &dn_list) {
const QList<QString> subfilter_list = [&]() {
QList<QString> subfilter_list_out;
for (const QString &dn : dn_list) {
const QString subfilter = filter_CONDITION(Condition_Equals, ATTRIBUTE_DN, dn);
subfilter_list_out.append(subfilter);
}
return subfilter_list_out;
}();
const QString out = filter_OR(subfilter_list);
return out;
}

View File

@ -52,4 +52,7 @@ QString add_advanced_view_filter(const QString &filter);
QString condition_to_display_string(const Condition condition);
// Filter that accepts any DN from given list
QString filter_dn_list(const QList<QString> &dn_list);
#endif /* AD_FILTER_H */

View File

@ -162,12 +162,14 @@ QModelIndex get_all_policies_folder_index(ConsoleWidget *console) {
void all_policies_folder_impl_add_objects_from_dns(ConsoleWidget *console, AdInterface &ad, const QList<QString> &dn_list, const QModelIndex &parent) {
const QList<AdObject> object_list = [&]() {
QList<AdObject> out;
const QString base = g_adconfig->policies_dn();
const SearchScope scope = SearchScope_Children;
const QString filter = filter_dn_list(dn_list);
const QList<QString> attributes = QList<QString>();
for (const QString &dn : dn_list) {
const AdObject object = ad.search_object(dn);
out.append(object);
}
const QHash<QString, AdObject> search_results = ad.search(base, scope, filter, attributes);
const QList<AdObject> out = search_results.values();
return out;
}();

View File

@ -297,16 +297,20 @@ void PolicyOUResultsWidget::reload_gplink() {
return;
}
// TODO: do this in one search using OR(dn=a,dn=b...)
const QList<AdObject> gpo_object_list = [&]() {
QList<AdObject> out;
const QString base = g_adconfig->policies_dn();
const SearchScope scope = SearchScope_Children;
const QString filter = [&]() {
const QList<QString> gpo_dn_list = gplink.get_gpo_list(g_adconfig);
const QString out = filter_dn_list(gpo_dn_list);
const QList<QString> gpo_dn_list = gplink.get_gpo_list(g_adconfig);
return out;
}();
const QList<QString> attributes = QList<QString>();
for (const QString &dn : gpo_dn_list) {
const AdObject object = ad.search_object(dn);
out.append(object);
}
const QHash<QString, AdObject> search_results = ad.search(base, scope, filter, attributes);
const QList<AdObject> out = search_results.values();
return out;
}();