PROBLEM: $positions are off-by-one

pull/1164/head
Rick Carlino 2020-02-26 20:19:40 -06:00
parent 6a961390e6
commit f7a345e9bf
2 changed files with 15 additions and 15 deletions

View File

@ -25,11 +25,8 @@ defmodule FarmbotCore.Asset.CriteriaRetriever do
def run(%PointGroup{} = pg) do
# = = = Handle AND criteria
{query, criteria} = flatten(pg) |> normalize() |> to_sql()
x = Repo.query(query, criteria)
IO.puts("FIX THIS SYNTAX ERROR. COnvert ? to $123. WILL BE HARD FOR ARRAYS")
IO.inspect(x)
[]
{query, criteria} = flatten(pg) |> normalize()
Repo.query(query, criteria)
# = = = Handle point_id criteria
# = = = Handle meta.* criteria
end
@ -47,22 +44,27 @@ defmodule FarmbotCore.Asset.CriteriaRetriever do
end
def normalize(list) do
list
{query, args, _count} = list
|> Enum.reduce(%{}, &stage_2/2)
|> Map.to_list()
|> Enum.reduce({[], [], 0}, &stage_3/2)
to_sql({query, args})
end
def to_sql({fragments, criteria}) do
queries = fragments
|> Enum.with_index
|> Enum.map(fn {str, inx} -> String.replace(str, "?", "$#{inx}") end)
|> Enum.join(" AND ")
x = Enum.join(fragments, " AND ")
sql = "SELECT * FROM points WHERE #{x}"
escapes = List.flatten(criteria)
{"SELECT id FROM points WHERE #{queries}", criteria}
IO.puts("%%%%%%%%%%%%%%%%%%%%%%")
IO.inspect(sql)
IO.inspect(escapes)
{sql, escapes}
end
defp unwrap({_pg, accum}), do: accum
defp unwrap({_, right}), do: right
defp stage_1({pg, accum}, kind, fields, op) do
results = fields

View File

@ -63,7 +63,7 @@ defmodule FarmbotCore.Asset.CriteriaRetrieverTest do
test "query" do
results = CriteriaRetriever.run(point_group_with_fake_points())
IO.puts("===================================")
IO.puts("----- #37")
IO.inspect(results)
end
@ -84,7 +84,5 @@ defmodule FarmbotCore.Asset.CriteriaRetrieverTest do
assert Enum.count(expected) == Enum.count(results)
Enum.map(expected, fn query -> assert Enum.member?(results, query) end)
IO.puts("===================================")
IO.inspect(CriteriaRetriever.normalize(results))
end
end