[0.9.1] - 2026-05-07
Fixed
- Upsert
ON CONFLICT DO UPDATE SQLGeneration - Fixed two bugs that caused"near ?: syntax error"on anyINSERT ... ON CONFLICT DO UPDATEquery, breaking all upsert operations including Ash Framework'supsert?actions. (Thanks @AlanMcCann for PR #95!)- Missing
:identifierexpression handler: Ecto generatesON CONFLICT UPDATEclauses using{:identifier, _, ["column_name"]}fragment expressions. Without a matchingexpr/3clause these fell through to the catch-all, producing invalid SQL such asSET "col" = EXCLUDED.?. - Bare
?parameter placeholders: SQLite requires numbered positional parameters (?1,?2, …) when a statement contains multiple parameter groups (INSERT values + ON CONFLICT UPDATE). The adapter now uses numbered parameters throughout, consistent with theecto_sqlite3adapter. INclause with bound list parameters was also left using bare?placeholders. TheIN (?, ?, ?)handler now generatesIN (?1, ?2, ?3)with correct start-index offsets, matching the numbering scheme used everywhere else.- Empty
INlist edge case (where: field in ^[]) is handled explicitly withIN (SELECT NULL WHERE 1=0)since SQLite rejectsIN ().
- Missing
- PRAGMA Statement Routing - PRAGMA statements are now correctly routed through the
query()path rather than the execute path, fixing incorrect behaviour when reading PRAGMA values (e.g.PRAGMA journal_mode,PRAGMA synchronous) via the Ecto adapter.
Changed
- Upstream Status Notice - Added a note to the README and Hex documentation about Turso’s transition away from libSQL toward their new Turso library (a full SQLite rewrite in Rust).
ecto_libsqlwill continue to receive bug fixes and security updates; see the README for more context. - Dependency Updates - Bumped
db_connection2.9.0 → 2.10.0,ecto3.13.5 → 3.13.6,jason1.4.4 → 1.4.5,rustler0.37.3 → 0.37.4,libsqlcrates 0.9.29 → 0.9.30, plus various transitive Rust dependency updates. - CI Toolchain - Replaced
erlef/setup-beamwithmisefor Elixir/OTP version management; updated to current Elixir/OTP versions; appliedzizmorGitHub Actions security hardening.
Security
- Acknowledged three additional
rustls-webpki0.102.x advisories (RUSTSEC-2026-0049, RUSTSEC-2026-0098, RUSTSEC-2026-0099, RUSTSEC-2026-0104) incargo deny- all are transitive via libsql’s pinnedrustls0.22.x dependency and cannot be resolved until libsql updates upstream.
New Contributors
- @AlanMcCann made their first contribution in #95
Full Changelog: 0.9.0...0.9.1