From ee4059ac5a1d308f1020ff8385de9579b93a4a2a Mon Sep 17 00:00:00 2001 From: Kallfaktorn Date: Mon, 21 Feb 2011 20:43:00 +0100 Subject: [PATCH 1/7] getItem, setItem complete. Added scripts. --- mnesia/build_db | 4 ++++ mnesia/build_test_db | 4 ++++ mnesia/ggs_db.erl | 47 ++++++++++++++++++++++++++++++++++++++++++ mnesia/ggs_db.hrl | 6 ++++++ mnesia/ggs_db_test.erl | 31 ++++++++++++++++++++++++++++ mnesia/test_db | 3 +++ 6 files changed, 95 insertions(+) create mode 100755 mnesia/build_db create mode 100755 mnesia/build_test_db create mode 100644 mnesia/ggs_db.erl create mode 100644 mnesia/ggs_db.hrl create mode 100644 mnesia/ggs_db_test.erl create mode 100755 mnesia/test_db diff --git a/mnesia/build_db b/mnesia/build_db new file mode 100755 index 0000000..0aa2042 --- /dev/null +++ b/mnesia/build_db @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + + erlc -o . ggs_db.erl + erlc -o . ggs_db_test.erl diff --git a/mnesia/build_test_db b/mnesia/build_test_db new file mode 100755 index 0000000..f5aa938 --- /dev/null +++ b/mnesia/build_test_db @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +./build_db +./test_db diff --git a/mnesia/ggs_db.erl b/mnesia/ggs_db.erl new file mode 100644 index 0000000..5067e16 --- /dev/null +++ b/mnesia/ggs_db.erl @@ -0,0 +1,47 @@ +%%%%---------------------------------------------------- +%%% @author Mattias Pettersson +%%% @copyright 2011 Mattias Pettersson +%%% @doc Database for runtime game variable storage. +%%% @end + +-module(ggs_db). +-import(mnesia). +-export([init/0,setItem/4,getItem/3]). +-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). + + + +%%----------------------------------------------------- +%% Querries +%%----------------------------------------------------- +getItem(Db,Ns,Key) -> + Fun = fun() -> + [Data] = mnesia:read(data, {Db,Ns,Key}), + Data#data.value + end, + mnesia:transaction(Fun). + diff --git a/mnesia/ggs_db.hrl b/mnesia/ggs_db.hrl new file mode 100644 index 0000000..bc13c3a --- /dev/null +++ b/mnesia/ggs_db.hrl @@ -0,0 +1,6 @@ +%% gamedb.hrl + +-record(player, {id, name}). +-record(data, {key, value}). + + diff --git a/mnesia/ggs_db_test.erl b/mnesia/ggs_db_test.erl new file mode 100644 index 0000000..4baaaed --- /dev/null +++ b/mnesia/ggs_db_test.erl @@ -0,0 +1,31 @@ +-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 +setup_test() -> + mnesia:start(), + ggs_db:init(), + ggs_db:setItem("dbname","nsname","keyname","Hello"), + ?assertMatch({atomic,"Hello"},ggs_db:getItem("dbname","nsname","keyname")), + mnesia:stop(). + +%cleanup(Val) -> +% 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)). + diff --git a/mnesia/test_db b/mnesia/test_db new file mode 100755 index 0000000..958b005 --- /dev/null +++ b/mnesia/test_db @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +erl -eval 'eunit:test(ggs_db_test), q().' From e55e0bd8a3003cfc1ae5f8740fd7249b4b021dba Mon Sep 17 00:00:00 2001 From: Kallfaktorn Date: Mon, 21 Feb 2011 22:31:25 +0100 Subject: [PATCH 2/7] length(Db,Ns) and tests for get,set and length. --- mnesia/ggs_db.erl | 10 +++++++++- mnesia/ggs_db_test.erl | 11 +++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/mnesia/ggs_db.erl b/mnesia/ggs_db.erl index 5067e16..0b59822 100644 --- a/mnesia/ggs_db.erl +++ b/mnesia/ggs_db.erl @@ -6,7 +6,8 @@ -module(ggs_db). -import(mnesia). --export([init/0,setItem/4,getItem/3]). +%-compile({no_auto_import,[length/2]}). +-export([init/0,setItem/4,getItem/3,length/2]). -include("ggs_db.hrl"). %%----------------------------------------------------- @@ -45,3 +46,10 @@ getItem(Db,Ns,Key) -> 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. diff --git a/mnesia/ggs_db_test.erl b/mnesia/ggs_db_test.erl index 4baaaed..0e65593 100644 --- a/mnesia/ggs_db_test.erl +++ b/mnesia/ggs_db_test.erl @@ -9,11 +9,18 @@ %Key should be a tuple of two elements -setup_test() -> +get_set_test() -> mnesia:start(), ggs_db:init(), ggs_db:setItem("dbname","nsname","keyname","Hello"), - ?assertMatch({atomic,"Hello"},ggs_db:getItem("dbname","nsname","keyname")), + ?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), mnesia:stop(). %cleanup(Val) -> From c66d1cef69fb032287f28ceea23a95de55f306f9 Mon Sep 17 00:00:00 2001 From: Kallfaktorn Date: Mon, 21 Feb 2011 22:59:11 +0100 Subject: [PATCH 3/7] removeItem with test. --- mnesia/ggs_db.erl | 13 ++++++++++++- mnesia/ggs_db_test.erl | 8 ++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/mnesia/ggs_db.erl b/mnesia/ggs_db.erl index 0b59822..1c15536 100644 --- a/mnesia/ggs_db.erl +++ b/mnesia/ggs_db.erl @@ -7,7 +7,7 @@ -module(ggs_db). -import(mnesia). %-compile({no_auto_import,[length/2]}). --export([init/0,setItem/4,getItem/3,length/2]). +-export([init/0,setItem/4,getItem/3,removeItem/3,length/2]). -include("ggs_db.hrl"). %%----------------------------------------------------- @@ -35,6 +35,15 @@ setItem(Db,Ns,Key,Value) -> mnesia:transaction(Fun). +%%----------------------------------------------------- +%% Deletions +%%----------------------------------------------------- +removeItem(Db,Ns,Key) -> + Fun = fun() -> + mnesia:delete({data,{Db,Ns,Key}}) + end, + mnesia:transaction(Fun). + %%----------------------------------------------------- %% Querries @@ -53,3 +62,5 @@ length(Db,Ns) -> end, {atomic, Ret} = mnesia:transaction(Fun), Ret. + + diff --git a/mnesia/ggs_db_test.erl b/mnesia/ggs_db_test.erl index 0e65593..e15ddf4 100644 --- a/mnesia/ggs_db_test.erl +++ b/mnesia/ggs_db_test.erl @@ -9,7 +9,7 @@ %Key should be a tuple of two elements -get_set_test() -> +getItem_setItem_test() -> mnesia:start(), ggs_db:init(), ggs_db:setItem("dbname","nsname","keyname","Hello"), @@ -20,7 +20,11 @@ length_test() -> 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), + ?assertEqual(ggs_db:length(1,1), 3). + +removeItem_test() -> + ggs_db:removeItem(1,1,4), + ?assertNot(ggs_db:getItem(1,1,4) =:= {atomic,"114"}), mnesia:stop(). %cleanup(Val) -> From 8b978934c70b9b1755bdf13f8c494337609d6434 Mon Sep 17 00:00:00 2001 From: Kallfaktorn Date: Mon, 21 Feb 2011 23:55:20 +0100 Subject: [PATCH 4/7] key with test. --- mnesia/ggs_db.erl | 11 +++++++++-- mnesia/ggs_db_test.erl | 7 +++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/mnesia/ggs_db.erl b/mnesia/ggs_db.erl index 1c15536..9c7cb3c 100644 --- a/mnesia/ggs_db.erl +++ b/mnesia/ggs_db.erl @@ -7,7 +7,7 @@ -module(ggs_db). -import(mnesia). %-compile({no_auto_import,[length/2]}). --export([init/0,setItem/4,getItem/3,removeItem/3,length/2]). +-export([init/0,setItem/4,getItem/3,removeItem/3,key/3,length/2]). -include("ggs_db.hrl"). %%----------------------------------------------------- @@ -63,4 +63,11 @@ length(Db,Ns) -> {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. diff --git a/mnesia/ggs_db_test.erl b/mnesia/ggs_db_test.erl index e15ddf4..a1a2ff1 100644 --- a/mnesia/ggs_db_test.erl +++ b/mnesia/ggs_db_test.erl @@ -24,9 +24,12 @@ length_test() -> removeItem_test() -> ggs_db:removeItem(1,1,4), - ?assertNot(ggs_db:getItem(1,1,4) =:= {atomic,"114"}), - mnesia:stop(). + ?assertNot(ggs_db:getItem(1,1,4) =:= {atomic,"114"}). + %mnesia:stop(). +key_test() -> + ?assert(ggs_db:key(1,1,2) =:= {1,1,3}), + mnesia:stop(). %cleanup(Val) -> % mnesia:stop(). From 276a1837383eb9604f30d6d9070d8ccfdffa7463 Mon Sep 17 00:00:00 2001 From: Kallfaktorn Date: Tue, 22 Feb 2011 00:14:11 +0100 Subject: [PATCH 5/7] clear with test. --- mnesia/ggs_db.erl | 13 ++++++++++++- mnesia/ggs_db_test.erl | 11 +++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/mnesia/ggs_db.erl b/mnesia/ggs_db.erl index 9c7cb3c..eef1415 100644 --- a/mnesia/ggs_db.erl +++ b/mnesia/ggs_db.erl @@ -7,7 +7,7 @@ -module(ggs_db). -import(mnesia). %-compile({no_auto_import,[length/2]}). --export([init/0,setItem/4,getItem/3,removeItem/3,key/3,length/2]). +-export([init/0,setItem/4,getItem/3,removeItem/3,key/3,clear/2,length/2]). -include("ggs_db.hrl"). %%----------------------------------------------------- @@ -71,3 +71,14 @@ key(Db,Ns,Position) -> end, {atomic, Ret} = mnesia:transaction(Fun), Ret. + + +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. + diff --git a/mnesia/ggs_db_test.erl b/mnesia/ggs_db_test.erl index a1a2ff1..ea6e12e 100644 --- a/mnesia/ggs_db_test.erl +++ b/mnesia/ggs_db_test.erl @@ -25,15 +25,14 @@ length_test() -> removeItem_test() -> ggs_db:removeItem(1,1,4), ?assertNot(ggs_db:getItem(1,1,4) =:= {atomic,"114"}). - %mnesia:stop(). key_test() -> - ?assert(ggs_db:key(1,1,2) =:= {1,1,3}), + ?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(). -%cleanup(Val) -> -% mnesia:stop(). - - %tests() -> % ggs_db_test(). From a7ffc843437e66ca5996f8965a884c2d43ad16d1 Mon Sep 17 00:00:00 2001 From: Kallfaktorn Date: Tue, 22 Feb 2011 00:18:13 +0100 Subject: [PATCH 6/7] refactoring. --- mnesia/ggs_db.erl | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/mnesia/ggs_db.erl b/mnesia/ggs_db.erl index eef1415..912d349 100644 --- a/mnesia/ggs_db.erl +++ b/mnesia/ggs_db.erl @@ -45,6 +45,16 @@ removeItem(Db,Ns,Key) -> 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 %%----------------------------------------------------- @@ -73,12 +83,4 @@ key(Db,Ns,Position) -> Ret. -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. From bf4d7439233b33770b92bcb0b464204c34baeabc Mon Sep 17 00:00:00 2001 From: Kallfaktorn Date: Tue, 22 Feb 2011 01:09:55 +0100 Subject: [PATCH 7/7] ggs_db.erl only init and stop left to do. ggs_db.test.erl only init and stop left todo. Everything else is done with these two files. --- erlang_js | 2 +- {mnesia => src}/ggs_db.erl | 0 {mnesia => tests}/ggs_db_test.erl | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename {mnesia => src}/ggs_db.erl (100%) rename {mnesia => tests}/ggs_db_test.erl (100%) diff --git a/erlang_js b/erlang_js index 709b568..5350ed2 160000 --- a/erlang_js +++ b/erlang_js @@ -1 +1 @@ -Subproject commit 709b568efbc99c954507d1593bc5633f900bc5dc +Subproject commit 5350ed21606606dbee5ecb07e974f2abb9106270 diff --git a/mnesia/ggs_db.erl b/src/ggs_db.erl similarity index 100% rename from mnesia/ggs_db.erl rename to src/ggs_db.erl diff --git a/mnesia/ggs_db_test.erl b/tests/ggs_db_test.erl similarity index 100% rename from mnesia/ggs_db_test.erl rename to tests/ggs_db_test.erl