X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FDeploymentHandler%2FDad.pm;h=569a9f727fccac45c0774b4a9eeb7f41b9a4ca98;hb=da2816e26423ff8d3dff8b3414ce5138bb202b37;hp=8b6b8c4c7255b6a00b0fcbcd863b54cdf345ce01;hpb=e52174e31b95fe335f6ab8cfdbf23cc2a0c05673;p=dbsrgits%2FDBIx-Class-DeploymentHandler.git diff --git a/lib/DBIx/Class/DeploymentHandler/Dad.pm b/lib/DBIx/Class/DeploymentHandler/Dad.pm index 8b6b8c4..569a9f7 100644 --- a/lib/DBIx/Class/DeploymentHandler/Dad.pm +++ b/lib/DBIx/Class/DeploymentHandler/Dad.pm @@ -1,15 +1,21 @@ 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 => ( @@ -20,16 +26,29 @@ has backup_directory => ( has to_version => ( is => 'ro', + isa => 'Str', lazy_build => 1, ); -sub _build_to_version { $_[0]->schema->schema_version } +sub _build_to_version { $_[0]->schema_version } + +has schema_version => ( + is => 'ro', + isa => 'StrSchemaVersion', + lazy_build => 1, +); + +sub _build_schema_version { $_[0]->schema->schema_version } + +sub install { + my $self = shift; -method install { + 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; + my $ddl = $self->deploy({ version=> $version }); $self->add_database_version({ version => $self->to_version, @@ -38,9 +57,14 @@ method install { } 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], @@ -48,19 +72,29 @@ sub upgrade { 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; @@ -77,9 +111,14 @@ __END__ The L (B) 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 @@ -89,10 +128,14 @@ The version (defaults to schema's version) to migrate the database to $dh->install -Deploys the current schema into the database. Populates C with -C and C. +or + + $dh->install({ version => 1 }) -B: you typically need to call C<< $dh->prepare_install >> before you call +Deploys the requested version into the database Version defaults to +L. Populates C with C and C. + +B: you typically need to call C<< $dh->prepare_deploy >> before you call this method. B: you cannot install on top of an already installed database @@ -167,9 +210,9 @@ should probably implement these too, even if they are no-ops. see L -=head2 prepare_install +=head2 prepare_deploy -see L +see L =head2 prepare_resultsource_install @@ -187,8 +230,6 @@ see L see L -=back - =head2 SUBCLASSING All of the methods mentioned in L and