X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FRelationship%2FManyToMany.pm;h=a6bedc5a7347bda592b1e3268a34b87df355daf4;hb=b4e9f590228d1d73d4089c2ec88372e683e17aeb;hp=675f20607deb733dd2b0d33e09b9828b5a8c3c4f;hpb=1605376709663b035385b41828ce13ae3ed45a4d;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Relationship/ManyToMany.pm b/lib/DBIx/Class/Relationship/ManyToMany.pm index 675f206..a6bedc5 100644 --- a/lib/DBIx/Class/Relationship/ManyToMany.pm +++ b/lib/DBIx/Class/Relationship/ManyToMany.pm @@ -4,7 +4,7 @@ package # hide from PAUSE use strict; use warnings; -use Carp::Clan qw/^DBIx::Class/; +use DBIx::Class::Carp; use Sub::Name qw/subname/; use Scalar::Util qw/blessed/; @@ -133,20 +133,15 @@ EOW unless blessed ($obj); my $rel_source = $self->search_related($rel)->result_source; my $cond = $rel_source->relationship_info($f_rel)->{cond}; - my $link_cond; - if (ref $cond eq 'CODE') { - my ($cond_should_join, $cond_optimized) = $rel_source->_resolve_condition - ($cond, $obj, $f_rel, $f_rel); - if ($cond_optimized) { - $link_cond = $cond_optimized; - } else { - $self->throw_exception('Extended relationship '.$rel. - ' requires optimized version for ManyToMany.'); - } - } else { - $link_cond = $rel_source->_resolve_condition - ($cond, $obj, $f_rel); - } + my ($link_cond, $crosstable) = $rel_source->_resolve_condition( + $cond, $obj, $f_rel, $f_rel + ); + + $self->throw_exception( + "Custom relationship '$rel' does not resolve to a join-free condition, " + ."unable to use with the ManyToMany helper '$f_rel'" + ) if $crosstable; + $self->search_related($rel, $link_cond)->delete; };