I want to use the value inside one case statement into an other . This is my code
select when is_map(select) ->
query = from(p in queryable, select: %{})
fields =
Enum.reduce(select, [], fn {key, value}, fields ->
Enum.reduce(value, query, fn {k, v}, query ->
case k do
"$avg" ->
val = Enum.at(v, 0)
query =
from(
p in query,
select_merge: %{avg: avg(field(p, ^String.to_atom(val)))}
)
"$count" ->
val = Enum.at(v, 0)
query =
from(
p in query,
select_merge: %{count: count(field(p, ^String.to_atom(val)))}
)
"$min" ->
val = Enum.at(v, 0)
query =
from(
p in query,
select_merge: %{min: min(field(p, ^String.to_atom(val)))}
)
"$max" ->
val = Enum.at(v, 0)
query =
from(
p in query,
select_merge: %{max: max(field(p, ^String.to_atom(val)))}
)
"$sum" ->
val = Enum.at(v, 0)
query =
from(
p in query,
select_merge: %{sum: sum(field(p, ^String.to_atom(val)))}
)
"$fields" ->
fields = Enum.map(v, &String.to_atom/1)
query
_ ->
relation_name = String.to_atom(k)
case queryable.__schema__(:association, relation_name) do
%Ecto.Association.Has{
owner: _owner,
owner_key: owner_key,
related: _related,
related_key: _related_key
} ->
va = fields ++
[owner_key] ++
[{relation_name, Enum.map(v, &String.to_existing_atom/1)}]
query = from p in query, select_merge: %{asso_field: ^va}
%Ecto.Association.BelongsTo{
owner: _owner,
owner_key: owner_key,
related: _related,
related_key: _related_key
} ->
va = fields ++
[owner_key] ++
[{relation_name, Enum.map(v, &String.to_existing_atom/1)}]
query = from p in query, select_merge: %{asso_field: ^va}
end
end)
end)
end
I want to use the fields
variable in $fields
inside the _
statement. Is it possible? How can it be achieved?
Any work around may be?
Any help will be much appreciated
Thanks