summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/db/src/storage_access.erl')
-rw-r--r-- | src/db/src/storage_access.erl | 20 |
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. |