Skip to content

Instantly share code, notes, and snippets.

@shino
Created September 17, 2010 14:51
Show Gist options
  • Save shino/584323 to your computer and use it in GitHub Desktop.
Save shino/584323 to your computer and use it in GitHub Desktop.
-module(mnesia_index_as_ets).
-export([main/0]).
-include_lib("eunit/include/eunit.hrl").
-record(kv, {key, value}).
main() ->
mnesia:start(),
mnesia:create_table(kv, [{attributes, record_info(fields, kv)},
{index, [#kv.value]}]),
IndexEts = mnesia_lib:val({kv, {index, #kv.value}}),
?debugFmt("Index table of ets: ~p", [IndexEts]),
?debugFmt("Contents: ~p", [ets:tab2list(IndexEts)]),
mnesia:activity(transaction, fun mnesia:write/1, [#kv{key=1, value="one"}]),
mnesia:activity(transaction, fun mnesia:write/1, [#kv{key=2, value="two"}]),
?debugFmt("Contents: ~p", [ets:tab2list(IndexEts)]),
mnesia:activity(transaction, fun mnesia:write/1, [#kv{key=3, value="three"}]),
mnesia:activity(transaction, fun mnesia:write/1, [#kv{key=two, value="two"}]),
?debugFmt("Contents: ~p", [ets:tab2list(IndexEts)]),
?debugFmt("Table info: ~p", [ets:info(IndexEts)]),
mnesia:stop(),
ok.
@shino
Copy link
Author

shino commented Sep 17, 2010

Result of execution

19> mnesia_index_as_ets:main().

/mnesia/mnesia_index_as_ets.erl:14: Index table of ets: 200722

/mnesia/mnesia_index_as_ets.erl:15: Contents: []

/mnesia/mnesia_index_as_ets.erl:19: Contents: [{"one",1},{"two",2}]

/mnesia/mnesia_index_as_ets.erl:23: Contents: [{"one",1},{"three",3},{"two",2},{"two",two}]

/mnesia/mnesia_index_as_ets.erl:25: Table info: [{memory,390},

         {owner,<0.183.0>},

         {heir,none},

         {name,mnesia_index},

         {size,4},

         {node,nonode@nohost},

         {named_table,false},

         {type,bag},

         {keypos,1},

         {protection,public}]

ok

20>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment