X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema%2FLoader%2FDBI.pm;h=09155748a62daf689c7c30214fe56a0f4e42ffe2;hb=8990a2b23d98bcb87da292ee3731de3ac4f1b86f;hp=131b3d3faed6d0ad158630b24939a6a6e364b830;hpb=22f91663244e30dd4bcae10e54a761113f3a587c;p=dbsrgits%2FDBIx-Class-Schema-Loader.git diff --git a/lib/DBIx/Class/Schema/Loader/DBI.pm b/lib/DBIx/Class/Schema/Loader/DBI.pm index 131b3d3..0915574 100644 --- a/lib/DBIx/Class/Schema/Loader/DBI.pm +++ b/lib/DBIx/Class/Schema/Loader/DBI.pm @@ -10,7 +10,7 @@ use Carp::Clan qw/^DBIx::Class/; use namespace::clean; use DBIx::Class::Schema::Loader::Table (); -our $VERSION = '0.07019'; +our $VERSION = '0.07028'; __PACKAGE__->mk_group_accessors('simple', qw/ _disable_pk_detection @@ -54,9 +54,10 @@ sub new { my $driver = $self->dbh->{Driver}->{Name}; my $subclass = 'DBIx::Class::Schema::Loader::DBI::' . $driver; - if ($self->load_optional_class($subclass)) { - bless $self, $subclass unless $self->isa($subclass); + if ((not $self->isa($subclass)) && $self->load_optional_class($subclass)) { + bless $self, $subclass; $self->_rebless; + Class::C3::reinitialize() if $] < 5.009005; } } @@ -66,7 +67,7 @@ sub new { $self->_setup; - $self; + return $self; } sub _build_quote_char { @@ -403,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) { @@ -423,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 => [ grep defined, @{ $rels{$relid}{rcols} } ], + local_columns => [ grep defined, @{ $rels{$relid}{lcols} } ], remote_table => $rels{$relid}->{tbl}, }); }