aboutsummaryrefslogtreecommitdiff
path: root/src/ejd2odbc.erl
diff options
context:
space:
mode:
authorBadlop <badlop@process-one.net>2016-03-21 16:19:06 +0100
committerBadlop <badlop@process-one.net>2016-03-21 16:19:06 +0100
commit107569a17d425cce44012daa7cf5addb3dfa9a4b (patch)
tree87fa5df8c3b24a96d5d43e96f2eac459dc5da361 /src/ejd2odbc.erl
parentElixir 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.erl35
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 ->