upgrade sql should work now
[dbsrgits/DBIx-Class-DeploymentHandler.git] / lib / DBIx / Class / DeploymentHandler / Dad.pm
CommitLineData
c4f4d4a2 1package DBIx::Class::DeploymentHandler::Dad;
2
3use Moose;
4use Method::Signatures::Simple;
5use DBIx::Class::DeploymentHandler::Types;
6require DBIx::Class::Schema; # loaded for type constraint
7require DBIx::Class::ResultSet; # loaded for type constraint
8use Carp::Clan '^DBIx::Class::DeploymentHandler';
9
10has schema => (
11 isa => 'DBIx::Class::Schema',
12 is => 'ro',
13 required => 1,
14 handles => ['schema_version'],
15);
16
17has upgrade_directory => ( # configuration
18 isa => 'Str',
19 is => 'ro',
20 required => 1,
21 default => 'sql',
22);
23
24has backup_directory => ( # configuration
25 isa => 'Str',
26 is => 'ro',
27 predicate => 'has_backup_directory',
28);
29
30has to_version => ( # configuration
31 is => 'ro',
32 lazy_build => 1,
33);
34
35sub _build_to_version { $_[0]->schema->schema_version }
36
37has databases => ( # configuration
38 coerce => 1,
39 isa => 'DBIx::Class::DeploymentHandler::Databases',
40 is => 'ro',
41 default => sub { [qw( MySQL SQLite PostgreSQL )] },
42);
43
44has sqltargs => ( # configuration
45 isa => 'HashRef',
46 is => 'ro',
47 default => sub { {} },
48);
49
50method install {
51 croak 'Install not possible as versions table already exists in database'
52 if $self->version_storage_is_installed;
53
54 my $ddl = $self->_deploy;
55
56 $self->version_storage->add_database_version({
57 version => $self->to_version,
58 ddl => $ddl,
59 });
60}
61
62sub upgrade {
63 my $self = shift;
64 while ( my $version_list = $self->next_version_set ) {
392a5ccc 65 my ($ddl, $upgrade_sql) = @{$self->_upgrade_single_step($version_list)||[]};
c4f4d4a2 66
67 $self->add_database_version({
68 version => $version_list->[-1],
392a5ccc 69 ddl => $ddl,
70 upgrade_sql => $upgrade_sql,
c4f4d4a2 71 });
72 }
73}
74
75method backup { $self->storage->backup($self->backup_directory) }
76
392a5ccc 77method deploy_version_storage {
78 $self->
79}
80
c4f4d4a2 81__PACKAGE__->meta->make_immutable;
82
831;
84
85=pod
86
87=attr schema
88
89=attr upgrade_directory
90
91=attr backup_directory
92
93=attr to_version
94
95=attr databases
96
97=method install
98
99=method upgrade
100
101=method backup
102
103__END__
104
105vim: ts=2 sw=2 expandtab