On Thu, Apr 08, 2010 at 02:43:37PM -0700, Byron Young wrote:
> > -----Original Message-----
> > From: Peter Rabbitson [mailto:[email protected]]
> > Sent: Thursday, April 08, 2010 9:16 AM
> > To: Class user and developer list
> > Subject: Re: [Dbix-class] Q: prefetch has_many relation
> > 
> > Bernhard Graf wrote:
> > > Artist has_many CDs.
> > >
> [snip] 
> > > How do I select all CDs of the artists of $artist_rs with one query?
> > 
> > my $new_rs = $artist_rs->search ({}, { prefetch => 'cds' });
> > 
> 
> This brings up something I've been wondering about lately, which is how 
> prefetch and join cause the resultset to behave when you prefetch or join on 
> one or more has_many relationships.
> 
> When I use prefetch on multiple has_many relationships, DBIC prints this 
> warning:
> 
> "DBIx::Class::ResultSet::all(): Prefetching multiple has_many rels jobs and 
> queues at top level will explode the number of row objects retrievable via 
> ->next or ->all. Use at your own risk."
> 
> But I notice that $rs->all() actually returns the same number of rows as it 
> does if I don't specify any prefetch or join (or if I specify a group_by => 
> 'me.id').  If I specify a join instead of a prefetch it does actually explode 
> the rows.  Here's output of a script I wrote to test this:

That's all nice, but see what does $rs->search_related('queues')->all returns,
you'll be unpleasantly surprised :) Also note that it says "at top level". The
warning is genuine, multiple has_many prefetch has been broken forever, there
is a 95% complete fix for that, which I really hope to materialize before the
end of the month. ETOOLITTLETIME.


_______________________________________________
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]

Reply via email to