TODO: map() actually needs to be a reduce()

pull/1164/head
Rick Carlino 2020-02-24 15:54:45 -06:00
parent a8fa3044b5
commit bf4c62ecbc
2 changed files with 15 additions and 13 deletions

View File

@ -1,6 +1,6 @@
defmodule FarmbotCore.Asset.CriteriaRetriever do
alias FarmbotCore.Asset.PointGroup
# import Ecto.Query
alias FarmbotCore.Asset.{PointGroup, Repo, Point}
import Ecto.Query
@moduledoc """
__ _ The PointGroup asset declares a list
@ -22,13 +22,16 @@ defmodule FarmbotCore.Asset.CriteriaRetriever do
def run(%PointGroup{} = pg) do
{_, list} = flatten(pg)
Enum.map(list, fn [expr, args] ->
# hmm = where([expr], ^args)
hmm = [expr, args]
IO.inspect(hmm)
hmm
end)
queries = Enum.map(list, fn [expr, op, args] ->
from p in Point, where: fragment("? ? ?", ^expr, ^op, ^args)
end)
# all =
Repo.all(Point, queries)
# Enum.reduce(queries, all, fn(query, results)->
# results
# end)
# Handle AND criteria
# Handle point_id criteria
# Handle meta.* criteria
@ -65,7 +68,7 @@ defmodule FarmbotCore.Asset.CriteriaRetriever do
now = Timex.now()
time = Timex.shift(now, days: -1 * days)
query = ["created_at #{op} ?", time]
query = ["created_at", op, time]
{ pg, accum ++ [ query ] }
end
@ -76,7 +79,7 @@ defmodule FarmbotCore.Asset.CriteriaRetriever do
{field, pg.criteria[criteria_kind][field]}
end)
|> Enum.filter(fn {_k, v} -> v end)
|> Enum.map(fn {k, v} -> ["#{k} #{op} ?", v] end)
|> Enum.map(fn {k, v} -> [k, op, v] end)
{pg, accum ++ results}
end
end

View File

@ -2,7 +2,6 @@ defmodule FarmbotCore.Asset.CriteriaRetrieverTest do
use ExUnit.Case, async: true
use Mimic
# alias FarmbotCore.Asset.{ CriteriaRetriever, PointGroup, Repo, Point }
alias FarmbotCore.Asset.{
CriteriaRetriever,
Point,
@ -64,8 +63,8 @@ defmodule FarmbotCore.Asset.CriteriaRetrieverTest do
test "query" do
pg = point_group_with_fake_points()
CriteriaRetriever.run(pg)
raise "TODO: Need to build dynamic query."
IO.puts("===")
IO.inspect(CriteriaRetriever.run(pg))
end
test "CriteriaRetriever.flatten/1" do