diff options
Diffstat (limited to 'src/mod_private_sql.erl')
-rw-r--r-- | src/mod_private_sql.erl | 62 |
1 files changed, 40 insertions, 22 deletions
diff --git a/src/mod_private_sql.erl b/src/mod_private_sql.erl index 800b31a21..d7e4b3aef 100644 --- a/src/mod_private_sql.erl +++ b/src/mod_private_sql.erl @@ -27,11 +27,12 @@ -behaviour(mod_private). %% API --export([init/2, set_data/3, get_data/3, get_all_data/2, remove_user/2, +-export([init/2, set_data/3, get_data/3, get_all_data/2, del_data/2, import/3, export/1]). -include("xmpp.hrl"). -include("mod_private.hrl"). +-include("logger.hrl"). %%%=================================================================== %%% API @@ -48,39 +49,46 @@ set_data(LUser, LServer, Data) -> LServer, LUser, XMLNS, SData) end, Data) end, - ejabberd_sql:sql_transaction(LServer, F). + case ejabberd_sql:sql_transaction(LServer, F) of + {atomic, ok} -> + ok; + _ -> + {error, db_failure} + end. get_data(LUser, LServer, XMLNS) -> - case catch sql_queries:get_private_data(LServer, LUser, XMLNS) of + case sql_queries:get_private_data(LServer, LUser, XMLNS) of {selected, [{SData}]} -> - case fxml_stream:parse_element(SData) of - Data when is_record(Data, xmlel) -> - {ok, Data}; - _ -> - error - end; + parse_element(LUser, LServer, SData); + {selected, []} -> + error; _ -> - error + {error, db_failure} end. get_all_data(LUser, LServer) -> case catch sql_queries:get_private_data(LServer, LUser) of + {selected, []} -> + error; {selected, Res} -> - lists:flatmap( - fun({_, SData}) -> - case fxml_stream:parse_element(SData) of - #xmlel{} = El -> - [El]; - _ -> - [] - end - end, Res); + {ok, lists:flatmap( + fun({_, SData}) -> + case parse_element(LUser, LServer, SData) of + {ok, El} -> [El]; + error -> [] + end + end, Res)}; _ -> - [] + {error, db_failure} end. -remove_user(LUser, LServer) -> - sql_queries:del_user_private_storage(LServer, LUser). +del_data(LUser, LServer) -> + case sql_queries:del_user_private_storage(LServer, LUser) of + {updated, _} -> + ok; + _ -> + {error, db_failure} + end. export(_Server) -> [{private_storage, @@ -99,3 +107,13 @@ import(_, _, _) -> %%%=================================================================== %%% Internal functions %%%=================================================================== +parse_element(LUser, LServer, XML) -> + case fxml_stream:parse_element(XML) of + El when is_record(El, xmlel) -> + {ok, El}; + _ -> + ?ERROR_MSG("malformed XML element in SQL table " + "'private_storage' for user ~s@~s: ~s", + [LUser, LServer, XML]), + error + end. |