diff options
author | Mickaël Rémond <mickael.remond@process-one.net> | 2006-11-20 13:20:47 +0000 |
---|---|---|
committer | Mickaël Rémond <mickael.remond@process-one.net> | 2006-11-20 13:20:47 +0000 |
commit | 86da0b3e1beeb34cbca660ce39adec44a1358bb4 (patch) | |
tree | bbcada424fd63f04b9ffceaa7ebb81d1a7bd62c9 /src/odbc/odbc_queries.erl | |
parent | * src/mod_muc/mod_muc_room.erl: API improvement: It is now easier to extract (diff) |
2006-11-20 Mickael Remond <mickael.remond@process-one.net>
* src/ejd2odbc.erl: Copy mod_private data from Mnesia to
relational database.
* src/odbc/odbc_queries.erl: Refactoring.
* src/odbc/mssql.sql: Likewise.
* doc/guide.tex: Update to mention mod_private_odbc.
* src/odbc/mysql.sql: Started integration of mod_privacy_odbc for
MySQL and MSSQL.
* src/odbc/mssql.sql: Likewise.
SVN Revision: 678
Diffstat (limited to 'src/odbc/odbc_queries.erl')
-rw-r--r-- | src/odbc/odbc_queries.erl | 40 |
1 files changed, 31 insertions, 9 deletions
diff --git a/src/odbc/odbc_queries.erl b/src/odbc/odbc_queries.erl index d91a007de..f42a62a80 100644 --- a/src/odbc/odbc_queries.erl +++ b/src/odbc/odbc_queries.erl @@ -32,6 +32,7 @@ roster_subscribe/4, get_subscription/3, set_private_data/4, + set_private_data_sql/3, get_private_data/3, del_user_private_storage/2, escape/1]). @@ -46,6 +47,9 @@ get_db_type() -> generic. +%% F can be either a fun or a list of queries +%% TODO: We should probably move the list of queries transaction wrapper from the ejabberd_odbc module +%% to this one (odbc_queries) sql_transaction(LServer, F) -> ejabberd_odbc:sql_transaction(LServer, F). @@ -254,14 +258,18 @@ get_subscription(LServer, Username, SJID) -> "and jid='", SJID, "'"]). set_private_data(_LServer, Username, LXMLNS, SData) -> - ejabberd_odbc:sql_query_t( - ["delete from private_storage " + lists:foreach(fun(Query) -> + ejabberd_odbc:sql_query_t(Query) + end, + set_private_data_sql(Username, LXMLNS, SData)). + +set_private_data_sql(Username, LXMLNS, SData) -> + [["delete from private_storage " "where username='", Username, "' and " - "namespace='", LXMLNS, "';"]), - ejabberd_odbc:sql_query_t( + "namespace='", LXMLNS, "';"], ["insert into private_storage(username, namespace, data) " "values ('", Username, "', '", LXMLNS, "', " - "'", SData, "');"]). + "'", SData, "');"]]. get_private_data(LServer, Username, LXMLNS) -> ejabberd_odbc:sql_query( @@ -295,8 +303,19 @@ escape(C) -> C. get_db_type() -> mssql. -sql_transaction(_LServer, F) -> - {atomic, catch F()}. +%% Queries can be either a fun or a list of queries +sql_transaction(_LServer, Queries) when is_list(Queries) -> + %% SQL transaction based on a list of queries + %% This function automatically + F = fun() -> + lists:foreach(fun(Query) -> + sql_query(Query) + end, + Queries) + end, + {atomic, catch F()}; +sql_transaction(_LServer, FQueries) -> + {atomic, catch FQueries()}. get_last(LServer, Username) -> ejabberd_odbc:sql_query( @@ -447,11 +466,14 @@ get_subscription(LServer, Username, SJID) -> ejabberd_odbc:sql_query( LServer, ["EXECUTE dbo.get_subscription '", Username, "' , '", SJID, "'"]). - + set_private_data(_LServer, Username, LXMLNS, SData) -> ejabberd_odbc:sql_query( LServer, - ["EXECUTE dbo.set_private_data '", Username, "' , '", LXMLNS, "' , '", SData, "'"]). + set_private_data_sql(Username, LXMLNS, SData)). + +set_private_data_sql(Username, LXMLNS, SData) -> + ["EXECUTE dbo.set_private_data '", Username, "' , '", LXMLNS, "' , '", SData, "'"]. get_private_data(LServer, Username, LXMLNS) -> ejabberd_odbc:sql_query( |