From: John Napiorkowski Date: Wed, 14 May 2008 16:05:22 +0000 (+0000) Subject: changed SQLT::Parser::DBIC so that in FK constraints, both the field order for the... X-Git-Tag: v0.08240~402^2~39 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=d1b264d3e650a18228410a9fa9b1657f0d97f5b1;p=dbsrgits%2FDBIx-Class.git changed SQLT::Parser::DBIC so that in FK constraints, both the field order for the source and target tables are ensured to follow the same ordering rule --- diff --git a/lib/SQL/Translator/Parser/DBIx/Class.pm b/lib/SQL/Translator/Parser/DBIx/Class.pm index e960ff6..2cc13fa 100644 --- a/lib/SQL/Translator/Parser/DBIx/Class.pm +++ b/lib/SQL/Translator/Parser/DBIx/Class.pm @@ -121,16 +121,13 @@ sub parse { my $othertable = $source->related_source($rel); my $rel_table = $othertable->name; + # Force the order of @cond to match the order of ->add_columns + my $idx; + my %other_columns_idx = map {'foreign.'.$_ => ++$idx } $othertable->columns; + my @cond = sort { $other_columns_idx{$a} cmp $other_columns_idx{$b} } keys(%{$rel_info->{cond}}); + # Get the key information, mapping off the foreign/self markers - my @cond = keys(%{$rel_info->{cond}}); my @refkeys = map {/^\w+\.(\w+)$/} @cond; - - # Force the order of the referenced fields to be the same as - # ->add_columns method. - my $idx; - my %other_columns_idx = map {$_ => ++$idx } $othertable->columns; - @refkeys = sort { $other_columns_idx{$a} cmp $other_columns_idx{$b} } @refkeys; - my @keys = map {$rel_info->{cond}->{$_} =~ /^\w+\.(\w+)$/} @cond; if($rel_table) diff --git a/t/86sqlt.t b/t/86sqlt.t index 7db1d28..189b2d5 100644 --- a/t/86sqlt.t +++ b/t/86sqlt.t @@ -58,14 +58,14 @@ my %fk_constraints = ( fourkeys_to_twokeys => [ { 'display' => 'fourkeys_to_twokeys->twokeys', - 'name' => 'fourkeys_to_twokeys_fk_t_cd_t_artist', 'index_name' => 't_cd_t_artist', + 'name' => 'fourkeys_to_twokeys_fk_t_artist_t_cd', 'index_name' => 't_artist_t_cd', 'selftable' => 'fourkeys_to_twokeys', 'foreigntable' => 'twokeys', 'selfcols' => ['t_artist', 't_cd'], 'foreigncols' => ['artist', 'cd'], on_delete => 'CASCADE', on_update => 'CASCADE', deferrable => 1, }, { - 'display' => 'fourkeys_to_twokeys->fourkeys', 'index_name' => 'f_foo_f_goodbye_f_hello_f_bar', - 'name' => 'fourkeys_to_twokeys_fk_f_foo_f_goodbye_f_hello_f_bar', + 'display' => 'fourkeys_to_twokeys->fourkeys', 'index_name' => 'f_foo_f_bar_f_hello_f_goodbye', + 'name' => 'fourkeys_to_twokeys_fk_f_foo_f_bar_f_hello_f_goodbye', 'selftable' => 'fourkeys_to_twokeys', 'foreigntable' => 'fourkeys', 'selfcols' => [qw(f_foo f_bar f_hello f_goodbye)], 'foreigncols' => [qw(foo bar hello goodbye)], @@ -216,8 +216,8 @@ my %fk_constraints = ( }, { 'display' => 'long_columns->owner2', - 'name' => 'long_columns_fk__32_character_column_aaaaaaaaaaa__32_ch_12bdb9cf', - 'index_name' => '_32_character_column_aaaaaaaaaaa__32_character_column_b_6fa7ff05', + 'name' => 'long_columns_fk__32_character_column_bbbbbbbbbbb__32_ch_b7ee284e', + 'index_name' => '_32_character_column_bbbbbbbbbbb__32_character_column_a_76863ce2', 'selftable' => 'long_columns', 'foreigntable' => 'long_columns', 'selfcols' => ['_32_character_column_bbbbbbbbbbb', '_32_character_column_aaaaaaaaaaa'], 'foreigncols' => ['_32_character_column_aaaaaaaaaaa', '_32_character_column_bbbbbbbbbbb'],