Changes for version 0.42 - 2026-01-22

  • [MAJOR] Added DBIx::Class::Async::ResultComponent to provide non-blocking row-level update() and delete() methods.
  • [OPTIMISATION] Re-engineered ResultSet update() and delete() to use high-performance bulk SQL ("WHERE PK IN (...)") instead of individual N-queries.
  • [FEATURE] Added support for bulk update_bulk() and delete_all() respecting LIMIT and OFFSET attributes via ID-mapping.
  • [FIX] Silenced "Query returned more than one row" deprecation warnings by utilising search()->first() with explicit row limits in worker operations.
  • [FIX] Hardened the Bridge update() method to support hybrid return types: returns Row objects for single updates and row-counts for bulk updates.
  • [STABILITY] Improved IO::Async cleanup during Global Destruction to prevent "Notifier does not exist" warnings.
  • [INTERNAL] Added _check_response() and _merge_result_data() helpers to standardise error handling and row inflation.
  • [TESTS] Added 8 new test files (t/48 through t/55) covering bulk operations, row-level components, and internal safety guards.

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