Fix regression where SQL files with comments were not handled properly by ::Schema...
Andrew Moore [Fri, 5 Mar 2010 21:37:55 +0000 (21:37 +0000)]
Changes
lib/DBIx/Class.pm
lib/DBIx/Class/Schema/Versioned.pm
t/94versioning.t

diff --git a/Changes b/Changes
index cde661d..39a1d13 100644 (file)
--- 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
index 2a71a98..56f94dc 100644 (file)
@@ -222,6 +222,8 @@ abraxxa: Alexander Hartmaier <alex_hartmaier@hotmail.com>
 
 aherzog: Adam Herzog <adam@herzogdesigns.com>
 
+amoore: Andrew Moore <amoore@cpan.org>
+
 andyg: Andy Grundman <andy@hybridized.org>
 
 ank: Andres Kievsky
index 0e87d2c..aa4f702 100644 (file)
@@ -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;
 }
index 685809b..b73d612 100644 (file)
@@ -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);