X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema.pm;h=dc690627de97e52b642bfac394f12c341c3720d9;hb=3d27f771a00a4ace223351c0ea8e7d8785bd86f3;hp=849f1ddccfb9e75a136dbe3d1cbab0cbaf3f5e5d;hpb=1a304e513dc3fb708512877ab25423b567e1bedc;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Schema.pm b/lib/DBIx/Class/Schema.pm index 849f1dd..dc69062 100644 --- a/lib/DBIx/Class/Schema.pm +++ b/lib/DBIx/Class/Schema.pm @@ -208,17 +208,19 @@ sub load_namespaces { local *Class::C3::reinitialize = sub { }; use warnings 'redefine'; - my %done; - foreach my $result (keys %results) { + # ensure classes are loaded and fetch properly sorted classes + $class->ensure_class_loaded($_) foreach(values %results); + my @subclass_last = sort { $results{$a}->isa($results{$b}) } keys(%results); + + foreach my $result (@subclass_last) { my $result_class = $results{$result}; - $class->ensure_class_loaded($result_class); $result_class->source_name($result) unless $result_class->source_name; my $rs_class = delete $resultsets{$result}; my $rs_set = $result_class->resultset_class; - $done{$rs_set} = $rs_set unless exists $done{$rs_set}; + if($rs_set && $rs_set ne 'DBIx::Class::ResultSet') { - if($rs_class && !exists($done{$rs_set}) && $rs_class ne $rs_set) { + if($rs_class && $rs_class ne $rs_set) { warn "We found ResultSet class '$rs_class' for '$result', but it seems " . "that you had already set '$result' to use '$rs_set' instead"; }