summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2018-12-12 16:57:44 +0100
committernsensfel <SpamShield0@noot-noot.org>2018-12-12 16:57:44 +0100
commit7ff80825a16b91ef2c0374776f0d140068153d0b (patch)
treeaacbcb41435790e429417eb43813205378c3e2b5 /src/ataxia_client.erl
Moving TO's DB system to its own repository.
Diffstat (limited to 'src/ataxia_client.erl')
-rw-r--r--src/ataxia_client.erl158
1 files changed, 158 insertions, 0 deletions
diff --git a/src/ataxia_client.erl b/src/ataxia_client.erl
new file mode 100644
index 0000000..f1b96e1
--- /dev/null
+++ b/src/ataxia_client.erl
@@ -0,0 +1,158 @@
+-module(ataxia_client).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-export
+(
+ [
+ insert_at/5,
+ insert/4,
+ remove/3,
+ fetch/3,
+ reserve/3,
+ commit/1
+ ]
+).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec get_debug_db_node () -> node().
+get_debug_db_node () -> list_to_atom("db_node@" ++ net_adm:localhost()).
+
+-spec get_random_db_node () -> node().
+get_random_db_node () ->
+ get_debug_db_node().
+
+-spec get_db_node_for (binary()) -> node().
+get_db_node_for (_ObjectID) ->
+ get_debug_db_node().
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+-spec insert_at
+ (
+ atom(),
+ binary(),
+ ataxia_security:permission(),
+ ataxia_security:permission(),
+ any()
+ )
+ -> 'ok'.
+insert_at (DB, ObjectID, ReadPerm, WritePerm, Value) ->
+ DBNode = get_db_node_for(ObjectID),
+
+ {atomic, _} =
+ rpc:call
+ (
+ DBNode,
+ db_access,
+ insert_at,
+ [DB, ObjectID, ReadPerm, WritePerm, Value]
+ ),
+
+ io:format
+ (
+ "~nshr_database:insert_at(~p) ! ~p -> ok.~n",
+ [{DB, ObjectID, ReadPerm, WritePerm, Value}, DBNode]
+ ),
+
+ ok.
+
+-spec insert
+ (
+ atom(),
+ ataxia_security:permission(),
+ ataxia_security:permission(),
+ any()
+ )
+ -> {'ok', binary()}.
+insert (DB, ReadPerm, WritePerm, Value) ->
+ DBNode = get_random_db_node(),
+
+ {atomic, {ok, ID}} =
+ rpc:call(DBNode, db_access, insert, [DB, ReadPerm, WritePerm, Value]),
+
+ io:format
+ (
+ "~nshr_database:insert(~p) ! ~p -> ok.~n",
+ [{DB, ReadPerm, WritePerm, Value}, DBNode]
+ ),
+
+ {ok, ID}.
+
+-spec fetch
+ (
+ atom(),
+ binary(),
+ ataxia_security:user()
+ )
+ -> ({'ok', any()} | 'not_found').
+fetch (DB, ObjectID, Cred) ->
+ DBNode = get_db_node_for(ObjectID),
+
+ {atomic, Reply} = rpc:call(DBNode, db_access, read, [DB, ObjectID, Cred]),
+
+ io:format
+ (
+ "~nshr_database:fetch(~p) ! ~p -> ~p.~n",
+ [{DB, ObjectID, Cred}, DBNode, Reply]
+ ),
+
+ Reply.
+
+-spec commit (shr_db_query:type()) -> 'ok'.
+commit (Query) ->
+ DBNode = get_db_node_for(shr_db_query:get_entry_id(Query)),
+
+ {atomic, ok} = rpc:call(DBNode, db_access, query, [Query]),
+
+ io:format("~nshr_database:commit(~p) ! ~p -> ok.~n", [Query, DBNode]),
+
+ ok.
+
+-spec remove
+ (
+ atom(),
+ binary(),
+ ataxia_security:user()
+ )
+ -> ('ok' | 'not_found').
+remove (DB, ObjectID, Cred) ->
+ DBNode = get_db_node_for(ObjectID),
+
+ {atomic, _} = rpc:call(DBNode, db_access, remove, [DB, ObjectID, Cred]),
+
+ io:format
+ (
+ "~nshr_database:remove(~p) ! ~p -> ok.~n",
+ [{DB, ObjectID, Cred}, DBNode]
+ ),
+
+ ok.
+
+-spec reserve
+ (
+ atom(),
+ binary(),
+ ataxia_security:user()
+ )
+ -> ('ok' | 'not_found').
+reserve (DB, ObjectID, Cred) ->
+ DBNode = get_db_node_for(ObjectID),
+
+ {atomic, _} = rpc:call(DBNode, db_access, reserve, [DB, ObjectID, Cred]),
+
+ io:format
+ (
+ "~nshr_database:reserve(~p) ! ~p -> ok.~n",
+ [{DB, ObjectID, Cred}, DBNode]
+ ),
+
+ ok.