X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FRelationship%2FBase.pm;h=e53311768c589d18ca5c78913b4e633b42dbcf44;hb=0d7d16dd7fa107999e0a89fdbd954a3a261d81e2;hp=b4984e72e65ece4fcdc7ee4a38fc76d40eb775ff;hpb=cee0c9b187a09934aa46cafb2d1cc78a1b6e9eae;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Relationship/Base.pm b/lib/DBIx/Class/Relationship/Base.pm index b4984e7..e533117 100644 --- a/lib/DBIx/Class/Relationship/Base.pm +++ b/lib/DBIx/Class/Relationship/Base.pm @@ -5,6 +5,7 @@ use warnings; use Scalar::Util (); use base qw/DBIx::Class/; +use Try::Tiny; =head1 NAME @@ -127,14 +128,17 @@ of when to create constraints. If C is true on a C relationship for an object, then when you copy the object all the related objects will be copied too. To turn this behaviour off, pass C<< cascade_copy => 0 >> -in the C<$attr> hashref. The behaviour defaults to C<< cascade_copy => 1 >>. +in the C<$attr> hashref. + +The behaviour defaults to C<< cascade_copy => 1 >> for C +relationships. =item cascade_delete -By default, DBIx::Class cascades deletes across C and -C relationships. You can disable this behaviour on a -per-relationship basis by supplying C<< cascade_delete => 0 >> in the -relationship attributes. +By default, DBIx::Class cascades deletes across C, +C and C relationships. You can disable this +behaviour on a per-relationship basis by supplying +C<< cascade_delete => 0 >> in the relationship attributes. The cascaded operations are performed after the requested delete, so if your database has a constraint on the relationship, it will @@ -143,10 +147,10 @@ before DBIx::Class gets to perform the cascaded operation. =item cascade_update -By default, DBIx::Class cascades updates across C and +By default, DBIx::Class cascades updates across C and C relationships. You can disable this behaviour on a -per-relationship basis by supplying C<< cascade_update => 0 >> in the -relationship attributes. +per-relationship basis by supplying C<< cascade_update => 0 >> in +the relationship attributes. This is not a RDMS style cascade update - it purely means that when an object has update called on it, all the related objects also @@ -234,15 +238,16 @@ sub related_resultset { # condition resolution may fail if an incomplete master-object prefetch # 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 = $@) { + my $cond; + try { $cond = $source->_resolve_condition( $rel_info->{cond}, $rel, $self ) } + catch { if ($self->in_storage) { - $self->throw_exception ($err); + $self->throw_exception ($_); } else { $cond = $DBIx::Class::ResultSource::UNRESOLVABLE_CONDITION; } - } + }; if ($cond eq $DBIx::Class::ResultSource::UNRESOLVABLE_CONDITION) { my $reverse = $source->reverse_relationship_info($rel);