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
Examples
- examples/README.md
- examples/benchmark-cache-backends.pl
- examples/benchmark-json.pl
- examples/benchmark-lazy-require.pl
- examples/benchmark-profiler-regex.pl
- examples/benchmark-query-cache.pl
- examples/benchmark-statement-cache.pl
- examples/errors-and-reads.pl
- examples/monitor-connections.pl
- examples/profiler-mariadb.pl
- examples/profiler-pg.pl
- examples/raw-sql.pl