diff options
author | Badlop <badlop@process-one.net> | 2016-03-21 16:19:06 +0100 |
---|---|---|
committer | Badlop <badlop@process-one.net> | 2016-03-21 16:19:06 +0100 |
commit | 107569a17d425cce44012daa7cf5addb3dfa9a4b (patch) | |
tree | 87fa5df8c3b24a96d5d43e96f2eac459dc5da361 /src/ejd2odbc.erl | |
parent | Elixir test suite is already run with global CT run command (diff) |
New command delete_mnesia deletes all tables that can be exported
Diffstat (limited to 'src/ejd2odbc.erl')
-rw-r--r-- | src/ejd2odbc.erl | 35 |
1 files changed, 34 insertions, 1 deletions
diff --git a/src/ejd2odbc.erl b/src/ejd2odbc.erl index 4cb937ef9..1df88470c 100644 --- a/src/ejd2odbc.erl +++ b/src/ejd2odbc.erl @@ -30,7 +30,7 @@ -include("logger.hrl"). -export([export/2, export/3, import_file/2, import/2, - import/3]). + import/3, delete/1]). -define(MAX_RECORDS_PER_TRANSACTION, 100). @@ -80,6 +80,20 @@ export(Server, Output, Module) -> end, Module:export(Server)), close_output(Output, IO). +delete(Server) -> + Modules = modules(), + lists:foreach( + fun(Module) -> + delete(Server, Module) + end, Modules). + +delete(Server, Module) -> + LServer = jid:nameprep(iolist_to_binary(Server)), + lists:foreach( + fun({Table, ConvertFun}) -> + delete(LServer, Table, ConvertFun) + end, Module:export(Server)). + import_file(Server, FileName) when is_binary(FileName) -> import(Server, binary_to_list(FileName)); import_file(Server, FileName) -> @@ -160,6 +174,25 @@ output(_LServer, Table, Fd, SQLs) -> file:write(Fd, ["-- \n-- Mnesia table: ", atom_to_list(Table), "\n--\n", SQLs]). +delete(LServer, Table, ConvertFun) -> + F = fun () -> + mnesia:write_lock_table(Table), + {_N, SQLs} = + mnesia:foldl( + fun(R, {N, SQLs} = Acc) -> + case ConvertFun(LServer, R) of + [] -> + Acc; + _SQL -> + mnesia:delete_object(R), + Acc + end + end, + {0, []}, Table), + delete(LServer, Table, SQLs) + end, + mnesia:transaction(F). + import(LServer, SelectQuery, IO, ConvertFun, Opts) -> F = case proplists:get_bool(fast, Opts) of true -> |