X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema%2FVersioned.pm;h=877b841220b6f5f82ab1c25090d9cde8e45c61df;hb=99a74c4ad4029a2fde7665d47cd444c041737c58;hp=9bcc08ea92dafc82a3936c4d0e62f2a0d0f7fc1e;hpb=ecea7937af447727114a232448d79e33f1ad562d;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Schema/Versioned.pm b/lib/DBIx/Class/Schema/Versioned.pm index 9bcc08e..877b841 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; @@ -186,6 +190,8 @@ database type. This method should return the name of the backup file, if appropriate.. +This method is disabled by default. Set $schema->do_backup(1) to enable it. + =cut sub backup @@ -242,8 +248,8 @@ sub _create_db_to_schema_diff { my $filename = $self->ddl_filename( $db, - $self->upgrade_directory, $self->schema_version, + $self->upgrade_directory, 'PRE', ); my $file; @@ -298,8 +304,8 @@ sub upgrade my $upgrade_file = $self->ddl_filename( $self->storage->sqlt_type, - $self->upgrade_directory, $self->schema_version, + $self->upgrade_directory, $db_version, ); @@ -338,7 +344,7 @@ sub _read_sql_file { @data = split(/;/, join('', @data)); close($fh); @data = grep { $_ && $_ !~ /^-- / } @data; - @data = grep { $_ !~ /^(BEGIN TRANACTION|COMMIT)/m } @data; + @data = grep { $_ !~ /^(BEGIN TRANSACTION|COMMIT)/m } @data; return \@data; } @@ -349,22 +355,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 @@ -404,21 +404,29 @@ 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. +To avoid the checks on connect, set the env var DBIC_NO_VERSION_CHECK or alternatively you can set the ignore_version attr in the forth arg like so: + + my $schema = MyApp::Schema->connect( + $dsn, + $user, + $password, + { ignore_version => 1 }, + ); =cut sub connection { my $self = shift; $self->next::method(@_); - $self->_on_connect; + $self->_on_connect($_[3]); return $self; } sub _on_connect { - my ($self) = @_; + my ($self, $args) = @_; + + $args = {} unless $args; $self->{vschema} = DBIx::Class::Version->connect(@{$self->storage->connect_info()}); my $vtable = $self->{vschema}->resultset('Table'); @@ -432,10 +440,9 @@ 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}); - + return if ($args->{ignore_version} || ($ENV{DBIC_NO_VERSION_CHECK} && !exists $args->{ignore_version})); my $pversion = $self->get_db_version(); if($pversion eq $self->schema_version)