[Bast-commits] r5606 - in DBIx-Class/0.08/trunk: . lib/DBIx/Class

matthewt at dev.catalyst.perl.org matthewt at dev.catalyst.perl.org
Fri Feb 20 17:43:27 GMT 2009


Author: matthewt
Date: 2009-02-20 17:43:27 +0000 (Fri, 20 Feb 2009)
New Revision: 5606

Modified:
   DBIx-Class/0.08/trunk/Changes
   DBIx-Class/0.08/trunk/lib/DBIx/Class/Row.pm
Log:
more mc fixes

Modified: DBIx-Class/0.08/trunk/Changes
===================================================================
--- DBIx-Class/0.08/trunk/Changes	2009-02-20 14:34:13 UTC (rev 5605)
+++ DBIx-Class/0.08/trunk/Changes	2009-02-20 17:43:27 UTC (rev 5606)
@@ -1,4 +1,6 @@
 Revision history for DBIx::Class
+        - multi-create using find_or_create rather than _related for post-insert
+        - fix get_inflated_columns to check has_column_loaded
         - Add DBIC_MULTICREATE_DEBUG env var (undocumented, quasi-internal)
         - Fix up multi-create to:
           - correctly propagate columns loaded during multi-insert of rels

Modified: DBIx-Class/0.08/trunk/lib/DBIx/Class/Row.pm
===================================================================
--- DBIx-Class/0.08/trunk/lib/DBIx/Class/Row.pm	2009-02-20 14:34:13 UTC (rev 5605)
+++ DBIx-Class/0.08/trunk/lib/DBIx/Class/Row.pm	2009-02-20 17:43:27 UTC (rev 5606)
@@ -85,17 +85,20 @@
 sub __new_related_find_or_new_helper {
   my ($self, $relname, $data) = @_;
   if ($self->__their_pk_needs_us($relname, $data)) {
+    MULTICREATE_DEBUG and warn "MC $self constructing $relname via new_result";
     return $self->result_source
                 ->related_source($relname)
                 ->resultset
                 ->new_result($data);
   }
   if ($self->result_source->pk_depends_on($relname, $data)) {
+    MULTICREATE_DEBUG and warn "MC $self constructing $relname via find_or_new";
     return $self->result_source
                 ->related_source($relname)
                 ->resultset
-                ->find_or_create($data);
+                ->find_or_new($data);
   }
+  MULTICREATE_DEBUG and warn "MC $self constructing $relname via find_or_new_related";
   return $self->find_or_new_related($relname, $data);
 }
 
@@ -284,9 +287,11 @@
                         $relname, { $rel_obj->get_columns }
                       );
 
-      MULTICREATE_DEBUG and warn "MC $self pre-inserting $relname $rel_obj\n";
+      MULTICREATE_DEBUG and warn "MC $self pre-reconstructing $relname $rel_obj\n";
 
-      $rel_obj->insert();
+      my $them = { %{$rel_obj->{_relationship_data} || {} }, $rel_obj->get_inflated_columns };
+      my $re = $self->find_or_create_related($relname, $them);
+      %{$rel_obj} = %{$re};
       $self->set_from_related($relname, $rel_obj);
       delete $related_stuff{$relname};
     }
@@ -346,7 +351,10 @@
               MULTICREATE_DEBUG and warn "MC $self skipping post-insert on $relname";
             } else {
               MULTICREATE_DEBUG and warn "MC $self re-creating $relname $obj";
-              my $re = $self->find_or_create_related($relname, $them);
+              my $re = $self->result_source
+                            ->related_source($relname)
+                            ->resultset
+                            ->find_or_create($them);
               %{$obj} = %{$re};
               MULTICREATE_DEBUG and warn "MC $self new $relname $obj";
             }
@@ -706,7 +714,7 @@
   return map {
     my $accessor = $self->column_info($_)->{'accessor'} || $_;
     ($_ => $self->$accessor);
-  } $self->columns;
+  } grep $self->has_column_loaded($_), $self->columns;
 }
 
 =head2 set_column




More information about the Bast-commits mailing list