ash_postgres/documentation/topics/postgres-expressions.md
Abhishek Tripathi 9e31f90586
chore: fixed incorrect docs (#153)
Co-authored-by: abhishek <abhishek.tripathi@tinymesh.in>
2023-06-16 09:12:50 -04:00

40 lines
No EOL
1.3 KiB
Markdown

# Postgres Expressions
In addition to the expressions listed in the [Ash expressions guide](https://hexdocs.pm/ash/expressions.html), AshPostgres provides the following expressions
## Fragments
`fragment` allows you to embed raw sql into the query. Use question marks to interpolate values from the outer expression.
For example:
```elixir
Ash.Query.filter(User, fragment("? IS NOT NULL", first_name))
```
# Like and ILike
These wrap the postgres builtin like and ilike operators.
Please be aware, these match *patterns* not raw text. Use `contains/1` if you want to match text without supporting patterns, i.e `%` and `_` have semantic meaning!
For example:
```elixir
Ash.Query.filter(User, like(name, "%obo%")) # name contains obo anywhere in the string, case sensitively
```
```elixir
Ash.Query.filter(User, ilike(name, "%ObO%")) # name contains ObO anywhere in the string, case insensitively
```
# Trigram similarity
To use this expression, you must have the `pg_trgm` extension in your repos `installed_extensions` list.
This calls the `similarity` function from that extension. See more https://www.postgresql.org/docs/current/pgtrgm.htmlhere: https://www.postgresql.org/docs/current/pgtrgm.html
For example:
```elixir
Ash.Query.filter(User, trigram_similarity(first_name, "fred") > 0.8)
```