Merge 'trunk' into 'on_connect_call'
Rafael Kitover [Wed, 24 Jun 2009 05:33:16 +0000 (05:33 +0000)]
r5619@hlagh (orig r6763):  ribasushi | 2009-06-23 01:33:59 -0700
Real inheritance ordering for load_namespaces
r5623@hlagh (orig r6771):  ribasushi | 2009-06-23 07:46:18 -0700
Move tests around, add extra has_one relationship
r5624@hlagh (orig r6772):  caelum | 2009-06-23 09:36:22 -0700
add missing ' to doc

lib/DBIx/Class/ResultSet.pm
lib/DBIx/Class/Schema.pm
t/lib/DBICTest/Schema/Track.pm
t/multi_create/in_memory.t [moved from t/96multi_create_new.t with 100% similarity]
t/multi_create/standard.t [moved from t/96multi_create.t with 100% similarity]
t/multi_create/torture.t [moved from t/96multi_create_torture.t with 100% similarity]

index f0a5790..117563d 100644 (file)
@@ -2186,7 +2186,7 @@ sub create {
 =back
 
   $cd->cd_to_producer->find_or_create({ producer => $producer },
-                                      { key => 'primary });
+                                      { key => 'primary' });
 
 Tries to find a record based on its primary key or unique constraints; if none
 is found, creates one and returns that instead.
index 3ca9d5e..7040204 100644 (file)
@@ -7,6 +7,7 @@ use DBIx::Class::Exception;
 use Carp::Clan qw/^DBIx::Class/;
 use Scalar::Util qw/weaken/;
 use File::Spec;
+use MRO::Compat;
 use Sub::Name ();
 require Module::Find;
 
@@ -239,16 +240,29 @@ sub load_namespaces {
     local *Class::C3::reinitialize = sub { };
     use warnings 'redefine';
 
-    # ensure classes are loaded and fetch properly sorted classes
+    # ensure classes are loaded and attached in inheritance order
     $class->ensure_class_loaded($_) foreach(values %results);
-    my @subclass_last = sort { $results{$a}->isa($results{$b}) } keys(%results);
-    
+    my %inh_idx;
+    my @subclass_last = sort {
+
+      ($inh_idx{$a} ||=
+        scalar @{mro::get_linear_isa( $results{$a} )}
+      )
+
+          <=>
+
+      ($inh_idx{$b} ||=
+        scalar @{mro::get_linear_isa( $results{$b} )}
+      )
+
+    } keys(%results);
+
     foreach my $result (@subclass_last) {
       my $result_class = $results{$result};
 
       my $rs_class = delete $resultsets{$result};
       my $rs_set = $class->_ns_get_rsrc_instance ($result_class)->resultset_class;
-      
+
       if($rs_set && $rs_set ne 'DBIx::Class::ResultSet') {
         if($rs_class && $rs_class ne $rs_set) {
           carp "We found ResultSet class '$rs_class' for '$result', but it seems "
index 4966800..70dc805 100644 (file)
@@ -46,4 +46,6 @@ __PACKAGE__->belongs_to( disc => 'DBICTest::Schema::CD' => 'cd');
 __PACKAGE__->might_have( cd_single => 'DBICTest::Schema::CD', 'single_track' );
 __PACKAGE__->might_have( lyrics => 'DBICTest::Schema::Lyrics', 'track_id' );
 
+__PACKAGE__->has_one( undying_lyric => 'DBICTest::Schema::Lyrics', 'track_id' );
+
 1;
similarity index 100%
rename from t/96multi_create.t
rename to t/multi_create/standard.t