X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSet.pm;h=2a08b657c5f10fa4d8a8c2995ad99ab172ace5dd;hb=7ed4b48f691b78a3d832266d3a253a4d5c6a4837;hp=d9d89590356ab80474ba866b0fd134a7ddc34ff0;hpb=d681f1bb0ca3b0611f11c082059827cfda7f9ac5;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSet.pm b/lib/DBIx/Class/ResultSet.pm index d9d8959..2a08b65 100644 --- a/lib/DBIx/Class/ResultSet.pm +++ b/lib/DBIx/Class/ResultSet.pm @@ -870,7 +870,7 @@ sub find { # relationship } else { - my (@unique_queries, %seen_column_combinations); + my (@unique_queries, %seen_column_combinations, $ci, @fc_exceptions); # no key was specified - fall down to heuristics mode: # run through all unique queries registered on the resultset, and @@ -887,17 +887,25 @@ sub find { join "\x00", sort $rsrc->unique_constraint_columns($c_name) }++; - push @unique_queries, try { - $self->result_source->_minimal_valueset_satisfying_constraint( - constraint_name => $c_name, - values => ($self->_merge_with_rscond($call_cond))[0], - ), - } || (); + try { + push @unique_queries, $self->_qualify_cond_columns( + $self->result_source->_minimal_valueset_satisfying_constraint( + constraint_name => $c_name, + values => ($self->_merge_with_rscond($call_cond))[0], + columns_info => ($ci ||= $self->result_source->columns_info), + ), + $alias + ); + } + catch { + push @fc_exceptions, $_ if $_ =~ /\bFilterColumn\b/; + }; } - $final_cond = @unique_queries - ? [ map { $self->_qualify_cond_columns($_, $alias) } @unique_queries ] - : $self->_non_unique_find_fallback ($call_cond, $attrs) + $final_cond = + @unique_queries ? \@unique_queries + : @fc_exceptions ? $self->throw_exception(join "; ", map { $_ =~ /(.*) at .+ line \d+$/s } @fc_exceptions ) + : $self->_non_unique_find_fallback ($call_cond, $attrs) ; }