File Coverage

blib/lib/Amon2/DBI.pm
Criterion Covered Total %
statement 23 55 41.8
branch 0 22 0.0
condition 0 3 0.0
subroutine 8 16 50.0
pod 1 1 100.0
total 32 97 32.9


line stmt bran cond sub pod time code
1             package Amon2::DBI;
2 6     6   125151 use strict;
  6         13  
  6         150  
3 6     6   29 use warnings;
  6         12  
  6         150  
4 6     6   127 use 5.008001;
  6         25  
5             our $VERSION = '0.33';
6              
7 6     6   4393 use parent qw/DBI/;
  6         1735  
  6         67  
8              
9             sub connect {
10 0     0 1   my ($class, $dsn, $user, $pass, $attr) = @_;
11 0           $attr->{RaiseError} = 1;
12 0           $attr->{PrintError} = 0;
13 0           $attr->{ShowErrorStatement} = 1;
14 0 0         if ($DBI::VERSION >= 1.614) {
15 0 0         $attr->{AutoInactiveDestroy} = 1 unless exists $attr->{AutoInactiveDestroy};
16             }
17 0 0         if ($dsn =~ /^dbi:SQLite:/i) {
    0          
    0          
18 0 0         $attr->{sqlite_unicode} = 1 unless exists $attr->{sqlite_unicode};
19             }
20             elsif ($dsn =~ /^dbi:mysql:/i) {
21 0 0         $attr->{mysql_enable_utf8} = 1 unless exists $attr->{mysql_enable_utf8};
22             }
23             elsif ($dsn =~ /^dbi:Pg:/i) {
24 0           my $dbd_pg_version = eval { require DBD::Pg; (DBD::Pg->VERSION =~ /^([.0-9]+)\./)[0] };
  0            
  0            
25 0 0 0       if ( !$@ and $dbd_pg_version < 2.99 ) { # less than DBD::Pg 2.99, pg_enable_utf8 must be set for utf8.
26 0 0         $attr->{pg_enable_utf8} = 1 unless exists $attr->{pg_enable_utf8};
27             }
28             }
29 0 0         my $self = $class->SUPER::connect($dsn, $user, $pass, $attr) or die "Cannot connect to server: $DBI::errstr";
30 0           return $self;
31             }
32              
33             package Amon2::DBI::dr;
34             our @ISA = qw(DBI::dr);
35              
36             package Amon2::DBI::db; # database handler
37             our @ISA = qw(DBI::db);
38              
39 6     6   153267 use DBIx::TransactionManager;
  6         20185  
  6         161  
40 6     6   5221 use SQL::Interp ();
  6         110075  
  6         196  
41 6     6   67 use Carp ();
  6         13  
  6         127  
42 6     6   33 use Scalar::Util ();
  6         12  
  6         2021  
43              
44             sub connected {
45 0     0     my $dbh = shift;
46 0           $dbh->{private_connect_info} = [@_];
47 0           $dbh->SUPER::connected(@_);
48             }
49              
50 0     0     sub connect_info { $_[0]->{private_connect_info} }
51              
52             sub _txn_manager {
53 0     0     my $self = shift;
54 0 0         if (not defined $self->{private_txn_manager}) {
55 0           $self->{private_txn_manager} = DBIx::TransactionManager->new($self);
56 0           Scalar::Util::weaken($self->{private_txn_manager}->{dbh});
57             }
58 0           return $self->{private_txn_manager};
59             }
60              
61 0     0     sub txn_scope { $_[0]->_txn_manager->txn_scope(caller => [caller(0)]) }
62              
63             sub do_i {
64 0     0     my $self = shift;
65 0           my ($sql, @bind) = SQL::Interp::sql_interp(@_);
66 0           $self->do($sql, {}, @bind);
67             }
68              
69             sub insert {
70 0     0     my ($self, $table, $vars) = @_;
71 0           $self->do_i("INSERT INTO $table", $vars);
72             }
73              
74             package Amon2::DBI::st; # statement handler
75             our @ISA = qw(DBI::st);
76              
77 0     0     sub sql { $_[0]->{private_sql} }
78              
79             1;
80             __END__