Skip to content

Commit

Permalink
[#139] Fix multi-level adapter to call get_all/3 into the underlyin…
Browse files Browse the repository at this point in the history
…g levels
  • Loading branch information
cabol committed Oct 24, 2021
1 parent a76162f commit faff154
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions lib/nebulex/adapters/multilevel.ex
Original file line number Diff line number Diff line change
Expand Up @@ -327,12 +327,21 @@ defmodule Nebulex.Adapters.Multilevel do
end

@impl true
defspan get_all(adapter_meta, keys, _opts) do
Enum.reduce(keys, %{}, fn key, acc ->
if obj = get(adapter_meta, key, []),
do: Map.put(acc, key, obj),
else: acc
end)
defspan get_all(adapter_meta, keys, opts) do
fun = fn level, {keys_acc, map_acc} ->
map = with_dynamic_cache(level, :get_all, [keys_acc, opts])
map_acc = Map.merge(map_acc, map)

case keys_acc -- Map.keys(map) do
[] -> {:halt, {[], map_acc}}
keys_acc -> {:cont, {keys_acc, map_acc}}
end
end

opts
|> levels(adapter_meta.levels)
|> Enum.reduce_while({keys, %{}}, fun)
|> elem(1)
end

@impl true
Expand Down

0 comments on commit faff154

Please sign in to comment.