Aran Deltac wrote:
> Just recently I upgraded DBIx::Class from 0.08010 to 0.08103 and am
> getting errors about as_query() and DBIx::Class::Cursor::Cached.
> Here's what the error is:
>
> Couldn't render component "/earnings_history/earnings_history.mhtml" -
> error was "Can't locate object method "as_query" via package
> "DBIx::Class::Cursor::Cached" at
> /vcm/home/lib/site_perl/DBIx/Class/ResultSet.pm line 2006, <DATA> line
> 228.
> Stack:
> [/vcm/home/lib/site_perl/DBIx/Class/ResultSet.pm:2006]
> [/vcm/home/lib/site_perl/DBIx/Class/ResultSet.pm:1199]
> [/vcm/home/lib/site_perl/DBIx/Class/ResultSet.pm:1170]
>
> [/vcm/home/component/ui/mason/pub/earnings_history/earnings_history.mhtml:12]
> [/vcm/home/component/ui/mason/pub/autohandler:83]
> [/vcm/home/component/ui/mason/shared/setup.cmp:10]"
>
> Line 12 of earnings_history.mhtml is this:
>
> % my $perc = sprintf("%.1f", 100 / ($media_types->count()+3) );
>
> So, somehow a simple ->count() on a cached resultset causes the latest
> DBIC to use as_query, which DBIx::Class::Cursor::Cached.
>
> Any thoughts? Easy fix? Need any more details?
>
If a resultset has either group_by or collapse set by has_many prefetch
(which is a group_by in a sense) - then we use a subquery to get the
proper count. The as_query method was implemented on the Cursor at the
time it was written (not sure why, I wasn't the implementer). So now
that you have a different cursor, it doesn't return the SQL DBIC needs
in order to construct the subquery.
The fix should be quite simple, i.e. move as_query out of the Cursor
class. But first I'd like someone to comment on why it ended up there
in the first place.
Cheers
_______________________________________________
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]