diff options
author | David Lawrence <dkl@redhat.com> | 2014-06-17 17:13:38 +0200 |
---|---|---|
committer | David Lawrence <dkl@redhat.com> | 2014-06-17 17:13:38 +0200 |
commit | ea10fefd22eea012cbd7812e35e45e648eb21df8 (patch) | |
tree | 726fdc33603012800f170002a1ce4c66b75a9098 | |
parent | 1f859a390f0fe6cb860bd5736c3a676d69be6115 (diff) | |
download | bugzilla-ea10fefd22eea012cbd7812e35e45e648eb21df8.tar.gz bugzilla-ea10fefd22eea012cbd7812e35e45e648eb21df8.tar.xz |
Bug 1021218: merge-users.pl fails if both users have bug_user_last_visit entries for the same bug
r=glob,a=glob
-rwxr-xr-x | contrib/merge-users.pl | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/contrib/merge-users.pl b/contrib/merge-users.pl index eb205cac2..272f5586a 100755 --- a/contrib/merge-users.pl +++ b/contrib/merge-users.pl @@ -145,6 +145,19 @@ $dbh->bz_start_transaction(); $dbh->do('DELETE FROM logincookies WHERE userid = ?', undef, $old_id); $dbh->do('DELETE FROM tokens WHERE userid = ?', undef, $old_id); +# Special care needs to be done with bug_user_last_visit table as the +# source user and destination user may have visited the same bug id at one time. +# In this case we remove the one with the oldest timestamp. +my $dupe_ids = $dbh->selectcol_arrayref(" + SELECT earlier.id + FROM bug_user_last_visit as earlier + INNER JOIN bug_user_last_visit as later + ON (earlier.user_id != later.user_id AND earlier.last_visit_ts < later.last_visit_ts + AND earlier.bug_id = later.bug_id) + WHERE (earlier.user_id = ? OR earlier.user_id = ?)", + undef, $old_id, $new_id); +$dbh->do("DELETE FROM bug_user_last_visit WHERE " . $dbh->sql_in('id', $dupe_ids)); + # Migrate records from old user to new user. foreach my $table (keys %changes) { foreach my $column_list (@{ $changes{$table} }) { |