X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSet.pm;h=91a5932b0d68d02eadb5b887244b8fb5bf7da353;hb=a14cff9712c23c5761aa570176b9325e611c4360;hp=e32903468b54eec18ebcc16652b49f25bc701556;hpb=a8b2b652c8f930ee1c45e72639ec6e57b2c7ddcd;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSet.pm b/lib/DBIx/Class/ResultSet.pm index e329034..91a5932 100644 --- a/lib/DBIx/Class/ResultSet.pm +++ b/lib/DBIx/Class/ResultSet.pm @@ -604,6 +604,8 @@ sub _stack_cond { my @uniq = grep { !$seen{Data::Dumper::Concise::Dumper($_)}++ } @top; + return \$uniq[0] if @uniq == 1; + return \Operator({ 'SQL.Naive' => 'AND' }, \@uniq); } @@ -1694,16 +1696,14 @@ sub _count_subq_rs { $sql_maker->{name_sep} = ''; } - $sql_maker->clear_renderer; - $sql_maker->clear_converter; + # delete local is 5.12+ + local @{$sql_maker}{qw(renderer converter)}; + delete @{$sql_maker}{qw(renderer converter)}; my ($lquote, $rquote, $sep) = map { quotemeta $_ } ($sql_maker->_quote_chars, $sql_maker->name_sep); my $having_sql = $sql_maker->_render_sqla(where => $attrs->{having}); - $sql_maker->clear_renderer; - $sql_maker->clear_converter; - my %seen_having; # search for both a proper quoted qualified string, for a naive unquoted scalarref @@ -2477,10 +2477,6 @@ sub _merge_with_rscond { if (! defined $self->{cond}) { # just massage $data below } - elsif ($self->{cond} eq $DBIx::Class::ResultSource::UNRESOLVABLE_CONDITION) { - %new_data = %{ $self->{attrs}{related_objects} || {} }; # nothing might have been inserted yet - @cols_from_relations = keys %new_data; - } elsif (ref $self->{cond} eq 'HASH') { # precedence must be given to passed values over values inherited from # the cond, so the order here is important. @@ -2504,8 +2500,16 @@ sub _merge_with_rscond { } } elsif (ref $self->{cond} eq 'REF' and ref ${$self->{cond}} eq 'HASH') { - %new_data = %{$self->result_source - ->_extract_fixed_values_for(${$self->{cond}}, $alias)}; + if ((${$self->{cond}})->{'DBIx::Class::ResultSource.UNRESOLVABLE'}) { + %new_data = %{ $self->{attrs}{related_objects} || {} }; # nothing might have been inserted yet + @cols_from_relations = keys %new_data; + } else { + %new_data = %{$self->_remove_alias( + $self->result_source + ->_extract_fixed_values_for(${$self->{cond}}), + $alias + )}; + } } else { $self->throw_exception(