my $s = $param{schema};
my $keys = grep {$_ !~ $_non_search_key_regex} keys(%param);
die "Need at least 1 key to search by" unless $keys;
- my $rs = $param{schema}->resultset('Bug');
- if (exists $param{package}) {
- $rs = $rs->search({-or => {map 'bin_package.'}})
- }
+ my $rs = $s->resultset('Bug');
if (exists $param{severity}) {
$rs = $rs->search({'severity.severity' =>
[make_list($param{severity})],
}
}
if (exists $param{correspondent}) {
- $rs = $rs->search({'message_correspondents.addr' =>
- [make_list($param{correspondent})],
+ my $message_rs =
+ $s->resultset('Message')->
+ search({'correspondent.addr' =>
+ [make_list($param{correspondent})],
+ },
+ {join => {message_correspondents => 'correspondent'},
+ columns => ['id'],
+ group_by => ['me.id'],
+ },
+ );
+ $rs = $rs->search({'bug_messages.message' =>
+ {-in => $message_rs->get_column('id')->as_query()},
},
- {join => {correspondent =>
- {bug_messages =>
- {message => 'message_correspondents'}}}},
+ {join => 'bug_messages',
+ },
);
}
if (exists $param{affects}) {
);
}
if (exists $param{package}) {
- $rs = $rs->search({'bin_pkg.pkg' =>
- [make_list($param{package})],
+ $rs = $rs->search({-or => {'bin_pkg.pkg' =>
+ [make_list($param{package})],
+ 'me.unknown.package' =>
+ [make_list($param{package})]},
},
{join => {bug_binpackages => 'bin_pkg'}});
}