X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSet.pm;h=6ab3ec08344aef2970cafd8c9a9cae1810a6af0f;hb=c6a0dde1edec30bc70565689ae3b978db9677f15;hp=a508ce9e1a7c7fa907137435efb46130b7636071;hpb=057d4713af8f97b17a351bca5d11fe55e5a8b88a;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSet.pm b/lib/DBIx/Class/ResultSet.pm index a508ce9..6ab3ec0 100644 --- a/lib/DBIx/Class/ResultSet.pm +++ b/lib/DBIx/Class/ResultSet.pm @@ -184,7 +184,15 @@ sub search_rs { my $cond = (@_ ? ( (@_ == 1 || ref $_[0] eq "HASH") - ? shift + ? ( + (ref $_[0] eq 'HASH') + ? ( + (keys %{ $_[0] } > 0) + ? shift + : undef + ) + : shift + ) : ( (@_ % 2) ? $self->throw_exception("Odd number of arguments to search") @@ -205,6 +213,7 @@ sub search_rs { } : $where); } + if (defined $cond) { $new_attrs->{where} = ( defined $new_attrs->{where} @@ -1275,9 +1284,15 @@ sub _collapse_cond { sub _remove_alias { my ($self, $query, $alias) = @_; - my %unaliased = %{ $query || {} }; - foreach my $key (keys %unaliased) { - $unaliased{$1} = delete $unaliased{$key} + my %orig = %{ $query || {} }; + my %unaliased; + + foreach my $key (keys %orig) { + if ($key !~ /\./) { + $unaliased{$key} = $orig{$key}; + next; + } + $unaliased{$1} = $orig{$key} if $key =~ m/^(?:\Q$alias\E\.)?([^.]+)$/; }