# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
While the version is in the `0.x` range, any release MAY contain breaking
changes; the minor version is bumped for each one. See
[CONTRIBUTING.md](CONTRIBUTING.md) for the full policy.
## [Unreleased]
## [0.1.0-beta.2]
### Changed
- Renamed the package and module namespace from `Quarry` to `Decant`
(`quarry` → `decant`). No API or behavior change.
### Added
- `:on_blank` option controlling what a blank/no-token term resolves to: `:all`
(default, `dynamic(true)`) or `:none` (`dynamic(false)`, match nothing).
## [0.1.0-beta.1]
### Added
- `Decant.dynamic/2` — compile a tokenized, multi-field search string into a
composable `Ecto.Query.dynamic/2` built over named bindings.
- Two axes of boolean logic: `:token_logic` (`:and` default) across words and
`:field_logic` (`:or` default) across columns.
- Match modes `:contains` (default), `:prefix`, `:suffix`, `:exact`, settable
call-wide via `:match` or per-field.
- `:case` toggle between `ILIKE` (`:insensitive`, default) and `LIKE`
(`:sensitive`).
- Automatic `LIKE` wildcard escaping (`%`, `_`, `\`) so user input matches
literally; disable with `escape: false`.
- `:cast` field option wrapping a column in `CAST(? AS TEXT)` for searching
non-text columns.
- `Decant.Tokenizer` with configurable `:pattern`, `:trim`, `:drop_empty`,
`:downcase`, and a `:max_tokens` backstop.
- Empty / blank / `nil` terms return `dynamic(true)` for branch-free callers.