Current section
Files
Jump to
Current section
Files
lib/mavu_list_totals.ex
defmodule MavuList.Totals do
@moduledoc false
import Ecto.Query
def total_entries(query, repo, caller) do
total_entries =
query
|> exclude(:preload)
|> exclude(:order_by)
|> prepare_select
|> count
|> repo.one(caller: caller)
total_entries || 0
end
defp prepare_select(
%{
group_bys: [
%Ecto.Query.QueryExpr{
expr: [
{{:., [], [{:&, [], [source_index]}, field]}, [], []} | _
]
}
| _
]
} = query
) do
query
|> exclude(:select)
|> select([{x, source_index}], struct(x, ^[field]))
end
defp prepare_select(query) do
query
|> exclude(:select)
end
defp count(query) do
query
|> subquery
|> select(count("*"))
end
end