diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2016-04-15 15:48:56 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2016-04-15 15:48:56 +0300 |
commit | 222572bd5687a53c507d10d8f6bcf9a90f5801ae (patch) | |
tree | 0f2630da507ba0fd4f23e5a81e9cf3bfeae18b0d /src/mod_carboncopy_mnesia.erl | |
parent | Add mod_mam header file (diff) |
Clean mod_carboncopy.erl from DB specific code
Diffstat (limited to 'src/mod_carboncopy_mnesia.erl')
-rw-r--r-- | src/mod_carboncopy_mnesia.erl | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/mod_carboncopy_mnesia.erl b/src/mod_carboncopy_mnesia.erl new file mode 100644 index 00000000..bf69bd21 --- /dev/null +++ b/src/mod_carboncopy_mnesia.erl @@ -0,0 +1,68 @@ +%%%------------------------------------------------------------------- +%%% @author Evgeny Khramtsov <ekhramtsov@process-one.net> +%%% @copyright (C) 2016, Evgeny Khramtsov +%%% @doc +%%% +%%% @end +%%% Created : 15 Apr 2016 by Evgeny Khramtsov <ekhramtsov@process-one.net> +%%%------------------------------------------------------------------- +-module(mod_carboncopy_mnesia). + +-behaviour(mod_carboncopy). + +%% API +-export([init/2, enable/4, disable/3, list/2]). + +-include("mod_carboncopy.hrl"). + +%%%=================================================================== +%%% API +%%%=================================================================== +init(_Host, _Opts) -> + Fields = record_info(fields, carboncopy), + try mnesia:table_info(carboncopy, attributes) of + Fields -> + ok; + _ -> + %% recreate.. + mnesia:delete_table(carboncopy) + catch _:_Error -> + %% probably table don't exist + ok + end, + mnesia:create_table(carboncopy, + [{ram_copies, [node()]}, + {attributes, record_info(fields, carboncopy)}, + {type, bag}]), + mnesia:add_table_copy(carboncopy, node(), ram_copies). + +enable(LUser, LServer, LResource, NS) -> + try mnesia:dirty_write( + #carboncopy{us = {LUser, LServer}, + resource = LResource, + version = NS}) of + ok -> ok + catch _:Error -> + {error, Error} + end. + +disable(LUser, LServer, LResource) -> + ToDelete = mnesia:dirty_match_object( + #carboncopy{us = {LUser, LServer}, + resource = LResource, + version = '_'}), + try lists:foreach(fun mnesia:dirty_delete_object/1, ToDelete) of + ok -> ok + catch _:Error -> + {error, Error} + end. + +list(LUser, LServer) -> + mnesia:dirty_select( + carboncopy, + [{#carboncopy{us = {LUser, LServer}, resource = '$2', version = '$3'}, + [], [{{'$2','$3'}}]}]). + +%%%=================================================================== +%%% Internal functions +%%%=================================================================== |