fix base ::DBI loader to properly order FK columns
SineSwiper [Fri, 4 May 2012 21:44:15 +0000 (17:44 -0400)]
Changes
lib/DBIx/Class/Schema/Loader/DBI.pm

diff --git a/Changes b/Changes
index 1560788..4182c4c 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,5 +1,6 @@
 Revision history for Perl extension DBIx::Class::Schema::Loader
 
+        - properly order FK columns when using base ::DBI loader (SineSwiper)
         - bump Class::Inspector dep to 1.27 due to test failures with earlier
           versions on perl >= 5.15.7 (RT#74236)
 
index 0af0dc4..cf8da16 100644 (file)
@@ -404,6 +404,7 @@ sub _table_fk_info {
         my $uk_col  = $self->_lc($raw_rel->[3]);
         my $fk_scm  = $raw_rel->[5];
         my $fk_col  = $self->_lc($raw_rel->[7]);
+        my $key_seq = $raw_rel->[8] - 1;
         my $relid   = ($raw_rel->[11] || ( "__dcsld__" . $i++ ));
 
         foreach my $var ($uk_scm, $uk_tbl, $uk_col, $fk_scm, $fk_col, $relid) {
@@ -424,15 +425,18 @@ sub _table_fk_info {
                 ignore_schema => 1
             )),
         );
-        $rels{$relid}{cols}{$uk_col} = $fk_col;
+        
+        # Add this data IN ORDER
+        $rels{$relid}{rcols}[$key_seq] = $uk_col;
+        $rels{$relid}{lcols}[$key_seq] = $fk_col;
     }
     $sth->finish;
 
     my @rels;
     foreach my $relid (keys %rels) {
         push(@rels, {
-            remote_columns => [ keys   %{$rels{$relid}->{cols}} ],
-            local_columns  => [ values %{$rels{$relid}->{cols}} ],
+            remote_columns => $rels{$relid}{rcols},
+            local_columns  => $rels{$relid}{lcols},
             remote_table   => $rels{$relid}->{tbl},
         });
     }