X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema%2FVersioned.pm;h=e264f22de05c0d48c8e345157b00a2715b0a9cd3;hb=bcb8f3ede412b94c02beae1278d7ddabeb91051a;hp=2744b8a19a5468df68681ed68cc49dcc61e06fb3;hpb=ffdf4f11299b7dc0f9c57521688823f7cd1ed19f;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Schema/Versioned.pm b/lib/DBIx/Class/Schema/Versioned.pm index 2744b8a..e264f22 100644 --- a/lib/DBIx/Class/Schema/Versioned.pm +++ b/lib/DBIx/Class/Schema/Versioned.pm @@ -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 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 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)