Changeset 1944


Ignore:
Timestamp:
02/13/17 20:06:04 (7 years ago)
Author:
nanardon
Message:

Fix search when multiple subref are given as filter

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/objects.pm

    r1927 r1944  
    974974            } 
    975975        } 
     976        my $attrKey = $attr; 
    976977 
    977978        if ($attrref) { 
     
    981982            }; 
    982983 
     984            $attrKey .= '.' . $attrref; 
    983985            my @results = $base->search_objects($otype, "$attrref$operator$val"); 
    984986            $base->log(LA_DEBUG, "Sub search %s res: %s", $otype, join(', ', @results)); 
    985987 
    986988            if (!@results) { 
    987                 $results->{$attr} ||= {}; 
     989                $results->{$attrKey} ||= {}; 
    988990                next; 
    989991            } 
     
    994996        my @results = $class->_search_uniq_filter($base, $attr, $operator, $val); 
    995997 
    996         $results->{$attr} ||= {}; 
    997         $results->{$attr}{$_} = 1 foreach (@results)  
     998        $base->log(LA_DEBUG, "Search result: %s: %s", $attr, join(' ', @results)); 
     999        $results->{$attrKey} ||= {}; 
     1000        $results->{$attrKey}{$_} = 1 foreach (@results); 
    9981001    } 
    9991002 
     
    10041007    foreach my $attr (keys %{ $results }) { 
    10051008        my @values = keys %mresults; 
    1006         foreach (@values) { 
    1007             $results->{$attr}{$_} or delete($mresults{$_}); 
     1009        foreach my $value (sort(@values)) { 
     1010            if (!$results->{$attr}{$value}) { 
     1011                delete($mresults{$value}); 
     1012            } 
    10081013        } 
    10091014    } 
    10101015 
    10111016    # We add to result aliases pointing to these object: 
    1012     if(keys %mresults && !$noalias) { 
     1017    if(scalar(keys %mresults) && !$noalias) { 
    10131018        my @alias = $class->_search_uniq_filter($base, 'oalias', '=', join('||', keys %mresults)); 
    10141019        foreach(@alias) { 
     
    10321037 
    10331038    my @values = split(/([\|\&]+)/, $value); 
     1039 
     1040    $base->log(LA_DEBUG, "Uniq search for " . $class->type . "->$attr $operator (%s)", join(' ', @values)); 
     1041 
    10341042    return unless(@values); 
    1035  
    1036     $base->log(LA_DEBUG, "Uniq search for " . $class->type . "->$attr $operator (%s)", join(' ', @values)); 
    10371043     
    10381044    # We detect if we can do a very quick search: 
Note: See TracChangeset for help on using the changeset viewer.