Revision history for DBIx-Loop

0.09    2026-09-01
        - DBIx::Loop::Future implements the Future::AsyncAwait::Awaitable
          API, so await works on a query inside an async sub. It reports no
          cancellation, having none.
        - Document which future class each loop adapter hands back, and what
          that costs.

0.08    2026-08-31
        - A prepare that fails on a handle without RaiseError carries the
          driver's error, not a placeholder
        - t/19-failure.t reaches the failing-execute seam without RETURNING,
          which needs SQLite 3.35

0.07    2026-08-23
        - A statement that fails in the database now fails its future on a
          handle opened without RaiseError. DBI reports a failure two ways -
          a croak under RaiseError, or a false return (undef from do, false
          from execute) without it - and the runner trapped the first and
          ignored the second, so an INSERT into a NOT NULL column resolved
          done with rows_affected => 0, and a transaction built on it
          committed. 

0.06    2026-08-18
        - dbil_abi v2: on_exec, an observer for statements. 
        - DBIx::Loop->on_exec(\&start, \&done): the same registry,
          reached from Perl.

            DBIx::Loop->on_exec(
                sub { my ($is_query, $sql, $nbind) = @_;
                      return { at => time, sql => $sql } },
                sub { my ($token, $res, $err) = @_;
                      record($token->{sql}, time - $token->{at}) },
            );

0.05    2026-08-15
        - The pool no longer dies of SIGPIPE when a worker's peer is
          already gone.
        - t/10 and t/11 now skip on a Mojolicious too old to ship
          Mojo::Promise (pre-7.54): the gate tested Mojo::IOLoop but the
          adapter needs both.

0.04    2026-08-13
        - The IO::Async adapter no longer dies in to_native / new_future on
          IO::Async before 0.805 paired with Future 0.50 or newer.

0.03    2026-08-12
        - t/06-hyperman.t failed the distribution on a box carrying a
          Hyperman older than 0.10.

0.02    2026-08-07
        - Fix a pool worker dying while idle taking the whole pool down
          with it. Worker death was only ever noticed as EOF on the read
          side, and an idle worker's fd is not readable, so the first
          thing that learned about it was the write of the next request -
          which failed the future and left the slot alive with a valid
          fd. 
        - A public C ABI. include/dbil_abi.h declares a versioned function-
          pointer table.
        - selectall_rowhash: every row as a hashref, in the order the server
          returned them - DBI's selectall_arrayref($sql, { Slice => {} }).
          selectall_hashref cannot stand in for it, because keying rows by a
          column destroys the ordering that keyset pagination depends on.
          t/17-rowhash.t.
        - Fork safety. A pool belongs to the process that forked its workers.
          Without that, a program that forked after its first statement (any
          preforking server) left every child reading the same socketpair, so
          a request could be answered with another request's rows!!
        - Pool worker children close every inherited descriptor except their
          own socketpair end, and the parent's ends are FD_CLOEXEC. A worker
          used to hold a duplicate of whatever the embedding program had
          open - in a web server, the listening socket - keeping the port
          bound for the worker's whole life.
        - Fixed a crash in the native (Pg) backend on perl before 5.30.
          SvTRUE is a multi-evaluating macro there, so SvTRUE(POPs) popped
          the stack once per expansion and walked SP below its base: a
          segfault on 5.20 and wrong readiness answers on 5.14. Found by
          running the test suite on the older perls in the docker matrix.
        - t/15-fork.t runs on whichever loop adapter is installed rather than
          requiring IO::Async, which needs perl 5.14 and so could never have
          covered the oldest perls the dist supports.

0.01    2026-08-07
        First version
