Changes for version 0.47 - 2026-01-22

  • [REFACTOR] Overhauled Row state management to use authoritative 'in_storage' flags instead of guessing based on Primary Key presence.
  • [FIX] Resolved "Cannot update row: not in storage" errors in complex workflows by propagating storage state through recursive relationship inflation.
  • [REFACTOR] Centralized row inflation logic into Async.pm bridge to ensure consistent object creation across all ResultSet fetch paths.
  • [FIX] Updated find_or_new to correctly distinguish between persistent and transient objects.
  • [IMPROVE] Hardened Row and ResultSet against Mock objects in test suites by adding defensive metadata checks (can('columns')).
  • [OPTIMIZE] Improved search performance by only generating cache keys when caching is explicitly enabled.
  • [FIX] Ensure single-column primary keys are correctly merged during create() operations across all bridge drivers.

Modules

Asynchronous database operations for DBIx::Class
Non-blocking row-level CRUD for DBIx::Class::Async
Asynchronous resultset for DBIx::Class::Async
Asynchronous pagination handling for Async ResultSets
Asynchronous row object for DBIx::Class::Async
Asynchronous schema for DBIx::Class::Async
Storage Layer for DBIx::Class::Async
DBI-based async storage backend for DBIx::Class::Async
Asynchronous cursor for DBIx::Class ResultSets using Futures