From ab04fe6c61b5fd55ca4b838ccb7abfd542bd2128 Mon Sep 17 00:00:00 2001 From: Max Kanat-Alexander Date: Wed, 7 Jul 2010 17:15:45 -0700 Subject: Bug 577149: Make convert-workflow rename values in saved searches r=LpSolit, a=LpSolit --- Bugzilla/Search/Saved.pm | 31 +++++++++++++++++++++++++++++++ contrib/convert-workflow.pl | 5 ++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/Bugzilla/Search/Saved.pm b/Bugzilla/Search/Saved.pm index cb6371469..32a24eae1 100644 --- a/Bugzilla/Search/Saved.pm +++ b/Bugzilla/Search/Saved.pm @@ -174,6 +174,37 @@ sub create { return $obj; } +sub rename_field_value { + my ($class, $field, $old_value, $new_value) = @_; + + my $old = url_quote($old_value); + my $new = url_quote($new_value); + my $old_sql = $old; + $old_sql =~ s/([_\%])/\\$1/g; + + my $dbh = Bugzilla->dbh; + $dbh->bz_start_transaction(); + + my %queries = @{ $dbh->selectcol_arrayref( + "SELECT id, query FROM namedqueries WHERE query LIKE ?", + {Columns=>[1,2]}, "\%$old_sql\%") }; + foreach my $id (keys %queries) { + my $query = $queries{$id}; + $query =~ s/\b$field=\Q$old\E\b/$field=$new/gi; + # Fix boolean charts. + while ($query =~ /\bfield(\d+-\d+-\d+)=\Q$field\E\b/gi) { + my $chart_id = $1; + # Note that this won't handle lists or substrings inside of + # boolean charts. Users will have to fix those themselves. + $query =~ s/\bvalue\Q$chart_id\E=\Q$old\E\b/value$chart_id=$new/i; + } + $dbh->do("UPDATE namedqueries SET query = ? WHERE id = ?", + undef, $query, $id); + } + + $dbh->bz_commit_transaction(); +} + sub preload { my ($searches) = @_; my $dbh = Bugzilla->dbh; diff --git a/contrib/convert-workflow.pl b/contrib/convert-workflow.pl index 7525bac95..8a740fcb2 100755 --- a/contrib/convert-workflow.pl +++ b/contrib/convert-workflow.pl @@ -25,6 +25,7 @@ use lib qw(. lib); use Bugzilla; use Bugzilla::Config qw(:admin); +use Bugzilla::Search::Saved; use Bugzilla::Status; my $confirmed = new Bugzilla::Status({ name => 'CONFIRMED' }); @@ -79,7 +80,7 @@ foreach my $pair (@translation) { } foreach my $what (qw(added removed)) { - $dbh->do("UPDATE bugs_activity SET $what = ? + $dbh->do("UPDATE bugs_activity SET $what = ? WHERE fieldid = ? AND $what = ?", undef, $to, $status_field->id, $from); } @@ -99,6 +100,8 @@ foreach my $pair (@translation) { $dbh->do('UPDATE bug_status SET value = ? WHERE value = ?', undef, $to, $from); } + + Bugzilla::Search::Saved->rename_field_value('bug_status', $from, $to); } $dbh->bz_commit_transaction(); -- cgit v1.2.3-24-g4f1b