All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

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 for the full policy.

[Unreleased]

[0.1.0-beta.2]

Changed

  • Renamed the package and module namespace from Quarry to Decant (quarrydecant). 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.