Merge branch 'master' of github.com:jeena/GGS
This commit is contained in:
commit
8953d23dca
7 changed files with 148 additions and 1 deletions
|
@ -1 +1 @@
|
||||||
Subproject commit 709b568efbc99c954507d1593bc5633f900bc5dc
|
Subproject commit 5350ed21606606dbee5ecb07e974f2abb9106270
|
4
mnesia/build_db
Executable file
4
mnesia/build_db
Executable file
|
@ -0,0 +1,4 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
erlc -o . ggs_db.erl
|
||||||
|
erlc -o . ggs_db_test.erl
|
4
mnesia/build_test_db
Executable file
4
mnesia/build_test_db
Executable file
|
@ -0,0 +1,4 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
./build_db
|
||||||
|
./test_db
|
6
mnesia/ggs_db.hrl
Normal file
6
mnesia/ggs_db.hrl
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
%% gamedb.hrl
|
||||||
|
|
||||||
|
-record(player, {id, name}).
|
||||||
|
-record(data, {key, value}).
|
||||||
|
|
||||||
|
|
3
mnesia/test_db
Executable file
3
mnesia/test_db
Executable file
|
@ -0,0 +1,3 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
erl -eval 'eunit:test(ggs_db_test), q().'
|
86
src/ggs_db.erl
Normal file
86
src/ggs_db.erl
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
%%%%----------------------------------------------------
|
||||||
|
%%% @author Mattias Pettersson <mattiaspgames@gmail.com>
|
||||||
|
%%% @copyright 2011 Mattias Pettersson
|
||||||
|
%%% @doc Database for runtime game variable storage.
|
||||||
|
%%% @end
|
||||||
|
|
||||||
|
-module(ggs_db).
|
||||||
|
-import(mnesia).
|
||||||
|
%-compile({no_auto_import,[length/2]}).
|
||||||
|
-export([init/0,setItem/4,getItem/3,removeItem/3,key/3,clear/2,length/2]).
|
||||||
|
-include("ggs_db.hrl").
|
||||||
|
|
||||||
|
%%-----------------------------------------------------
|
||||||
|
%% Creation
|
||||||
|
%%-----------------------------------------------------
|
||||||
|
init() ->
|
||||||
|
mnesia:create_table(data, [{attributes, record_info(fields, data)}]).
|
||||||
|
|
||||||
|
%%-----------------------------------------------------
|
||||||
|
%% Test
|
||||||
|
%%-----------------------------------------------------
|
||||||
|
|
||||||
|
%test_data() ->
|
||||||
|
% set(0, "Hello"),
|
||||||
|
% get(0).
|
||||||
|
|
||||||
|
%%-----------------------------------------------------
|
||||||
|
%% Insertions
|
||||||
|
%%-----------------------------------------------------
|
||||||
|
setItem(Db,Ns,Key,Value) ->
|
||||||
|
Fun = fun() ->
|
||||||
|
Data = #data{key = {Db,Ns,Key}, value = Value},
|
||||||
|
mnesia:write(Data)
|
||||||
|
end,
|
||||||
|
mnesia:transaction(Fun).
|
||||||
|
|
||||||
|
|
||||||
|
%%-----------------------------------------------------
|
||||||
|
%% Deletions
|
||||||
|
%%-----------------------------------------------------
|
||||||
|
removeItem(Db,Ns,Key) ->
|
||||||
|
Fun = fun() ->
|
||||||
|
mnesia:delete({data,{Db,Ns,Key}})
|
||||||
|
end,
|
||||||
|
mnesia:transaction(Fun).
|
||||||
|
|
||||||
|
|
||||||
|
clear(Db,Ns) ->
|
||||||
|
Fun = fun() ->
|
||||||
|
Keys = mnesia:all_keys(data),
|
||||||
|
Rest = lists:filter(fun({A,B,_}) -> ((A==Db) and (B==Ns)) end, Keys),
|
||||||
|
lists:map(fun({A,B,C}) -> removeItem(A,B,C) end, Rest)
|
||||||
|
end,
|
||||||
|
{atomic, Ret} = mnesia:transaction(Fun),
|
||||||
|
Ret.
|
||||||
|
|
||||||
|
|
||||||
|
%%-----------------------------------------------------
|
||||||
|
%% Querries
|
||||||
|
%%-----------------------------------------------------
|
||||||
|
getItem(Db,Ns,Key) ->
|
||||||
|
Fun = fun() ->
|
||||||
|
[Data] = mnesia:read(data, {Db,Ns,Key}),
|
||||||
|
Data#data.value
|
||||||
|
end,
|
||||||
|
mnesia:transaction(Fun).
|
||||||
|
|
||||||
|
length(Db,Ns) ->
|
||||||
|
Fun = fun() ->
|
||||||
|
Keys = mnesia:all_keys(data),
|
||||||
|
length(lists:filter(fun({A,B,_}) -> ((A==Db) and (B==Ns)) end, Keys))
|
||||||
|
end,
|
||||||
|
{atomic, Ret} = mnesia:transaction(Fun),
|
||||||
|
Ret.
|
||||||
|
|
||||||
|
key(Db,Ns,Position) ->
|
||||||
|
Fun = fun() ->
|
||||||
|
Keys = mnesia:all_keys(data),
|
||||||
|
Rest = lists:filter(fun({A,B,_}) -> ((A==Db) and (B==Ns)) end, Keys),
|
||||||
|
lists:nth(Position, Rest)
|
||||||
|
end,
|
||||||
|
{atomic, Ret} = mnesia:transaction(Fun),
|
||||||
|
Ret.
|
||||||
|
|
||||||
|
|
||||||
|
|
44
tests/ggs_db_test.erl
Normal file
44
tests/ggs_db_test.erl
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
-module(ggs_db_test).
|
||||||
|
%-compile({no_auto_import,[get/1,set/2]}).
|
||||||
|
-include_lib("eunit/include/eunit.hrl").
|
||||||
|
|
||||||
|
%ggs_db_test_() ->
|
||||||
|
% {spawn,
|
||||||
|
% {setup, fun setup/0, fun cleanup/1,[ fun ggs_db_test/0 ]}
|
||||||
|
% }.
|
||||||
|
|
||||||
|
|
||||||
|
%Key should be a tuple of two elements
|
||||||
|
getItem_setItem_test() ->
|
||||||
|
mnesia:start(),
|
||||||
|
ggs_db:init(),
|
||||||
|
ggs_db:setItem("dbname","nsname","keyname","Hello"),
|
||||||
|
?assertMatch({atomic,"Hello"},ggs_db:getItem("dbname","nsname","keyname")).
|
||||||
|
|
||||||
|
length_test() ->
|
||||||
|
ggs_db:setItem(1,1,2,"112"),
|
||||||
|
ggs_db:setItem(1,2,2,"122"),
|
||||||
|
ggs_db:setItem(1,1,3,"113"),
|
||||||
|
ggs_db:setItem(1,1,4,"114"),
|
||||||
|
?assertEqual(ggs_db:length(1,1), 3).
|
||||||
|
|
||||||
|
removeItem_test() ->
|
||||||
|
ggs_db:removeItem(1,1,4),
|
||||||
|
?assertNot(ggs_db:getItem(1,1,4) =:= {atomic,"114"}).
|
||||||
|
|
||||||
|
key_test() ->
|
||||||
|
?assert(ggs_db:key(1,1,2) =:= {1,1,3}).
|
||||||
|
|
||||||
|
clear_test() ->
|
||||||
|
ggs_db:clear(1,1),
|
||||||
|
?assert(ggs_db:length(1,1) =:= 0),
|
||||||
|
mnesia:stop().
|
||||||
|
|
||||||
|
%tests() ->
|
||||||
|
% ggs_db_test().
|
||||||
|
|
||||||
|
%ggs_db_test() ->
|
||||||
|
% ggs_db:set(0, "Hello"),
|
||||||
|
%io:format("~s",[Val]),
|
||||||
|
% ?assertMatch({atomic,"Hello"},ggs_db:get(0)).
|
||||||
|
|
Reference in a new issue