# 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 Log::Contextual::WarnLogger;
-use Log::Contextual ':log', -default_logger => Log::Contextual::WarnLogger->new({
- env_prefix => 'DBICDH'
-});
+use DBIx::Class::DeploymentHandler::LogImporter ':log';
+use DBIx::Class::DeploymentHandler::Types;
has schema => (
- isa => 'DBIx::Class::Schema',
is => 'ro',
required => 1,
);
has schema_version => (
is => 'ro',
- isa => 'Str',
+ isa => 'StrSchemaVersion',
lazy_build => 1,
);
sub _build_schema_version { $_[0]->schema->schema_version }
-method install {
- log_info { '[DBICDH] installing version ' . $self->to_version };
+sub install {
+ my $self = shift;
+
+ my $version = (shift @_ || {})->{version} || $self->to_version;
+ log_info { "installing version $version" };
croak 'Install not possible as versions table already exists in database'
if $self->version_storage_is_installed;
- my $ddl = $self->deploy;
+ $self->txn_do(sub {
+ my $ddl = $self->deploy({ version=> $version });
- $self->add_database_version({
- version => $self->to_version,
- ddl => $ddl,
+ $self->add_database_version({
+ version => $version,
+ ddl => $ddl,
+ });
});
}
sub upgrade {
- log_info { '[DBICDH] upgrading' };
+ log_info { 'upgrading' };
my $self = shift;
- while ( my $version_list = $self->next_version_set ) {
- my ($ddl, $upgrade_sql) = @{
- $self->upgrade_single_step({ version_set => $version_list })
- ||[]};
-
- $self->add_database_version({
- version => $version_list->[-1],
- ddl => $ddl,
- upgrade_sql => $upgrade_sql,
- });
- }
+ my $ran_once = 0;
+ $self->txn_do(sub {
+ while ( my $version_list = $self->next_version_set ) {
+ $ran_once = 1;
+ my ($ddl, $upgrade_sql) = @{
+ $self->upgrade_single_step({ version_set => $version_list })
+ ||[]};
+
+ $self->add_database_version({
+ version => $version_list->[-1],
+ ddl => $ddl,
+ upgrade_sql => $upgrade_sql,
+ });
+ }
+ });
+
+ log_warn { 'no need to run upgrade' } unless $ran_once;
}
sub downgrade {
- log_info { '[DBICDH] upgrading' };
+ log_info { 'downgrading' };
my $self = shift;
- while ( my $version_list = $self->previous_version_set ) {
- $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] });
- }
+ my $ran_once = 0;
+ $self->txn_do(sub {
+ while ( my $version_list = $self->previous_version_set ) {
+ $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->[0] });
+ }
+ });
+ log_warn { 'no version to run downgrade' } unless $ran_once;
}
-method backup {
- log_info { '[DBICDH] backing up' };
- $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;
$dh->install
-Deploys the current schema into the database. Populates C<version_storage> with
-C<version> and C<ddl>.
+or
+
+ $dh->install({ version => 1 })
+
+Deploys the requested version into the database Version defaults to
+L</schema_version>. Populates C<version_storage> with C<version> and C<ddl>.
B<Note>: you typically need to call C<< $dh->prepare_deploy >> before you call
this method.
See L<DBIx::Class::DeploymentHandler::HandlesDeploy/downgrade_single_step>.
+=head2 txn_do
+
+See L<DBIx::Class::DeploymentHandler::HandlesDeploy/txn_do>.
+
=head1 ORTHODOX METHODS
These methods are not actually B<required> as things will probably still work