Changeset 351


Ignore:
Timestamp:
01/26/11 02:29:37 (13 years ago)
Author:
nanardon
Message:
  • optimize in a fester way
Location:
server/trunk/web/lib/Sophie
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • server/trunk/web/lib/Sophie/Base/Result/Deps.pm

    r349 r351  
    1111 
    1212__PACKAGE__->add_relationship( RpmFile => 'Sophie::Base::Result::RpmFile', 
    13                              { pkgid => 'pkgid' }); 
     13                             { 'foreign.pkgid' => 'self.pkgid' }); 
    14141; 
  • server/trunk/web/lib/Sophie/Base/Result/Files.pm

    r86 r351  
    1111__PACKAGE__->belongs_to(Rpms => 'Sophie::Base::Result::Rpms', 'pkgid'); 
    1212 
     13__PACKAGE__->add_relationship( RpmFile => 'Sophie::Base::Result::RpmFile', 
     14                             { 'foreign.pkgid' => 'self.pkgid' }); 
     15 
    1316 
    14171; 
  • server/trunk/web/lib/Sophie/Base/Result/Rpms.pm

    r349 r351  
    88__PACKAGE__->add_columns(qw/pkgid summary description issrc name evr arch header/); 
    99__PACKAGE__->set_primary_key(qw/pkgid/); 
    10 __PACKAGE__->has_many(Rpmfile => 'Sophie::Base::Result::RpmFile', 'pkgid'); 
     10__PACKAGE__->has_many(RpmFile => 'Sophie::Base::Result::RpmFile', 'pkgid'); 
    1111__PACKAGE__->has_many(Deps => 'Sophie::Base::Result::Deps', 'pkgid'); 
    1212__PACKAGE__->has_many(Files => 'Sophie::Base::Result::Files', 'pkgid'); 
  • server/trunk/web/lib/Sophie/Controller/Search.pm

    r350 r351  
    191191    my ($self, $c, $searchspec, $deptype, $depname, $depsense, $depevr ) = @_; 
    192192 
    193         $c->model('BaseSearch')->best_rpm_filter($searchspec) 
    194         ->search({}, { select => [], join => [ 'Deps' ]})->search( 
     193        my $rs = $c->model('Base::Deps')->search( 
    195194        { 
    196195            -and => [ 
     
    199198            ($depsense 
    200199                ? ({-nest => \[ 
    201                     'rpmdepmatch(Deps.flags, Deps.evr, rpmsenseflag(?), ?)', 
     200                    'rpmdepmatch(flags, me.evr, rpmsenseflag(?), ?)', 
    202201                    [ plain_text => $depsense], 
    203202                    [ plain_text => $depevr ] 
     
    205204            : ()), 
    206205            ($searchspec->{pkgid} 
    207                 ? { 'Deps.pkgid' => $searchspec->{pkgid} } 
     206                ? { 'pkgid' => $searchspec->{pkgid} } 
    208207                : ()), 
    209208            ] 
    210209        }, 
    211210        { 
    212             '+select' => [ { rpmsenseflag => 'Deps.flags' }, 'Deps.depname', 
    213                 'Deps.evr' ], 
     211            '+select' => [ { rpmsenseflag => 'flags' }, 'depname', 
     212                'me.evr' ], 
    214213            '+as'     => [ qw(sense name evr) ], 
    215214 
    216215        } 
    217216    ); 
     217    if (exists($searchspec->{src})) { 
     218        $rs = $rs->search_related('Rpms', 
     219            { issrc => $searchspec->{src} ? 1 : 0 } 
     220        ) 
     221    } 
     222    return $c->model('BaseSearch')->apply_rpm_filter($rs, $searchspec); 
    218223} 
    219224 
     
    231236    $searchspec ||= {}; 
    232237 
    233     $c->model('BaseSearch')->best_rpm_filter($searchspec) 
    234         ->search({}, { select => [], join => [ 'Files' ]})->search( 
     238    my $rs = $c->model('Base::Files')->search( 
    235239        { 
    236240            -and => [ 
     
    242246                ($searchspec->{content} ? { has_content => 1 } : ()), 
    243247                ($searchspec->{pkgid} 
    244                     ? { 'Files.pkgid' => { IN => $searchspec->{pkgid} } } 
     248                    ? { 'pkgid' => { IN => $searchspec->{pkgid} } } 
    245249                    : ()), 
    246250            ], 
     
    248252        { 
    249253            '+select' => [ 
    250                 'Files.contents is NOT NULL as has_content', 
     254                'contents is NOT NULL as has_content', 
    251255                { rpmfilesmode => 'mode' }, 
    252                 map { 'Files.' . $_ } $c->model('Base::Files')->result_source->columns, 
    253256            ], 
    254             '+as' => [ qw(has_content perm), 
    255                 $c->model('Base::Files')->result_source->columns ], 
    256         } 
    257     ); 
     257            '+as' => [ qw(has_content perm), ] 
     258        } 
     259    ); 
     260    if (exists($searchspec->{src})) { 
     261        $rs = $rs->search_related('Rpms', 
     262            { issrc => $searchspec->{src} ? 1 : 0 } 
     263        ) 
     264    } 
     265    return $c->model('BaseSearch')->apply_rpm_filter($rs, $searchspec); 
    258266} 
    259267 
  • server/trunk/web/lib/Sophie/Controller/Search/Rpm.pm

    r350 r351  
    104104            $depsense, $depevr  
    105105        ], 
    106     )->get_column('Deps.pkgid'); 
     106    )->get_column('me.pkgid'); 
    107107    $c->stash->{rs} = $c->model('Base::Rpms')->search( 
    108108        { 
     
    135135 
    136136    my $filers = $c->forward('/search/file_rs', [ $searchspec, $file ]) 
    137         ->get_column('Files.pkgid'); 
     137        ->get_column('me.pkgid'); 
    138138    $c->stash->{rs} = $c->model('Base::Rpms')->search( 
    139139        { 
  • server/trunk/web/lib/Sophie/Model/BaseSearch.pm

    r349 r351  
    2626sub c { $_[0]->{c} } 
    2727 
    28 sub distrib { 
    29     my ($self, $search) = @_; 
     28sub apply_rpm_filter { 
     29    my ($self, $rs, $search) = @_; 
    3030 
    3131    # Nothing to filter 
    32     return if (!( 
     32    return $rs if (!( 
    3333        $search->{distribution} || 
    3434        $search->{release} || 
     
    3737        $search->{media_group})); 
    3838 
    39     $self->c->model('Base::Distribution')->search( 
    40         { 
    41             $search->{distribution} 
    42                 ? (-or => [ 
    43                     { 'me.name' => $search->{distribution} }, 
    44                     { shortname => $search->{distribution} }, 
    45                 ],) 
    46                 : () 
    47         }, 
    48         { 
    49             select => [ qw(name shortname) ], 
    50         } 
    51  
    52     )->search_related('Release', 
    53         { 
    54             $search->{release} 
    55                 ? (version => $search->{release}) 
    56                 : () 
    57         }, 
    58         { 
    59             select => [ qw(version) ], 
    60         } 
    61     )->search_related('Arch', 
    62         { 
    63             $search->{arch} 
    64                 ? ('Arch.arch' => $search->{arch}) 
    65                 : () 
    66         }, 
    67         { 
    68             select => [ qw(arch) ], 
    69         } 
    70     )->search_related('Medias', 
     39    $rs->search_related('RpmFile') 
     40    ->search_related('MediasPaths') 
     41    ->search_related('Medias', 
    7142        { 
    7243            ($search->{media} ? (label => $search->{media}) : ()), 
     
    7849            select => [ qw(label group_label) ], 
    7950        } 
     51    )->search_related('Arch', 
     52        { 
     53            $search->{arch} 
     54            ? ('Arch.arch' => $search->{arch}) 
     55            : () 
     56        }, 
     57        { 
     58            select => [ qw(arch) ], 
     59        } 
     60 
     61    )->search_related('Release', 
     62        { 
     63            $search->{release} 
     64            ? (version => $search->{release}) 
     65            : () 
     66        }, 
     67        { 
     68            select => [ qw(version) ], 
     69        } 
     70    )->search_related('Distribution')->search( 
     71        { 
     72            $search->{distribution} 
     73            ? (-or => [ 
     74                    { 'Distribution.name' => $search->{distribution} }, 
     75                    { shortname => $search->{distribution} }, 
     76                ],) 
     77            : () 
     78        }, 
     79        { 
     80            select => [ qw(name shortname) ], 
     81        } 
    8082    ); 
    81 } 
    82  
    83 sub rpmfiles { 
    84     my ($self, $search) = @_; 
    85  
    86     my $rs_dist = $self->distrib($search); 
    87  
    88     $rs_dist 
    89         ? $rs_dist->search_related('MediasPaths') 
    90           ->search_related('RpmFiles') 
    91         : $self->c->model('Base::RpmFiles') 
    92 } 
    93  
    94 sub best_rpm_filter { 
    95     my ($self, $search) = @_; 
    96  
    97     my $rs_dist = $self->distrib($search); 
    98     return exists($search->{src}) 
    99         ? ($rs_dist 
    100             ? $rs_dist->search_related('MediasPaths') 
    101               ->search_related('RpmFiles') 
    102               ->search_related('Rpms', { issrc => $search->{src} ? 1 : 0 }) 
    103             : $self->c->model('Base::Rpms',  { issrc => $search->{src} ? 1 : 0 })) 
    104         : ($rs_dist 
    105             ? $rs_dist->search_related('MediasPaths') 
    106               ->search_related('RpmFiles') 
    107             : $self->c->model('Base::RpmFile')) 
    10883} 
    10984 
Note: See TracChangeset for help on using the changeset viewer.