# NAME
DBIx::Handler - fork-safe and easy transaction handling DBI handler
# SYNOPSIS
use DBIx::Handler;
my $handler = DBIx::Handler->new($dsn, $user, $pass, $dbi_opts, $opts);
my $dbh = $handler->dbh;
$dbh->do(...);
# DESCRIPTION
DBIx::Handler is fork-safe and easy transaction handling DBI handler.
DBIx::Handler provide scope base transaction, fork safe dbh handling, simple.
# METHODS
- my $handler = DBIx::Handler->new($dsn, $user, $pass, $dbi\_opts, $opts);
get database handling instance.
Options:
- on\_connect\_do : CodeRef|ArrayRef\[Str\]|Str
- on\_disconnect\_do : CodeRef|ArrayRef\[Str\]|Str
Execute SQL or CodeRef when connected/disconnected.
- result\_class : ClassName
This is a `query` method's result class.
If this value is defined, `$result_class-`new($handler, $sth)> is called in `query()` and `query()` returns the instance.
- trace\_query : Bool
Enables to inject a caller information as SQL comment.
- trace\_ignore\_if : CodeRef
Ignore to inject the SQL comment when trace\_ignore\_if's return value is true.
- no\_ping : Bool
By default, ping before each executing query.
If it affect performance then you can set to true for ping stopping.
- dbi\_class : ClassName
By default, this module uses generally [DBI](
https://metacpan.org/pod/DBI) class.
For example, if you want to use another custom class compatibility with DBI, you can use it with this option.
- prepare\_method : Str
By default, this module uses generally [prepare](
https://metacpan.org/pod/prepare) method.
For example, if you want to use `prepare_cached` method or other custom method compatibility with `prepare` method, you can use it with this option.
- my $handler = DBIx::Handler->connect($dsn, $user, $pass, $opts);
connect method is alias for new method.
- 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"](#txn_rollback) call. In essence this is akin to
using a ["txn\_begin"](#txn_begin)/["txn\_commit"](#txn_commit) pair, without having to worry
about calling ["txn\_rollback"](#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](
https://metacpan.org/pod/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 transaction.
$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);
execute $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\]);
execute query. return database statement handler.
- my $sql = $handler->trace\_query\_set\_comment($sql);
inject a caller information as a SQL comment to `$sql` when trace\_query is true.
## ACCESSORS
The setters and the getters for options.
- result\_class
- trace\_query
- trace\_ignore\_if
- no\_ping
- on\_connect\_do
- on\_disconnect\_do
# AUTHOR
Atsushi Kobayashi <nekokak \_at\_ gmail \_dot\_ com>
# LICENSE
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.