X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FRow.pm;fp=lib%2FDBIx%2FClass%2FRow.pm;h=d88edc2e02f7fcc79c4349a4d78ec37f08cf7ed1;hb=ce556881780369e33743ef86a0cb183e976d3d19;hp=3a4dda1615ec989228845e6cd3a851d15f01ffa7;hpb=65ad59ab00bf973e5fd7a375927fd831e6b6e6dc;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Row.pm b/lib/DBIx/Class/Row.pm index 3a4dda1..d88edc2 100644 --- a/lib/DBIx/Class/Row.pm +++ b/lib/DBIx/Class/Row.pm @@ -1182,40 +1182,30 @@ sub inflate_result { ref $class || $class ; - foreach my $pre (keys %{$prefetch||{}}) { + if ($prefetch) { + for my $pre ( keys %$prefetch ) { - my @pre_vals; - @pre_vals = (ref $prefetch->{$pre}[0] eq 'ARRAY') - ? @{$prefetch->{$pre}} : $prefetch->{$pre} - if @{$prefetch->{$pre}||[]}; + my @pre_objects; + if (@{$prefetch->{$pre}||[]}) { + my $pre_source = $source->related_source($pre); - my $pre_source = $source->related_source($pre); - - my $accessor = $source->relationship_info($pre)->{attrs}{accessor} - or $class->throw_exception("No accessor type declared for prefetched relationship '$pre'"); - - my @pre_objects; - for my $me_pref (@pre_vals) { + @pre_objects = map { + $pre_source->result_class->inflate_result( $pre_source, @$_ ) + } ( ref $prefetch->{$pre}[0] eq 'ARRAY' ? @{$prefetch->{$pre}} : $prefetch->{$pre} ); + } - # FIXME SUBOPTIMAL - the new row parsers can very well optimize - # this away entirely, and *never* return such empty rows. - # For now we maintain inflate_result API backcompat, see - # t/resultset/inflate_result_api.t - next unless defined first { defined $_ } values %{$me_pref->[0]}; + my $accessor = $source->relationship_info($pre)->{attrs}{accessor} + or $class->throw_exception("No accessor type declared for prefetched relationship '$pre'"); - push @pre_objects, $pre_source->result_class->inflate_result( - $pre_source, @$me_pref - ); - } + if ($accessor eq 'single') { + $new->{_relationship_data}{$pre} = $pre_objects[0]; + } + elsif ($accessor eq 'filter') { + $new->{_inflated_column}{$pre} = $pre_objects[0]; + } - if ($accessor eq 'single') { - $new->{_relationship_data}{$pre} = $pre_objects[0]; + $new->related_resultset($pre)->set_cache(\@pre_objects); } - elsif ($accessor eq 'filter') { - $new->{_inflated_column}{$pre} = $pre_objects[0]; - } - - $new->related_resultset($pre)->set_cache(\@pre_objects); } $new->in_storage (1);