]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 314454: Incorrect SQL query in editproducts.cgi when making a group mandatory...
authorlpsolit%gmail.com <>
Sat, 12 Apr 2008 04:39:45 +0000 (04:39 +0000)
committerlpsolit%gmail.com <>
Sat, 12 Apr 2008 04:39:45 +0000 (04:39 +0000)
editproducts.cgi

index 4347ce836c8c9cd3f83bd41fff89142007ee87a4..c7e7fe13c52e32c8520cd7f4ed51da0c56558c05 100755 (executable)
@@ -26,6 +26,7 @@
 #               Frédéric Buclin <LpSolit@gmail.com>
 #               Greg Hendricks <ghendricks@novell.com>
 #               Lance Larsh <lance.larsh@oracle.com>
+#               Elliotte Martin <elliotte.martin@yahoo.com>
 
 use strict;
 use lib qw(. lib);
@@ -542,20 +543,28 @@ if ($action eq 'updategroupcontrols') {
                    {'Slice' => {}}, $product->id);
         }
 
+#
+# return the mandatory groups which need to have bug entries added to the bug_group_map
+# and the corresponding bug count
+#
         my $mandatory_groups;
         if (@now_mandatory) {
             $mandatory_groups = $dbh->selectall_arrayref(
-                    'SELECT groups.name, COUNT(bugs.bug_id) AS count
-                       FROM bugs
-                  LEFT JOIN bug_group_map
-                         ON bug_group_map.bug_id = bugs.bug_id
-                 INNER JOIN groups
-                         ON bug_group_map.group_id = groups.id
-                      WHERE groups.id IN (' . join(', ', @now_mandatory) . ')
-                        AND bugs.product_id = ?
-                        AND bug_group_map.bug_id IS NULL ' .
-                       $dbh->sql_group_by('groups.name'),
+                    'SELECT groups.name,
+                           (SELECT COUNT(bugs.bug_id)
+                              FROM bugs
+                             WHERE bugs.product_id = ?
+                               AND bugs.bug_id NOT IN
+                                (SELECT bug_group_map.bug_id FROM bug_group_map
+                                  WHERE bug_group_map.group_id = groups.id))
+                           AS count
+                      FROM groups
+                     WHERE groups.id IN (' . join(', ', @now_mandatory) . ')
+                     ORDER BY groups.name',
                    {'Slice' => {}}, $product->id);
+            # remove zero counts
+            @$mandatory_groups = grep { $_->{count} } @$mandatory_groups;
+
         }
         if (($na_groups && scalar(@$na_groups))
             || ($mandatory_groups && scalar(@$mandatory_groups)))