X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSet.pm;h=db246df4fa02f476432d275c2b235b4be3b63bc8;hb=48c9af026b923ad5d18542ae9a0a5f7ccae5ea35;hp=7a0d3024334e156a8cc257407da58442f7b12cf4;hpb=b7439887af8d68878363e3f157ea95595764c548;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSet.pm b/lib/DBIx/Class/ResultSet.pm index 7a0d302..db246df 100644 --- a/lib/DBIx/Class/ResultSet.pm +++ b/lib/DBIx/Class/ResultSet.pm @@ -166,8 +166,8 @@ sub search_rs { my $having = delete $our_attrs->{having}; # XXX this is getting messy - if ($attrs->{_live_join_stack} || $our_attrs->{_live_join_stack}) { - my $live_join = $attrs->{_live_join_stack} || $our_attrs->{_live_join_stack}; + if ($attrs->{_live_join_stack}) { + my $live_join = $attrs->{_live_join_stack}; foreach (reverse @{$live_join}) { $attrs->{_live_join_h} = (defined $attrs->{_live_join_h}) ? { $_ => $attrs->{_live_join_h} } : $_; } @@ -178,13 +178,11 @@ sub search_rs { next unless (exists $attrs->{$key}); if ($attrs->{_live_join_stack} || $our_attrs->{_live_join_stack}) { my $live_join = $attrs->{_live_join_stack} || $our_attrs->{_live_join_stack}; - foreach (@{$live_join}) { + foreach (reverse @{$live_join}) { $attrs->{$key} = { $_ => $attrs->{$key} }; } } - if ($attrs->{_live_join} || $our_attrs->{_live_join}) { - $attrs->{$key} = { ($attrs->{_live_join}) ? $attrs->{_live_join} : $our_attrs->{_live_join} => $attrs->{$key} }; - } + if (exists $our_attrs->{$key}) { $our_attrs->{$key} = $self->_merge_attr($our_attrs->{$key}, $attrs->{$key}); } else { @@ -802,13 +800,13 @@ sub _merge_attr { } } } - if ($is_prefetch) { - my $final_array = []; - foreach my $element (@{$array}) { - push(@{$final_array}, $element) unless (exists $hash->{$element}); - } - $array = $final_array; - } + + my $final_array = []; + foreach my $element (@{$array}) { + push(@{$final_array}, $element) unless (exists $hash->{$element}); + } + $array = $final_array; + if ((keys %{$hash}) && (scalar(@{$array} > 0))) { return [$hash, @{$array}]; } else { @@ -1585,9 +1583,8 @@ sub related_resultset { )->search( undef, { select => undef, as => undef, - #join => $rel, - _live_join => $rel, - _live_join_stack => $live_join_stack, + _live_join => $rel, #the most recent + _live_join_stack => $live_join_stack, #the trail of rels _parent_attrs => $self->{attrs}} );