From: John Goulah Date: Tue, 26 Aug 2008 20:43:04 +0000 (+0000) Subject: virtual method so user can create upgrade path across multiple versions X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=a354b8426bc1f8b92eb1018dfb073b2477466b98;p=dbsrgits%2FDBIx-Class-Historic.git virtual method so user can create upgrade path across multiple versions --- diff --git a/Changes b/Changes index 78d3b6b..adda80c 100644 --- a/Changes +++ b/Changes @@ -3,6 +3,8 @@ Revision history for DBIx::Class - Fixed up related resultsets and multi-create - Fixed superfluous connection in ODBC::_rebless - Fixed undef PK for first insert in ODBC::Microsoft_SQL_Server + - Added virtual method to Versioned so a user can create upgrade + path across multiple versions (jgoulah) 0.08099_04 2008-07-24 01:00:00 - Functionality to storage to enable a sub to be run without FK checks diff --git a/lib/DBIx/Class/Schema/Versioned.pm b/lib/DBIx/Class/Schema/Versioned.pm index 44e0172..d51cd5d 100644 --- a/lib/DBIx/Class/Schema/Versioned.pm +++ b/lib/DBIx/Class/Schema/Versioned.pm @@ -235,7 +235,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 +251,24 @@ 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. + +=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 +312,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); @@ -546,9 +568,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()) });