minor optimization for Pg FK attrs, better test
Rafael Kitover [Wed, 29 Aug 2012 16:18:03 +0000 (12:18 -0400)]
Set the FK attributes in Pg _table_fk_info only once instead of once for
each column.

Also test DEFERRABLE being on instead of off, since it defaults to off.

lib/DBIx/Class/Schema/Loader/DBI/Pg.pm
t/10_03pg_common.t

index f9176d1..a751b94 100644 (file)
@@ -83,9 +83,11 @@ EOF
             schema   => $remote_schema,
         ) unless exists $rels{$fk}{remote_table};
 
-        $rels{$fk}{attrs}{on_delete} = uc $delete_rule;
-        $rels{$fk}{attrs}{on_update} = uc $update_rule;
-        $rels{$fk}{attrs}{is_deferrable} = uc $is_deferrable eq 'YES' ? 1 : 0;
+        $rels{$fk}{attrs} ||= {
+            on_delete     => uc $delete_rule,
+            on_update     => uc $update_rule,
+            is_deferrable => uc $is_deferrable eq 'YES' ? 1 : 0,
+        };
     }
 
     return [ values %rels ];
index 342e771..ed1ed93 100644 (file)
@@ -239,7 +239,7 @@ my $tester = dbixcsl_common_tests->new(
                     id bigserial primary key,
                     eleven_id int,
                     foreign key (eleven_id) references pg_loader_test9(id)
-                        on delete restrict on update set null
+                        on delete restrict on update set null deferrable
                 )
             },
 
@@ -288,7 +288,7 @@ my $tester = dbixcsl_common_tests->new(
             is $rel_info->{attrs}{on_update}, 'SET NULL',
                 'ON UPDATE clause introspected correctly';
 
-            is $rel_info->{attrs}{is_deferrable}, 0,
+            is $rel_info->{attrs}{is_deferrable}, 1,
                 'DEFERRABLE clause introspected correctly';
 
             foreach my $db_schema (['dbicsl-test', 'dbicsl.test'], '%') {