diff options
author | lpsolit%gmail.com <> | 2009-11-23 23:46:47 +0100 |
---|---|---|
committer | lpsolit%gmail.com <> | 2009-11-23 23:46:47 +0100 |
commit | 2296f779df4debf3d7aa3fc1f2b648e2c929e061 (patch) | |
tree | a51eee2ae9d333d45da82909ebfea820d6128874 /Bugzilla | |
parent | 717b3b5c982957c28275b0c177ed56536b93303c (diff) | |
download | bugzilla-2296f779df4debf3d7aa3fc1f2b648e2c929e061.tar.gz bugzilla-2296f779df4debf3d7aa3fc1f2b648e2c929e061.tar.xz |
Bug 451716: Deleting a product does not remove its entries from the 'Series' table - Patch by Frédéric Buclin <LpSolit@gmail.com> r=gerv a=LpSolit
Diffstat (limited to 'Bugzilla')
-rw-r--r-- | Bugzilla/Product.pm | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/Bugzilla/Product.pm b/Bugzilla/Product.pm index 7feaa4862..d6eeab123 100644 --- a/Bugzilla/Product.pm +++ b/Bugzilla/Product.pm @@ -376,7 +376,7 @@ sub update { } sub remove_from_db { - my $self = shift; + my ($self, $params) = @_; my $user = Bugzilla->user; my $dbh = Bugzilla->dbh; @@ -399,8 +399,31 @@ sub remove_from_db { } } - # XXX - This line can go away as soon as bug 427455 is fixed. - $dbh->do("DELETE FROM group_control_map WHERE product_id = ?", undef, $self->id); + if ($params->{delete_series}) { + my $series_ids = + $dbh->selectcol_arrayref('SELECT series_id + FROM series + INNER JOIN series_categories + ON series_categories.id = series.category + WHERE series_categories.name = ?', + undef, $self->name); + + $dbh->do('DELETE FROM series WHERE ' . $dbh->sql_in('series_id', $series_ids)); + + # If no subcategory uses this product name, completely purge it. + my $in_use = + $dbh->selectrow_array('SELECT 1 + FROM series + INNER JOIN series_categories + ON series_categories.id = series.subcategory + WHERE series_categories.name = ? ' . + $dbh->sql_limit(1), + undef, $self->name); + if (!$in_use) { + $dbh->do('DELETE FROM series_categories WHERE name = ?', undef, $self->name); + } + } + $dbh->do("DELETE FROM products WHERE id = ?", undef, $self->id); $dbh->bz_commit_transaction(); |