X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSource%2FRowParser.pm;h=6540dc70bc24013a050a198186946b7713dea712;hb=e5c6382908ee65577e53c0771629384d70959a3d;hp=069d3318c4670aac76f97f1b207ecfc7b5af7bcf;hpb=86be9bcb90213db633791fcce074b7268765f615;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSource/RowParser.pm b/lib/DBIx/Class/ResultSource/RowParser.pm index 069d331..6540dc7 100644 --- a/lib/DBIx/Class/ResultSource/RowParser.pm +++ b/lib/DBIx/Class/ResultSource/RowParser.pm @@ -10,10 +10,15 @@ use DBIx::Class::ResultSource::RowParser::Util qw( assemble_simple_parser assemble_collapsing_parser ); -use DBIx::Class::_Util 'DUMMY_ALIASPAIR'; +use DBIx::Class::_Util qw( DUMMY_ALIASPAIR dbic_internal_try dbic_internal_catch ); use DBIx::Class::Carp; +# FIXME - this should go away +# instead Carp::Skip should export usable keywords or something like that +my $unique_carper; +BEGIN { $unique_carper = \&carp_unique } + use namespace::clean; # Accepts a prefetch map (one or more relationships for the current source), @@ -187,13 +192,28 @@ sub _resolve_collapse { is_single => ( $inf->{attrs}{accessor} && $inf->{attrs}{accessor} ne 'multi' ), is_inner => ( ( $inf->{attrs}{join_type} || '' ) !~ /^left/i), rsrc => $self->related_source($rel), - fk_map => $self->_resolve_relationship_condition( - rel_name => $rel, + fk_map => ( + dbic_internal_try { + $self->_resolve_relationship_condition( + rel_name => $rel, + + # an API where these are optional would be too cumbersome, + # instead always pass in some dummy values + DUMMY_ALIASPAIR, + )->{identity_map}, + } + dbic_internal_catch { + + $unique_carper->( + "Resolution of relationship '$rel' failed unexpectedly, " + . 'please relay the following error and seek assistance via ' + . DBIx::Class::_ENV_::HELP_URL . ". Encountered error: $_" + ); - # an API where these are optional would be too cumbersome, - # instead always pass in some dummy values - DUMMY_ALIASPAIR, - )->{identity_map}, + # RV + +{} + } + ), }; }