Commit 39595d63 authored by Dave Lawrence's avatar Dave Lawrence

Bug 824346 - The flaginclusions and flagexclusions DB tables have no UNIQUE index

r/a=LpSolit
parent 8d30313d
......@@ -638,8 +638,8 @@ use constant ABSTRACT_SCHEMA => {
DELETE => 'CASCADE'}},
],
INDEXES => [
flaginclusions_type_id_idx =>
[qw(type_id product_id component_id)],
flaginclusions_type_id_idx => { FIELDS => [qw(type_id product_id component_id)],
TYPE => 'UNIQUE' },
],
},
......@@ -659,8 +659,8 @@ use constant ABSTRACT_SCHEMA => {
DELETE => 'CASCADE'}},
],
INDEXES => [
flagexclusions_type_id_idx =>
[qw(type_id product_id component_id)],
flagexclusions_type_id_idx => { FIELDS => [qw(type_id product_id component_id)],
TYPE => 'UNIQUE' },
],
},
......
......@@ -703,6 +703,9 @@ sub update_table_definitions {
# 2012-12-23 LpSolit@gmail.com - Bug 824361
_fix_longdescs_indexes();
# 2013-02-04 dkl@mozilla.com - Bug 824346
_fix_flagclusions_indexes();
################################################################
# New --TABLE-- changes should go *** A B O V E *** this point #
################################################################
......@@ -3787,6 +3790,35 @@ sub _shorten_long_quips {
$dbh->bz_alter_column('quips', 'quip', { TYPE => 'varchar(512)', NOTNULL => 1});
}
sub _fix_flagclusions_indexes {
my $dbh = Bugzilla->dbh;
foreach my $table ('flaginclusions', 'flagexclusions') {
my $index = $table . '_type_id_idx';
my $idx_info = $dbh->bz_index_info($table, $index);
if ($idx_info && $idx_info->{'TYPE'} ne 'UNIQUE') {
# Remove duplicated entries
my $dupes = $dbh->selectall_arrayref("
SELECT type_id, product_id, component_id, COUNT(*) AS count
FROM $table " .
$dbh->sql_group_by('type_id, product_id, component_id') . "
HAVING COUNT(*) > 1",
{ Slice => {} });
say "Removing duplicated entries from the '$table' table..." if @$dupes;
foreach my $dupe (@$dupes) {
$dbh->do("DELETE FROM $table
WHERE type_id = ? AND product_id = ? AND component_id = ?",
undef, $dupe->{type_id}, $dupe->{product_id}, $dupe->{component_id});
$dbh->do("INSERT INTO $table (type_id, product_id, component_id) VALUES (?, ?, ?)",
undef, $dupe->{type_id}, $dupe->{product_id}, $dupe->{component_id});
}
$dbh->bz_drop_index($table, $index);
$dbh->bz_add_index($table, $index,
{ FIELDS => [qw(type_id product_id component_id)],
TYPE => 'UNIQUE' });
}
}
}
1;
__END__
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment