X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSource.pm;h=04b634c58c9f017e24a3c6f86b41665610024c14;hb=539ffe8768e85b2061aa3bb3616da4f848a582f3;hp=6945f48ca65a8b9b1e113b1103f04abdd19a9858;hpb=d88ecca6486a2b1c4b6e2f0440165b186aab39bc;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSource.pm b/lib/DBIx/Class/ResultSource.pm index 6945f48..04b634c 100644 --- a/lib/DBIx/Class/ResultSource.pm +++ b/lib/DBIx/Class/ResultSource.pm @@ -1228,7 +1228,9 @@ sub _resolve_join { $force_left ||= lc($rel_info->{attrs}{join_type}||'') eq 'left'; # the actual seen value will be incremented by the recursion - my $as = ($seen->{$rel} ? join ('_', $rel, $seen->{$rel} + 1) : $rel); + my $as = $self->storage->relname_to_table_alias( + $rel, ($seen->{$rel} && $seen->{$rel} + 1) + ); push @ret, ( $self->_resolve_join($rel, $alias, $seen, [@$jpath], $force_left), @@ -1245,7 +1247,9 @@ sub _resolve_join { } else { my $count = ++$seen->{$join}; - my $as = ($count > 1 ? "${join}_${count}" : $join); + my $as = $self->storage->relname_to_table_alias( + $join, ($count > 1 && $count) + ); my $rel_info = $self->relationship_info($join) or $self->throw_exception("No such relationship ${join}"); @@ -1258,6 +1262,7 @@ sub _resolve_join { : $rel_info->{attrs}{join_type} , -join_path => [@$jpath, $join], + -is_single => (List::Util::first { $rel_info->{attrs}{accessor} eq $_ } (qw/single filter/) ), -alias => $as, -relation_chain_depth => $seen->{-relation_chain_depth} || 0, }, @@ -1334,13 +1339,13 @@ sub _resolve_condition { unless ($for->has_column_loaded($v)) { if ($for->in_storage) { $self->throw_exception(sprintf - 'Unable to resolve relationship from %s to %s: column %s.%s not ' - . 'loaded from storage (or not passed to new() prior to insert()). ' - . 'Maybe you forgot to call ->discard_changes to get defaults from the db.', - - $for->result_source->source_name, + "Unable to resolve relationship '%s' from object %s: column '%s' not " + . 'loaded from storage (or not passed to new() prior to insert()). You ' + . 'probably need to call ->discard_changes to get the server-side defaults ' + . 'from the database.', $as, - $as, $v, + $for, + $v, ); } return $UNRESOLVABLE_CONDITION; @@ -1579,7 +1584,7 @@ L. =cut sub handle { - return new DBIx::Class::ResultSourceHandle({ + return DBIx::Class::ResultSourceHandle->new({ schema => $_[0]->schema, source_moniker => $_[0]->source_name });