summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2018-06-06 16:42:42 +0200
committernsensfel <SpamShield0@noot-noot.org>2018-06-06 16:42:42 +0200
commit82081d45fd64294f4bc417085e06284f3487b32f (patch)
tree1da77dd39829f8bfdcbf200df6a12a0a53edf661 /src/db/logic/db_access.erl
parentee9c2ac044cc77b80f30420c8f0788cad4281084 (diff)
...
Diffstat (limited to 'src/db/logic/db_access.erl')
-rw-r--r--src/db/logic/db_access.erl54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/db/logic/db_access.erl b/src/db/logic/db_access.erl
new file mode 100644
index 0000000..f589ba8
--- /dev/null
+++ b/src/db/logic/db_access.erl
@@ -0,0 +1,54 @@
+-module(db_access).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-export
+(
+ [
+ read/2,
+ insert/4,
+ query/1
+ ]
+).
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+get_value ([]) -> not_found;
+get_value ([Regval]) -> {ok, sh_db_item:get_value(Regval)}.
+
+read_transaction (DB, ID) ->
+ get_value(mnesia:read(DB, ID)).
+
+insert_transaction (DB, ID, Perm, Value) ->
+ StoredItem = sh_db_item:new(ID, Perm, Value),
+ % FIXME: handle return value, mnesia:write -> (transaction abort | ok).
+ % FIXME: is this an atomic OP? Is the lock freed afterwards?
+ mnesia:write(DB, StoredItem, sticky_write),
+ ok.
+
+query_transaction (Query) ->
+ DB = sh_db_query:get_database(Query),
+ ID = sh_db_query:get_entry_id(Query),
+ [Item] = mnesia:read(DB, ID),
+ {ok, UpdatedItem} = sh_db_query:apply_to(Query, Item),
+ % FIXME: handle return value, mnesia:write -> (transaction abort | ok).
+ % FIXME: is this an atomic OP? Is the lock freed afterwards?
+ mnesia:write(DB, UpdatedItem, sticky_write),
+ ok.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+read (DB, ID) ->
+ mnesia:transaction(fun read_transaction/2, [DB, ID]).
+
+insert (DB, ID, Perm, Value) ->
+ mnesia:transaction(fun insert_transaction/4, [DB, ID, Perm, Value]).
+
+query (Query) ->
+ mnesia:transaction(fun query_transaction/1, [Query]).