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 )