From d63018071798767a790bceca75a2223af2317a68 Mon Sep 17 00:00:00 2001 From: Alexey Shchepin Date: Sat, 10 Sep 2005 17:01:30 +0000 Subject: [PATCH] * src/ejd2odbc.erl: Updated SVN Revision: 410 --- ChangeLog | 4 ++++ src/ejd2odbc.erl | 61 +++++++++++++++++++++++++++++------------------- 2 files changed, 41 insertions(+), 24 deletions(-) diff --git a/ChangeLog b/ChangeLog index 519b97212..de69f055f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2005-09-10 Alexey Shchepin + + * src/ejd2odbc.erl: Updated + 2005-09-04 Alexey Shchepin * src/mod_disco.erl: Disco publishing support (thanks to Magnus diff --git a/src/ejd2odbc.erl b/src/ejd2odbc.erl index aef05fb4c..959bad2c2 100644 --- a/src/ejd2odbc.erl +++ b/src/ejd2odbc.erl @@ -11,10 +11,10 @@ -vsn('$Revision$ '). %% External exports --export([export_passwd/1, - export_roster/1, - export_offline/1, - export_last/1]). +-export([export_passwd/2, + export_roster/2, + export_offline/2, + export_last/2]). -include("ejabberd.hrl"). -include("jlib.hrl"). @@ -29,9 +29,9 @@ %%% API %%%---------------------------------------------------------------------- -export_passwd(Server) -> +export_passwd(Server, Output) -> export_common( - Server, passwd, + Server, passwd, Output, fun(Host, {passwd, {LUser, LServer}, Password} = R) when LServer == Host -> Username = ejabberd_odbc:escape(LUser), @@ -43,9 +43,9 @@ export_passwd(Server) -> [] end). -export_roster(Server) -> +export_roster(Server, Output) -> export_common( - Server, roster, + Server, roster, Output, fun(Host, #roster{usj = {LUser, LServer, LJID}} = R) when LServer == Host -> Username = ejabberd_odbc:escape(LUser), @@ -71,9 +71,9 @@ export_roster(Server) -> [] end). -export_offline(Server) -> +export_offline(Server, Output) -> export_common( - Server, offline_msg, + Server, offline_msg, Output, fun(Host, #offline_msg{us = {LUser, LServer}, timestamp = TimeStamp, from = From, @@ -102,9 +102,9 @@ export_offline(Server) -> [] end). -export_last(Server) -> +export_last(Server, Output) -> export_common( - Server, last_activity, + Server, last_activity, Output, fun(Host, #last_activity{us = {LUser, LServer}, timestamp = TimeStamp, status = Status}) @@ -123,10 +123,17 @@ export_last(Server) -> %%% Internal functions %%%---------------------------------------------------------------------- -export_common(Server, Table, ConvertFun) -> +export_common(Server, Table, Output, ConvertFun) -> + IO = case Output of + odbc -> + odbc; + _ -> + {ok, IODevice} = file:open(Output, [write, raw]), + IODevice + end, mnesia:transaction( fun() -> - mnesia:read_lock_table(passwd), + mnesia:read_lock_table(Table), LServer = jlib:nameprep(Server), {_N, SQLs} = mnesia:foldl( @@ -139,22 +146,28 @@ export_common(Server, Table, ConvertFun) -> N < ?MAX_RECORDS_PER_TRANSACTION - 1 -> {N + 1, [SQL | SQLs]}; true -> - catch ejabberd_odbc:sql_query( - LServer, - ["begin;", - lists:reverse([SQL | SQLs]), - "commit"]), + output(LServer, IO, + ["begin;", + lists:reverse([SQL | SQLs]), + "commit"]), {0, []} end end end, {0, []}, Table), - catch ejabberd_odbc:sql_query( - LServer, - ["begin;", - lists:reverse(SQLs), - "commit"]) + output(LServer, IO, + ["begin;", + lists:reverse(SQLs), + "commit"]) end). +output(LServer, IO, SQL) -> + case IO of + odbc -> + catch ejabberd_odbc:sql_query(LServer, SQL); + _ -> + file:write(IO, [SQL, $\n]) + end. + record_to_string(#roster{usj = {User, Server, JID}, name = Name, subscription = Subscription,