File Coverage

blib/lib/DBIx/SimpleMigration/Migration.pm
Criterion Covered Total %
statement 44 49 89.8
branch 7 16 43.7
condition 1 3 33.3
subroutine 8 8 100.0
pod 0 2 0.0
total 60 78 76.9


line stmt bran cond sub pod time code
1             package DBIx::SimpleMigration::Migration;
2              
3 2     2   13 use 5.10.0;
  2         5  
4 2     2   5 use strict;
  2         2  
  2         28  
5 2     2   11 use warnings;
  2         2  
  2         32  
6              
7 2     2   6 use Carp;
  2         2  
  2         80  
8 2     2   7 use File::Basename;
  2         1  
  2         84  
9 2     2   1647 use SQL::SplitStatement;
  2         171762  
  2         14  
10              
11             our $VERSION = '1.0.1';
12              
13             sub new {
14 2     2 0 9 my $self = bless {}, shift;
15              
16 2 50       10 return unless @_ % 2 == 0;
17 2         8 my %args = @_;
18              
19             croak __PACKAGE__ . '->new: file option missing or does not exist'
20 2 50 33     54 unless ($args{file} && -f $args{file});
21              
22 2 50       8 croak __PACKAGE__ . '->new: client missing' unless $args{client};
23              
24 2         9 $self->{_client} = $args{client};
25              
26 2         31 ($self->{_key}) = fileparse($args{file});
27              
28 2         4 my $contents;
29             {
30 2         3 local $/ = undef;
  2         11  
31 2 50       58 open FH, '<', $args{file} or die 'Error opening file: ' . $!;
32 2         36 $contents = ;
33 2         15 close FH;
34             }
35              
36 2         17 my $splitter = SQL::SplitStatement->new;
37 2         64 my @statements = $splitter->split($contents);
38              
39 2         3075 $self->{_statements} = \@statements;
40              
41 2         17 return $self;
42             }
43              
44             sub apply {
45 2     2 0 3 my ($self) = @_;
46              
47 2         58 say 'Applying ' . $self->{_key};
48              
49 2 50       18 if (!$self->{_client}->_lock_migrations_table) {
50 0         0 die 'Error acquiring table lock';
51             }
52              
53 2         4 eval {
54 2         3 foreach my $query (@{$self->{_statements}}) {
  2         8  
55 2         23 $self->{_client}->{dbh}->do($query)
56             }
57             };
58              
59 2 50       631 if ($@) {
60 0 0       0 $self->{_client}->{dbh}->rollback or die 'Error rolling back transaction: ' . $self->{_client}->{dbh}->errstr;
61 0         0 die 'Error applying changeset';
62             }
63              
64 2 50       14 if (!$self->{_client}->_insert_migration($self->{_key})) {
65 0         0 $self->{_client}->{dbh}->rollback;
66 0         0 die;
67             }
68              
69 2         1455204 $self->{_client}->{dbh}->commit;
70             }
71              
72             1;
73              
74             __END__