diff options
author | mkanat%bugzilla.org <> | 2006-09-04 04:15:58 +0200 |
---|---|---|
committer | mkanat%bugzilla.org <> | 2006-09-04 04:15:58 +0200 |
commit | 788beb08c05baf7aeb2556fe1355fe15a21e3f8f (patch) | |
tree | 81fe121f06f1f2669a1954e5619ef25c6664a3a0 | |
parent | f78548a7158311a0b261d774f53241e685941e49 (diff) | |
download | bugzilla-788beb08c05baf7aeb2556fe1355fe15a21e3f8f.tar.gz bugzilla-788beb08c05baf7aeb2556fe1355fe15a21e3f8f.tar.xz |
Bug 341091: checksetup breaks if there are duplicate versions for a product
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> (module owner) a=myk
-rw-r--r-- | Bugzilla/Install/DB.pm | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/Bugzilla/Install/DB.pm b/Bugzilla/Install/DB.pm index f649686e7..7887d9844 100644 --- a/Bugzilla/Install/DB.pm +++ b/Bugzilla/Install/DB.pm @@ -406,8 +406,7 @@ sub update_table_definitions { # 2005-04-28 - LpSolit@gmail.com - Bug 7233: add an index to versions $dbh->bz_alter_column('versions', 'value', {TYPE => 'varchar(64)', NOTNULL => 1}); - $dbh->bz_add_index('versions', 'versions_product_id_idx', - {TYPE => 'UNIQUE', FIELDS => [qw(product_id value)]}); + _add_versions_product_id_index(); if (!exists $dbh->bz_column_info('milestones', 'sortkey')->{DEFAULT}) { $dbh->bz_alter_column('milestones', 'sortkey', @@ -2298,6 +2297,32 @@ sub _change_all_mysql_booleans_to_tinyint { } } +# A helper for the below function. +sub _de_dup_version { + my ($product_id, $version) = @_; + my $dbh = Bugzilla->dbh; + print "Fixing duplicate version $version in product_id $product_id...\n"; + $dbh->do('DELETE FROM versions WHERE product_id = ? AND value = ?', + undef, $product_id, $version); + $dbh->do('INSERT INTO versions (product_id, value) VALUES (?,?)', + undef, $product_id, $version); +} + +sub _add_versions_product_id_index { + my $dbh = Bugzilla->dbh; + if (!$dbh->bz_index_info('versions', 'versions_product_id_idx')) { + my $dup_versions = $dbh->selectall_arrayref( + 'SELECT product_id, value FROM versions + GROUP BY product_id, value HAVING COUNT(value) > 1', {Slice=>{}}); + foreach my $dup_version (@$dup_versions) { + _de_dup_version($dup_version->{product_id}, $dup_version->{value}); + } + + $dbh->bz_add_index('versions', 'versions_product_id_idx', + {TYPE => 'UNIQUE', FIELDS => [qw(product_id value)]}); + } +} + sub _fix_whine_queries_title_and_op_sys_value { my $dbh = Bugzilla->dbh; if (!exists $dbh->bz_column_info('whine_queries', 'title')->{DEFAULT}) { |