Fixes a bug in DBIC::ResultSource::resolve_join whereby forced left joins are not propagated through an arrayref or hashref. Thus if relationship t1 has a left join_type and t2 has inner join_type, either of the two clauses:
join => { t1 => [ 't2' ] }
join => { t1 => { t2 => {} } }
would incorrectly use an inner join for t2.
---
lib/DBIx/Class/ResultSource.pm | 8 ++++++--
1 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/lib/DBIx/Class/ResultSource.pm b/lib/DBIx/Class/ResultSource.pm
index 0d49c00..c3a5d87 100644
--- a/lib/DBIx/Class/ResultSource.pm
+++ b/lib/DBIx/Class/ResultSource.pm
@@ -1085,12 +1085,16 @@ sub resolve_join {
$seen ||= {};
$force_left ||= { force => 0 };
if (ref $join eq 'ARRAY') {
- return map { $self->resolve_join($_, $alias, $seen) } @$join;
+ return
+ map {
+ local $force_left->{force} = $force_left->{force};
+ $self->resolve_join($_, $alias, $seen, $force_left);
+ } @$join;
} elsif (ref $join eq 'HASH') {
return
map {
my $as = ($seen->{$_} ? $_.'_'.($seen->{$_}+1) : $_);
- local $force_left->{force};
+ local $force_left->{force} = $force_left->{force};
(
$self->resolve_join($_, $alias, $seen, $force_left),
$self->related_source($_)->resolve_join(
--
1.5.6.5
--
Peter
signature.asc
Description: Digital signature
_______________________________________________ List: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/dbix-class IRC: irc.perl.org#dbix-class SVN: http://dev.catalyst.perl.org/repos/bast/DBIx-Class/ Searchable Archive: http://www.grokbase.com/group/[email protected]
