From efae3fc07564a2a29b24f8c87b6d8f6658b873a0 Mon Sep 17 00:00:00 2001 From: Greg Burri Date: Fri, 3 Oct 2008 12:43:40 +0000 Subject: [PATCH] =?utf8?q?FIX=20#81=20(pas=20test=C3=A9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- modules/erl/euphorik_bd.erl | 32 ++++++------------------------ modules/erl/euphorik_bd_admin.erl | 18 ++++++++++++----- modules/erl/euphorik_protocole.erl | 2 +- 3 files changed, 20 insertions(+), 32 deletions(-) diff --git a/modules/erl/euphorik_bd.erl b/modules/erl/euphorik_bd.erl index 55aa7bc..cfd0bfd 100755 --- a/modules/erl/euphorik_bd.erl +++ b/modules/erl/euphorik_bd.erl @@ -46,7 +46,6 @@ % messages : nouveau_message/3, nouveau_message_sys/1, - nouveau_message_sys/2, messages/1, messages/2, messages/3, @@ -78,7 +77,6 @@ troll_by_id/1, current_troll/0, elire_troll/0, - message_id_associe/1, % utiles : resultat_transaction/1 @@ -352,16 +350,11 @@ inserer_reponses(_, []) -> % Permet de créer un message système. % Renvoie l'id du message système nouveau_message_sys(Mess) -> - nouveau_message_sys(Mess, undefined). - - -% Création d'un message système lié à un troll. -nouveau_message_sys(Mess, Troll_id) -> {ok, #user{profile = Profile}} = user_by_id(0), resultat_transaction(mnesia:transaction( fun() -> Id = nouvel_id(minichat), - mnesia:write(#minichat{id = Id, auteur_id = 0, date = now(), pseudo = Profile#profile.pseudo, contenu = Mess, troll_id = Troll_id, racine_id = Id}), + mnesia:write(#minichat{id = Id, auteur_id = 0, date = now(), pseudo = Profile#profile.pseudo, contenu = Mess, racine_id = Id}), Id end )). @@ -412,9 +405,9 @@ message_by_id(Id) -> % Renvoie le contenu d'un message donnée en fonction du troll associé, à utiliser à l'intérieur d'une transaction. -% TODO : Cette fonction pourrait être remplacé par un "outer-join", est-ce possible avec qlc ? +% TODO : Cette fonction pourrait être remplacée par un "outer-join", est-ce possible avec qlc ? contenu_message(E) -> - case mnesia:read({troll, E#minichat.troll_id}) of + case mnesia:index_read(troll, E#minichat.id, #troll.id_minichat) of [] -> E#minichat.contenu; [T] -> E#minichat.contenu ++ T#troll.content end. @@ -796,26 +789,13 @@ elire_troll() -> plus_de_trolls; Trolls -> Troll = lists:nth(random:uniform(length(Trolls)), Trolls), - Troll2 = Troll#troll{date_post = now()}, - mnesia:write(Troll2), - nouveau_message_sys("Troll de la semaine : ", Troll2#troll.id) + Id_message = nouveau_message_sys("Troll de la semaine : "), + Troll2 = Troll#troll{date_post = now(), id_minichat = Id_message}, + mnesia:write(Troll2) end end ). - -% Renvoie l'id du message associé au troll dont l'id est donnée. -% Renvoie undefined si il n'y en a pas. -message_id_associe(Troll_id) -> - resultat_transaction(mnesia:transaction( - fun() -> - case e(q([M#minichat.id || M <- mnesia:table(minichat), M#minichat.troll_id =:= Troll_id]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]) of - [Id] -> Id; - _ -> undefined - end - end - )). - % Renvoie le résultat d'une transaction (en décomposant le tuple fournit) resultat_transaction({_, T}) -> diff --git a/modules/erl/euphorik_bd_admin.erl b/modules/erl/euphorik_bd_admin.erl index d9e9cc7..64ea4ac 100644 --- a/modules/erl/euphorik_bd_admin.erl +++ b/modules/erl/euphorik_bd_admin.erl @@ -110,11 +110,11 @@ create_tables() -> % mis à part car lors de la reprise de données avec load_textfile les indexes ne sont pas recréés creer_indexes() -> mnesia:add_table_index(minichat, auteur_id), - mnesia:add_table_index(minichat, troll_id), mnesia:add_table_index(reponse_minichat, cible), mnesia:add_table_index(user, cookie), mnesia:add_table_index(user, login), - mnesia:add_table_index(troll, date_post). + mnesia:add_table_index(troll, date_post), + mnesia:add_table_index(troll, id_minichat). % Connexion à la base de données de yaws sur overnux @@ -262,7 +262,6 @@ patch(1) -> end; % 2 -> 3 patch(2) -> - % traitement de la table troll mnesia:transform_table( troll, fun({troll, Id_troll, Id_user, Date_create, Date_post, Content}) -> @@ -275,8 +274,17 @@ patch(2) -> end, record_info(fields, troll), user - ) - TODO... + ), + mnesia:del_table_index(minichat, troll_id), + mnesia:transform_table( + minichat, + fun({minichat, Id, Auteur_id, Date, Pseudo, Contenu, _Troll_id, Racine_id}) -> + {minichat, Id, Auteur_id, Date, Pseudo, Contenu, Racine_id} + end, + record_info(fields, troll), + user + ), + creer_indexes(). % uniquement pour l'indice sur id_minichat de la table troll % crée un backup dont le nom est fournit dans le repertoire backups qui se trouve dans le repertoire de la BD. diff --git a/modules/erl/euphorik_protocole.erl b/modules/erl/euphorik_protocole.erl index a34eae6..1fb3cc1 100755 --- a/modules/erl/euphorik_protocole.erl +++ b/modules/erl/euphorik_protocole.erl @@ -283,7 +283,7 @@ wait_event_page_chat(User, Racines_conversations, Message_count, Last_message_id {struct, [ {reply, "new_troll"}, {troll_id, Current#troll.id}, - {message_id, euphorik_bd:message_id_associe(Current#troll.id)}, + {message_id, Current#troll.id_minichat}, {content, Current#troll.content} ]}; _ -> -- 2.45.2