The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

DBIx::Handler - fork-safe and easy transaction handling DBI handler

SYNOPSIS

  use DBIx::Handler;
  my $handler = DBIx::Handler->new($dsn, $user, $pass, $opts);
  my $dbh = $handler->dbh;
  $dbh->do(...);

DESCRIPTION

DBIx::Handler is fork-safe and easy transaction handling DBI handler.

DBIx::Hanler provide scope base transaction, fork safe dbh handling, simple.

METHODS

my $handler = DBIx::Handler->new($dsn, $user, $pass, $opts);

get database handling instance.

my $handler = DBIx::Handler->connect($dsn, $user, $pass, $opts);

connect method is new methos alias.

my $dbh = $handler->dbh;

get fork safe DBI handle.

$handler->disconnect;

disconnect current database handle.

my $txn_guard = $handler->txn_scope

Creates a new transaction scope guard object.

    do {
        my $txn_guard = $handler->txn_scope;
            # some process
        $txn_guard->commit;
    }

If an exception occurs, or the guard object otherwise leaves the scope before $txn->commit is called, the transaction will be rolled back by an explicit "txn_rollback" call. In essence this is akin to using a "txn_begin"/"txn_commit" pair, without having to worry about calling "txn_rollback" at the right places. Note that since there is no defined code closure, there will be no retries and other magic upon database disconnection.

$txn_manager = $handler->txn_manager

Get the DBIx::TransactionManager instance.

$handler->txn_begin

start new transaction.

$handler->txn_commit

commit transaction.

$handler->txn_rollback

rollback transaction.

$handler->in_txn

are you in transaction?

my @result = $handler->txn($coderef);

execute $coderef in auto transaction scope.

begin transaction before $coderef execute, do $coderef with database handle, after commit or rollback transaciont.

  $handler->txn(sub {
      my $dbh = shift;
      $dbh->do(...);
  });

equals to:

  $handler->txn_begin;
      my $dbh = $handler->dbh;
      $dbh->do(...);
  $handler->txn_rollback;
my @result = $handler->run($coderef);

exexute $coderef.

  my $rs = $handler->run(sub {
      my $dbh = shift;
      $dbh->selectall_arrayref(...);
  });

or

  my @result = $handler->run(sub {
      my $dbh = shift;
      $dbh->selectrow_array('...');
  });
my $sth = $handler->query($sql, [\@bind | \%bind]);

exexute query. return database statement handler.

$handler->result_class($result_class_name);

set result_class package name.

this result_class use to be create query method response object.

$handler->trace_query($flag);

inject sql comment when trace_query is true.

AUTHOR

Atsushi Kobayashi <nekokak _at_ gmail _dot_ com>

SEE ALSO

LICENSE

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.