change my nick
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Schema / Versioned.pm
index 2744b8a..e264f22 100644 (file)
@@ -1,4 +1,5 @@
-package DBIx::Class::Version::Table;
+package # Hide from PAUSE
+  DBIx::Class::Version::Table;
 use base 'DBIx::Class';
 use strict;
 use warnings;
@@ -28,7 +29,8 @@ __PACKAGE__->add_columns
       );
 __PACKAGE__->set_primary_key('version');
 
-package DBIx::Class::Version::TableCompat;
+package # Hide from PAUSE
+  DBIx::Class::Version::TableCompat;
 use base 'DBIx::Class';
 __PACKAGE__->load_components(qw/ Core/);
 __PACKAGE__->table('SchemaVersions');
@@ -43,14 +45,16 @@ __PACKAGE__->add_columns
       );
 __PACKAGE__->set_primary_key('Version');
 
-package DBIx::Class::Version;
+package # Hide from PAUSE
+  DBIx::Class::Version;
 use base 'DBIx::Class::Schema';
 use strict;
 use warnings;
 
 __PACKAGE__->register_class('Table', 'DBIx::Class::Version::Table');
 
-package DBIx::Class::VersionCompat;
+package # Hide from PAUSE
+  DBIx::Class::VersionCompat;
 use base 'DBIx::Class::Schema';
 use strict;
 use warnings;
@@ -157,7 +161,7 @@ sub get_db_version
     my ($self, $rs) = @_;
 
     my $vtable = $self->{vschema}->resultset('Table');
-    my $version;
+    my $version = 0;
     eval {
       my $stamp = $vtable->get_column('installed')->max;
       $version = $vtable->search({ installed => $stamp })->first->version;
@@ -349,22 +353,16 @@ allows you to run your upgrade any way you please, you can call C<run_upgrade>
 any number of times to run the actual SQL commands, and in between you can
 sandwich your data upgrading. For example, first run all the B<CREATE>
 commands, then migrate your data from old to new tables/formats, then 
-issue the DROP commands when you are finished.
-
-Will run the whole file as it is by default.
+issue the DROP commands when you are finished. Will run the whole file as it is by default.
 
 =cut
 
 sub do_upgrade
 {
-    my ($self) = @_;
+  my ($self) = @_;
 
-    ## overridable sub, per default just run all the commands.
-    $self->run_upgrade(qr/create/i);
-    $self->run_upgrade(qr/alter table .*? add/i);
-    $self->run_upgrade(qr/alter table .*? (?!drop)/i);
-    $self->run_upgrade(qr/alter table .*? drop/i);
-    $self->run_upgrade(qr/drop/i);
+  # just run all the commands (including inserts) in order                                                        
+  $self->run_upgrade(qr/.*?/);
 }
 
 =head2 run_upgrade
@@ -397,6 +395,18 @@ sub run_upgrade
     return 1;
 }
 
+=head2 connection
+
+Overloaded method. This checks the DBIC schema version against the DB version and
+warns if they are not the same or if the DB is unversioned. It also provides
+compatibility between the old versions table (SchemaVersions) and the new one
+(dbix_class_schema_versions).
+
+To avoid the checks on connect, set the env var DBIC_NO_VERSION_CHECK. This can be
+useful for scripts.
+
+=cut
+
 sub connection {
   my $self = shift;
   $self->next::method(@_);
@@ -420,7 +430,10 @@ sub _on_connect
       $self->storage->dbh->do("DROP TABLE " . $vtable_compat->result_source->from);
     }
   }
-
+  
+  # useful when connecting from scripts etc
+  return if ($ENV{DBIC_NO_VERSION_CHECK});
+  
   my $pversion = $self->get_db_version();
 
   if($pversion eq $self->schema_version)