REPORT de la branche 1.1 : 477->494
[euphorik.git] / modules / erl / euphorik_bd.erl
index 4fecb73..f1d5a60 100755 (executable)
@@ -79,7 +79,8 @@
    elire_troll/0,\r
    \r
    % utiles :\r
-   resultat_transaction/1\r
+   resultat_transaction/1,
+   get_tuples/3 % must be in a transaction\r
 ]).\r
 -import(qlc, [e/2, q/1, cursor/2]).\r
 -include("../include/euphorik_bd.hrl").\r
@@ -373,23 +374,22 @@ messages(N) ->
 messages(N, P) ->\r
    F = fun() ->
       % % #minichat{contenu = contenu_message(E)}
-      get_tuples_avant(minichat, reculer(minichat, mnesia:last(minichat), N * (P - 1)), N)     \r
+      get_tuples(minichat, mnesia:table_info(minichat, size) - N * P + 1, N)\r
    end,\r
    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)
+   ).
    \r
 \r
 % Renvoie les messages manquants pour la page P en sachant qu'il y a N message\r
@@ -715,7 +715,7 @@ put_troll(User_id, Content) ->
                   Nb_troll_poste_total >= ?NB_MAX_TROLL_WAITING ->\r
                      max_troll_reached;\r
                   true ->\r
-                     Id = nouvel_id(minichat),\r
+                     Id = nouvel_id(troll),\r
                      mnesia:write(#troll{id = Id, id_user = User_id, date_create = now(), content = Content}),\r
                      Id\r
                end;\r