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:
parent
718ec0b039
commit
e23bf56e0e
@ -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;
|
||||
}
|
||||
|
@ -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 */
|
||||
|
@ -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;
|
||||
}();
|
||||
|
@ -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;
|
||||
}();
|
||||
|
Loading…
x
Reference in New Issue
Block a user