Correctly handle empty result with RSM

Fixes #2588
This commit is contained in:
Evgeniy Khramtsov 2018-09-02 00:37:07 +03:00
parent 88d0b71d58
commit 5c931d7004
1 changed files with 39 additions and 33 deletions

View File

@ -738,8 +738,11 @@ get_items(Nidx, _From, undefined) ->
get_items(Nidx, _From, #rsm_set{max = Max, index = IncIndex,
'after' = After, before = Before}) ->
RItems = lists:keysort(#pubsub_item.creation,
mnesia:index_read(pubsub_item, Nidx, #pubsub_item.nodeidx)),
case lists:keysort(#pubsub_item.creation,
mnesia:index_read(pubsub_item, Nidx, #pubsub_item.nodeidx)) of
[] ->
{result, {[], #rsm_set{count = 0}}};
RItems ->
Count = length(RItems),
Limit = case Max of
undefined -> ?MAXITEMS;
@ -770,7 +773,8 @@ get_items(Nidx, _From, #rsm_set{max = Max, index = IncIndex,
{0, lists:sublist(SubList, Limit)}
end,
Rsm = rsm_page(Count, IncIndex, Offset, ItemsPage),
{result, {ItemsPage, Rsm}}.
{result, {ItemsPage, Rsm}}
end.
get_items(Nidx, JID, AccessModel, PresenceSubscription, RosterGroup, _SubId, RSM) ->
SubKey = jid:tolower(JID),
@ -920,6 +924,8 @@ first_in_list(Pred, [H | T]) ->
_ -> first_in_list(Pred, T)
end.
rsm_page(Count, _, _, []) ->
#rsm_set{count = Count};
rsm_page(Count, Index, Offset, Items) ->
FirstItem = hd(Items),
LastItem = lists:last(Items),