Skip to content

Commit

Permalink
Add some mnesia functions without testing, wrapper v2
Browse files Browse the repository at this point in the history
  • Loading branch information
shahryarjb committed Mar 3, 2024
1 parent 2894719 commit 9a79e88
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 0 deletions.
18 changes: 18 additions & 0 deletions lib/modules/mnesia_assistant/mnesia_assistant.ex
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
defmodule MnesiaAssistant do
alias MnesiaAssistant.{Information, Schema}
alias :mnesia, as: Mnesia

def initial() do
# TODO: add __using__ to create and start Mnesia
Expand Down Expand Up @@ -32,4 +33,21 @@ defmodule MnesiaAssistant do
defdelegate set_debug_level(level), to: Information

defdelegate schema(), to: Schema

############### Global functions Public Apis ###############
# Ref: https://www.erlang.org/doc/apps/mnesia/mnesia_chap5#mnesia-event-handling
# system | activity | {table, table(), simple | detailed}
def subscribe({:table, table}), do: Mnesia.subscribe({:table, table})

def subscribe({:table, table, simple_detailed}),
do: Mnesia.subscribe({:table, table, simple_detailed})

def subscribe(what), do: Mnesia.subscribe(what)

def unsubscribe({:table, table}), do: Mnesia.unsubscribe({:table, table})

def unsubscribe({:table, table, simple_detailed}),
do: Mnesia.unsubscribe({:table, table, simple_detailed})

def unsubscribe(what), do: Mnesia.unsubscribe(what)
end
30 changes: 30 additions & 0 deletions lib/modules/mnesia_assistant/operation/backup_and_restore.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,34 @@ defmodule MnesiaAssistant.BackupAndRestore do
def dump_to_textfile(path), do: Mnesia.dump_to_textfile(path)

def set_master_nodes(nodes) when is_list(nodes), do: Mnesia.set_master_nodes(nodes)

# backup_checkpoint(Name, Dest) -> result()
# backup_checkpoint(Name, Dest, Mod) -> result()
def backup_checkpoint(name, dest, mod), do: Mnesia.backup_checkpoint(name, dest, mod)
def backup_checkpoint(name, dest), do: Mnesia.backup_checkpoint(name, dest)

def backup(backup_path), do: Mnesia.backup(backup_path)

def backup(backup_path, module), do: Mnesia.backup(backup_path, module)

# traverse_backup(Src :: term(), Dest :: term(), Fun, Acc) ->
# traverse_backup(Src :: term(), SrcMod :: module(), Dest :: term(), DestMod :: module(), Fun, Acc)
def traverse_backup(source, dest, fun, acc), do: Mnesia.traverse_backup(source, dest, fun, acc)

def traverse_backup(source, source_module, dest, dest_module, fun, acc),
do: Mnesia.traverse_backup(source, source_module, dest, dest_module, fun, acc)

# Op = skip_tables | clear_tables | keep_tables | restore_tables
# Arg = {module, module()} | {Op, [table()]} | {default_op, Op}
def restore(source, args), do: Mnesia.restore(source, args)

def install_fallback(source), do: Mnesia.install_fallback(source)
def install_fallback(source, module), do: Mnesia.install_fallback(source, module)

def uninstall_fallback(), do: Mnesia.uninstall_fallback()
# Args = [{mnesia_dir, Dir :: string()}]
# {module, BackupMod}. For semantics, see mnesia:install_fallback/2.
# {scope, Scope}. For semantics, see mnesia:install_fallback/2.
# {mnesia_dir, AlternateDir}. For semantics, see mnesia:install_fallback/2.
def uninstall_fallback(args) when is_list(args), do: Mnesia.uninstall_fallback(args)
end
2 changes: 2 additions & 0 deletions lib/modules/mnesia_assistant/operation/fragment.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
defmodule MnesiaAssistant.Fragment do
end
2 changes: 2 additions & 0 deletions lib/modules/mnesia_assistant/operation/information.ex
Original file line number Diff line number Diff line change
Expand Up @@ -50,4 +50,6 @@ defmodule MnesiaAssistant.Information do

def set_debug_level(level) when level in @debug_level_types,
do: Mnesia.set_debug_level(level)

def report_event(event), do: Mnesia.report_event(event)
end
10 changes: 10 additions & 0 deletions lib/modules/mnesia_assistant/operation/schema.ex
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,14 @@ defmodule MnesiaAssistant.Schema do
:ok = File.mkdir_p!(path)
end
end

# {name, Name}
# | {max, [table()]}
# | {min, [table()]}
# | {allow_remote, boolean()}
# | {ram_overrides_dump, boolean()}
def activate_checkpoint(args) when is_list(args), do: Mnesia.activate_checkpoint(args)

# deactivate_checkpoint(Name :: term()) -> result()
def deactivate_checkpoint(name), do: Mnesia.deactivate_checkpoint(name)
end

0 comments on commit 9a79e88

Please sign in to comment.