projects
/
euphorik.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
75cd78e
)
FIX #88 (pas testé la conversion de la BD vers la version 3)
author
Greg Burri
<greg.burri@gmail.com>
Tue, 7 Oct 2008 21:40:23 +0000
(21:40 +0000)
committer
Greg Burri
<greg.burri@gmail.com>
Tue, 7 Oct 2008 21:40:23 +0000
(21:40 +0000)
modules/erl/euphorik_bd.erl
patch
|
blob
|
history
modules/erl/euphorik_bd_admin.erl
patch
|
blob
|
history
modules/erl/euphorik_minichat_conversation.erl
patch
|
blob
|
history
modules/erl/euphorik_protocole.erl
patch
|
blob
|
history
modules/include/euphorik_bd.hrl
patch
|
blob
|
history
diff --git
a/modules/erl/euphorik_bd.erl
b/modules/erl/euphorik_bd.erl
index
7d5c79c
..
f1d5a60
100755
(executable)
--- a/
modules/erl/euphorik_bd.erl
+++ b/
modules/erl/euphorik_bd.erl
@@
-79,7
+79,8
@@
elire_troll/0,
\r
\r
% utiles :
\r
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
]).
\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)}
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)).
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
\r
\r
% Renvoie les messages manquants pour la page P en sachant qu'il y a N message
\r
diff --git
a/modules/erl/euphorik_bd_admin.erl
b/modules/erl/euphorik_bd_admin.erl
index
66427d3
..
037de96
100644
(file)
--- a/
modules/erl/euphorik_bd_admin.erl
+++ b/
modules/erl/euphorik_bd_admin.erl
@@
-85,7
+85,6
@@
create_tables() ->
{disc_copies, [node()]}
]),
mnesia:create_table(minichat, [
{disc_copies, [node()]}
]),
mnesia:create_table(minichat, [
- {type, ordered_set},
{attributes, record_info(fields, minichat)},
{disc_copies, [node()]}
]),
{attributes, record_info(fields, minichat)},
{disc_copies, [node()]}
]),
@@
-269,13
+268,7
@@
patch(1) ->
{atomic, _} -> ok
end;
\r
% 2 -> 3
\r
{atomic, _} -> ok
end;
\r
% 2 -> 3
\r
-patch(2) ->
- % première étape : changer le type de la table minichat de set à ordered_set
- % TODO : trouver un meilleur moyen que de passer par un backup
- backup("tmp"),
- create(),
- restore("tmp"),
- file:delete(dossier_backups() ++ "tmp"),
\r
+patch(2) ->
\r
mnesia:transform_table(
\r
troll,
\r
fun({troll, Id_troll, Id_user, Date_create, Date_post, Content}) ->
\r
mnesia:transform_table(
\r
troll,
\r
fun({troll, Id_troll, Id_user, Date_create, Date_post, Content}) ->
\r
@@
-292,10
+285,23
@@
patch(2) ->
mnesia:transform_table(
\r
minichat,
\r
fun({minichat, Id, Auteur_id, Date, Pseudo, Contenu, _Troll_id, Racine_id}) ->
\r
mnesia:transform_table(
\r
minichat,
\r
fun({minichat, Id, Auteur_id, Date, Pseudo, Contenu, _Troll_id, Racine_id}) ->
\r
- {minichat, Id, Auteur_id, Date, Pseudo, Contenu, Racine_id}
\r
+ {minichat, Id, Auteur_id, Date, Pseudo, Contenu, Racine_id
, normal
}
\r
end,
\r
record_info(fields, minichat)
\r
end,
\r
record_info(fields, minichat)
\r
- ),
\r
+ ),
+ % comble les trous entre les id non-contigues
+ mnesia:transaction(fun() ->
+ lists:foreach(fun(Id) ->
+ case mnesia:read({minichat, Id}) of
+ [] ->
+ {ok, #user{profile = Profile}} = euphorik_bd:user_by_id(0),
+ mnesia:write(#minichat{id = Id, auteur_id = 0, date = undefined, pseudo = Profile#profile.pseudo, contenu = "Comblement...", racine_id = Id, status = deleted});
+ _ -> rien
+ end
+ end,
+ lists:seq(1, mnesia:table_info(minichat, size))
+ )
+ end),
\r
creer_indexes(). % uniquement pour l'indice sur id_minichat de la table troll
\r
creer_indexes(). % uniquement pour l'indice sur id_minichat de la table troll
\r
diff --git
a/modules/erl/euphorik_minichat_conversation.erl
b/modules/erl/euphorik_minichat_conversation.erl
index
4d0b3a8
..
2b4453f
100755
(executable)
--- a/
modules/erl/euphorik_minichat_conversation.erl
+++ b/
modules/erl/euphorik_minichat_conversation.erl
@@
-109,7
+109,7
@@
mise_en_forme_conversation(Messages) ->
conversations_detailees(Racines, N, D, P) ->
\r
Conversations = map(fun({Racine, P_conv, Dernier}) -> conversation(Racine, N, Dernier, P_conv) end, Racines),
\r
Conversation_principale = resultat_transaction(transaction(fun() ->
conversations_detailees(Racines, N, D, P) ->
\r
Conversations = map(fun({Racine, P_conv, Dernier}) -> conversation(Racine, N, Dernier, P_conv) end, Racines),
\r
Conversation_principale = resultat_transaction(transaction(fun() ->
- Dernier_id = mnesia:
last(minichat
),
\r
+ Dernier_id = mnesia:
table_info(minichat, size
),
\r
{CP, Plus} = conversation_principale(Dernier_id, Conversations, N, P),
\r
{[M || M <- CP, M > D], Plus} % filtre en fonction de D
\r
end)),
\r
{CP, Plus} = conversation_principale(Dernier_id, Conversations, N, P),
\r
{[M || M <- CP, M > D], Plus} % filtre en fonction de D
\r
end)),
\r
@@
-142,18
+142,17
@@
conversation_principale(Id, Conversations, N, P) ->
% @spec conversation_principale2(integer(), [integer()], integer(), integer()) -> [integer()]
\r
conversation_principale2(_, _, 0, _) ->
\r
[];
% @spec conversation_principale2(integer(), [integer()], integer(), integer()) -> [integer()]
\r
conversation_principale2(_, _, 0, _) ->
\r
[];
-conversation_principale2(
'$end_of_table'
, _, _, _) ->
+conversation_principale2(
0
, _, _, _) ->
[];
\r
conversation_principale2(Id, Messages, N, S) ->
[];
\r
conversation_principale2(Id, Messages, N, S) ->
- % traitement message par message (pas des plus performant :/)
- Id_prev = mnesia:prev(minichat, Id),
\r
+ % traitement message par message (pas des plus performant :/)
\r
Doit_etre_saute = any(fun(E) -> E == Id end, Messages),
\r
if Doit_etre_saute ->
\r
Doit_etre_saute = any(fun(E) -> E == Id end, Messages),
\r
if Doit_etre_saute ->
\r
- conversation_principale2(Id
_prev
, Messages, N, S); % le message ne fait pas partie de la conversation
\r
+ conversation_principale2(Id
- 1
, Messages, N, S); % le message ne fait pas partie de la conversation
\r
S =:= 0 ->
\r
S =:= 0 ->
\r
- [Id | conversation_principale2(Id
_prev
, Messages, N - 1, S)]; % ok : le message fait partie de la conversation
\r
+ [Id | conversation_principale2(Id
- 1
, Messages, N - 1, S)]; % ok : le message fait partie de la conversation
\r
true ->
\r
true ->
\r
- conversation_principale2(Id
_prev
, Messages, N, S - 1) % on n'a pas encore atteint le début de la page
\r
+ conversation_principale2(Id
- 1
, Messages, N, S - 1) % on n'a pas encore atteint le début de la page
\r
end.
\r
\r
\r
end.
\r
\r
\r
diff --git
a/modules/erl/euphorik_protocole.erl
b/modules/erl/euphorik_protocole.erl
index
1fb3cc1
..
24768ea
100755
(executable)
--- a/
modules/erl/euphorik_protocole.erl
+++ b/
modules/erl/euphorik_protocole.erl
@@
-308,7
+308,7
@@
wait_event_page_chat(User, Racines_conversations, Message_count, Last_message_id
{Racine_id, _, _} = Racine,
\r
case euphorik_bd:message_by_id(Racine_id) of
\r
{ok, Mess} ->
\r
{Racine_id, _, _} = Racine,
\r
case euphorik_bd:message_by_id(Racine_id) of
\r
{ok, Mess} ->
\r
- json_message(Mess, euphorik_bd:parents(Racine), User);
\r
+ json_message(Mess, euphorik_bd:parents(Racine
_id
), User);
\r
_ ->
\r
null
\r
end
\r
_ ->
\r
null
\r
end
\r
diff --git
a/modules/include/euphorik_bd.hrl
b/modules/include/euphorik_bd.hrl
index
0b04c4b
..
4838b30
100755
(executable)
--- a/
modules/include/euphorik_bd.hrl
+++ b/
modules/include/euphorik_bd.hrl
@@
-56,7
+56,8
@@
date, % erlang:now()
pseudo, % chaine de caractère
contenu, % chaine de caractère
date, % erlang:now()
pseudo, % chaine de caractère
contenu, % chaine de caractère
- racine_id = undefined % la racine, par défaut correspond à l'id du message
+ racine_id = undefined, % la racine, par défaut correspond à l'id du message
+ status = normal % can be equal to normal, censored or deleted
}).
}).