[Dbix-class] RFC: DBICx::Shortcuts

Pedro Melo melo at simplicidade.org
Fri Feb 5 14:23:11 GMT 2010


Hi,

On Fri, Feb 5, 2010 at 2:05 PM, Oleg Pronin <syber.rus at gmail.com> wrote:
> IMHO you are doing the right thing, but i can advice you a futher
> improvement and very important - perfomance boost for your module.
>
> You can do shorcuts shorter:
>     in setup_finalize of Catalyst:
>
>        foreach my $source ($schema->sources) {
>            next unless index($source, '::') == -1;
>            my $acc = "${source}RS";
>            $c->mk_group_accessors(inherited => $acc) unless $c->can($acc);
>            $c->$acc( scalar $schema->resultset($source) );
>        }
>
> You gain very short accesors (which cannon conflict due to 'RS' suffix)
> for example
>   $c->UserRS->single(...)
>   $c->ChatMessageRS->search(...)
>
> Plus - such accessors works MUCH MUCH faster than $schema->resultset because
> ->resultset method generates new empty resultset every time and this
> operation is quite hard for DBIC (why???!!!).
> With this accessors all empty resultsets has been already generated on start.

So if I understood your suggestion, I would cache the empty resultset
and reuse it on each invocation.

Nice.

I'll do that for the instance-based code I mentioned yesterday, but I
need to think how to do it properly for the class-based setup that I
have right now.

As for the code above, it bypasses nested sources. All my sources are
nested. Also the generated SourceRS methods are camel-cased, and I
prefer the lower-case, _-separated that my current code generates. Not
a technical reason, more of an aesthetic one.

Thanks for the suggestion.

Bye,
-- 
Pedro Melo
http://www.simplicidade.org/
xmpp:melo at simplicidade.org
mailto:melo at simplicidade.org



More information about the DBIx-Class mailing list