зеркало из https://github.com/mozilla/gecko-dev.git
Bug 179960 - Qucksearch queries are slow and timeout
fixed by adding subselect emulation for product/component lookups r=joel, a=justdave
This commit is contained in:
Родитель
f18df6bc84
Коммит
c9a868c160
|
@ -514,17 +514,22 @@ sub init {
|
|||
},
|
||||
|
||||
"^component,(?!changed)" => sub {
|
||||
my $table = "components_$chartid";
|
||||
push(@supptables, "components $table");
|
||||
push(@wherepart, "bugs.component_id = $table.id");
|
||||
$f = $ff = "$table.name";
|
||||
$f = $ff = "components.name";
|
||||
$funcsbykey{",$t"}->();
|
||||
$term = build_subselect("bugs.component_id",
|
||||
"components.id",
|
||||
"components",
|
||||
$term);
|
||||
},
|
||||
|
||||
"^product,(?!changed)" => sub {
|
||||
my $table = "products_$chartid";
|
||||
push(@supptables, "products $table");
|
||||
push(@wherepart, "bugs.product_id = $table.id");
|
||||
$f = $ff = "$table.name";
|
||||
# Generate the restriction condition
|
||||
$f = $ff = "products.name";
|
||||
$funcsbykey{",$t"}->();
|
||||
$term = build_subselect("bugs.product_id",
|
||||
"products.id",
|
||||
"products",
|
||||
$term);
|
||||
},
|
||||
|
||||
"^keywords," => sub {
|
||||
|
@ -591,9 +596,12 @@ sub init {
|
|||
",casesubstring" => sub {
|
||||
$term = "INSTR($ff, $q)";
|
||||
},
|
||||
",(substring|substr)" => sub {
|
||||
",substring" => sub {
|
||||
$term = "INSTR(LOWER($ff), " . lc($q) . ")";
|
||||
},
|
||||
",substr" => sub {
|
||||
$funcsbykey{",substring"}->();
|
||||
},
|
||||
",notsubstring" => sub {
|
||||
$term = "INSTR(LOWER($ff), " . lc($q) . ") = 0";
|
||||
},
|
||||
|
@ -1016,6 +1024,19 @@ sub ListIDsForEmail {
|
|||
return $list;
|
||||
}
|
||||
|
||||
sub build_subselect {
|
||||
my ($outer, $inner, $table, $cond) = @_;
|
||||
my $q = "SELECT $inner FROM $table WHERE $cond";
|
||||
#return "$outer IN ($q)";
|
||||
&::SendSQL($q);
|
||||
my @list;
|
||||
while (&::MoreSQLData()) {
|
||||
push (@list, &::FetchOneColumn());
|
||||
}
|
||||
return "1=2" unless @list; # Could use boolean type on dbs which support it
|
||||
return "$outer IN (" . join(',', @list) . ")";
|
||||
}
|
||||
|
||||
sub GetByWordList {
|
||||
my ($field, $strs) = (@_);
|
||||
my @list;
|
||||
|
|
Загрузка…
Ссылка в новой задаче