diff --git a/lib/scrivener/paginater/ecto/query.ex b/lib/scrivener/paginater/ecto/query.ex index c3f9aac..acd381c 100644 --- a/lib/scrivener/paginater/ecto/query.ex +++ b/lib/scrivener/paginater/ecto/query.ex @@ -10,12 +10,11 @@ defimpl Scrivener.Paginater, for: Ecto.Query do page_size: page_size, page_number: page_number, module: repo, - caller: caller, options: options }) do total_entries = Keyword.get_lazy(options, :total_entries, fn -> - total_entries(query, repo, caller, options) + aggregate(query, repo, options) end) total_pages = total_pages(total_entries, page_size) @@ -27,27 +26,21 @@ defimpl Scrivener.Paginater, for: Ecto.Query do %Page{ page_size: page_size, page_number: page_number, - entries: entries(query, repo, page_number, total_pages, page_size, caller, options), + entries: entries(query, repo, page_number, total_pages, page_size, options), total_entries: total_entries, total_pages: total_pages } end - defp entries(_, _, page_number, total_pages, _, _, _) when page_number > total_pages, do: [] + defp entries(_query, _repo, page_number, total_pages, _page_size, _options) when page_number > total_pages, do: [] - defp entries(query, repo, page_number, _, page_size, caller, options) do + defp entries(query, repo, page_number, _total_pages, page_size, options) do offset = Keyword.get_lazy(options, :offset, fn -> page_size * (page_number - 1) end) - prefix = options[:prefix] query |> offset(^offset) |> limit(^page_size) - |> all(repo, caller, prefix) - end - - defp total_entries(query, repo, caller, options) do - prefix = options[:prefix] - aggregate(query, repo, caller, prefix) + |> repo.all(options) end defp aggregate( @@ -62,8 +55,7 @@ defimpl Scrivener.Paginater, for: Ecto.Query do ] } = query, repo, - caller, - prefix + options ) do query |> exclude(:preload) @@ -72,15 +64,11 @@ defimpl Scrivener.Paginater, for: Ecto.Query do |> select([{x, source_index}], struct(x, ^[field])) |> subquery() |> select(count("*")) - |> one(repo, caller, prefix) - end - - defp aggregate(query, repo, caller, nil) do - repo.aggregate(query, :count, caller: caller) + |> repo.one(repo, options) end - defp aggregate(query, repo, caller, prefix) do - repo.aggregate(query, :count, caller: caller, prefix: prefix) + defp aggregate(query, repo, options) do + repo.aggregate(query, :count, options) end defp total_pages(0, _), do: 1 @@ -88,20 +76,4 @@ defimpl Scrivener.Paginater, for: Ecto.Query do defp total_pages(total_entries, page_size) do (total_entries / page_size) |> Float.ceil() |> round end - - defp all(query, repo, caller, nil) do - repo.all(query, caller: caller) - end - - defp all(query, repo, caller, prefix) do - repo.all(query, caller: caller, prefix: prefix) - end - - defp one(query, repo, caller, nil) do - repo.one(query, caller: caller) - end - - defp one(query, repo, caller, prefix) do - repo.one(query, caller: caller, prefix: prefix) - end end