Changeset 351 for server/trunk/web
- Timestamp:
- 01/26/11 02:29:37 (13 years ago)
- Location:
- server/trunk/web/lib/Sophie
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
server/trunk/web/lib/Sophie/Base/Result/Deps.pm
r349 r351 11 11 12 12 __PACKAGE__->add_relationship( RpmFile => 'Sophie::Base::Result::RpmFile', 13 { pkgid => 'pkgid' });13 { 'foreign.pkgid' => 'self.pkgid' }); 14 14 1; -
server/trunk/web/lib/Sophie/Base/Result/Files.pm
r86 r351 11 11 __PACKAGE__->belongs_to(Rpms => 'Sophie::Base::Result::Rpms', 'pkgid'); 12 12 13 __PACKAGE__->add_relationship( RpmFile => 'Sophie::Base::Result::RpmFile', 14 { 'foreign.pkgid' => 'self.pkgid' }); 15 13 16 14 17 1; -
server/trunk/web/lib/Sophie/Base/Result/Rpms.pm
r349 r351 8 8 __PACKAGE__->add_columns(qw/pkgid summary description issrc name evr arch header/); 9 9 __PACKAGE__->set_primary_key(qw/pkgid/); 10 __PACKAGE__->has_many(Rpm file => 'Sophie::Base::Result::RpmFile', 'pkgid');10 __PACKAGE__->has_many(RpmFile => 'Sophie::Base::Result::RpmFile', 'pkgid'); 11 11 __PACKAGE__->has_many(Deps => 'Sophie::Base::Result::Deps', 'pkgid'); 12 12 __PACKAGE__->has_many(Files => 'Sophie::Base::Result::Files', 'pkgid'); -
server/trunk/web/lib/Sophie/Controller/Search.pm
r350 r351 191 191 my ($self, $c, $searchspec, $deptype, $depname, $depsense, $depevr ) = @_; 192 192 193 $c->model('BaseSearch')->best_rpm_filter($searchspec) 194 ->search({}, { select => [], join => [ 'Deps' ]})->search( 193 my $rs = $c->model('Base::Deps')->search( 195 194 { 196 195 -and => [ … … 199 198 ($depsense 200 199 ? ({-nest => \[ 201 'rpmdepmatch( Deps.flags, Deps.evr, rpmsenseflag(?), ?)',200 'rpmdepmatch(flags, me.evr, rpmsenseflag(?), ?)', 202 201 [ plain_text => $depsense], 203 202 [ plain_text => $depevr ] … … 205 204 : ()), 206 205 ($searchspec->{pkgid} 207 ? { ' Deps.pkgid' => $searchspec->{pkgid} }206 ? { 'pkgid' => $searchspec->{pkgid} } 208 207 : ()), 209 208 ] 210 209 }, 211 210 { 212 '+select' => [ { rpmsenseflag => ' Deps.flags' }, 'Deps.depname',213 ' Deps.evr' ],211 '+select' => [ { rpmsenseflag => 'flags' }, 'depname', 212 'me.evr' ], 214 213 '+as' => [ qw(sense name evr) ], 215 214 216 215 } 217 216 ); 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); 218 223 } 219 224 … … 231 236 $searchspec ||= {}; 232 237 233 $c->model('BaseSearch')->best_rpm_filter($searchspec) 234 ->search({}, { select => [], join => [ 'Files' ]})->search( 238 my $rs = $c->model('Base::Files')->search( 235 239 { 236 240 -and => [ … … 242 246 ($searchspec->{content} ? { has_content => 1 } : ()), 243 247 ($searchspec->{pkgid} 244 ? { ' Files.pkgid' => { IN => $searchspec->{pkgid} } }248 ? { 'pkgid' => { IN => $searchspec->{pkgid} } } 245 249 : ()), 246 250 ], … … 248 252 { 249 253 '+select' => [ 250 ' Files.contents is NOT NULL as has_content',254 'contents is NOT NULL as has_content', 251 255 { rpmfilesmode => 'mode' }, 252 map { 'Files.' . $_ } $c->model('Base::Files')->result_source->columns,253 256 ], 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); 258 266 } 259 267 -
server/trunk/web/lib/Sophie/Controller/Search/Rpm.pm
r350 r351 104 104 $depsense, $depevr 105 105 ], 106 )->get_column(' Deps.pkgid');106 )->get_column('me.pkgid'); 107 107 $c->stash->{rs} = $c->model('Base::Rpms')->search( 108 108 { … … 135 135 136 136 my $filers = $c->forward('/search/file_rs', [ $searchspec, $file ]) 137 ->get_column(' Files.pkgid');137 ->get_column('me.pkgid'); 138 138 $c->stash->{rs} = $c->model('Base::Rpms')->search( 139 139 { -
server/trunk/web/lib/Sophie/Model/BaseSearch.pm
r349 r351 26 26 sub c { $_[0]->{c} } 27 27 28 sub distrib{29 my ($self, $ search) = @_;28 sub apply_rpm_filter { 29 my ($self, $rs, $search) = @_; 30 30 31 31 # Nothing to filter 32 return if (!(32 return $rs if (!( 33 33 $search->{distribution} || 34 34 $search->{release} || … … 37 37 $search->{media_group})); 38 38 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', 71 42 { 72 43 ($search->{media} ? (label => $search->{media}) : ()), … … 78 49 select => [ qw(label group_label) ], 79 50 } 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 } 80 82 ); 81 }82 83 sub rpmfiles {84 my ($self, $search) = @_;85 86 my $rs_dist = $self->distrib($search);87 88 $rs_dist89 ? $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_dist100 ? $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_dist105 ? $rs_dist->search_related('MediasPaths')106 ->search_related('RpmFiles')107 : $self->c->model('Base::RpmFile'))108 83 } 109 84
Note: See TracChangeset
for help on using the changeset viewer.