DBIx-Class-Async
view release on metacpan or search on metacpan
IO::Async::Loop::Mojois are found as reported in the issue #5
by @eserte.
0.55 2026-02-06
[NEW FEATURES]
- Added run_parallel() method to DBIx::Class::Async::Schema. This method
accepts a list of code references, executes them concurrently using
the asynchronous schema connection, and returns a Future that
resolves when all tasks are complete.
- Added await_all() method to DBIx::Class::Async::Schema. This method
takes one or more Future objects and synchronously blocks until all
of them have completed, returning the list of results.
[DOCUMENTATION]
- Added comprehensive POD for run_parallel() and await_all() in Schema.pm,
including usage examples for maximizing query performance.
[TEST SUITE]
- Added t/146-await-all.t to verify synchronous waiting and error
propagation for await_all().
- Added t/147-run-parallel.t to verify concurrent execution, aggregation
of results, and error propagation for run_parallel().
0.54 2026-02-04
[TEST SUITE]
- Fixed t/145-mojo-integration.t to prevent compile-time failures on
environments where Mojo::IOLoop is not installed.
[DOCUMENTATION]
- Formalised Event Loop Agnosticism: Explicitly documented the
ability to inject external IO::Async::Loop instances.
0.53 2026-02-04
[TEST SUITE]
- Added t/144-loop-engine.t: Validates "Smart Default" auto-initialisation
and verified "Injection Pattern" for custom IO::Async::Loop instances.
- Added t/145-mojo-integration.t: Established formal support for
Mojo::IOLoop environments, proving non-blocking co-existence
between DBIC workers and Mojo timers.
[DOCUMENTATION]
- Updated DBI.pm/Storage.pm: Clearly defined the "Master-Worker"
architecture and the separation of the Parent process from the
DBI Handle (Ghost DBH pattern).
- Enhanced CAVEATS: Documented why traditional txn_begin/commit
blocks are replaced by the atomic instruction-set logic of txn_do.
0.52 2026-02-04
- Proposed patch for issue #4 (-Duselongdouble), thanks @eserte.
- Proposed patch for issue #9 (seg fault), thanks @eserte.
- Proposed patch for issue #7 (missing prereq). thanks @szabgab.
- Merged pull request #8 (add more versions of Perl to CI), thanks @szabgab.
0.51 2026-02-03
- Bumped version as PAUSE was unhappy with previous tar ball.
0.50 2026-02-03
[MAJOR ARCHITECTURAL OVERHAUL]
- Complete rewrite of the Storage and Persistence layer to use a
decoupled "Bridge & Worker" architecture.
- Implementation of DBIx::Class::Async::Row lifecycle management:
* Introduced "Dirty" column tracking to minimise SQL UPDATE payloads.
* Added shadow-key optimisation for high-speed attribute access.
* Robust AUTOLOAD mechanism for transparent ResultSet/Row interaction.
- Enhanced Race Condition Recovery:
* find_or_create() now handles unique constraint collisions
automatically via a catch-and-retry strategy.
- Improved Memory & Process Management:
* Weakened schema references in Storage to prevent worker leaks.
* Refined worker pool lifecycle (connect/disconnect) for cleaner
shutdowns in event-loop environments.
- Streaming Support:
* Introduced DBIx::Class::Async::Storage::DBI::Cursor for
non-blocking, memory-efficient iteration over large result sets.
- Persistence Integrity:
* Added strict Primary Key validation in find(), update(), and delete()
to prevent ambiguous database operations.
- Documentation:
* Full POD refresh for Row, ResultSet, and Storage classes reflecting
the new async design patterns.
0.49 2026-01-22
- [IMPROVEMENT] Fixed ResultSet->slice to correctly return a ResultSet
in scalar context.
- [IMPROVEMENT] Fixed ResultSet->count to respect slices (LIMIT/OFFSET)
by using subqueries in the async worker.
- [IMPROVEMENT] Ensure result_class persists across chained search() calls.
- [IMPROVEMENT] Fixed constructor (new) to correctly store and inherit
result_class, rows, and pager attributes.
- [IMPROVEMENT] Fixed argument passing in Async.pm to ensure attributes
($attrs) reach the background worker for count operations.
- [TEST] Fixed t/43-result-class.t to verify result_class persistence.
- [TEST] Fixed t/26-slice.t to test comprehensive slicing and chaining
behaviour against a real SQLite database.
- [TEST] Added t/57-count-performance.t to benchmark and verify the
overhead of asynchronous subquery counting.
0.48 2026-01-22
- [ENHANCE] Hardened _merge_result_data to support multiple database
return patterns (HASH, ARRAY, and SCALAR).
- [FIX] Added support for positional Primary Key mapping from ARRAY
refs, improving compatibility with specialised DBI drivers.
- [FIX] Improved Composite Primary Key safety during row creation,
ensuring multi-column keys are correctly populated from database
returns (e.g., PostgreSQL RETURNING clauses).
- [TEST] Added comprehensive test suite for result data merging
logic (t/56-merge-result-data.t).
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] Centralised 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')).
- [OPTIMISE] 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.
( run in 2.091 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )