Changes for version 0.17

  • DSN parsing is more accepting (strictly additive - no DSN that worked before changes): the native "dbi:..." prefix is case-insensitive; "dbi:SQLite::memory:" and other DSNs whose driver-specific part contains colons are no longer rejected; and a credential-less URI ("mariadb://localhost/db", socket / peer auth) is accepted. Verified byte-identical output for every previously-valid DSN.
  • The vestigial "quote" constructor option no longer runs a dead $dbh->quote() no-op on connect; it is still accepted (and stored in args) for backward compatibility but has no effect - identifier quoting is automatic and driver-aware.
  • Security: the CRUD operator whitelist now covers non-hash WHERE specs. update()/delete() accept SQL::Abstract's arrayref (OR-of-conditions) and scalarref (literal SQL) WHERE shapes; _safe_columns bailed out silently on anything that was not a hash, letting an injected operator or literal SQL through when the WHERE was built as an arrayref/scalarref from untrusted input. Now validated recursively; scalarref WHERE is rejected. Regression test in t/security.t.
  • Fix: read methods (all/flat/hash/val/array/count) use the 3-arg prepare_cached form, so a live query() iterator on the same SQL is no longer finished out from under the caller (silent truncation, a 0.17 regression).
  • Fix: execute() with no bind argument clears any $p left from a previous query instead of binding it to the new statement.
  • Fix: qualified table names ("schema.table") work in count(), upsert(), insert_many(), upsert_many() and Schema introspection (were quoted as one identifier via _quote_id; now per-segment via _quote_ident_path, matching insert/update/delete).
  • Fix: Schema tables cache is a hashref when the database has no tables (tn => 1 on an empty DB gave a misleading crash).
  • Fix: cache => 0 (or '') no longer switches caching on; the guard is truthiness, not defined-ness.
  • Fix: a transaction clears its savepoints on successful commit too, so a later rollback_to() cannot fire on a stale name.
  • Fix: t/security.t guards its LRU::Cache require (was bare, would fail on smokers without the optional backend); Result.pm POD link to query() points at DBIx::Fast::SQL; META repository url is a valid https URI (an SSH spec was silently dropped).

Documentation

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