]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 756953 - Dependencies table should have unique index so that duplicate entries...
authorDave Lawrence <dlawrence@mozilla.com>
Fri, 3 Aug 2012 03:56:00 +0000 (23:56 -0400)
committerDave Lawrence <dlawrence@mozilla.com>
Fri, 3 Aug 2012 03:56:00 +0000 (23:56 -0400)
r/a=LpSolit

Bugzilla/DB/Schema.pm
Bugzilla/Install/DB.pm

index 3330c846ae5554136fd91dd791a6138ff0ac93e9..156dca37818da879d7e4375084b4ca6903ac6e74 100644 (file)
@@ -416,7 +416,8 @@ use constant ABSTRACT_SCHEMA => {
                                             DELETE => 'CASCADE'}},
         ],
         INDEXES => [
-            dependencies_blocked_idx   => ['blocked'],
+            dependencies_blocked_idx => {FIELDS => [qw(blocked dependson)],
+                                         TYPE   => 'UNIQUE'},
             dependencies_dependson_idx => ['dependson'],
         ],
     },
index 31c8da71c38b096201a66e8731cbef2197a8a2a9..5d0f616725c78e3f05e9b06a5ce3fdd855d43630 100644 (file)
@@ -694,6 +694,9 @@ sub update_table_definitions {
     # 2012-07-24 dkl@mozilla.com - Bug 776982
     _fix_longdescs_primary_key();
 
+    # 2012-08-02 dkl@mozilla.com - Bug 756953
+    _fix_dependencies_dupes();
+
     ################################################################
     # New --TABLE-- changes should go *** A B O V E *** this point #
     ################################################################
@@ -3725,6 +3728,31 @@ sub _fix_longdescs_primary_key {
     }
 }
 
+sub _fix_dependencies_dupes {
+    my $dbh = Bugzilla->dbh;
+    my $blocked_idx = $dbh->bz_index_info('dependencies', 'dependencies_blocked_idx');
+    if ($blocked_idx && scalar @{$blocked_idx->{'FIELDS'}} < 2) {
+        # Remove duplicated entries
+        my $dupes = $dbh->selectall_arrayref("
+            SELECT blocked, dependson, COUNT(*) AS count
+              FROM dependencies " .
+            $dbh->sql_group_by('blocked, dependson') . "
+            HAVING COUNT(*) > 1",
+            { Slice => {} });
+        print "Removing duplicated entries from the 'dependencies' table...\n" if @$dupes;
+        foreach my $dupe (@$dupes) {
+            $dbh->do("DELETE FROM dependencies
+                      WHERE blocked = ? AND dependson = ?",
+                     undef, $dupe->{blocked}, $dupe->{dependson});
+            $dbh->do("INSERT INTO dependencies (blocked, dependson) VALUES (?, ?)",
+                     undef, $dupe->{blocked}, $dupe->{dependson});
+        }
+        $dbh->bz_drop_index('dependencies', 'dependencies_blocked_idx');
+        $dbh->bz_add_index('dependencies', 'dependencies_blocked_idx',
+                           { FIELDS => [qw(blocked dependson)], TYPE => 'UNIQUE' });
+    }   
+}
+
 1;
 
 __END__