use warnings;
use DBIx::Class::Carp;
-use DBIx::Class::_Util qw(fail_on_internal_wantarray quote_sub);
+use DBIx::Class::_Util qw( quote_sub perlstring );
# FIXME - this souldn't be needed
my $cu;
}
}
+ quote_sub "${class}::${meth}", sprintf( <<'EOC', $rs_meth );
+
+ DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and DBIx::Class::_Util::fail_on_internal_call;
+ DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_WANTARRAY and my $sog = DBIx::Class::_Util::fail_on_internal_wantarray;
+
+ my $rs = shift->%s( @_ );
+
+ wantarray ? $rs->all : $rs;
+EOC
+
+
my $qsub_attrs = {
'$rel_attrs' => \{ alias => $f_rel, %{ $rel_attrs||{} } },
'$carp_unique' => \$cu,
};
- quote_sub "${class}::${rs_meth}", sprintf( <<'EOC', $rel, $f_rel ), $qsub_attrs;
+
+ quote_sub "${class}::${rs_meth}", sprintf( <<'EOC', map { perlstring $_ } ( "${class}::${meth}", $rel, $f_rel ) ), $qsub_attrs;
+
+ DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS
+ and
+ # allow nested calls from our ->many_to_many, see comment below
+ ( (CORE::caller(1))[3] ne %s )
+ and
+ DBIx::Class::_Util::fail_on_internal_call;
# this little horror is there replicating a deprecation from
# within search_rs() itself
- shift->search_related_rs( q{%1$s} )
- ->search_related_rs(
- q{%2$s},
- undef,
- ( @_ > 1 and ref $_[-1] eq 'HASH' )
- ? { %%$rel_attrs, %%{ pop @_ } }
- : $rel_attrs
- )->search_rs(@_)
+ shift->related_resultset( %s )
+ ->related_resultset( %s )
+ ->search_rs (
+ undef,
+ ( @_ > 1 and ref $_[-1] eq 'HASH' )
+ ? { %%$rel_attrs, %%{ pop @_ } }
+ : $rel_attrs
+ )->search_rs(@_)
;
EOC
- quote_sub "${class}::${meth}", sprintf( <<'EOC', $rs_meth );
-
- DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_WANTARRAY and my $sog = DBIx::Class::_Util::fail_on_internal_wantarray;
-
- my $rs = shift->%s( @_ );
-
- wantarray ? $rs->all : $rs;
-EOC
-
-
quote_sub "${class}::${add_meth}", sprintf( <<'EOC', $add_meth, $rel, $f_rel ), $qsub_attrs;
( @_ >= 2 and @_ <= 3 ) or $_[0]->throw_exception(
my $guard;
- # the API needs is always expected to return the far object, possibly
+ # the API is always expected to return the far object, possibly
# creating it in the process
if( not defined Scalar::Util::blessed( $far_obj ) ) {
) if (
@_ > 1
or
- ( @_ and ref $_[0] ne 'HASH' )
+ ( defined $_[0] and ref $_[0] ne 'HASH' )
);
my $guard;
# if there is a where clause in the attributes, ensure we only delete
# rows that are within the where restriction
- $self->search_related(
- q{%3$s},
- ( $rel_attrs->{where}
- ? ( $rel_attrs->{where}, { join => q{%4$s} } )
- : ()
- )
- )->delete;
+ $self->related_resultset( q{%3$s} )
+ ->search_rs(
+ ( $rel_attrs->{where}
+ ? ( $rel_attrs->{where}, { join => q{%4$s} } )
+ : ()
+ )
+ )->delete;
# add in the set rel objects
$self->%2$s(
$_[0]->throw_exception("'%1$s' expects an object")
unless defined Scalar::Util::blessed( $_[1] );
- $_[0]->search_related_rs( q{%2$s} )
+ $_[0]->related_resultset( q{%2$s} )
->search_rs( $_[1]->ident_condition( q{%3$s} ), { join => q{%3$s} } )
->delete;
EOC