Extend Ecto's query API with your own macros
Imagine for a second this is something you're using a lot when programming Elixir and Phoenix:
Repo.one(
from u in User,
where: fragment("lower(?)", u.email) == ^email
)
You can write your own Elixir macro to improve your flow.
defmacro lower(arg) do
quote do: fragment("lower(?)", unquote(arg))
end
Then your query can be rewritten like this:
Repo.one(
from u in User,
where: lower(u.email) == ^email
)