moving from mnesia to ets. matchspecs are complicated when dates and atoms are involved.
This commit is contained in:
110
src/ezic_db_ets_admin.erl
Normal file
110
src/ezic_db_ets_admin.erl
Normal file
@@ -0,0 +1,110 @@
|
||||
-module(ezic_db_ets_admin).
|
||||
-include("include/ezic.hrl").
|
||||
-include_lib("eunit/include/eunit.hrl").
|
||||
|
||||
-define(TABS, [rule, zone, leap, flatzone]).
|
||||
-define(DB_FILENAME, "db.e2f").
|
||||
-define(DETS_OPTS, []).
|
||||
-define(ETS_OPTS, [named_table]).
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
-export([
|
||||
init/0
|
||||
, wipe/0
|
||||
, insert_all/1
|
||||
, wipe/1
|
||||
]).
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
% ADMIN API
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
|
||||
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
% Entire DB
|
||||
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
%% if dets tables exist,
|
||||
%% load stored tables
|
||||
%% else
|
||||
%% create all ets tables as named tables
|
||||
%% load data
|
||||
init() ->
|
||||
{ok, DbDir}= application:get_env(db_dir),
|
||||
Filename= filename:join(DbDir, ?DB_FILENAME),
|
||||
Tabfile= case db_sane(Filename) of
|
||||
true -> load_tabfile(Filename);
|
||||
false -> create_tables(Filename)
|
||||
end,
|
||||
{ok, Tabfile}.
|
||||
|
||||
|
||||
% erases all data
|
||||
wipe() ->
|
||||
not_done.
|
||||
|
||||
|
||||
% inserts all records into the appropriate db
|
||||
insert_all(Record) ->
|
||||
not_done.
|
||||
|
||||
|
||||
|
||||
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
% Single Table
|
||||
%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
% erases date for one table
|
||||
wipe(Tab) ->
|
||||
not_done.
|
||||
|
||||
|
||||
|
||||
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
%% PRIVATE
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
|
||||
%% -> true if table exists
|
||||
db_sane(Filename) ->
|
||||
%% @todo ensure data is present for each record type.
|
||||
|
||||
case ets:tabfile_info(Filename) of
|
||||
{ok, _} -> true;
|
||||
{error, _} -> false
|
||||
end.
|
||||
|
||||
|
||||
|
||||
%% creates the dets table and populates it.
|
||||
create_tables(Filename) ->
|
||||
Tab= ets:new(ezic_ets_db, [duplicate_bag]),
|
||||
ets:insert(Tab, ezic_loader:load()),
|
||||
|
||||
% save to disk
|
||||
ets:tab2file(Tab, Filename),
|
||||
|
||||
Tab.
|
||||
|
||||
|
||||
|
||||
%% loads or creates the dets table.
|
||||
load_tabfile(Filename) ->
|
||||
{ok, Name}= ets:file2tab(Filename),
|
||||
Name.
|
||||
|
||||
|
||||
|
||||
%% takes a populated dets table and converts it to an ets table.
|
||||
ets_from_dets(Dets) ->
|
||||
Ets= ets:new(tzdb, ?ETS_OPTS),
|
||||
dets:to_ets(Dets, Ets).
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user