switch to delete+local from clear_* methods
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / ResultSet.pm
index e329034..91a5932 100644 (file)
@@ -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(