Ignore:
Timestamp:
01/03/17 19:55:54 (8 years ago)
Author:
nanardon
Message:

When searching deference direct object aliases

File:
1 edited

Legend:

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

    r1899 r1906  
    997997    } 
    998998 
    999     # We add to result aliases: 
     999    # We add to result aliases pointing to these object: 
    10001000    if(keys %mresults && !$noalias) { 
    10011001        my @alias = $class->_search_uniq_filter($base, 'oalias', '=', join('||', keys %mresults)); 
     
    10221022    return unless(@values); 
    10231023 
    1024     $base->log(LA_DEBUG, "Uniq search for $attr $operator (%s)", join(' ', @values)); 
     1024    $base->log(LA_DEBUG, "Uniq search for " . $class->type . "->$attr $operator (%s)", join(' ', @values)); 
    10251025     
    10261026    # We detect if we can do a very quick search: 
     
    10281028    if ($forRef) { 
    10291029        # Improv perf 
     1030 
     1031        my @oaliases = (); 
     1032        if ($attr ne 'oalias' && $attribute->reference) { 
     1033            @oaliases = $base->search_objects($attribute->reference, "oalias=$value"); 
     1034            $base->log(LA_DEBUG, "Uniq search will match oaliases: %s", join(' ', @oaliases) || '(none)'); 
     1035        } 
     1036 
    10301037        if ($attribute->{inline}) { 
    10311038            my $sql = sprintf( 
     
    10431050            push(@attrsql, $sql); 
    10441051        } 
    1045         push(@attrbind, [ grep { $_ ne '||' } @values ]); 
     1052        push(@attrbind, [ @oaliases, grep { $_ ne '||' } @values ]); 
    10461053    } else { 
    10471054 
     
    11011108                push(@attrbind, $attribute->iname); 
    11021109            } else { 
     1110                my @oaliases = (); 
     1111                if ($attr ne 'oalias' && $attribute->reference) { 
     1112                    @oaliases = $base->search_objects($attribute->reference, "oalias=$val"); 
     1113                    $base->log(LA_DEBUG, "Uniq search will match oaliases for %s: %s", $val, join(' ', @oaliases) || '(none)'); 
     1114                } 
     1115 
    11031116                $sql = sprintf( 
    11041117                    q{select okey from %s where attr = ? %s}, 
     
    11091122                        ? '' 
    11101123                        : $operator eq '~' 
    1111                             ? q{and value::text ILIKE ?} 
    1112                             : qq{and value $operator ?} 
     1124                            ? q{and value::text ILIKE ANY(?)} 
     1125                            : qq{and value $operator ANY (?)} 
    11131126 
    11141127                ); 
    11151128                push(@attrbind, $attribute->iname); 
    1116                 push(@attrbind, $operator eq '~' ? '%' . $val . '%' : $val) unless($val eq '*'); 
     1129                my @vals = ( $val, @oaliases ); 
     1130                push(@attrbind, $operator eq '~' 
     1131                    ? [ map { '%' . $_ . '%' } @vals ] 
     1132                    : [ @vals ]) 
     1133                    unless($val eq '*'); 
    11171134            } 
    11181135        } 
Note: See TracChangeset for help on using the changeset viewer.