package DBIx::Class::DeploymentHandler::Dad;
+# ABSTRACT: Parent class for DeploymentHandlers
+
use Moose;
-use Method::Signatures::Simple;
require DBIx::Class::Schema; # loaded for type constraint
use Carp::Clan '^DBIx::Class::DeploymentHandler';
+use DBIx::Class::DeploymentHandler::Logger;
+use DBIx::Class::DeploymentHandler::Types;
+use Log::Contextual ':log', -package_logger =>
+ DBIx::Class::DeploymentHandler::Logger->new({
+ env_prefix => 'DBICDH'
+ });
has schema => (
isa => 'DBIx::Class::Schema',
is => 'ro',
required => 1,
- handles => ['schema_version'],
);
has backup_directory => (
has to_version => (
is => 'ro',
+ isa => 'Str',
+ lazy_build => 1,
+);
+
+sub _build_to_version { $_[0]->schema_version }
+
+has schema_version => (
+ is => 'ro',
+ isa => 'StrSchemaVersion',
lazy_build => 1,
);
-sub _build_to_version { $_[0]->schema->schema_version }
+sub _build_schema_version { $_[0]->schema->schema_version }
-method install {
+sub install {
+ my $self = shift;
+ log_info { 'installing version ' . $self->to_version };
croak 'Install not possible as versions table already exists in database'
if $self->version_storage_is_installed;
}
sub upgrade {
+ log_info { 'upgrading' };
my $self = shift;
+ my $ran_once = 0;
while ( my $version_list = $self->next_version_set ) {
- my ($ddl, $upgrade_sql) = @{$self->upgrade_single_step($version_list)||[]};
+ $ran_once = 1;
+ my ($ddl, $upgrade_sql) = @{
+ $self->upgrade_single_step({ version_set => $version_list })
+ ||[]};
$self->add_database_version({
version => $version_list->[-1],
upgrade_sql => $upgrade_sql,
});
}
+
+ log_warn { 'no need to run upgrade' } unless $ran_once;
}
sub downgrade {
+ log_info { 'downgrading' };
my $self = shift;
+ my $ran_once = 0;
while ( my $version_list = $self->previous_version_set ) {
- $self->downgrade_single_step($version_list);
+ $ran_once = 1;
+ $self->downgrade_single_step({ version_set => $version_list });
# do we just delete a row here? I think so but not sure
- $self->delete_database_version({ version => $version_list->[-1] });
+ $self->delete_database_version({ version => $version_list->[0] });
}
+ log_warn { 'no version to run downgrade' } unless $ran_once;
}
-method backup { $self->storage->backup($self->backup_directory) }
+sub backup {
+ my $self = shift;
+ log_info { 'backing up' };
+ $self->schema->storage->backup($self->backup_directory)
+}
__PACKAGE__->meta->make_immutable;
1;
+# vim: ts=2 sw=2 expandtab
+
+__END__
+
=pod
=attr schema
The L<DBIx::Class::Schema> (B<required>) that is used to talk to the database
and generate the DDL.
+=attr schema_version
+
+The version that the schema is currently at. Defaults to
+C<< $self->schema->schema_version >>.
+
=attr backup_directory
-The directory that backups are stored in
+The directory where backups are stored
=attr to_version
Deploys the current schema into the database. Populates C<version_storage> with
C<version> and C<ddl>.
-B<Note>: you typically need to call C<< $dh->prepare_install >> before you call
+B<Note>: you typically need to call C<< $dh->prepare_deploy >> before you call
this method.
B<Note>: you cannot install on top of an already installed database
see L<DBIx::Class::DeploymentHandler::HandlesVersionStorage/database_version>
-=head2 prepare_install
+=head2 prepare_deploy
-see L<DBIx::Class::DeploymentHandler::HandlesDeploy/prepare_install>
+see L<DBIx::Class::DeploymentHandler::HandlesDeploy/prepare_deploy>
=head2 prepare_resultsource_install
see L<DBIx::Class::DeploymentHandler::HandlesDeploy/prepare_downgrade>
-=back
-
=head2 SUBCLASSING
All of the methods mentioned in L</METHODS THAT ARE REQUIRED IN SUBCLASSES> and
L<DBIx::Class::DeploymentHandler::HandlesVersioning>, and
L<DBIx::Class::DeploymentHandler::HandlesVersionStorage>.
-__END__
-
-vim: ts=2 sw=2 expandtab