X-Git-Url: http://git.euphorik.ch/?p=euphorik.git;a=blobdiff_plain;f=modules%2Ferl%2Feuphorik_bd.erl;h=f1d5a601e6cc7db50dcc9cff5aeb2983cdb3e2e8;hp=7d5c79cac5eafb14a99a82860be9a552f07c9ea1;hb=861bc33f2a9d811fd6a60b11929ef74e2404848d;hpb=75cd78e0253509fad9c3cbfadda4a1c193c2b6e0 diff --git a/modules/erl/euphorik_bd.erl b/modules/erl/euphorik_bd.erl index 7d5c79c..f1d5a60 100755 --- a/modules/erl/euphorik_bd.erl +++ b/modules/erl/euphorik_bd.erl @@ -79,7 +79,8 @@ elire_troll/0, % utiles : - resultat_transaction/1 + resultat_transaction/1, + get_tuples/3 % must be in a transaction ]). -import(qlc, [e/2, q/1, cursor/2]). -include("../include/euphorik_bd.hrl"). @@ -373,23 +374,22 @@ messages(N) -> messages(N, P) -> F = fun() -> % % #minichat{contenu = contenu_message(E)} - get_tuples_avant(minichat, reculer(minichat, mnesia:last(minichat), N * (P - 1)), N) + get_tuples(minichat, mnesia:table_info(minichat, size) - N * P + 1, N) end, resultat_transaction(mnesia:transaction(F)). -get_tuples_avant(Table, Id, N) -> - get_tuples_avant(Table, Id, N, []). -get_tuples_avant(_, '$end_of_table', _, Tuples) -> Tuples; -get_tuples_avant(_, _, 0, Tuples) -> - Tuples; -get_tuples_avant(Table, Id, N, Tuples) -> - [T] = mnesia:read({Table, Id}), - get_tuples_avant(Table, mnesia:prev(Table, Id), N - 1, [T | Tuples]). -reculer(_, '$end_of_table' = Fin, _) -> Fin; -reculer(_, Id, 0) -> Id; -reculer(Table, Id, N) -> - reculer(Table, mnesia:prev(Table, Id), N - 1). +get_tuples(Table, First_id, N) -> + lists:foldr( + fun(Id, Acc) -> + case mnesia:read({Table, Id}) of + [T] -> [T | Acc]; + _ -> Acc + end + end, + [], + lists:seq(First_id, First_id + N - 1) + ). % Renvoie les messages manquants pour la page P en sachant qu'il y a N message