summaryrefslogtreecommitdiff
path: root/src/mod_roster_sql.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-05-17 14:47:35 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-05-17 14:47:35 +0300
commitf782955c069f1091cd56cc9d139ec0b0e2d62780 (patch)
treecbde7d13046bdc4bdc302511db04331b69d812e0 /src/mod_roster_sql.erl
parentFix use_cache/1 callback (diff)
Implement cache for roster
Diffstat (limited to 'src/mod_roster_sql.erl')
-rw-r--r--src/mod_roster_sql.erl86
1 files changed, 25 insertions, 61 deletions
diff --git a/src/mod_roster_sql.erl b/src/mod_roster_sql.erl
index 112c13a7..7c516568 100644
--- a/src/mod_roster_sql.erl
+++ b/src/mod_roster_sql.erl
@@ -30,10 +30,9 @@
%% API
-export([init/2, read_roster_version/2, write_roster_version/4,
- get_roster/2, get_roster_by_jid/3,
- roster_subscribe/4, get_roster_by_jid_with_groups/3,
- remove_user/2, update_roster/4, del_roster/3, transaction/2,
- read_subscription_and_groups/3, get_only_items/2,
+ get_roster/2, get_roster_item/3, roster_subscribe/4,
+ read_subscription_and_groups/3, remove_user/2,
+ update_roster/4, del_roster/3, transaction/2,
import/3, export/1, raw_to_record/2]).
-include("mod_roster.hrl").
@@ -48,7 +47,7 @@ init(_Host, _Opts) ->
read_roster_version(LUser, LServer) ->
case sql_queries:get_roster_version(LServer, LUser) of
- {selected, [{Version}]} -> Version;
+ {selected, [{Version}]} -> {ok, Version};
{selected, []} -> error
end.
@@ -77,55 +76,22 @@ get_roster(LUser, LServer) ->
dict:append(J, G, Acc)
end,
dict:new(), JIDGroups),
- lists:flatmap(
- fun(I) ->
- case raw_to_record(LServer, I) of
- %% Bad JID in database:
- error -> [];
- R ->
- SJID = jid:encode(R#roster.jid),
- Groups = case dict:find(SJID, GroupsDict) of
- {ok, Gs} -> Gs;
- error -> []
- end,
- [R#roster{groups = Groups}]
- end
- end, Items);
+ {ok, lists:flatmap(
+ fun(I) ->
+ case raw_to_record(LServer, I) of
+ %% Bad JID in database:
+ error -> [];
+ R ->
+ SJID = jid:encode(R#roster.jid),
+ Groups = case dict:find(SJID, GroupsDict) of
+ {ok, Gs} -> Gs;
+ error -> []
+ end,
+ [R#roster{groups = Groups}]
+ end
+ end, Items)};
_ ->
- []
- end.
-
-get_roster_by_jid(LUser, LServer, LJID) ->
- {selected, Res} =
- sql_queries:get_roster_by_jid(LServer, LUser, jid:encode(LJID)),
- case Res of
- [] ->
- #roster{usj = {LUser, LServer, LJID},
- us = {LUser, LServer}, jid = LJID};
- [I] ->
- R = raw_to_record(LServer, I),
- case R of
- %% Bad JID in database:
- error ->
- #roster{usj = {LUser, LServer, LJID},
- us = {LUser, LServer}, jid = LJID};
- _ ->
- R#roster{usj = {LUser, LServer, LJID},
- us = {LUser, LServer}, jid = LJID, name = <<"">>}
- end
- end.
-
-get_only_items(LUser, LServer) ->
- case catch sql_queries:get_roster(LServer, LUser) of
- {selected, Is} when is_list(Is) ->
- lists:flatmap(
- fun(I) ->
- case raw_to_record(LServer, I) of
- error -> [];
- R -> [R]
- end
- end, Is);
- _ -> []
+ error
end.
roster_subscribe(_LUser, _LServer, _LJID, Item) ->
@@ -135,14 +101,13 @@ roster_subscribe(_LUser, _LServer, _LJID, Item) ->
transaction(LServer, F) ->
ejabberd_sql:sql_transaction(LServer, F).
-get_roster_by_jid_with_groups(LUser, LServer, LJID) ->
+get_roster_item(LUser, LServer, LJID) ->
SJID = jid:encode(LJID),
case sql_queries:get_roster_by_jid(LServer, LUser, SJID) of
{selected, [I]} ->
case raw_to_record(LServer, I) of
error ->
- #roster{usj = {LUser, LServer, LJID},
- us = {LUser, LServer}, jid = LJID};
+ error;
R ->
Groups =
case sql_queries:get_roster_groups(LServer, LUser, SJID) of
@@ -150,16 +115,15 @@ get_roster_by_jid_with_groups(LUser, LServer, LJID) ->
[JGrp || {JGrp} <- JGrps];
_ -> []
end,
- R#roster{groups = Groups}
+ {ok, R#roster{groups = Groups}}
end;
{selected, []} ->
- #roster{usj = {LUser, LServer, LJID},
- us = {LUser, LServer}, jid = LJID}
+ error
end.
remove_user(LUser, LServer) ->
sql_queries:del_user_roster_t(LServer, LUser),
- {atomic, ok}.
+ ok.
update_roster(LUser, LServer, LJID, Item) ->
SJID = jid:encode(LJID),
@@ -194,7 +158,7 @@ read_subscription_and_groups(LUser, LServer, LJID) ->
[JGrp || {JGrp} <- JGrps];
_ -> []
end,
- {Subscription, Groups};
+ {ok, {Subscription, Groups}};
_ ->
error
end.