virtual method so user can create upgrade path across multiple versions
John Goulah [Tue, 26 Aug 2008 20:43:04 +0000 (20:43 +0000)]
Changes
lib/DBIx/Class/Schema/Versioned.pm

diff --git a/Changes b/Changes
index 78d3b6b..adda80c 100644 (file)
--- 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
index 44e0172..d51cd5d 100644 (file)
@@ -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())
                       });