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

Lasse Makholm lasse at unity3d.com
Thu Apr 9 15:00:56 GMT 2015


On Thu, Apr 9, 2015 at 4:57 PM, Will Crawford <billcrawford1970 at gmail.com>
wrote:

> You _should_ just be able to subclass the HRI class and add those methods
> (and pass { result_class => 'My::HRI::Subclass' } in for the RS
> attributes). I haven't tested this, will do in a moment :)
>

Yeah, the problem seems to returning a blessed object from inflate_result,
because then DBIx::Class thinks "Ooh! A real row object! I can do all sort
of things with this!" Which it can't, so BOOM! :-)

/L

>
> On 9 April 2015 at 14: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
>>
>
>
> _______________________________________________
> 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/99e44cf3/attachment-0001.htm>


More information about the DBIx-Class mailing list