[Dbix-class] Is it possible to use "dumb" result classes with DBIx::Class?

Lasse Makholm lasse at unity3d.com
Thu Apr 9 17:18:50 GMT 2015


Hah! You're right! It does work.

It was just me failing to realize that the errors were actually thrown at
load time, not inflate time. The problem is putting a "dumb" under
MyApp::Schema::Result:: because DBIx::Class will try to load and initialize
it as a normal result class during DBIx::Class::Schema->load_namespaces().

Putting the dumb result class outside the MyApp::Schema::Result:: namespace
works just fine.

Thanks for your help both of you.

/L

On Thu, Apr 9, 2015 at 5:34 PM, Dmitry L. <dim0xff at gmail.com> wrote:

> Strange. Your example just works for me.
> I tried it with DBIC example ( DBIx::Class::Manual::Example ) without
> any changes, just copy-paste.
>
> And yes, I use the latest DBIC.
>
> On 9 April 2015 at 16:58, Lasse Makholm <lasse at unity3d.com> wrote:
> > I'm using DBIx::Class::ResultClass::HashRefInflator in some places where
> > full row object inflation is too slow. That's fine.
> >
> > What I'd really like to do though, is bless the resulting hashrefs into a
> > "light weight" result class that provides a few convenience methods but
> > knows little to nothing about DBIx::Class.
> >
> > Trying something like:
> >
> > my $rs = $schema->resultset('MyTable')->search(...);
> > $rs->result_class('MyApp::Schema::DumbResult::MyTable');
> > while (my $thingy = $rs->next) {
> >
> > # do, do, do
> >
> > }
> >
> >
> > with something like:
> >
> > package MyApp::Schema::DumbResult::MyTable;
> >
> > use strict;
> > use warnings;
> >
> > use DBIx::Class::ResultClass::HashRefInflator;
> >
> > sub inflate_result
> > {
> > my $class = shift;
> > my $result =
> DBIx::Class::ResultClass::HashRefInflator->inflate_result(@_);
> > return bless $result, $class;
> > }
> >
> > sub TO_JSON
> > {
> > my $self = shift;
> > return { %$self };
> > }
> >
> > 1;
> >
> >
> > ...breaks for a variety of reasons it seems, because DBIx::Class wants
> to do
> > things like setting a result source instance on the result object, etc...
> >
> > Is there an (easy) make this work? Or is it just in general a horrible
> idea?
> >
> > Of course I can just do:
> >
> > $rs->result_class('DBIx::Class::ResultClass::HashRefInflator');
> > my @stuff = map { bless $_, MyApp::Schema::DumbResult::MyTable }
> $rs->all;
> >
> > ...but the other way is more convenient...
> >
> > Or is it more sane to subclass the ResultSet and override first(), all()
> and
> > next() to set the result_class and bless the resulting hashrefs?
> >
> > Any input appreciated?
> >
> > /L
> >
> >
> >
> > _______________________________________________
> > 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/dbix-class@lists.scsys.co.uk
>
>
>
> --
> //wbr, Dmitry L.
>
> _______________________________________________
> 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/dbix-class@lists.scsys.co.uk
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.scsys.co.uk/pipermail/dbix-class/attachments/20150409/fffdce16/attachment.htm>


More information about the DBIx-Class mailing list