X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema%2FVersioned.pm;h=55ba754ce2b88f49d390fc9f9fd9f2b45c86d1bb;hb=f797e89e547c902c2a5cb1669f75c2bdb7769af7;hp=e44f0c56a623ceede15d395a78c073e47eb63c5d;hpb=7146f14f94f8520f10930918e2953d5d72fc6bdc;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/Schema/Versioned.pm b/lib/DBIx/Class/Schema/Versioned.pm index e44f0c5..55ba754 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; @@ -7,40 +8,53 @@ __PACKAGE__->load_components(qw/ Core/); __PACKAGE__->table('dbix_class_schema_versions'); __PACKAGE__->add_columns - ( 'Version' => { + ( 'version' => { 'data_type' => 'VARCHAR', 'is_auto_increment' => 0, 'default_value' => undef, 'is_foreign_key' => 0, - 'name' => 'Version', + 'name' => 'version', 'is_nullable' => 0, 'size' => '10' }, - 'Installed' => { + 'installed' => { 'data_type' => 'VARCHAR', 'is_auto_increment' => 0, 'default_value' => undef, 'is_foreign_key' => 0, - 'name' => 'Installed', + 'name' => 'installed', 'is_nullable' => 0, 'size' => '20' }, ); -__PACKAGE__->set_primary_key('Version'); - -package DBIx::Class::Version::TableCompat; -use base 'DBIx::Class::Version::Table'; +__PACKAGE__->set_primary_key('version'); +package # Hide from PAUSE + DBIx::Class::Version::TableCompat; +use base 'DBIx::Class'; +__PACKAGE__->load_components(qw/ Core/); __PACKAGE__->table('SchemaVersions'); -package DBIx::Class::Version; +__PACKAGE__->add_columns + ( 'Version' => { + 'data_type' => 'VARCHAR', + }, + 'Installed' => { + 'data_type' => 'VARCHAR', + }, + ); +__PACKAGE__->set_primary_key('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; @@ -147,10 +161,10 @@ 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; + my $stamp = $vtable->get_column('installed')->max; + $version = $vtable->search({ installed => $stamp })->first->version; }; return $version; } @@ -311,8 +325,8 @@ sub _set_db_version { my $self = shift; my $vtable = $self->{vschema}->resultset('Table'); - $vtable->create({ Version => $self->schema_version, - Installed => strftime("%Y-%m-%d %H:%M:%S", gmtime()) + $vtable->create({ version => $self->schema_version, + installed => strftime("%Y-%m-%d %H:%M:%S", gmtime()) }); } @@ -387,6 +401,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(@_); @@ -406,16 +432,19 @@ sub _on_connect my $vtable_compat = $vschema_compat->resultset('TableCompat'); if ($self->_source_exists($vtable_compat)) { $self->{vschema}->deploy; - map { $vtable->create({$_->get_columns}) } $vtable_compat->all; + map { $vtable->create({ installed => $_->Installed, version => $_->Version }) } $vtable_compat->all; $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) { - warn "This version is already installed\n"; +# warn "This version is already installed\n"; return 1; }