File Coverage

blib/lib/DBIx/Connector/Driver.pm
Criterion Covered Total %
statement 47 51 92.1
branch 6 8 75.0
condition 4 6 66.6
subroutine 18 21 85.7
pod 8 8 100.0
total 83 94 88.3


line stmt bran cond sub pod time code
1 13     13   93 use strict; use warnings;
  13     13   31  
  13         587  
  13         71  
  13         29  
  13         10015  
2              
3             package DBIx::Connector::Driver;
4              
5             our $VERSION = '0.60';
6              
7             DRIVERS: {
8             my %DRIVERS;
9              
10             sub new {
11 32     32 1 219007 my ($class, $driver) = @_;
12 32   66     206 return $DRIVERS{$driver} ||= do {
13 12         50 my $subclass = __PACKAGE__ . "::$driver";
14 12         110 ( my $path = $subclass ) =~ s!::!/!g;
15 12         27 local $@;
16 12         1149 my $ok = eval "require $subclass";
17 12 50 66     312 die $@ unless $ok or $@ =~ /^Can't locate $path\.pm in \@INC \(/;
18 12 100       251 bless { driver => $driver } => ( $ok ? $subclass : $class );
19             };
20             }
21             }
22              
23             sub _connect {
24 60     60   201 my ($self, $dbh, $dsn, $username, $password, $attrs) = @_;
25 60         572 $dbh;
26             }
27              
28             sub ping {
29 60     60 1 134 my ($self, $dbh) = @_;
30 60         239 $dbh->ping;
31             }
32              
33             sub begin_work {
34 62     62 1 137 my ($self, $dbh) = @_;
35 62         321 $dbh->begin_work;
36             }
37              
38             sub commit {
39 45     45 1 123 my ($self, $dbh) = @_;
40 45         462 $dbh->commit;
41             }
42              
43             sub rollback {
44 3     3 1 2841 my ($self, $dbh) = @_;
45 3         35 $dbh->rollback;
46             }
47              
48             sub _rollback {
49 11     11   34 my ($self, $dbh, $err) = @_;
50 11         20 local $@;
51 11         66 eval { $dbh->rollback };
  11         76  
52 11 100       183 return $@ ? DBIx::Connector::TxnRollbackError->new(
53             error => $err,
54             rollback_error => $@,
55             ) : $err;
56             }
57              
58             sub _rollback_and_release {
59 4     4   12 my ($self, $dbh, $name, $err) = @_;
60 4         7 local $@;
61 4         8 eval {
62 4         16 $self->rollback_to($dbh, $name);
63 0         0 $self->release($dbh, $name);
64             };
65 4 50       50 return $@ ? DBIx::Connector::SvpRollbackError->new(
66             error => $err,
67             rollback_error => $@,
68             ) : $err;
69             }
70              
71             sub savepoint {
72 0     0 1 0 my ($self, $dbh, $name) = @_;
73             }
74              
75             sub release {
76 0     0 1 0 my ($self, $dbh, $name) = @_;
77             }
78              
79             sub rollback_to {
80 0     0 1 0 my ($self, $dbh, $name) = @_;
81             }
82              
83             ROLLBACKERR: {
84             package DBIx::Connector::RollbackError;
85             our $VERSION = '0.58';
86             # an exception is always true
87 13     13   8556 use overload bool => sub {1}, '""' => 'as_string', fallback => 1;
  13     13   24054  
  13         168  
  13         1557  
88              
89 11     11   22 sub new { my $c = shift; bless {@_} => $c; }
  11         65  
90 27     27   159 sub error { shift->{error} }
91 24     24   5345 sub rollback_error { shift->{rollback_error} }
92             sub as_string {
93 15     15   9453 my $self = shift;
94 15         59 my $label = $self->_label;
95 15         65 return "$label aborted: " . $self->error
96             . "$label rollback failed: " . $self->rollback_error;
97             }
98              
99             package DBIx::Connector::TxnRollbackError;
100             our $VERSION = '0.58';
101             our @ISA = qw( DBIx::Connector::RollbackError );
102 9     9   27 sub _label { 'Transaction' }
103              
104             package DBIx::Connector::SvpRollbackError;
105             our $VERSION = '0.58';
106             our @ISA = qw( DBIx::Connector::RollbackError );
107 6     6   13 sub _label { 'Savepoint' }
108             }
109              
110             1;
111              
112             __END__