On 26 Feb 2008, at 11:34, Alex Povolotsky wrote:

Ash Berlin wrote:

On 26 Feb 2008, at 11:23, Alex Povolotsky wrote:

Hello!

I'm using (with Catalyst and TT) some simple code to count related data

[% FOREACH loc IN llist -%]
<li>[% loc.name %] : (<a href="[% Catalyst.uri_for("edit/ $loc.lid") %]>Edit</a>) [% loc.contacts.count+0 %] contacts (more): [% loc.servers.count+0 %] servers (more):
here will be traffic
[% END -%]

Debugging SQL requests, I've found that both counts use "select *" instead of "select count(*)".

Is it a bug or a feature? Maybe count should be better optimized?

Alex.


TT calls everything i list context. So that count method is actually TT's count vmethod.

you want [% loc.contacts_rs.count %] to get SELECT COUNT(*) executed.

Whooops... where is it documented?...

Alex.


I lied. there is no count vemthod - which is why you needed the +0

As for where its documened... somewhere in the Template Toolkit manual. the _rs methods are mentioned in Relationship docs of DBIC.

Tho it could be more obvious, since currently there is just this snippet (and ones like it)

Return Value: $resultset (scalar context), @row_objs (list context)

Might be nice if you prepare a doc patch stating more explicitly what happens when you call a method which would normally return an RS in scalar context (search, my_rels, etc.) in list context, with particularly mention of Template Toolkit (which calls *everything* in list context.

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