From: colm Date: Sun, 9 Sep 2018 23:08:00 +0000 (+0100) Subject: remove some chatty SQL queries by pulling back all groups with opts and filtering... X-Git-Tag: 19.02~73^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b0b188aa685e7e7dbddbb060b0e6b58e7380366e;p=ejabberd remove some chatty SQL queries by pulling back all groups with opts and filtering in memory. move a call to get_group_name outside of a loop to eliminate redundant repeated queries --- diff --git a/src/mod_shared_roster.erl b/src/mod_shared_roster.erl index 79b782e17..4cfaf48f7 100644 --- a/src/mod_shared_roster.erl +++ b/src/mod_shared_roster.erl @@ -303,10 +303,10 @@ get_jid_info({Subscription, Ask, Groups}, User, Server, US1 = {U1, S1}, DisplayedGroups = get_user_displayed_groups(US), SRUsers = lists:foldl(fun (Group, Acc1) -> + GroupName = get_group_name(LServer, Group), lists:foldl(fun (User1, Acc2) -> dict:append(User1, - get_group_name(LServer, - Group), + GroupName, Acc2) end, Acc1, @@ -451,18 +451,24 @@ get_group_name(Host1, Group1) -> %% Get list of names of groups that have @all@/@online@/etc in the memberlist get_special_users_groups(Host) -> - lists:filter(fun (Group) -> - get_group_opt(Host, Group, all_users, false) orelse - get_group_opt(Host, Group, online_users, false) - end, - list_groups(Host)). + lists:filtermap(fun ({Group, Opts}) -> + case proplists:get_value(all_users, Opts, false) orelse + proplists:get_value(online_users, Opts, false) of + true -> {true, Group}; + false -> false + end + end, + groups_with_opts(Host)). %% Get list of names of groups that have @online@ in the memberlist get_special_users_groups_online(Host) -> - lists:filter(fun (Group) -> - get_group_opt(Host, Group, online_users, false) - end, - list_groups(Host)). + lists:filtermap(fun ({Group, Opts}) -> + case proplists:get_value(online_users, Opts, false) of + true -> {true, Group}; + false -> false + end + end, + groups_with_opts(Host)). %% Given two lists of groupnames and their options, %% return the list of displayed groups to the second list