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.

[Unreleased]

[0.4.0] — 2026-07-27

Added

  • mix squirrelix.gen --watch watches {lib,test,dev}/**/sql/*.sql and regenerates on change (same query source / connection options as a one-shot gen; Ctrl-C to stop). Linux needs inotify-tools.
  • --write-metadata PATH on mix squirrelix.gen / mix squirrelix.check (requires --infer) exports a reloadable metadata file for offline check/codegen without Postgres.
  • Broader structural parameter naming beyond INSERT: comparison operators (<>, !=, <, >, <=, >=), LIKE/ILIKE (including NOT), and SET (columns) = (...) / ROW(...) lists (including ON CONFLICT ... DO UPDATE SET). Comparison/equality names still win over column-list inference; existing UPDATE ... SET col = $n and INSERT (cols) VALUES naming are unchanged.
  • Phoenix + CI cookbook guide (guides/phoenix.md) for Mix adoption: migrate-then-gen/check, DATABASE_URL, Mix aliases, CI check jobs, and intentional Ecto coexistence.

[0.3.0] — 2026-07-27

Added

  • Generated soft companions (<name>_ok/arity) via Postgrex.query/3 that return {:ok, result} | {:error, Exception.t()} without raising. Soft command companions return {:ok, num_rows} (affected-row count). The raising query! API is unchanged (additive, not breaking). See Writing Queries and Getting Started guides.
  • Parameter name inference from INSERT ... (columns) VALUES (...) placeholders (equality / UPDATE ... SET naming unchanged; equality wins on conflicts).
  • --infer honors DATABASE_URL with documented precedence: flags → --urlDATABASE_URLPG* → defaults. URL/PGSSLMODE sslmode (and ssl=true / ssl=false) map into Postgrex :ssl options.

Changed

[0.2.0] — 2026-07-27

Added

  • Nullability inference for schema-qualified tables, scalar subqueries in select lists, and expression-derived columns (see Writing Queries guide).
  • Structured errors for --infer connection failures and timeouts (CannotConnectToPostgres, PostgresConnectionTimeout) with actionable hints for PG* env vars, CLI flags, and metadata-file fallback.

Changed

  • Documented composite-type policy as reject-with-hints (aligned with Gleam Squirrel and flat Elixir row maps). Inference now attaches actionable hints for composites (kind: "c") and geometric point values.
  • Finalized unsupported-type policy for Postgres ranges/multiranges and remaining built-ins (interval, geometric, network, money, and related types): inference rejects them with actionable hints, and the Types guide documents workarounds.

[0.1.0] — 2026-07-24

Added

  • First public release of Squirrelix (Hex package squirr_elix): typed Elixir query modules from plain .sql files via Postgres inference or metadata.
  • Mix tasks mix squirrelix.gen and mix squirrelix.check.
  • Guides for getting started, writing queries, types, and configuration.
  • GitHub Actions CI (format, compile, Credo, tests with Postgres 16) and Hex publish on v* tags.

Changed

  • Public Elixir modules and Mix tasks use the Squirrelix name (package/app remain squirr_elix). Repository: scripthungry/squirrelix.

Security

  • Generated SQL and @doc strings are embedded with inspect/2 so #{} in .sql files cannot become Elixir interpolation in generated modules.