DBIx-TransactionManager-Extended
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
lib/DBIx/TransactionManager/Extended/Txn.pm view on Meta::CPAN
package DBIx::TransactionManager::Extended::Txn;
use strict;
use warnings;
use DBIx::TransactionManager; ## XXX: it includes '::ScopeGuard' package
sub new {
my ($class, $manager, %args) = @_;
$args{caller} = [caller(1)] unless $args{caller};
my $guard = DBIx::TransactionManager::ScopeGuard->new($manager => %args);
return bless [$guard, $manager] => $class;
}
sub rollback { shift->[0]->rollback }
sub commit { shift->[0]->commit }
sub context_data { shift->[1]->context_data }
sub add_hook_after_commit { shift->[1]->add_hook_after_commit(@_) }
sub add_hook_before_commit { shift->[1]->add_hook_before_commit(@_) }
sub remove_hook_after_commit { shift->[1]->remove_hook_after_commit(@_) }
sub remove_hook_before_commit { shift->[1]->remove_hook_before_commit(@_) }
1;
__END__
=pod
=encoding utf-8
=head1 NAME
DBIx::TransactionManager::Extended::Txn - transaction object
=head1 SYNOPSIS
use DBI;
use DBIx::TransactionManager::Extended;
my $dbh = DBI->connect('dbi:SQLite:');
my $tm = DBIx::TransactionManager::Extended->new($dbh);
# create transaction object
my $txn = $tm->txn_scope;
# execute query
$dbh->do("insert into foo (id, var) values (1,'baz')");
# And you can do multiple database operations here
for my $data (@data) {
push @{ $txn->context_data->{data} } => $data;
$txn->add_hook_after_commit(sub {
my $context_data = shift; # with the current (global) transaction
my @data = @{ $context_data->{data} };
return unless @data;
...
$context_data->{data} = [];
});
}
# and commit it.
$txn->commit;
=head1 DESCRIPTION
This module provides shortcut for L<DBIx::TransactionManager::Extended> and L<DBIx::TransactionManager::ScopeGuard>.
=head1 EXTENDED METHODS
view all matches for this distributionview release on metacpan - search on metacpan
( run in 0.911 second using v1.00-cache-2.02-grep-82fe00e-cpan-503542c4f10 )