Packages
cubdb
0.2.0
2.0.2
2.0.1
2.0.0
2.0.0-rc.1
1.1.0
1.0.0
1.0.0-rc.10
1.0.0-rc.9
1.0.0-rc.8
1.0.0-rc.7
1.0.0-rc.6
1.0.0-rc.5
1.0.0-rc.4
1.0.0-rc.3
1.0.0-rc.2
1.0.0-rc.1
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.0
0.14.0
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.0
0.8.0
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
A pure-Elixir embedded key-value database
Current section
Files
Jump to
Current section
Files
lib/cubdb/store/utils.ex
defmodule CubDB.Store.Utils do
@moduledoc false
alias CubDB.Store
alias CubDB.Btree
@value Btree.__value__()
@deleted Btree.__deleted__()
def debug(store) do
{_, {size, root_loc, _}} = Store.get_latest_header(store)
{:Btree, size, debug_node(store, root_loc)}
end
defp debug_node(store, loc) do
case Store.get_node(store, loc) do
{@value, value} ->
value
@deleted ->
@deleted
{type, locs} ->
children =
Enum.map(locs, fn {k, loc} ->
{k, debug_node(store, loc)}
end)
{type, children}
end
end
def load(store, {:Btree, size, root}) do
{root_loc, root_node} = load_node(store, root)
Store.put_header(store, {size, root_loc})
{root_loc, root_node}
end
defp load_node(store, {type, children}) do
locs =
Enum.map(children, fn {k, child} ->
{loc, _} = load_node(store, child)
{k, loc}
end)
node = {type, locs}
{Store.put_node(store, node), node}
end
defp load_node(store, value) do
node = {@value, value}
{Store.put_node(store, node), node}
end
end