@@ -40,8 +40,9 @@ has auto_migrate => (
40
40
41
41
has migrations => (
42
42
is => ' ro' ,
43
+ isa => HashRef,
43
44
default => sub {
44
- return { ' create_slick_migrations_table ' => $first_migration };
45
+ return {};
45
46
}
46
47
);
47
48
@@ -79,8 +80,6 @@ sub BUILD {
79
80
croak q{ Unknown scheme or un-supported database: } . $uri -> scheme;
80
81
}
81
82
82
- $self -> migrate_up if $self -> auto_migrate;
83
-
84
83
return $self ;
85
84
}
86
85
@@ -90,13 +89,14 @@ sub migrate_up {
90
89
91
90
eval { $self -> dbi-> do( $first_migration -> {up } ); };
92
91
93
- my $run_migrations = $self -> select( ' slick_migrations' , [' id' ] );
92
+ my @done_migrations =
93
+ map { $_ -> {id } } @{ $self -> select( ' slick_migrations' , [' id' ] ) };
94
94
95
95
if ($id ) {
96
96
croak qq{ Couldn't find migration: $id }
97
97
unless exists $self -> migrations-> {$id };
98
98
99
- if ( not ( grep { $_ -> { id } eq $id } $run_migrations -> @* ) ) {
99
+ if ( not ( grep { $_ eq $id } @done_migrations ) ) {
100
100
my $migration = $self -> migrations-> {$id };
101
101
$self -> dbi-> do( $migration -> {up } )
102
102
|| croak qq{ Couldn't migrate up $id - } . $self -> dbi-> errstr;
@@ -114,19 +114,18 @@ sub migrate_up {
114
114
}
115
115
}
116
116
else {
117
- for ( keys $self -> migrations-> %* ) {
118
- my $key = $_ ;
119
- next
120
- if grep { $_ -> {id } eq $key } $run_migrations -> @*;
117
+ while ( my ( $key , $mig ) = each $self -> migrations-> %* ) {
118
+ next if grep { $_ eq $key } @done_migrations ;
121
119
122
- $self -> dbi-> do( $self -> migration -> {$_ }-> {up } )
120
+ $self -> dbi-> do( $self -> migrations -> {$key }-> {up } )
123
121
|| croak qq{ Couldn't migrate up $_ - } . $self -> dbi-> errstr;
122
+
124
123
$self -> insert(
125
124
' slick_migrations' ,
126
125
{
127
126
id => $key ,
128
- up => $_ -> {up },
129
- down => $_ -> {down }
127
+ up => $mig -> {up },
128
+ down => $mig -> {down }
130
129
}
131
130
);
132
131
0 commit comments