[erlang-questions] Re: How to reduce the repetitious code in create mnesia table?
Ulf Wiger
ulf.wiger@REDACTED
Tue Mar 30 18:58:06 CEST 2010
Magnus Henoch wrote:
> 钱晓明 <kyleqian@REDACTED> writes:
>
>> Is there any way I can do to reduce the repetitious code? I have
>> tried defining a new function accepting the name of record to do the same
>> thing above, but can not compile code because of record_info.
>
> You could do it with a macro. Something like:
>
> -define(CHECK_CREATE_TABLE(Name, Attrs),
> case mnesia:create_table(Name, [{attributes, record_info(fields, Name)}|Attrs]) of
> {atomic, ok} -> ok;
> {aborted, {already_exists, Name}} -> ok
> end).
Having spent far too much time digging into mnesia internals, I prefer
to do it this way:
mktab(Name, Opts) ->
mnesia_schema:do_create_table(
mnesia_schema:list2cs([{name,Name}|Opts])).
mnesia_schema:schema_transaction(
fun() ->
mktab(t1, [{disc_copies, ...},...]),
mktab(t2, [{ram_copies, ...},...]),
...
end)
No need for lots of checks, and all tables are created, or
none are, which is usually what you want.
And, no, this isn't documented.
BR,
Ulf W
--
Ulf Wiger
CTO, Erlang Solutions Ltd, formerly Erlang Training & Consulting Ltd
http://www.erlang-solutions.com
---------------------------------------------------
---------------------------------------------------
WE'VE CHANGED NAMES!
Since January 1st 2010 Erlang Training and Consulting Ltd. has become ERLANG SOLUTIONS LTD.
www.erlang-solutions.com
More information about the erlang-questions
mailing list