diff options
author | Mickaël Rémond <mickael.remond@process-one.net> | 2005-12-21 16:10:56 +0000 |
---|---|---|
committer | Mickaël Rémond <mickael.remond@process-one.net> | 2005-12-21 16:10:56 +0000 |
commit | 559b5cae14c0226abb1f24f6e43ce8315aa82c1d (patch) | |
tree | b28b317e77a64045bd205715727ea4409ffa8e76 /src/odbc | |
parent | Documentation update, code clean-up and Makefile improvement. (diff) |
* src/odbc/mysql.sql: Database description for MySQL Database
4.1 (Max version, with Innodb)
* src/ejabberd_auth_odbc.erl: MySQL ODBC support.
* src/mod_offline_odbc.erl: likewise
* src/mod_vcard_odbc.erl: likewsie
* src/mod_roster_odbc.erl: likewise
* src/odbc/ejabberd_odbc.erl: likewise
* src/mod_last_odbc.erl: likewise
SVN Revision: 474
Diffstat (limited to 'src/odbc')
-rw-r--r-- | src/odbc/ejabberd_odbc.erl | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/odbc/ejabberd_odbc.erl b/src/odbc/ejabberd_odbc.erl index 49540e34e..1e8fbf7e4 100644 --- a/src/odbc/ejabberd_odbc.erl +++ b/src/odbc/ejabberd_odbc.erl @@ -45,10 +45,22 @@ sql_query(Host, Query) -> gen_server:call(ejabberd_odbc_sup:get_random_pid(Host), {sql_query, Query}, 60000). +%% SQL transaction based on a list of queries +%% This function automatically +sql_transaction(Host, Queries) when is_list(Queries) -> + F = fun() -> + lists:foreach(fun(Query) -> + R = sql_query(Host, Query) + end, + Queries) + end, + sql_transaction(Host, F); +%% SQL transaction, based on a erlang anonymous function (F = fun) sql_transaction(Host, F) -> gen_server:call(ejabberd_odbc_sup:get_random_pid(Host), {sql_transaction, F}, 60000). +%% This function is intended to be used from inside an sql_transaction: sql_query_t(Query) -> State = get(?STATE_KEY), QRes = sql_query_internal(State, Query), @@ -106,7 +118,7 @@ init([Host]) -> _ when is_list(SQLServer) -> {ok, Ref} = odbc:connect(SQLServer, [{scrollable_cursors, off}]), - {ok, #state{db_ref = Ref, + {ok, #state{db_ref = Ref, db_type = odbc}} end. @@ -177,15 +189,15 @@ execute_transaction(_State, _F, 0) -> {aborted, restarts_exceeded}; execute_transaction(State, F, NRestarts) -> put(?STATE_KEY, State), - sql_query_internal(State, "begin"), + sql_query_internal(State, "begin;"), case catch F() of aborted -> execute_transaction(State, F, NRestarts - 1); {'EXIT', Reason} -> - sql_query_internal(State, "rollback"), + sql_query_internal(State, "rollback;"), {aborted, Reason}; Res -> - sql_query_internal(State, "commit"), + sql_query_internal(State, "commit;"), {atomic, Res} end. |