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 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'Bugzilla/Search') 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; -- cgit v1.2.3-24-g4f1b