diff --git a/src/ezic.app.src b/src/ezic.app.src index f2cf744..2f54ff1 100644 --- a/src/ezic.app.src +++ b/src/ezic.app.src @@ -1,11 +1,11 @@ {application, ezic, [ {registered, []}, - {vsn, "0.1.0"}, + {vsn, "0.2.0"}, {applications, [ kernel, stdlib ]}, - {mod, {ezic_app, []}}, + {mod, {ezic_app, ezic_db_ets}}, {env, [{db_dir, "db"}]} ]}. \ No newline at end of file diff --git a/src/ezic_db.erl b/src/ezic_db.erl index bc8018c..0d18006 100644 --- a/src/ezic_db.erl +++ b/src/ezic_db.erl @@ -14,10 +14,11 @@ , insert_all/1 , wipe/1 , flatten/0 + , get_implementation/0 ]). -export([ - start_link/0 + start_link/1 , init/1 , code_change/3 , handle_call/3 @@ -27,6 +28,8 @@ ]). +-record(state, {zones, rules, get_all, flatzone, insert_all, wipe, implementation}). + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % PUBLIC API %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -63,18 +66,38 @@ wipe(Tab) -> flatten() -> gen_server:call(?MODULE, {flatten}). +get_implementation() -> + gen_server:call(?MODULE, {implementation}). + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% GEN_SERVER %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -start_link() -> - gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). +start_link(StartArgs) -> + gen_server:start_link({local, ?MODULE}, ?MODULE, StartArgs, []). +init(ezic_db_mnesia) -> + ezic_db_mnesia:init(), + State = #state{zones = fun ezic_db_mnesia:zones/1, + rules = fun ezic_db_mnesia:rules/1, + get_all = fun ezic_db_mnesia:get_all/1, + flatzone = fun ezic_db_mnesia:flatzone/2, + insert_all = fun ezic_db_mnesia:insert_all/1, + wipe = fun ezic_db_mnesia:wipe/1, + implementation = "mnesia"}, + {ok, State}; init(_) -> ezic_db_ets:init(), - {ok, []}. + State = #state{zones = fun ezic_db_ets:zones/1, + rules = fun ezic_db_ets:rules/1, + get_all = fun ezic_db_ets:get_all/1, + flatzone = fun ezic_db_ets:flatzone/2, + insert_all = fun ezic_db_ets:insert_all/1, + wipe = fun ezic_db_ets:wipe/1, + implementation = "ets"}, + {ok, State}. %%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ %% DB Lookup @@ -82,29 +105,39 @@ init(_) -> handle_call({zones, Name}, _, State) -> - Matches= ezic_db_ets:zones(Name), + ZoneFun= State#state.zones, + Matches= ZoneFun(Name), {reply, Matches, State}; handle_call({rules, Name}, _, State) -> - Matches= ezic_db_ets:rules(Name), + RuleFun= State#state.rules, + Matches= RuleFun(Name), {reply, Matches, State}; handle_call({all, Tab}, _, State) -> - Matches= ezic_db_ets:get_all(Tab), + GetAllFun= State#state.get_all, + Matches= GetAllFun(Tab), {reply, Matches, State}; handle_call({flatzone, Date, Name}, _, State) -> - Result= ezic_db_ets:flatzone(Date, Name), + FlatzoneFun= State#state.flatzone, + Result= FlatzoneFun(Date, Name), {reply, Result, State}; handle_call({insert_all, Records}, _, State) -> - ezic_db_ets:insert_all(Records), + InsertAllFun= State#state.insert_all, + InsertAllFun(Records), {noreply, State}; handle_call({wipe, Tab}, _, State) -> - Result= ezic_db_ets:wipe(Tab), + WipeFun= State#state.wipe, + Result= WipeFun(Tab), {reply, Result, State}; handle_call({flatten}, _, State) -> - Zones= ezic_db_ets:get_all(zone), - Rules= ezic_db_ets:get_all(rule), + GetAllFun= State#state.get_all, + Zones= GetAllFun(zone), + Rules= GetAllFun(rule), FlatZone= ezic_flatten:flatten(Zones, Rules), - Result= ezic_db_ets:insert_all(FlatZone), + InsertAllFun= State#state.insert_all, + Result= InsertAllFun(FlatZone), {reply, Result, State}; +handle_call({implementation}, _, State) -> + {reply, State#state.implementation, State}; handle_call(_, _, State) -> {noreply, State}. diff --git a/src/ezic_db_mnesia.erl b/src/ezic_db_mnesia.erl index 1c64b1a..8169f75 100644 --- a/src/ezic_db_mnesia.erl +++ b/src/ezic_db_mnesia.erl @@ -127,6 +127,7 @@ create_tabs(ok) -> insert_all(Zones), insert_all(Rules), FlatZones = ezic_flatten:flatten(Zones, Rules), + io:format("~p~n", [FlatZones]), insert_all(FlatZones), ok; diff --git a/src/ezic_flatten.erl b/src/ezic_flatten.erl index e25656c..56a66e1 100644 --- a/src/ezic_flatten.erl +++ b/src/ezic_flatten.erl @@ -143,7 +143,7 @@ flatten_zone_set(FromTimeStub=#flatzone{utc_from=UTCFrom, dstoffset=DSTOffset} %% we gather all rules that _may_ apply %Rules= ezic_db:rules(RuleName), - Rules= [R || R <- AllRules, R = #rule{name = RuleName}], + Rules= [R || R <- AllRules, R#rule.name =:= RuleName ], ?debugVal(FromTime), ?debugVal(Rules), diff --git a/src/ezic_sup.erl b/src/ezic_sup.erl index b1c9542..23f23de 100644 --- a/src/ezic_sup.erl +++ b/src/ezic_sup.erl @@ -24,8 +24,8 @@ %% Function: start_link() -> {ok,Pid} | ignore | {error,Error} %% Description: Starts the supervisor %%-------------------------------------------------------------------- -start_link(_) -> - supervisor:start_link(?MODULE, []). +start_link(StartArgs) -> + supervisor:start_link(?MODULE, StartArgs). %%==================================================================== %% Supervisor callbacks @@ -39,9 +39,9 @@ start_link(_) -> %% to find out about restart strategy, maximum restart frequency and child %% specifications. %%-------------------------------------------------------------------- -init(_) -> - EzicDb = {ezic_db,{ezic_db, start_link, []}, - permanent,2000,worker,[ezic_db_ets]}, +init(StartArgs) -> + EzicDb = {ezic_db,{ezic_db, start_link, [StartArgs]}, + permanent,2000,worker,[ezic_db]}, {ok,{{one_for_all,3,30}, [EzicDb]}}. %%====================================================================