X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema%2FVersioned.pm;h=39ea7743be7c5e30d5811992eb800d38835d6fd7;hb=b7d1831a079d9b463231d8bbc764b8f628bfbec7;hp=44e01722cdcd54923dd8124cbae78ad50bfcc16d;hpb=abc8f12a6852a8615a74d645bcd9b435f2e15e46;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Schema/Versioned.pm b/lib/DBIx/Class/Schema/Versioned.pm index 44e0172..39ea774 100644 --- a/lib/DBIx/Class/Schema/Versioned.pm +++ b/lib/DBIx/Class/Schema/Versioned.pm @@ -182,7 +182,6 @@ use strict; use warnings; use base 'DBIx::Class'; use POSIX 'strftime'; -use Data::Dumper; __PACKAGE__->mk_classdata('_filedata'); __PACKAGE__->mk_classdata('upgrade_directory'); @@ -235,7 +234,7 @@ sub install if ($new_version) { # create versions table and version row $self->{vschema}->deploy; - $self->_set_db_version; + $self->_set_db_version({ version => $new_version }); } } @@ -251,6 +250,27 @@ sub deploy { $self->install(); } +=head2 create_upgrade_path + +=over 4 + +=item Arguments: { upgrade_file => $file } + +=back + +Virtual method that should be overriden to create an upgrade file. +This is useful in the case of upgrading across multiple versions +to concatenate several files to create one upgrade file. + +You'll probably want the db_version retrieved via $self->get_db_version +and the schema_version which is retrieved via $self->schema_version + +=cut + +sub create_upgrade_path { + ## override this method +} + =head2 upgrade Call this to attempt to upgrade your database from the version it is at to the version @@ -294,11 +314,15 @@ sub upgrade $db_version, ); + $self->create_upgrade_path({ upgrade_file => $upgrade_file }); + unless (-f $upgrade_file) { warn "Upgrade not possible, no upgrade file found ($upgrade_file), please create one\n"; return; } + warn "\nDB version ($db_version) is lower than the schema version (".$self->schema_version."). Attempting upgrade.\n"; + # backup if necessary then apply upgrade $self->_filedata($self->_read_sql_file($upgrade_file)); $self->backup() if($self->do_backup); @@ -494,9 +518,9 @@ sub _create_db_to_schema_diff { return; } - eval 'require SQL::Translator "0.09"'; + eval 'require SQL::Translator "0.09003"'; if ($@) { - $self->throw_exception("SQL::Translator 0.09 required"); + $self->throw_exception("SQL::Translator 0.09003 required"); } my $db_tr = SQL::Translator->new({ @@ -508,7 +532,6 @@ sub _create_db_to_schema_diff { $db_tr->producer($db); my $dbic_tr = SQL::Translator->new; $dbic_tr->parser('SQL::Translator::Parser::DBIx::Class'); - $dbic_tr = $self->storage->configure_sqlt($dbic_tr, $db); $dbic_tr->data($self); $dbic_tr->producer($db); @@ -546,9 +569,12 @@ sub _create_db_to_schema_diff { sub _set_db_version { my $self = shift; + my ($params) = @_; + $params ||= {}; + my $version = $params->{version} ? $params->{version} : $self->schema_version; my $vtable = $self->{vschema}->resultset('Table'); - $vtable->create({ version => $self->schema_version, + $vtable->create({ version => $version, installed => strftime("%Y-%m-%d %H:%M:%S", gmtime()) }); @@ -586,7 +612,7 @@ sub _source_exists =head1 AUTHORS -Jess Robinson +Jess Robinson Luke Saunders =head1 LICENSE