From: Peter Rabbitson Date: Mon, 1 Mar 2010 00:36:23 +0000 (+0000) Subject: Fix incorrect placement of condition resolution failure trap X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=34b6b86fa7949fe9bf0f5b3c386f13d2ccbaf7e8;p=dbsrgits%2FDBIx-Class-Historic.git Fix incorrect placement of condition resolution failure trap --- diff --git a/lib/DBIx/Class/Relationship/Base.pm b/lib/DBIx/Class/Relationship/Base.pm index 1749a1b..62133a8 100644 --- a/lib/DBIx/Class/Relationship/Base.pm +++ b/lib/DBIx/Class/Relationship/Base.pm @@ -202,12 +202,16 @@ sub related_resultset { my $source = $self->result_source; # condition resolution may fail if an incomplete master-object prefetch - # is encountered - my $cond = - eval { $source->_resolve_condition( $rel_info->{cond}, $rel, $self ) } - || - $DBIx::Class::ResultSource::UNRESOLVABLE_CONDITION - ; + # is encountered - that is ok during prefetch construction (not yet in_storage) + my $cond = eval { $source->_resolve_condition( $rel_info->{cond}, $rel, $self ) }; + if (my $err = $@) { + if ($self->in_storage) { + $self->throw_exception ($err); + } + else { + $cond = $DBIx::Class::ResultSource::UNRESOLVABLE_CONDITION; + } + } if ($cond eq $DBIx::Class::ResultSource::UNRESOLVABLE_CONDITION) { my $reverse = $source->reverse_relationship_info($rel); diff --git a/t/relationship/unresolvable.t b/t/relationship/unresolvable.t new file mode 100644 index 0000000..5a53cd9 --- /dev/null +++ b/t/relationship/unresolvable.t @@ -0,0 +1,21 @@ +use strict; +use warnings; + +use Test::More; +use Test::Exception; + +use lib qw(t/lib); +use DBICTest; + +my $schema = DBICTest->init_schema(); + +my $cd = $schema->resultset('CD')->search ({}, { columns => ['year'], rows => 1 })->single; + + +throws_ok ( + sub { $cd->tracks }, + qr/Unable to resolve relationship .+ column .+ not loaded from storage/, + 'Correct exception on nonresolvable object-based condition' +); + +done_testing;