-module(erlang_adk_session_mnesia).
-export([init/0, save/2, load/1, delete/1]).
-record(adk_sessions_mnesia, {id, memory}).
%% @doc Initialize the Mnesia table. Call this if you intend to use Mnesia sessions.
init() ->
application:ensure_all_started(mnesia),
%% Try to change node to disc schema on the fly if it's currently ram
mnesia:change_table_copy_type(schema, node(), disc_copies),
mnesia:create_table(adk_sessions_mnesia, [
{attributes, record_info(fields, adk_sessions_mnesia)},
{disc_copies, [node()]}
]),
mnesia:wait_for_tables([adk_sessions_mnesia], 5000).
save(SessionId, Memory) ->
F = fun() ->
mnesia:write(#adk_sessions_mnesia{id = SessionId, memory = Memory})
end,
{atomic, _} = mnesia:transaction(F),
ok.
load(SessionId) ->
F = fun() ->
mnesia:read({adk_sessions_mnesia, SessionId})
end,
case mnesia:transaction(F) of
{atomic, [#adk_sessions_mnesia{memory = Memory}]} -> Memory;
{atomic, []} -> [];
_ -> []
end.
delete(SessionId) ->
F = fun() ->
mnesia:delete({adk_sessions_mnesia, SessionId})
end,
{atomic, _} = mnesia:transaction(F),
ok.