On Sun, May 16, 2010 at 14:30, Bill Moseley <[email protected]> wrote:
> In another thread about chaining resultsets and keeping previous sets around
> for testing Matt noted:
>>
>> ... if you keep all the intermediate resultsets around in the stash or
>>
>> wherever (or better still refactor to resultset methods and have your
>>
>> custom resultset class keep the intermediate resultsets around) then it
>>
>> seems like it should be pretty easy to walk back up the chain making
>>
>> the extra queries until one returns data - at which point you know the
>> last
>>
>> step you walked back up is the problem child for this request.
>
> Ok, it's a foggy Sunday morning I'll give that a try.
> In review, what I want to do is:
> $rs = $schema->resultset( 'Cd' );
> $rs = $rs->search( { year => 2010 }, { comment => 'Year not 2010' } );
> $rs = $rs->search( { position => { '>', 5 }}, { comment => 'None more than
> 5th position' } );
> $rs = $rs->search( { deleted => 0 }, { comment => 'None deleted' } );
> $failed_commet = $rs->reason_failed if $rs == 0;
> In other words, have each $rs know its parent result set and be able to walk
> up (or down, might be faster) the list of result sets to find out what
> condition returned no results.
> Is this a safe-n-sane approach for tracking parents?  Does result_rs catch
> all times a new $rs might be created?  Or do I need to override new()?
> In my ResultSet base class:
> has 'parent' => ( is => 'rw' );
> has 'comment' => ( is => 'rw' );
> around 'search_rs' => sub {
>     my ( $orig, $rs, $cond, $attr, �...@rest ) = @_;
>     my $comment = delete $attr->{comment};
>     my $new_rs = $rs->$orig( $cond, $attr, @rest );
>     $new_rs->parent( $rs ) if $rs->{cond};
>     $new_rs->comment( $comment ) if $comment;
>     return $new_rs;
> };

A given resultset can have more than one "parent." There are two
obvious scenarios - subqueries (with the as_query feature) and unions
(via DBIx::Class::Helpers). Just keep track of it on your own using an
array. :)

Rob

_______________________________________________
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