Changeset 2433


Ignore:
Timestamp:
07/03/20 09:49:38 (4 years ago)
Author:
nanardon
Message:

Fix search results with opFilter

Location:
trunk/LATMOS-Accounts
Files:
3 edited

Legend:

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

    r2414 r2433  
    18341834 
    18351835    if (%changes) { 
    1836         if (my $cres += $self->set_fields(%changes)) { 
     1836        if (my $cres += $self->set_fields(%changes) || 0) { 
    18371837            $res += $cres; 
    18381838            $self->base->log(LA_NOTICE, "Updating user %s to match unemployment", $self->id); 
  • trunk/LATMOS-Accounts/lib/LATMOS/Accounts/Bases/Sql/objects.pm

    r2426 r2433  
    11061106    # foo=1 bar=1 => foo =1 and bar = 2 
    11071107    my $results = {}; 
     1108    my @attrsKeys = (); 
    11081109    my $noalias = 0; 
    11091110 
     
    11461147            } 
    11471148        } 
    1148         my $attrKey = $attr; 
     1149 
     1150        $OpFilter ||= ''; 
     1151        my $attrKey = $OpFilter . $attr; 
    11491152 
    11501153        if ($attrref) { 
     
    11801183        } 
    11811184 
     1185        unshift(@attrsKeys, { key => $attrKey, op => $OpFilter || '' }) unless($results->{$attrKey}); 
     1186        $results->{$attrKey} ||= {}; 
    11821187        if ($OpFilter eq '-') { 
    11831188            # Filter result to filter from attribute result 
    1184             $results->{$attrKey} ||= {}; 
    11851189            $results->{$attrKey}{$_} = -1 foreach (@results); 
    11861190        } elsif ($OpFilter eq '+') { 
    11871191            # Filter result to filter from attribute result 
    1188             $results->{$attrKey} ||= {}; 
    1189             $results->{$attrKey}{$_} = 1 foreach (@results); 
     1192            $results->{$attrKey}{$_} = 2 foreach (@results); 
    11901193        } else { 
    1191             $results->{$attrKey} ||= {}; 
    11921194            $results->{$attrKey}{$_} ||=  1 foreach (@results); 
    11931195        } 
     
    11951197 
    11961198    # Merging filter result 
    1197  
    1198     my %mresults = map { $_ => 1 } $base->list_objects($class->type); 
    1199  
    1200     foreach my $attr (keys %{ $results }) { 
    1201         my @values = keys %mresults; 
    1202         foreach my $value (sort(@values)) { 
    1203             my $v = $results->{$attr}{$value} || 0; 
    1204             if ( $v < 1 ) { 
    1205                delete($mresults{$value}); 
     1199    my @Results; 
     1200 
     1201    { 
     1202        my @allObjects = $base->list_objects($class->type); 
     1203 
     1204        foreach my $obj (sort @allObjects) { 
     1205            my $retain = 1; 
     1206            foreach my $attrInfo (@attrsKeys) { 
     1207                my $attr = $attrInfo->{key}; 
     1208                my $v = $results->{$attr}{$obj} || 0; 
     1209                if ( $v < 0 ) { 
     1210                    $retain = -1; 
     1211                    last; 
     1212                } elsif ( $v == 0 ) { 
     1213                    $retain = 0 if ($retain == 1 && $attrInfo->{op} ne '+'); 
     1214                } elsif ( $v >= 2 ) { 
     1215                    $retain = 2; 
     1216                    last; 
     1217                } 
    12061218            } 
    1207  
     1219            push(@Results, $obj) if ($retain > 0); 
    12081220        } 
    12091221    } 
    12101222 
    12111223    # We add to result aliases pointing to these object: 
    1212     if(scalar(keys %mresults) && !$noalias) { 
    1213         my @alias = $class->_search_uniq_filter($base, 'oalias', '=', join('||', keys %mresults)); 
    1214         foreach(@alias) { 
    1215             $mresults{$_} = 1; 
    1216         } 
    1217     } 
    1218  
    1219     return(sort keys %mresults); 
     1224    if(scalar(@Results) && !$noalias) { 
     1225        my @alias = $class->_search_uniq_filter($base, 'oalias', '=', join('||', @Results)); 
     1226        push(@Results, sort(@alias)); 
     1227    } 
     1228 
     1229    return(@Results); 
    12201230} 
    12211231 
  • trunk/LATMOS-Accounts/live-test/10_sql.t

    r2327 r2433  
    1818    plan skip_all => 'No SQL base defined'; 
    1919} else { 
    20     plan tests => 107; # Number of test 
     20    plan tests => 110; # Number of test 
    2121} 
    2222 
     
    360360    ), 'Can search using ~ operator'); 
    361361 
     362    diag('Testing filter operator'); 
     363 
     364    ok(eq_set( 
     365        [ $base->search_objects('user', 'givenName=Firstnameb', '+memberOf=searchga') ], 
     366        [ qw(searchuaa searchuab searchuba searchubb) ] 
     367    ), 'Can search using filter operator +'); 
     368    ok(eq_set( 
     369        [ $base->search_objects('user', 'givenName=Firstnameb', '-memberOf=searchgb') ], 
     370        [ ] 
     371    ), 'Can search using filter operator -'); 
     372    ok(eq_set( 
     373        [ $base->search_objects('user', 'memberOf=searchga', '!memberOf=searchgb') ], 
     374        [ qw(searchuba) ] 
     375    ), 'Can search using filter operator !'); 
     376 
    362377    ok($base->delete_object('user', 'searchuaa'), "deleting user searchuaa"); 
    363378    ok($base->delete_object('user', 'searchuna'), "deleting user searchuna"); 
Note: See TracChangeset for help on using the changeset viewer.