25
1
mirror of https://github.com/processone/ejabberd.git synced 2024-12-24 17:29:28 +01:00

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

This commit is contained in:
colm 2018-09-10 00:08:00 +01:00
parent 2d246f61dd
commit b0b188aa68

View File

@ -303,10 +303,10 @@ get_jid_info({Subscription, Ask, Groups}, User, Server,
US1 = {U1, S1}, US1 = {U1, S1},
DisplayedGroups = get_user_displayed_groups(US), DisplayedGroups = get_user_displayed_groups(US),
SRUsers = lists:foldl(fun (Group, Acc1) -> SRUsers = lists:foldl(fun (Group, Acc1) ->
GroupName = get_group_name(LServer, Group),
lists:foldl(fun (User1, Acc2) -> lists:foldl(fun (User1, Acc2) ->
dict:append(User1, dict:append(User1,
get_group_name(LServer, GroupName,
Group),
Acc2) Acc2)
end, end,
Acc1, 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 list of names of groups that have @all@/@online@/etc in the memberlist
get_special_users_groups(Host) -> get_special_users_groups(Host) ->
lists:filter(fun (Group) -> lists:filtermap(fun ({Group, Opts}) ->
get_group_opt(Host, Group, all_users, false) orelse case proplists:get_value(all_users, Opts, false) orelse
get_group_opt(Host, Group, online_users, false) proplists:get_value(online_users, Opts, false) of
true -> {true, Group};
false -> false
end
end, end,
list_groups(Host)). groups_with_opts(Host)).
%% Get list of names of groups that have @online@ in the memberlist %% Get list of names of groups that have @online@ in the memberlist
get_special_users_groups_online(Host) -> get_special_users_groups_online(Host) ->
lists:filter(fun (Group) -> lists:filtermap(fun ({Group, Opts}) ->
get_group_opt(Host, Group, online_users, false) case proplists:get_value(online_users, Opts, false) of
true -> {true, Group};
false -> false
end
end, end,
list_groups(Host)). groups_with_opts(Host)).
%% Given two lists of groupnames and their options, %% Given two lists of groupnames and their options,
%% return the list of displayed groups to the second list %% return the list of displayed groups to the second list