summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/db/src/storage_access.erl')
-rw-r--r--src/db/src/storage_access.erl20
1 files changed, 12 insertions, 8 deletions
diff --git a/src/db/src/storage_access.erl b/src/db/src/storage_access.erl
index be481ee..c58f26d 100644
--- a/src/db/src/storage_access.erl
+++ b/src/db/src/storage_access.erl
@@ -19,8 +19,10 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-get_value([]) -> [];
-get_value([#regval{ val = Val }]) -> [Val].
+get_value ([]) -> not_found;
+get_value ([Regval]) -> {ok, Regval}.
+
+get_value(DB, ID) -> get_value(mnesia:read(DB, ID)).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -32,11 +34,13 @@ insert (DB, ID, Owner, Value) ->
StoredItem = #regval{ id = ID, owner = Owner, val = 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).
+ mnesia:write(DB, StoredItem, sticky_write),
+ ok.
-update (DB, ID, Update) ->
+update (DB, ID, Query) ->
+ {ok, Item} = get_value(DB, ID),
+ {ok, UpdatedItem} = db_query:apply_to(Query, Item),
% FIXME: handle return value, mnesia:write -> (transaction abort | ok).
- case mnesia:read(DB, ID) of
- [] -> error;
- _ -> unimplemented
- end.
+ % FIXME: is this an atomic OP? Is the lock freed afterwards?
+ mnesia:write(DB, UpdatedItem, sticky_write),
+ ok.