handle column accessor collisions with UNIVERSAL methods
[dbsrgits/DBIx-Class-Schema-Loader.git] / t / lib / dbixcsl_common_tests.pm
index 2a48570..c8bc757 100644 (file)
@@ -92,7 +92,7 @@ sub run_tests {
 
     my $extra_count = $self->{extra}{count} || 0;
 
-    plan tests => @connect_info * (182 + $extra_count + ($self->{data_type_tests}{test_count} || 0));
+    plan tests => @connect_info * (183 + $extra_count + ($self->{data_type_tests}{test_count} || 0));
 
     foreach my $info_idx (0..$#connect_info) {
         my $info = $connect_info[$info_idx];
@@ -124,17 +124,8 @@ sub run_only_extra_tests {
         $self->drop_extra_tables_only;
 
         my $dbh = $self->dbconnect(1);
-        {
-            # Silence annoying but harmless postgres "NOTICE:  CREATE TABLE..."
-            local $SIG{__WARN__} = sub {
-                my $msg = shift;
-                warn $msg unless $msg =~ m{^NOTICE:\s+CREATE TABLE};
-            };
-
-
-            $dbh->do($_) for @{ $self->{extra}{create} || [] };
-            $dbh->do($_) for @{ $self->{data_type_tests}{ddl} || []};
-        }
+        $dbh->do($_) for @{ $self->{extra}{create} || [] };
+        $dbh->do($_) for @{ $self->{data_type_tests}{ddl} || []};
         $self->{_created} = 1;
 
         my $file_count = grep /CREATE (?:TABLE|VIEW)/i, @{ $self->{extra}{create} || [] };
@@ -160,11 +151,7 @@ sub drop_extra_tables_only {
 
     my $dbh = $self->dbconnect(0);
 
-    {
-        local $SIG{__WARN__} = sub {}; # postgres notices
-        $dbh->do($_) for @{ $self->{extra}{pre_drop_ddl} || [] };
-    }
-
+    $dbh->do($_) for @{ $self->{extra}{pre_drop_ddl} || [] };
     $dbh->do("DROP TABLE $_") for @{ $self->{extra}{drop} || [] };
 
     foreach my $data_type_table (@{ $self->{data_type_tests}{table_names} || [] }) {
@@ -223,7 +210,7 @@ sub setup_schema {
     my $file_count;
     {
         my @loader_warnings;
-        local $SIG{__WARN__} = sub { push(@loader_warnings, $_[0]); };
+        local $SIG{__WARN__} = sub { push(@loader_warnings, @_); };
          eval qq{
              package $schema_class;
              use base qw/DBIx::Class::Schema::Loader/;
@@ -337,7 +324,10 @@ sub test_schema {
     isa_ok( $rsobj35, "DBIx::Class::ResultSet" );
 
     my @columns_lt2 = $class2->columns;
-    is_deeply( \@columns_lt2, [ qw/id dat dat2 set_primary_key dbix_class_testcomponent meta/ ], "Column Ordering" );
+    is_deeply( \@columns_lt2, [ qw/id dat dat2 set_primary_key can dbix_class_testcomponent meta/ ], "Column Ordering" );
+
+    is $class2->column_info('can')->{accessor}, undef,
+        'accessor for column name that conflicts with a UNIVERSAL method removed';
 
     is $class2->column_info('set_primary_key')->{accessor}, undef,
         'accessor for column name that conflicts with a result base class method removed';
@@ -936,24 +926,15 @@ sub test_schema {
 
         $conn->storage->disconnect; # needed for Firebird and Informix
         my $dbh = $self->dbconnect(1);
-
-        {
-            # Silence annoying but harmless postgres "NOTICE:  CREATE TABLE..."
-            local $SIG{__WARN__} = sub {
-                my $msg = shift;
-                warn $msg unless $msg =~ m{^NOTICE:\s+CREATE TABLE};
-            };
-
-            $dbh->do($_) for @statements_rescan;
-        }
-
+        $dbh->do($_) for @statements_rescan;
         $dbh->disconnect;
 
         sleep 1;
 
         my @new = do {
-            # kill the 'Dumping manual schema' warnings
-            local $SIG{__WARN__} = sub {};
+            local $SIG{__WARN__} = sub { warn @_
+                unless $_[0] =~ /(?i:loader_test)\d+ has no primary key|^Dumping manual schema|^Schema dump completed/
+            };
             $conn->rescan;
         };
         is_deeply(\@new, [ qw/LoaderTest30/ ], "Rescan");
@@ -984,7 +965,9 @@ sub test_schema {
         $conn->storage->dbh->do("DROP TABLE loader_test30");
 
         @new = do {
-            local $SIG{__WARN__} = sub {};
+            local $SIG{__WARN__} = sub { warn @_
+                unless $_[0] =~ /(?i:loader_test)\d+ has no primary key|^Dumping manual schema|^Schema dump completed/
+            };
             $conn->rescan;
         };
         is_deeply(\@new, [], 'no new tables on rescan');
@@ -1037,16 +1020,9 @@ sub test_preserve_case {
 
     my ($oqt, $cqt) = $self->get_oqt_cqt(always => 1); # open quote, close quote
 
-    my $dbh = $conn->storage->dbh;
+    my $dbh = $self->dbconnect;
 
-    {
-        # Silence annoying but harmless postgres "NOTICE:  CREATE TABLE..."
-        local $SIG{__WARN__} = sub {
-            my $msg = shift;
-            warn $msg unless $msg =~ m{^NOTICE:\s+CREATE TABLE};
-        };
-
-        $dbh->do($_) for (
+    $dbh->do($_) for (
 qq|
     CREATE TABLE ${oqt}LoaderTest40${cqt} (
         ${oqt}Id${cqt} INTEGER NOT NULL PRIMARY KEY,
@@ -1062,17 +1038,19 @@ qq|
 |,
 qq| INSERT INTO ${oqt}LoaderTest40${cqt} VALUES (1, 'foo') |,
 qq| INSERT INTO ${oqt}LoaderTest41${cqt} VALUES (1, 1) |,
-        );
-    }
+    );
     $conn->storage->disconnect;
 
     local $conn->_loader->{preserve_case} = 1;
     $conn->_loader->_setup;
 
+
     {
-        local $SIG{__WARN__} = sub {};
+        local $SIG{__WARN__} = sub { warn @_
+            unless $_[0] =~ /(?i:loader_test)\d+ has no primary key|^Dumping manual schema|^Schema dump completed/
+        };
         $conn->rescan;
-    }
+    };
 
     if (not $self->{skip_rels}) {
         is $conn->resultset('LoaderTest41')->find(1)->loader_test40->foo3_bar, 'foo',
@@ -1192,6 +1170,7 @@ sub create {
                 dat VARCHAR(32) NOT NULL,
                 dat2 VARCHAR(32) NOT NULL,
                 set_primary_key INTEGER $self->{null},
+                can INTEGER $self->{null},
                 dbix_class_testcomponent INTEGER $self->{null},
                 meta INTEGER $self->{null},
                 UNIQUE (dat2, dat)
@@ -1610,11 +1589,7 @@ sub create {
 
     my $dbh = $self->dbconnect(1);
 
-    # Silence annoying but harmless postgres "NOTICE:  CREATE TABLE..."
-    local $SIG{__WARN__} = sub {
-        my $msg = shift;
-        warn $msg unless $msg =~ m{^NOTICE:\s+CREATE TABLE};
-    };
+    $dbh->do($_) for @{ $self->{pre_create} || [] };
 
     $dbh->do($_) foreach (@statements);
 
@@ -1722,10 +1697,7 @@ sub drop_tables {
     for (1,2) {
       my $dbh = $self->dbconnect(0);
 
-      {
-        local $SIG{__WARN__} = sub {}; # postgres notices
-        $dbh->do($_) for @{ $self->{extra}{pre_drop_ddl} || [] };
-      }
+      $dbh->do($_) for @{ $self->{extra}{pre_drop_ddl} || [] };
 
       $dbh->do("DROP TABLE $_") for @{ $self->{extra}{drop} || [] };
 
@@ -1841,7 +1813,7 @@ sub setup_data_type_tests {
             my @size = split /,/, $size;
 
             # some DBs don't like very long column names
-            if ($self->{vendor} =~ /^(?:firebird|sqlanywhere|oracle)\z/i) {
+            if ($self->{vendor} =~ /^(?:firebird|sqlanywhere|oracle|db2)\z/i) {
                 my ($col_def, $default) = $type_alias =~ /^(.*)(default.*)?\z/i;
 
                 $type_alias = substr $col_def, 0, 15;