83 lines
2.5 KiB
Erlang
83 lines
2.5 KiB
Erlang
-module(ggs_db).
|
|
-export([init/0,stop/0,setItem/4,getItem/3,removeItem/3,key/3,clear/2,clear/1,length/2]).
|
|
%-include("ggs_db.hrl").
|
|
-record(data, {key, value}).
|
|
|
|
%%-----------------------------------------------------
|
|
%% Creation
|
|
%%-----------------------------------------------------
|
|
init() ->
|
|
% mnesia:create_schema([node()]),
|
|
mnesia:start(),
|
|
mnesia:create_table(data, [{attributes, record_info(fields, data)}]).
|
|
|
|
stop() ->
|
|
mnesia:stop().
|
|
|
|
|
|
%%-----------------------------------------------------
|
|
%% Insertions
|
|
%%-----------------------------------------------------
|
|
setItem(GameToken,Ns,Key,Value) ->
|
|
Fun = fun() ->
|
|
Data = #data{key = {GameToken,Ns,Key}, value = Value},
|
|
mnesia:write(Data)
|
|
end,
|
|
mnesia:transaction(Fun).
|
|
|
|
|
|
%%-----------------------------------------------------
|
|
%% Deletions
|
|
%%-----------------------------------------------------
|
|
removeItem(GameToken,Ns,Key) ->
|
|
Fun = fun() ->
|
|
mnesia:delete({data,{GameToken,Ns,Key}})
|
|
end,
|
|
mnesia:transaction(Fun).
|
|
|
|
clear(GameToken,Ns) ->
|
|
Fun = fun() ->
|
|
Keys = mnesia:all_keys(data),
|
|
Rest = lists:filter(fun({A,B,_}) -> ((A==GameToken) and (B==Ns)) end, Keys),
|
|
lists:map(fun({A,B,C}) -> removeItem(A,B,C) end, Rest)
|
|
end,
|
|
{atomic, Ret} = mnesia:transaction(Fun),
|
|
Ret.
|
|
|
|
clear(GameToken) ->
|
|
Fun = fun() ->
|
|
Keys = mnesia:all_keys(data),
|
|
Rest = lists:filter(fun({A,_,_}) -> (A==GameToken) end, Keys),
|
|
lists:map(fun({A,B,C}) -> removeItem(A,B,C) end, Rest)
|
|
end,
|
|
{atomic, Ret} = mnesia:transaction(Fun),
|
|
Ret.
|
|
|
|
%%-----------------------------------------------------
|
|
%% Queries
|
|
%%-----------------------------------------------------
|
|
getItem(GameToken,Ns,Key) ->
|
|
Fun = fun() ->
|
|
mnesia:read(data, {GameToken,Ns,Key})
|
|
end,
|
|
case mnesia:transaction(Fun) of
|
|
{atomic, []} -> {error};
|
|
{atomic, [Ret]} -> Ret#data.value
|
|
end.
|
|
|
|
length(GameToken,Ns) ->
|
|
Fun = fun() ->
|
|
Keys = mnesia:all_keys(data),
|
|
length(lists:filter(fun({A,B,_}) -> ((A==GameToken) and (B==Ns)) end, Keys))
|
|
end,
|
|
{atomic, Ret} = mnesia:transaction(Fun),
|
|
Ret.
|
|
|
|
key(GameToken,Ns,Position) ->
|
|
Fun = fun() ->
|
|
Keys = mnesia:all_keys(data),
|
|
Rest = lists:filter(fun({A,B,_}) -> ((A==GameToken) and (B==Ns)) end, Keys),
|
|
lists:nth(Position, Rest)
|
|
end,
|
|
{atomic, Ret} = mnesia:transaction(Fun),
|
|
Ret.
|