X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FRow.pm;h=4188d1073133bebdd01336a32c253c2caea1bbd5;hb=c6ec79000b160e7491d9ab9d95d6e69c473b0862;hp=b0542cb04185692a6358da6c51ee5c1d26cda330;hpb=b83736a7d3235d2f50fe5695550eb3637432d960;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Row.pm b/lib/DBIx/Class/Row.pm index b0542cb..4188d10 100644 --- a/lib/DBIx/Class/Row.pm +++ b/lib/DBIx/Class/Row.pm @@ -190,7 +190,7 @@ sub new { $rsrc ||= $h->resolve; } - $new->result_source($rsrc) if $rsrc; + $new->result_source_instance($rsrc) if $rsrc; if (my $col_from_rel = delete $attrs->{-cols_from_relations}) { @{$new->{_ignore_at_insert}={}}{@$col_from_rel} = (); @@ -356,7 +356,7 @@ sub insert { my $rel_obj = $related_stuff{$rel_name}; if (! $self->{_rel_in_storage}{$rel_name}) { - next unless (blessed $rel_obj && $rel_obj->isa('DBIx::Class::Row')); + next unless (blessed $rel_obj && $rel_obj->isa(__PACKAGE__)); next unless $rsrc->_pk_depends_on( $rel_name, { $rel_obj->get_columns } @@ -441,7 +441,7 @@ sub insert { : $related_stuff{$rel_name} ; - if (@cands && blessed $cands[0] && $cands[0]->isa('DBIx::Class::Row') + if (@cands && blessed $cands[0] && $cands[0]->isa(__PACKAGE__) ) { my $reverse = $rsrc->reverse_relationship_info($rel_name); foreach my $obj (@cands) { @@ -625,12 +625,9 @@ sub delete { $self->in_storage(0); } else { - my $rsrc = dbic_internal_try { $self->result_source_instance } - or $self->throw_exception("Can't do class delete without a ResultSource instance"); - - my $attrs = @_ > 1 && ref $_[$#_] eq 'HASH' ? { %{pop(@_)} } : {}; + my $attrs = @_ > 1 && ref $_[-1] eq 'HASH' ? { %{pop(@_)} } : {}; my $query = ref $_[0] eq 'HASH' ? $_[0] : {@_}; - $rsrc->resultset->search(@_)->delete; + $self->result_source->resultset->search_rs(@_)->delete; } return $self; } @@ -1174,7 +1171,7 @@ sub copy { my $new = { _column_data => $col_data }; bless $new, ref $self; - $new->result_source($rsrc); + $new->result_source_instance($rsrc); $new->set_inflated_columns($changes); $new->insert; @@ -1362,7 +1359,7 @@ Alias for L =cut -sub insert_or_update { +sub insert_or_update :DBIC_method_is_indirect_sugar { DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call; shift->update_or_insert(@_); } @@ -1432,13 +1429,21 @@ Accessor to the L this object was created from. =cut -sub result_source { +sub result_source :DBIC_method_is_indirect_sugar { + # While getter calls are routed through here for sensible exception text + # it makes no sense to have setters do the same thing + DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS + and + @_ > 1 + and + fail_on_internal_call; + # this is essentially a `shift->result_source_instance(@_)` with handholding &{ $_[0]->can('result_source_instance') || $_[0]->throw_exception( - "No result source instance registered for '@{[ $_[0] ]}', did you forget to call @{[ ref $_[0] || $_[0] ]}->table(...) ?" + "No ResultSource instance registered for '@{[ $_[0] ]}', did you forget to call @{[ ref $_[0] || $_[0] ]}->table(...) ?" ) }; } @@ -1589,7 +1594,8 @@ sub throw_exception { if ( ! DBIx::Class::_Util::in_internal_try and - my $rsrc = dbic_internal_try { $self->result_source } + # FIXME - the try is 99% superfluous, but just in case + my $rsrc = dbic_internal_try { $self->result_source_instance } ) { $rsrc->throw_exception(@_) }