View Source Moebius.QueryFilter (Moebius v4.0.2)
The QueryFilter module is used to build WHERE clauses to be used in queries. You can call it directly but in most cases it will be used through the Query module (see Query module).
Here is an example of adding a predicate to match an email address:
iex> cmd = %Moebius.QueryCommand{table_name: 'users'} iex> cmd = Moebius.QueryFilter.filter(cmd, email: "test@test.com") iex> cmd.where " where email = $1" iex> cmd.params ["test@test.com"]
Or if you prefer a more SQL-like syntax, you can use "where", which is an alias for "filter":
iex> cmd = Moebius.QueryFilter.where(cmd, email: "test@test.com")
Although there are more examples in the Moebius.Query module here are a few to show filters in action:
Basic Select:
iex> import Moebius.Query iex> cmd = db(:users) |> ...> filter(email: "test@test.com") |> ...> select iex> cmd.sql "select * from users where email = $1;" iex> cmd.params ["test@test.com"]
Basic Select using '>' Operator:
iex> import Moebius.Query iex> cmd = db(:users) |> ...> filter(:order_count, gt: 5) |> ...> select iex> cmd.sql "select * from users where order_count > $1;" iex> cmd.params ["phillip", "lela", "bender"]
Basic Select using 'IN' Operator:
iex> import Moebius.Query iex> cmd = db(:users) |> ...> filter(:name, in: ["phillip", "lela", "bender"]) |> ...> select iex> cmd.sql "select * from users where name IN($1, $2, $3);" iex> cmd.params ["phillip", "lela", "bender"]
All available Operators:
- "=": eq
- "!=": neq
- ">": gt
- "<": lt
- ">=": gte
- "<=": lte
- "IN": in
- "NOT IN": not_in (or nin)
Basic Select using string:
iex> import Moebius.Query iex> cmd = db(:users) |> ...> filter("email LIKE $1", "%test.com%") |> ...> select iex> cmd.sql "select * from users where email LIKE $1;" iex> cmd.params ["%test.com%"]
Filters can also be piped:
iex> import Moebius.Query iex> cmd = db(:users) |> ...> filter("email LIKE $1", "%test.com%") |> ...> filter(:name, not_in: ["phillip", "lela", "bender"]) |> ...> filter(:order_count, gt: 5) |> ...> select iex> cmd.sql "select * from users where email LIKE $1 and name NOT IN($2, $3, $4) and order_count > $5;" iex> cmd.params ["%test.com%", "phillip", "lela", "bender"]