From: Andrew Moore Date: Fri, 5 Mar 2010 21:37:55 +0000 (+0000) Subject: Fix regression where SQL files with comments were not handled properly by ::Schema... X-Git-Tag: v0.08121~85 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=b703fec7f5767eb8240771f1a07a518b34855768;p=dbsrgits%2FDBIx-Class.git Fix regression where SQL files with comments were not handled properly by ::Schema::Versioned. --- diff --git a/Changes b/Changes index cde661d..39a1d13 100644 --- a/Changes +++ b/Changes @@ -1,5 +1,7 @@ Revision history for DBIx::Class + - Fix regression where SQL files with comments were not + handled properly by ::Schema::Versioned. - Fix regression on not properly throwing when $obj->relationship is unresolvable - Add has_relationship method to row objects diff --git a/lib/DBIx/Class.pm b/lib/DBIx/Class.pm index 2a71a98..56f94dc 100644 --- a/lib/DBIx/Class.pm +++ b/lib/DBIx/Class.pm @@ -222,6 +222,8 @@ abraxxa: Alexander Hartmaier aherzog: Adam Herzog +amoore: Andrew Moore + andyg: Andy Grundman ank: Andres Kievsky diff --git a/lib/DBIx/Class/Schema/Versioned.pm b/lib/DBIx/Class/Schema/Versioned.pm index 0e87d2c..aa4f702 100644 --- a/lib/DBIx/Class/Schema/Versioned.pm +++ b/lib/DBIx/Class/Schema/Versioned.pm @@ -709,12 +709,12 @@ sub _read_sql_file { my @data = split /\n/, join '', <$fh>; close $fh; - @data = grep { - $_ && - !/^--/ && - !/^(BEGIN|BEGIN TRANSACTION|COMMIT)/m - } split /;/, - join '', @data; + @data = split /;/, + join '', + grep { $_ && + !/^--/ && + !/^(BEGIN|BEGIN TRANSACTION|COMMIT)/mi } + @data; return \@data; } diff --git a/t/94versioning.t b/t/94versioning.t index 685809b..b73d612 100644 --- a/t/94versioning.t +++ b/t/94versioning.t @@ -165,6 +165,37 @@ my $schema_v3 = DBICVersion::Schema->connect($dsn, $user, $pass, { ignore_versio is($schema_v3->get_db_version(), '3.0', 'db version number upgraded'); } +# Now, try a v1 -> v3 upgrade with a file that has comments strategically placed in it. +# First put the v1 schema back again... +{ + # drop all the tables... + eval { $schema_v1->storage->dbh->do('drop table ' . $version_table_name) }; + eval { $schema_v1->storage->dbh->do('drop table ' . $old_table_name) }; + eval { $schema_v1->storage->dbh->do('drop table TestVersion') }; + + { + local $DBICVersion::Schema::VERSION = '1.0'; + $schema_v1->deploy; + } + is($schema_v1->get_db_version(), '1.0', 'get_db_version 1.0 ok'); +} + +# add a "harmless" comment before one of the statements. +system( qq($^X -pi -e "s/ALTER/-- this is a comment\nALTER/" $fn->{trans_v23};) ); + +# Then attempt v1 -> v3 upgrade +{ + local $SIG{__WARN__} = sub { warn if $_[0] !~ /Attempting upgrade\.$/ }; + $schema_v3->upgrade(); + is($schema_v3->get_db_version(), '3.0', 'db version number upgraded to 3.0'); + + # make sure that the column added after the comment is actually added. + lives_ok ( sub { + $schema_v3->storage->dbh->do('select ExtraColumn from TestVersion'); + }, 'new column created'); +} + + # check behaviour of DBIC_NO_VERSION_CHECK env var and ignore_version connect attr { my $schema_version = DBICVersion::Schema->connect($dsn, $user, $pass);