Search code examples
erlangmnesia

How to read all the records of mnesia database in erlang?


I ma new in erlang and I need to do some operations for all records I get from mnesia database.

Result = mnesia:dirty_read(mydatabase, {key1, key2}),
        case Result of 
            [] ->
                ?DEBUG("No such record found", []);
            [#mydatabase{key3 = Key3}] ->
                %% some operations
        end

How can I add a loop to my code that execute some operations for all records?

I am not even sure if the code above does it or not?


Solution

  • You could use mnesia:foldl/3 for that. It iterates over all records in a table, passing along an "accumulator" value.

    It doesn't have an explicit "dirty" counterpart, so if you want to run it as a dirty operation you need to use mnesia:activity/2. (Or you could just use it inside a call to mnesia:transaction.)

    In this example, I don't actually do anything with the "accumulator", leaving as ignored_acc throughout.

    mnesia:activity(sync_dirty,
      fun() ->
          mnesia:foldl(
              fun(#mydatabase{}, Acc) ->
                  %% do something with the record here
                  Acc
              end,
              ignored_acc,
              my_table)
      end)