Changes for version 0.20 - 2026-10-06

  • Reads ~10-15% faster: own statement cache instead of DBI's (Perl) prepare_cached, and no per-call closure when no tracker is active
  • query() iterator: no warning when it outlives a closed connection
  • IN (?) with an arrayref expands to one placeholder per value
  • where(): WHERE clause from filters (undef skipped; IN, CONTAINS...)
  • page(): rows + total + pages, ORDER BY from a whitelist
  • like(): literal LIKE patterns (ESCAPE '!'); in_chunks() for long lists
  • count()/exists(): IN, NOT IN, CONTAINS, PREFIX, SUFFIX operators
  • upsert/upsert_many: update modes 'new', '+', { '+' => N }, \'SQL'
  • insert_ignore(); find_or_create() (race-safe via the UNIQUE index)
  • insert_many/upsert_many: chunk => N; insert_many: ignore => 1
  • timestamps => {...}: automatic created/updated columns per table
  • json_columns => {...}: encode on write, decode on read
  • Fix: rows after a write uses execute()'s count (DBD::Pg ON CONFLICT)

Modules

DBI fast & easy
Base class for DBIx::Fast components
Query result cache with TTL and tag invalidation
Query proxy that caches results
DBIx::Fast connection manager fork safe
Unified output layer for the profiler subsystem
Abstract base class for database driver profiles
MariaDB/MySQL profiling and diagnostics
PostgreSQL profiling and diagnostics
SQLite profiling stub
MySQL profiling and diagnostics
Query profiling and statistics for DBIx::Fast
Lightweight row iterator for query results
Query and CRUD methods of DBIx::Fast
Schema introspection for DBIx::Fast
Transaction management for DBIx::Fast
Typed exceptions for DBIx::Fast