]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 731055: get_enterable_products() is very slow when a product has many components...
authorFrédéric Buclin <LpSolit@gmail.com>
Tue, 28 Feb 2012 08:22:03 +0000 (09:22 +0100)
committerFrédéric Buclin <LpSolit@gmail.com>
Tue, 28 Feb 2012 08:22:03 +0000 (09:22 +0100)
r/a=mkanat

Bugzilla/User.pm

index 008322b172373e719f7fa3a9edaca8429b3616ed..391e416af382ddf0369a51bc30ecfd6467b1927f 100644 (file)
@@ -1040,12 +1040,14 @@ sub get_enterable_products {
         # And all of these products must have at least one component
         # and one version.
         $enterable_ids = $dbh->selectcol_arrayref(
-               'SELECT DISTINCT products.id FROM products
-            INNER JOIN components ON components.product_id = products.id
-            INNER JOIN versions ON versions.product_id = products.id
-                 WHERE products.id IN (' . join(',', @$enterable_ids) . ')
-                   AND components.isactive = 1
-                   AND versions.isactive = 1');
+            'SELECT DISTINCT products.id FROM products
+              WHERE ' . $dbh->sql_in('products.id', $enterable_ids) .
+              ' AND products.id IN (SELECT DISTINCT components.product_id
+                                      FROM components
+                                     WHERE components.isactive = 1)
+                AND products.id IN (SELECT DISTINCT versions.product_id
+                                      FROM versions
+                                     WHERE versions.isactive = 1)');
     }
 
     $self->{enterable_products} =