if Code.ensure_loaded?(Ecto) do defmodule AntlUtils.Ecto.Query do import Ecto.Query def where(queryable, key, nil) when is_atom(key) do from(q in queryable, where: is_nil(field(q, ^key))) end def where(queryable, key, value) when is_atom(key) and is_integer(value) do from(q in queryable, where: field(q, ^key) == ^value) end def where(queryable, key, value) when is_atom(key) and is_binary(value) do from(q in queryable, where: field(q, ^key) == ^value) end def where(queryable, key, value) when is_atom(key) and length(value) > 0 do from(q in queryable, where: field(q, ^key) in ^value) end def where_like(queryable, key, value) when is_atom(key) and is_binary(value) do like_value = "%#{String.replace(value, "%", "\\%")}%" from(q in queryable, where: like(field(q, ^key), ^like_value)) end def or_where(queryable, key, nil) when is_atom(key) do from(q in queryable, or_where: is_nil(field(q, ^key))) end def or_where(queryable, key, value) when is_atom(key) and is_binary(value) do from(q in queryable, or_where: field(q, ^key) == ^value) end def or_where(queryable, key, value) when is_atom(key) and length(value) > 0 do from(q in queryable, or_where: field(q, ^key) in ^value) end def or_where_like(queryable, key, value) when is_atom(key) and is_binary(value) do like_value = "%#{String.replace(value, "%", "\\%")}%" from(q in queryable, or_where: like(field(q, ^key), ^like_value)) end def order_by(queryable, key, order) when is_atom(key) and order in [:asc, :desc] do from(q in queryable, order_by: [{^order, field(q, ^key)}]) end end end