[Dbix-class] [PATCH] Correctly propagate forced left joins through
arrayrefs and hashrefs
Peter Collingbourne
peter at pcc.me.uk
Fri Mar 20 03:29:20 GMT 2009
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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: Digital signature
Url : http://lists.scsys.co.uk/pipermail/dbix-class/attachments/20090320/299d48d0/attachment.pgp
More information about the DBIx-Class
mailing list