use base qw/DBIx::Class/;
use Scalar::Util 'blessed';
-use DBIx::Class::_Util qw( dbic_internal_try fail_on_internal_call );
+use DBIx::Class::_Util qw(
+ dbic_internal_try fail_on_internal_call
+ DUMMY_ALIASPAIR
+);
use DBIx::Class::Carp;
use SQL::Abstract qw( is_literal_value is_plain_value );
my %to_update = $self->get_dirty_columns
or return $self;
- $self->throw_exception( "Not in database" ) unless $self->in_storage;
+ $self->throw_exception(
+ 'Result object not marked in_storage: an update() operation is not possible'
+ ) unless $self->in_storage;
my $rows = $self->result_source->schema->storage->update(
$self->result_source, \%to_update, $self->_storage_ident_condition
sub delete {
my $self = shift;
if (ref $self) {
- $self->throw_exception( "Not in database" ) unless $self->in_storage;
+ $self->throw_exception(
+ 'Result object not marked in_storage: a delete() operation is not possible'
+ ) unless $self->in_storage;
$self->result_source->schema->storage->delete(
$self->result_source, $self->_storage_ident_condition
$copied->{$_->ID}++ or $_->copy(
- $foreign_vals ||= $rsrc->_resolve_relationship_condition(
- infer_values_based_on => {},
+ $foreign_vals ||= $rsrc->resolve_relationship_condition(
+ require_join_free_values => 1,
rel_name => $rel_name,
self_result_object => $new,
- self_alias => "\xFE", # irrelevant
- foreign_alias => "\xFF", # irrelevant,
- )->{inferred_values}
+ # an API where these are optional would be too cumbersome,
+ # instead always pass in some dummy values
+ DUMMY_ALIASPAIR,
+ )->{join_free_values}
) for $self->related_resultset($rel_name)->all;
}