Skip to content

Commit

Permalink
Correct code snippets
Browse files Browse the repository at this point in the history
  • Loading branch information
doomspork committed Jul 27, 2018
1 parent 8f79c14 commit 8a6d7e3
Showing 1 changed file with 22 additions and 17 deletions.
39 changes: 22 additions & 17 deletions _posts/2018-07-25-ecto-query-composition.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ defmodule Posts do
import Ecto.Query

defp base_query do
(from p in Post)
from p in Post
end
end
```
Expand Down Expand Up @@ -75,19 +75,21 @@ defp build_query(query, criteria) do
Enum.reduce(criteria, query, &compose_query/2)
end

defp compose_query(query, {"title", title}) do
where(query, [p], fragment("? ILIKE '%?%'", p.title, title))
defp compose_query({"title", title}, query) do
where(query, [p], ilike(p.title, ^"%#{title}%"))
end

defp compose_query(query, {"tags", tags}) do
join(query, :left, [p], t in assoc(p, :tags), on: t.name in ^tags)
defp compose_query({"tags", tags}, query) do
query
|> join(:left, [p], t in assoc(p, :tags))
|> where([_p, t], t.name in ^tags)
end

defp compose_query(query, {key, value}) when key in ~w(draft id) do
where(query, [p], {String.to_atom(key), value})
defp compose_query({key, value}, query) when key in ~w(draft id) do
where(query, [p], ^{String.to_atom(key), value})
end

defp compose_query(query, _unsupported_param) do
defp compose_query(_unsupported_param, query) do
query
end
```
Expand Down Expand Up @@ -128,26 +130,29 @@ defmodule Posts do
end

defp base_query do
(from p in Post)
from p in Post
end

defp build_query(criteria) do
defp build_query(query, criteria) do
Enum.reduce(criteria, query, &compose_query/2)
end

defp compose_query(query, {"title", title}) do
where(query, [p], fragment("? LIKE '%?%'", p.title, title))
defp compose_query({"title", title}, query) do
where(query, [p], ilike(p.title, ^"%#{title}%"))
end

defp compose_query(query, {"tags", tags}) do
join(query, :left, [p], t in assoc(p, :tags), on: t.name in ^tags)
defp compose_query({"tags", tags}, query) do
query
|> join(:left, [p], t in assoc(p, :tags))
|> where([_p, t], t.name in ^tags)
end

defp compose_query(query, {key, value}) when key in ~w(draft id) do
where(query, [p], {String.to_atom(key), value})
defp compose_query({key, value}, query) when key in ~w(draft id) do
field = String.to_atom(key)
where(query, [p], ^{field, value})
end

defp compose_query(query, _unsupported_param) do
defp compose_query(_unsupported_param, query) do
query
end

Expand Down

0 comments on commit 8a6d7e3

Please sign in to comment.