Revision history for DBIx::Class::Async
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.
0.46 2026-01-22
- [DOCS] Major documentation overhaul across the entire distribution.
- [DOCS] Modernised SYNOPSIS for all core packages to utilise Future-based
chaining (->then/->catch) instead of legacy blocking patterns:
* DBIx::Class::Async
* DBIx::Class::Async::Schema
* DBIx::Class::Async::ResultSet
* DBIx::Class::Async::Row
* DBIx::Class::Async::Storage
* DBIx::Class::Async::Storage::DBI
* DBIx::Class::Async::Storage::DBI::Cursor
* DBIx::Class::Async::Pager
* DBIx::Class::Async::ResultComponent
- [DOCS] Added practical examples for high-concurrency operations, including
race-condition safe find_or_create and update_or_create.
- [DOCS] Documented the "Smart Discovery" logic for unique constraints.
- [DOCS] Improved technical clarity regarding synchronous metadata vs.
asynchronous data retrieval in Pager and Row objects.
- [DOCS] Demonstrated standard async patterns for recursive cursor iteration.
0.45 2026-01-22
- [REFACTOR] Extracted unique constraint discovery into internal helper
_extract_unique_lookup to unify logic across ResultSet operations.
- [FEATURE] Refactored find_or_new to use Smart Discovery for lookups,
improving search accuracy.
- [FIX] Enhanced find_or_new to correctly strip "me." prefixes from
ResultSet conditions when instantiating new result objects.
- [FIX] Cleaned up find_or_create logic by utilising the new lookup
helper and streamlining the race-condition recovery path.
- [DOCS] Added POD documentation for internal _extract_unique_lookup method.
- [FIX] Refactored update_or_create to utilise _extract_unique_lookup and
implement atomic race-condition recovery.
- [FIX] Corrected update_or_new behavior to properly return a volatile
new_result object instead of persisting via create() on find failure.
- [IMPROVEMENT] Standardised prefix stripping (me/self/foreign) in
update_or_new to prevent invalid column crashes on filtered ResultSets.
- [REFACTOR] Streamlined identity discovery across all upsert-style
methods to ensure consistent unique key prioritisation.
0.44 2026-01-22
- [FEATURE] Refactor find_or_create to be race-condition safe in
asynchronous environments.
- [IMPROVEMENT] Implement "Smart Discovery" for unique constraints;
automatically identifies lookup columns if 'key' is not provided.
- [FIX] Enhance Async.pm error propagation to correctly stringify
DBIx::Class::Exception objects for the parent process.
- [FIX] Ensure find_or_create handles the "Gap" between initial find
and create by performing an atomic recovery find on conflict.
- [FIX] Add missing $attrs propagation to find() in Async.pm to
support complex recovery searches.
0.43 2026-01-22
- Minor test cleanup.
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.
0.41 2026-01-19
- Added support for inflate column.
0.40 2026-01-19
- Added test to cover the use of CHI with DBIx::Class::Async.
0.39 2026-01-18
- Added sub is_ordered() to DBIx::Class::Async::ResultSet.
0.38 2026-01-18
- Added new package DBIx::Class::Async::ResultSet::Pager.
- Added the following subs to DBIx::Class::Async::ResultSet.
- count_total
- is_paged
- page
- pager
- search_with_pager
0.37 2026-01-18
- Documented the removal of support for txn_scope_guard() in DBIx::Class::Async::Schema.
0.36 2026-01-18
- Added sub txn_batch() to DBIx::Class::Async::Schema.
- Updated DBIx::Class::Async::Schema::deploy() to return Future.
0.35 2026-01-18
- Updated pod for txn_batch() and added unit test.
0.34 2026-01-18
- Added sub search_with_prefetch() to DBIx::Class::Async.
- Added sub result_class() to DBIx::Class::Async::ResultSet.
0.33 2026-01-17
- Added the following methods to DBIx::Class::Async::ResultSet
- get_cache
- set_cache
- clear_cache
0.32 2026-01-17
- Added the following methods to DBIx::Class::Async::ResultSet
- count_literal
- count_rs
- search_literal
0.31 2026-01-16
- Added deploy() to DBIx::Class::Async and DBIx::Class::Async::Schema.
0.30 2026-01-16
- Added the following methods to DBIx::Class::Async::Schema
- schema_version
- unregister_source
0.29 2026-01-16
- Added the following methods to DBIx::Class::Async::Row
- is_column_dirty
- update_or_insert
- insert_or_update (alias for update_or_insert)
0.28 2026-01-13
- Added sub copy() to DBIx::Class::Async::Row.
- Added sub register_[class|source] to DBIx::Class::Async::Schema.
0.27 2026-01-12
- Tidied up pod in general.
0.26 2026-01-12
- Re-organise Cursor package in sync with DBIx::Class.
Before: DBIx::Class::Async::Cursor
After: DBIx::Class::Async::Storage::DBI::Cursor
- Added new package DBIx::Class::Async::Storage::DBI.
0.25 2026-01-12
- Added sub DBIx::Class::Async::Row::id().
0.24 2026-01-11
- Added the following methods to DBIx::Class::Async::Row
- is_column_changed
- make_columm_dirty
- get_dirty_columns
- set_column
- set_columns
0.23 2026-01-11
- Improved DBIx::Class::Async::Schema::clone().
- Added dedicated unit test to cover the clone().
0.22 2026-01-11
- Added sub class() and populate() to DBIx::Class::Async::Schema.
0.21 2026-01-09
- Updated Makefile.PL to pull version automatically.
- Tidied up pod document.
0.20 2026-01-08
- Updated Makefile.PL w.r.t test requisite thanks Gabor Szabo.
- Added CI workflow thanks Gabor Szabo.
- Tidied up pod document.
0.19 2026-01-08
- Added sub search_related[_rs] to DBIx::Class::Async::ResultSet.
0.18 2026-01-08
- Added sub delete_all() to DBIx::Class::Async::ResultSet.
0.17 2026-01-08
- Added sub update_or_[new|create]() to DBIx::Class::Async::ResultSet.
0.16 2026-01-08
- Added sub find_or_[new|create]() to DBIx::Class::Async::ResultSet.
0.15 2026-01-08
- Added sub populate() and populate_bulk() to DBIx::Class::Async::ResultSet.
0.14 2026-01-08
- Added sub slice() to DBIx::Class::Async::ResultSet.
0.13 2026-01-07
- Added sub related_resultset() to DBIx::Class::Async::ResultSet.
0.12 2026-01-06
- Updated pod about N+1 issue.
0.11 2026-01-06
- Search with prefix now supported by DBIx::Class::Async::Schema.
0.10 2026-01-06
- POD cleanup in general.
0.09 2026-01-05
- Added support for Cursor.
0.08 2026-01-05
- Added sub create_related() to DBIx::Class::Async::Row.
0.07 2026-01-05
- Fixed sub prefetch() in DBIx::Class::Async::ResultSet.
0.06 2026-01-05
- Fixed sub next() in DBIx::Class::Async::ResultSet.
0.05 2026-01-04
- Removed redundant documented attributes.
0.04 2026-01-04
- Updated pod document.
0.03 2026-01-04
- Tidied up unit tests.
0.02 2026-01-04
- Added initial draft to support following async operations:
- DBIx::Class::Async::Row
- DBIx::Class::Async::ResultSet
- DBIx::Class::Async::Schema
- DBIx::Class::Async::Storage
- Also added template for the following:
- DBIx::Class::Async::TxnGuard
0.01 2026-01-01
- Module Created.