From ee9c2ac044cc77b80f30420c8f0788cad4281084 Mon Sep 17 00:00:00 2001 From: nsensfel Date: Wed, 6 Jun 2018 15:54:18 +0200 Subject: Figuring out how to organize the src folder(s)... --- src/db/struct/db_model.erl | 71 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/db/struct/db_model.erl (limited to 'src/db/struct/db_model.erl') diff --git a/src/db/struct/db_model.erl b/src/db/struct/db_model.erl new file mode 100644 index 0000000..1b21629 --- /dev/null +++ b/src/db/struct/db_model.erl @@ -0,0 +1,71 @@ +-module(db_model). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +-record +( + db_model, + { + name :: atom(), + store_file :: string(), + neighbors :: list(node()) + } +). + +-type type() :: #db_model{}. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export_type([type/0]). + +-export +( + [ + new/3, + start/1 + ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec new (atom(), string(), list(node())) -> type(). +new (DBName, StorageFile, Neighbors) -> + #db_model + { + name = DBName, + store_file = StorageFile, + neighbors = Neighbors + }. + +start (Model) -> + DBName = Model#db_model.name, + StorageFile = Model#db_model.store_file, + Neighbors = Model#db_model.neighbors, + + ok = application:set_env(mnesia, dir, StorageFile), + case mnesia:create_schema([node()|Neighbors]) of + {error, {Name, {already_exists, Name}}} -> ok; + ok -> ok + end, + ok = mnesia:start(), + mnesia:create_table + ( + DBName, + [ + {record_name, db_item:get_record_name()}, + {attributes, db_item:get_record_info()}, + {disc_copies, [node()|Neighbors]}, + {disc_only_copies, []}, + {ram_copies, []}, + {type, ordered_set}, + {local_content, false} + ] + ). -- cgit v1.2.3-70-g09d2