DBIO-Forked
view release on metacpan or search on metacpan
lib/DBIO/Forked/Storage.pm view on Meta::CPAN
sub pool {
croak 'DBIO::Forked uses fork-per-query (Model A); there is no connection pool';
}
# --- Async CRUD ---
sub select_async { my $self = shift; $self->_run_forked('select', @_) }
sub select_single_async { my $self = shift; $self->_run_forked('select_single', @_) }
sub insert_async { my $self = shift; $self->_run_forked('insert', @_) }
sub update_async { my $self = shift; $self->_run_forked('update', @_) }
sub delete_async { my $self = shift; $self->_run_forked('delete', @_) }
# txn_do_async is just _run_forked('txn_do', $body, @args): the child runs the
# inherited sync storage's txn_do($body, @args), so BEGIN/body/COMMIT all happen
# in the child on its freshly-reconnected connection. See the method POD for the
# return-value and sync-only limits.
sub txn_do_async { my $self = shift; $self->_run_forked('txn_do', @_) }
# --- Fork-per-query seam (Model A) ---
#
lib/DBIO/Forked/Storage.pm view on Meta::CPAN
. "(it must be plain serializable data): $err";
}
# --- Sync wrappers ---
# The sync entry points block on the forked result: run the query in a child
# and wait for it via ->get.
sub select { my $self = shift; $self->select_async(@_)->get }
sub select_single { my $self = shift; $self->select_single_async(@_)->get }
sub insert { my $self = shift; $self->insert_async(@_)->get }
sub update { my $self = shift; $self->update_async(@_)->get }
sub delete { my $self = shift; $self->delete_async(@_)->get }
sub txn_do { my $self = shift; $self->txn_do_async(@_)->get }
1;
__END__
=pod
=encoding UTF-8
t/01-fork-roundtrip.t view on Meta::CPAN
# --- Mock driver: a sync storage whose CRUD returns fixed data, and a schema
# --- whose ->storage hands it back. No DBI, no real database. This exercises
# --- the full Model A path: fork -> inherited sync CRUD -> Storable -> Future.
{
package t::Mock::Storage;
sub new { bless {}, shift }
sub select { shift; return ([ 1, 'Alice' ], [ 2, 'Bob' ]) }
sub insert { shift; return ([ 99 ]) }
sub update { die "update boom\n" } # error-path op
package t::Mock::Schema;
sub new { my ($c, $storage) = @_; bless { storage => $storage }, $c }
sub storage { $_[0]->{storage} }
}
my $schema = t::Mock::Schema->new(t::Mock::Storage->new);
my $storage = DBIO::Forked::Storage->new($schema);
# --- success roundtrip ------------------------------------------------------
( run in 1.902 second using v1.01-cache-2.11-cpan-364913b4093 )