DBIx-Simple-Inject
view release on metacpan or search on metacpan
lib/DBIx/Simple/Inject.pm view on Meta::CPAN
package DBIx::Simple::Inject;
use 5.008001;
use strict;
use warnings;
our $VERSION = '0.04';
use parent 'DBI';
package DBIx::Simple::Inject::db;
use strict;
our @ISA = qw(DBI::db);
use Class::Load;
use DBIx::Simple;
use Scalar::Util qw/weaken/;
sub simple {
my ($dbh) = @_;
$dbh->{private_dbixsimple_object} ||= do {
my $dbis = DBIx::Simple->connect($dbh);
weaken($dbis->{dbh});
for my $k (keys %{ $dbh->{private_dbixsimple} || {} }) {
my $v = $dbh->{private_dbixsimple}{$k};
# lvalue method
$dbis->$k = ref $v eq 'CODE' ? $v->($dbh)
: $k eq 'abstract' ? _abstract($dbis->{dbh}, $v) : $v;
}
$dbis;
};
}
sub _abstract {
my ($dbh, $class) = @_;
Class::Load::load_class($class);
if ($class eq 'SQL::Abstract') {
$class->new();
} elsif ($class eq 'SQL::Abstract::Limit') {
$class->new(limit_dialect => $dbh);
} elsif ($class eq 'SQL::Maker') {
$class->new(driver => $dbh->{Driver}{Name});
} else {
$class->new($dbh); # fallback
}
}
{
no strict 'refs';
for my $method (
qw(
error
query
begin
disconnect
select insert update delete
iquery
),
# unnecessary begin_work(), commit(), rollback(), func() and last_insert_id()
# there are just alias for DBI::db::*
) {
*$method = sub {
use strict 'refs';
shift->simple->$method(@_);
};
}
for my $property (
qw(
keep_statements
lc_columns
result_class
abstract
),
) {
*$property = sub {
my ($self, $val) = @_;
use strict 'refs';
if ($val) {
$self->simple->$property = $val;
} else {
( run in 2.279 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )