Fix populate with an emply ([]) has_many
Brian Phillips [Wed, 12 Jan 2011 18:46:32 +0000 (12:46 -0600)]
these are ignored if they're empty which makes them much more
compatible with HashRefInflator data sets

Changes
lib/DBIx/Class.pm
lib/DBIx/Class/ResultSet.pm
t/100populate.t

diff --git a/Changes b/Changes
index 043f9d4..be15c28 100644 (file)
--- a/Changes
+++ b/Changes
@@ -6,6 +6,8 @@ Revision history for DBIx::Class
         - Unaliased "dark" selectors no longer throw off prefetch
         - Fix proper composition of bind values across all possible
           SQL areas ( group_by => \[ ... ] now works properly )
+        - Allow populate to skip empty has_many relationships which makes
+          it easier to pass HashRefInflator data directly to ->populate
 
     * Misc
         - Fix test warning on win32 - at this point the test suite is
index 317d91c..979b653 100644 (file)
@@ -256,6 +256,8 @@ blblack: Brandon L. Black <blblack@gmail.com>
 
 bluefeet: Aran Deltac <bluefeet@cpan.org>
 
+bphillips: Brian Phillips <bphillips@cpan.org>
+
 boghead: Bryan Beeley <cpan@beeley.org>
 
 bricas: Brian Cassidy <bricas@cpan.org>
index a8e468c..b1f3360 100644 (file)
@@ -1971,7 +1971,7 @@ sub populate {
     foreach my $item (@$data) {
 
       foreach my $rel (@rels) {
-        next unless $item->{$rel} && ref $item->{$rel} eq "ARRAY";
+        next unless ref $item->{$rel} eq "ARRAY" && @{ $item->{$rel} };
 
         my $parent = $self->find({map { $_ => $item->{$_} } @pks})
      || $self->throw_exception('Cannot find the relating object.');
index 8bb0fdc..c2c9491 100644 (file)
@@ -315,4 +315,10 @@ lives_ok {
    }])
 } 'multicol-PK has_many populate works';
 
+lives_ok ( sub {
+  $schema->populate('CD', [
+    {cdid => 10001, artist => $artist->id, title => 'Pretty Much Empty', year => 2011, tracks => []},
+  ])
+}, 'empty has_many relationship accepted by populate');
+
 done_testing;