Now using named ets tables.

More closely mirrors the design of the mnesia backed version.
This commit is contained in:
lsowen
2012-11-07 14:06:27 -05:00
parent fe6db38bec
commit 9d0df77b29
3 changed files with 71 additions and 42 deletions

View File

@@ -37,11 +37,11 @@
init() ->
{ok, DbDir}= application:get_env(db_dir),
Filename= filename:join(DbDir, ?DB_FILENAME),
Ets= case db_sane(Filename) of
case db_sane(Filename) of
true -> load_tabfile(Filename);
false -> create_tables(Filename)
end,
{ok, Ets}.
{ok, []}.
% erases all data
@@ -84,21 +84,50 @@ db_sane(Filename) ->
%% creates the dets table and populates it.
create_tables(Filename) ->
Ets= ets:new(ezic_ets_db, [duplicate_bag]),
ets:insert(Ets, ezic_loader:load()),
ezic_flatten:flatten(Ets),
{ok, Zones, Rules, _, _} = ezic_record:separate(ezic_loader:load()),
ets:new(zone, [duplicate_bag, named_table]),
ets:insert(zone, Zones),
ets:new(rule, [duplicate_bag, named_table]),
ets:insert(rule, Rules),
ets:new(flatzone, [duplicate_bag, named_table]),
ezic_flatten:flatten(),
% combine into one ets
Ets= ets:new(ezic_db_ets, [duplicate_bag]),
ets:insert(Ets, ets:lookup(zone, zone)),
ets:insert(Ets, ets:lookup(rule, rule)),
ets:insert(Ets, ets:lookup(flatzone, flatzone)),
% save to disk
ets:tab2file(Ets, Filename),
Ets.
ets:delete(Ets),
ok.
%% loads or creates the dets table.
load_tabfile(Filename) ->
{ok, Name}= ets:file2tab(Filename),
Name.
{ok, Ets}= ets:file2tab(Filename),
Zones= ets:lookup(Ets, zone),
ets:new(zone, [duplicate_bag, named_table]),
ets:insert(zone, Zones),
Rules= ets:lookup(Ets, rule),
ets:new(rule, [duplicate_bag, named_table]),
ets:insert(rule, Rules),
FlatZones= ets:lookup(Ets, flatzone),
ets:new(flatzone, [duplicate_bag, named_table]),
ets:insert(flatzone, FlatZones),
ets:delete(Ets),
ok.