my %rels = %{ $self->_relationships };
$rels{$rel} = { class => $f_source_name,
source => $f_source_name,
+ _original_name => $rel,
cond => $cond,
attrs => $attrs };
$self->_relationships(\%rels);
$self->throw_exception("Arguments 'self_alias' and 'foreign_alias' may not be identical")
if $args->{self_alias} eq $args->{foreign_alias};
- my $exception_rel_id = "relationship '$args->{rel_name}' on source '@{[ $self->source_name ]}'";
-
my $rel_info = $self->relationship_info($args->{rel_name})
# TEMP
# or $self->throw_exception( "No such $exception_rel_id" );
- or carp_unique("Requesting resolution on non-existent $exception_rel_id: fix your code *soon*, as it will break with the next major version");
+ or carp_unique("Requesting resolution on non-existent relationship '$args->{rel_name}' on source '@{[ $self->source_name ]}': fix your code *soon*, as it will break with the next major version");
+
+ my $exception_rel_id = "relationship '$rel_info->{_original_name}' on source '@{[ $self->source_name ]}'";
$self->throw_exception("No practical way to resolve $exception_rel_id between two data structures")
if exists $args->{self_result_object} and exists $args->{foreign_values};
$joinfree_source->columns
};
- $fq_col_list->{$_} or $self->throw_exception (
+ exists $fq_col_list->{$_} or $self->throw_exception (
"The join-free condition returned for $exception_rel_id may only "
- . 'contain keys that are fully qualified column names of the corresponding source'
+ . 'contain keys that are fully qualified column names of the corresponding source '
+ . "(it returned '$_')"
) for keys %$jfc;
+ (
+ length ref $_
+ and
+ defined blessed($_)
+ and
+ $_->isa('DBIx::Class::Row')
+ and
+ $self->throw_exception (
+ "The join-free condition returned for $exception_rel_id may not "
+ . 'contain result objects as values - perhaps instead of invoking '
+ . '->$something you meant to return ->get_column($something)'
+ )
+ ) for values %$jfc;
+
}
}
elsif (ref $args->{condition} eq 'HASH') {