- % 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
- mnesia:transform_table(\r
- troll,\r
- fun({troll, Id_troll, Id_user, Date_create, Date_post, Content}) ->\r
- % recherche le message associé s'il existe\r
- Id_minichat = case e(q([M || M <- mnesia:table(minichat), element(7, M) =:= Id_troll]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]) of\r
- [M] -> element(2, M);\r
- _ -> undefined\r
- end,\r
- {troll, Id_troll, Id_user, Id_minichat, Date_create, Date_post, Content}\r
- end,\r
- record_info(fields, troll)\r
- ),\r
- %mnesia:del_table_index(minichat, troll_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
- end,\r
- record_info(fields, minichat)\r
- ),\r
- creer_indexes(). % uniquement pour l'indice sur id_minichat de la table troll\r
+ mnesia:transform_table(
+ troll,
+ fun({troll, Id_troll, Id_user, Date_create, Date_post, Content}) ->
+ % recherche le message associé s'il existe
+ Id_minichat = case e(q([M || M <- mnesia:table(minichat), element(7, M) =:= Id_troll]), [{tmpdir, ?KEY_SORT_TEMP_DIR}]) of
+ [M] -> element(2, M);
+ _ -> undefined
+ end,
+ {troll, Id_troll, Id_user, Id_minichat, Date_create, Date_post, Content}
+ end,
+ record_info(fields, troll)
+ ),
+ %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, normal}
+ end,
+ record_info(fields, minichat)
+ ),
+ mnesia:transaction(fun() ->
+ % comble les trous entre les id non-contigues
+ 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))
+ ),
+ % la table troll utilise maintenant son index et pas celui de la table minichat (correction d'un vieux bug)
+ mnesia:write(#counter{key = troll, value = mnesia:table_info(minichat, size)})
+ end),
+ creer_indexes(). % uniquement pour l'indice sur id_minichat de la table troll