Utility.EctoQuery (Portico/Z v0.1.0)

Fancy Ecto queries that we often re-use across contexts.

Link to this section Summary

Functions

"Fuzzy-match" field against value using PostgreSQL Trigram similary comparison.

Sanitize a user string, eg. when in use for LIKE queries.

Link to this section Functions

Link to this function

fuzzy_match(query, field, value, similarity \\ 0.7, limit \\ 100)

"Fuzzy-match" field against value using PostgreSQL Trigram similary comparison.

Works for any table. The search will likely be slow if the given field doesn't have a BIN index. See the migration for ZSchemas.FlatContact for examples.

Orders by similarity, in descending order.

See https://www.postgresql.org/docs/9.6/pgtrgm.html for more information about trigram comparison.

Examples

iex> fuzzy_match(ZSchemas.FlatContact, :first_name, "Ashley") |> Z.Repo.all()
[%ZSchemas.FlatContact{}, ...]
Link to this function

sanitize(user_string)

Specs

sanitize(String.t()) :: String.t()

Sanitize a user string, eg. when in use for LIKE queries.

Examples

iex> sanitize("some%$#garbage")
"somegarbage"