Various small schema changes
parent
5548f1d0a1
commit
e1a6bb97af
|
@ -71,6 +71,12 @@ use constant ENUM_DEFAULTS => {
|
||||||
resolution => [qw(FIXED INVALID WONTFIX DUPLICATE WORKSFORME MOVED)],
|
resolution => [qw(FIXED INVALID WONTFIX DUPLICATE WORKSFORME MOVED)],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# On most databases, in order to drop an index, you have to first drop
|
||||||
|
# the foreign keys that use that index. However, on some databases,
|
||||||
|
# dropping the FK immediately before dropping the index causes problems
|
||||||
|
# and doesn't need to be done anyway, so those DBs set this to 0.
|
||||||
|
use constant INDEX_DROPS_REQUIRE_FK_DROPS => 1;
|
||||||
|
|
||||||
#####################################################################
|
#####################################################################
|
||||||
# Connection Methods
|
# Connection Methods
|
||||||
#####################################################################
|
#####################################################################
|
||||||
|
@ -818,26 +824,34 @@ sub bz_drop_fk {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sub bz_drop_related_fks {
|
sub bz_get_related_fks {
|
||||||
my ($self, $table, $column) = @_;
|
my ($self, $table, $column) = @_;
|
||||||
my @tables = $self->_bz_real_schema->get_table_list();
|
my @tables = $self->_bz_real_schema->get_table_list();
|
||||||
my @dropped;
|
my @related;
|
||||||
foreach my $check_table (@tables) {
|
foreach my $check_table (@tables) {
|
||||||
my @columns = $self->bz_table_columns($check_table);
|
my @columns = $self->bz_table_columns($check_table);
|
||||||
foreach my $check_column (@columns) {
|
foreach my $check_column (@columns) {
|
||||||
my $def = $self->bz_column_info($check_table, $check_column);
|
my $fk = $self->bz_fk_info($check_table, $check_column);
|
||||||
my $fk = $def->{REFERENCES};
|
|
||||||
if ($fk
|
if ($fk
|
||||||
and (($fk->{TABLE} eq $table and $fk->{COLUMN} eq $column)
|
and (($fk->{TABLE} eq $table and $fk->{COLUMN} eq $column)
|
||||||
or ($check_column eq $column and $check_table eq $table)))
|
or ($check_column eq $column and $check_table eq $table)))
|
||||||
{
|
{
|
||||||
$self->bz_drop_fk($check_table, $check_column);
|
push(@related, [$check_table, $check_column, $fk]);
|
||||||
push(@dropped, [$check_table, $check_column, $fk]);
|
|
||||||
}
|
}
|
||||||
} # foreach $column
|
} # foreach $column
|
||||||
} # foreach $table
|
} # foreach $table
|
||||||
|
|
||||||
return \@dropped;
|
return \@related;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub bz_drop_related_fks {
|
||||||
|
my $self = shift;
|
||||||
|
my $related = $self->bz_get_related_fks(@_);
|
||||||
|
foreach my $item (@$related) {
|
||||||
|
my ($table, $column) = @$item;
|
||||||
|
$self->bz_drop_fk($table, $column);
|
||||||
|
}
|
||||||
|
return $related;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub bz_drop_index {
|
sub bz_drop_index {
|
||||||
|
@ -846,6 +860,12 @@ sub bz_drop_index {
|
||||||
my $index_exists = $self->bz_index_info($table, $name);
|
my $index_exists = $self->bz_index_info($table, $name);
|
||||||
|
|
||||||
if ($index_exists) {
|
if ($index_exists) {
|
||||||
|
if ($self->INDEX_DROPS_REQUIRE_FK_DROPS) {
|
||||||
|
# We cannot delete an index used by a FK.
|
||||||
|
foreach my $column (@{$index_exists->{FIELDS}}) {
|
||||||
|
$self->bz_drop_related_fks($table, $column);
|
||||||
|
}
|
||||||
|
}
|
||||||
$self->bz_drop_index_raw($table, $name);
|
$self->bz_drop_index_raw($table, $name);
|
||||||
$self->_bz_real_schema->delete_index($table, $name);
|
$self->_bz_real_schema->delete_index($table, $name);
|
||||||
$self->_bz_store_real_schema;
|
$self->_bz_store_real_schema;
|
||||||
|
|
|
@ -238,7 +238,7 @@ use constant ABSTRACT_SCHEMA => {
|
||||||
FIELDS => [
|
FIELDS => [
|
||||||
bug_id => {TYPE => 'INTSERIAL', NOTNULL => 1, PRIMARYKEY => 1},
|
bug_id => {TYPE => 'INTSERIAL', NOTNULL => 1, PRIMARYKEY => 1},
|
||||||
assigned_to => {TYPE => 'INT4', NOTNULL => 1, REFERENCES => {TABLE => 'profiles', COLUMN => 'userid'}},
|
assigned_to => {TYPE => 'INT4', NOTNULL => 1, REFERENCES => {TABLE => 'profiles', COLUMN => 'userid'}},
|
||||||
bug_file_loc => {TYPE => 'MEDIUMTEXT'},
|
bug_file_loc => {TYPE => 'MEDIUMTEXT', NOTNULL => 1, DEFAULT => "''"},
|
||||||
bug_severity => {TYPE => 'INT4', REFERENCES => {TABLE => 'bug_severity', COLUMN => 'id'}},
|
bug_severity => {TYPE => 'INT4', REFERENCES => {TABLE => 'bug_severity', COLUMN => 'id'}},
|
||||||
bug_status => {TYPE => 'INT4', REFERENCES => {TABLE => 'bug_status', COLUMN => 'id'}},
|
bug_status => {TYPE => 'INT4', REFERENCES => {TABLE => 'bug_status', COLUMN => 'id'}},
|
||||||
creation_ts => {TYPE => 'DATETIME'},
|
creation_ts => {TYPE => 'DATETIME'},
|
||||||
|
@ -311,6 +311,7 @@ use constant ABSTRACT_SCHEMA => {
|
||||||
|
|
||||||
bugs_activity => {
|
bugs_activity => {
|
||||||
FIELDS => [
|
FIELDS => [
|
||||||
|
id => {TYPE => 'INTSERIAL', NOTNULL => 1, PRIMARYKEY => 1},
|
||||||
bug_id => {TYPE => 'INT4', NOTNULL => 1, REFERENCES => {TABLE => 'bugs', COLUMN => 'bug_id', DELETE => 'CASCADE'}},
|
bug_id => {TYPE => 'INT4', NOTNULL => 1, REFERENCES => {TABLE => 'bugs', COLUMN => 'bug_id', DELETE => 'CASCADE'}},
|
||||||
attach_id => {TYPE => 'INT4', REFERENCES => {TABLE => 'attachments', COLUMN => 'attach_id', DELETE => 'CASCADE'}},
|
attach_id => {TYPE => 'INT4', REFERENCES => {TABLE => 'attachments', COLUMN => 'attach_id', DELETE => 'CASCADE'}},
|
||||||
who => {TYPE => 'INT4', NOTNULL => 1, REFERENCES => {TABLE => 'profiles', COLUMN => 'userid'}},
|
who => {TYPE => 'INT4', NOTNULL => 1, REFERENCES => {TABLE => 'profiles', COLUMN => 'userid'}},
|
||||||
|
@ -325,6 +326,7 @@ use constant ABSTRACT_SCHEMA => {
|
||||||
bugs_activity_bug_when_idx => ['bug_when'],
|
bugs_activity_bug_when_idx => ['bug_when'],
|
||||||
bugs_activity_fieldid_idx => ['fieldid'],
|
bugs_activity_fieldid_idx => ['fieldid'],
|
||||||
bugs_activity_added_idx => ['added(255)'],
|
bugs_activity_added_idx => ['added(255)'],
|
||||||
|
bugs_activity_removed_idx => ['removed(255)'],
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -353,11 +355,11 @@ use constant ABSTRACT_SCHEMA => {
|
||||||
extra_data => {TYPE => 'varchar(255)'}
|
extra_data => {TYPE => 'varchar(255)'}
|
||||||
],
|
],
|
||||||
INDEXES => [
|
INDEXES => [
|
||||||
longdescs_bug_id_idx => ['bug_id'],
|
longdescs_bug_id_idx => [qw(bug_id work_time)],
|
||||||
longdescs_who_idx => [qw(who bug_id)],
|
longdescs_who_idx => [qw(who bug_id)],
|
||||||
longdescs_bug_when_idx => ['bug_when'],
|
longdescs_bug_when_idx => ['bug_when'],
|
||||||
# WTF this index was removed in 3.x?! CustIS Bug 53687
|
# WTF this index was removed in 3.x?! CustIS Bug 53687
|
||||||
longdescs_who_bug_when_idx => ['who', 'bug_when'],
|
longdescs_who_bug_when_idx => [qw(who bug_when)],
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -386,7 +388,7 @@ use constant ABSTRACT_SCHEMA => {
|
||||||
dependson => {TYPE => 'INT4', NOTNULL => 1, REFERENCES => {TABLE => 'bugs', COLUMN => 'bug_id', DELETE => 'CASCADE'}},
|
dependson => {TYPE => 'INT4', NOTNULL => 1, REFERENCES => {TABLE => 'bugs', COLUMN => 'bug_id', DELETE => 'CASCADE'}},
|
||||||
],
|
],
|
||||||
INDEXES => [
|
INDEXES => [
|
||||||
dependencies_blocked_idx => ['blocked'],
|
dependencies_blocked_idx => {FIELDS => [qw(blocked dependson)], TYPE => 'UNIQUE'},
|
||||||
dependencies_dependson_idx => ['dependson'],
|
dependencies_dependson_idx => ['dependson'],
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
@ -457,7 +459,7 @@ use constant ABSTRACT_SCHEMA => {
|
||||||
FIELDS => [
|
FIELDS => [
|
||||||
id => {TYPE => 'INTSERIAL', NOTNULL => 1, PRIMARYKEY => 1},
|
id => {TYPE => 'INTSERIAL', NOTNULL => 1, PRIMARYKEY => 1},
|
||||||
name => {TYPE => 'varchar(255)', NOTNULL => 1},
|
name => {TYPE => 'varchar(255)', NOTNULL => 1},
|
||||||
description => {TYPE => 'MEDIUMTEXT'},
|
description => {TYPE => 'MEDIUMTEXT', NOTNULL => 1},
|
||||||
],
|
],
|
||||||
INDEXES => [
|
INDEXES => [
|
||||||
keyworddefs_name_idx => {FIELDS => ['name'], TYPE => 'UNIQUE'},
|
keyworddefs_name_idx => {FIELDS => ['name'], TYPE => 'UNIQUE'},
|
||||||
|
@ -488,7 +490,7 @@ use constant ABSTRACT_SCHEMA => {
|
||||||
attach_id => {TYPE => 'INT4', REFERENCES => {TABLE => 'attachments', COLUMN => 'attach_id', DELETE => 'CASCADE'}},
|
attach_id => {TYPE => 'INT4', REFERENCES => {TABLE => 'attachments', COLUMN => 'attach_id', DELETE => 'CASCADE'}},
|
||||||
creation_date => {TYPE => 'DATETIME', NOTNULL => 1},
|
creation_date => {TYPE => 'DATETIME', NOTNULL => 1},
|
||||||
modification_date => {TYPE => 'DATETIME'},
|
modification_date => {TYPE => 'DATETIME'},
|
||||||
setter_id => {TYPE => 'INT4', REFERENCES => {TABLE => 'profiles', COLUMN => 'userid'}},
|
setter_id => {TYPE => 'INT4', NOTNULL => 1, REFERENCES => {TABLE => 'profiles', COLUMN => 'userid'}},
|
||||||
requestee_id => {TYPE => 'INT4', REFERENCES => {TABLE => 'profiles', COLUMN => 'userid'}},
|
requestee_id => {TYPE => 'INT4', REFERENCES => {TABLE => 'profiles', COLUMN => 'userid'}},
|
||||||
],
|
],
|
||||||
INDEXES => [
|
INDEXES => [
|
||||||
|
@ -528,8 +530,7 @@ use constant ABSTRACT_SCHEMA => {
|
||||||
component_id => {TYPE => 'INT4', REFERENCES => {TABLE => 'components', COLUMN => 'id', DELETE => 'CASCADE'}},
|
component_id => {TYPE => 'INT4', REFERENCES => {TABLE => 'components', COLUMN => 'id', DELETE => 'CASCADE'}},
|
||||||
],
|
],
|
||||||
INDEXES => [
|
INDEXES => [
|
||||||
flaginclusions_type_id_idx =>
|
flaginclusions_type_id_idx => {FIELDS => [qw(type_id product_id component_id)], TYPE => 'UNIQUE'},
|
||||||
[qw(type_id product_id component_id)],
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -540,8 +541,7 @@ use constant ABSTRACT_SCHEMA => {
|
||||||
component_id => {TYPE => 'INT4', REFERENCES => {TABLE => 'components', COLUMN => 'id', DELETE => 'CASCADE'}},
|
component_id => {TYPE => 'INT4', REFERENCES => {TABLE => 'components', COLUMN => 'id', DELETE => 'CASCADE'}},
|
||||||
],
|
],
|
||||||
INDEXES => [
|
INDEXES => [
|
||||||
flagexclusions_type_id_idx =>
|
flagexclusions_type_id_idx => {FIELDS => [qw(type_id product_id component_id)], TYPE => 'UNIQUE'},
|
||||||
[qw(type_id product_id component_id)],
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -719,6 +719,7 @@ use constant ABSTRACT_SCHEMA => {
|
||||||
|
|
||||||
profiles_activity => {
|
profiles_activity => {
|
||||||
FIELDS => [
|
FIELDS => [
|
||||||
|
id => {TYPE => 'INTSERIAL', NOTNULL => 1, PRIMARYKEY => 1},
|
||||||
userid => {TYPE => 'INT4', NOTNULL => 1, REFERENCES => {TABLE => 'profiles', COLUMN => 'userid', DELETE => 'CASCADE'}},
|
userid => {TYPE => 'INT4', NOTNULL => 1, REFERENCES => {TABLE => 'profiles', COLUMN => 'userid', DELETE => 'CASCADE'}},
|
||||||
who => {TYPE => 'INT4', NOTNULL => 1, REFERENCES => {TABLE => 'profiles', COLUMN => 'userid'}},
|
who => {TYPE => 'INT4', NOTNULL => 1, REFERENCES => {TABLE => 'profiles', COLUMN => 'userid'}},
|
||||||
profiles_when => {TYPE => 'DATETIME', NOTNULL => 1},
|
profiles_when => {TYPE => 'DATETIME', NOTNULL => 1},
|
||||||
|
@ -914,8 +915,8 @@ use constant ABSTRACT_SCHEMA => {
|
||||||
group_id => {TYPE => 'INT4', NOTNULL => 1, REFERENCES => {TABLE => 'groups', COLUMN => 'id', DELETE => 'CASCADE'}},
|
group_id => {TYPE => 'INT4', NOTNULL => 1, REFERENCES => {TABLE => 'groups', COLUMN => 'id', DELETE => 'CASCADE'}},
|
||||||
product_id => {TYPE => 'INT4', NOTNULL => 1, REFERENCES => {TABLE => 'products', COLUMN => 'id', DELETE => 'CASCADE'}},
|
product_id => {TYPE => 'INT4', NOTNULL => 1, REFERENCES => {TABLE => 'products', COLUMN => 'id', DELETE => 'CASCADE'}},
|
||||||
entry => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'},
|
entry => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'},
|
||||||
membercontrol => {TYPE => 'BOOLEAN', NOTNULL => 1},
|
membercontrol => {TYPE => 'INT1', NOTNULL => 1, DEFAULT => CONTROLMAPNA},
|
||||||
othercontrol => {TYPE => 'BOOLEAN', NOTNULL => 1},
|
othercontrol => {TYPE => 'INT1', NOTNULL => 1, DEFAULT => CONTROLMAPNA},
|
||||||
canedit => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'},
|
canedit => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'},
|
||||||
editcomponents => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'},
|
editcomponents => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'},
|
||||||
editbugs => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'},
|
editbugs => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'},
|
||||||
|
@ -1035,7 +1036,7 @@ use constant ABSTRACT_SCHEMA => {
|
||||||
id => {TYPE => 'INTSERIAL', NOTNULL => 1, PRIMARYKEY => 1},
|
id => {TYPE => 'INTSERIAL', NOTNULL => 1, PRIMARYKEY => 1},
|
||||||
name => {TYPE => 'varchar(255)', NOTNULL => 1},
|
name => {TYPE => 'varchar(255)', NOTNULL => 1},
|
||||||
classification_id => {TYPE => 'INT4', NOTNULL => 1, DEFAULT => '1', REFERENCES => {TABLE => 'classifications', COLUMN => 'id', DELETE => 'CASCADE'}},
|
classification_id => {TYPE => 'INT4', NOTNULL => 1, DEFAULT => '1', REFERENCES => {TABLE => 'classifications', COLUMN => 'id', DELETE => 'CASCADE'}},
|
||||||
description => {TYPE => 'MEDIUMTEXT'},
|
description => {TYPE => 'MEDIUMTEXT', NOTNULL => 1},
|
||||||
isactive => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 1},
|
isactive => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 1},
|
||||||
votesperuser => {TYPE => 'INT2', NOTNULL => 1, DEFAULT => 0},
|
votesperuser => {TYPE => 'INT2', NOTNULL => 1, DEFAULT => 0},
|
||||||
maxvotesperbug => {TYPE => 'INT2', NOTNULL => 1, DEFAULT => '10000'},
|
maxvotesperbug => {TYPE => 'INT2', NOTNULL => 1, DEFAULT => '10000'},
|
||||||
|
@ -1089,7 +1090,8 @@ use constant ABSTRACT_SCHEMA => {
|
||||||
is_public => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'},
|
is_public => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'},
|
||||||
],
|
],
|
||||||
INDEXES => [
|
INDEXES => [
|
||||||
series_creator_idx => {FIELDS => [qw(creator category subcategory name)], TYPE => 'UNIQUE'},
|
series_creator_idx => ['creator'],
|
||||||
|
series_category_idx => {FIELDS => [qw(category subcategory name)], TYPE => 'UNIQUE'},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
@ -598,10 +598,24 @@ sub update_table_definitions
|
||||||
# 2010-04-07 LpSolit@gmail.com - Bug 69621
|
# 2010-04-07 LpSolit@gmail.com - Bug 69621
|
||||||
$dbh->bz_drop_column('bugs', 'keywords');
|
$dbh->bz_drop_column('bugs', 'keywords');
|
||||||
|
|
||||||
|
# 2010-05-07 ewong@pw-wspx.org - Bug 463945
|
||||||
|
$dbh->bz_alter_column('group_control_map', 'membercontrol',
|
||||||
|
{TYPE => 'INT1', NOTNULL => 1, DEFAULT => CONTROLMAPNA});
|
||||||
|
$dbh->bz_alter_column('group_control_map', 'othercontrol',
|
||||||
|
{TYPE => 'INT1', NOTNULL => 1, DEFAULT => CONTROLMAPNA});
|
||||||
|
|
||||||
# Add NOT NULL to some columns that need it, and DEFAULT to
|
# Add NOT NULL to some columns that need it, and DEFAULT to
|
||||||
# attachments.ispatch.
|
# attachments.ispatch.
|
||||||
$dbh->bz_alter_column('attachments', 'ispatch',
|
$dbh->bz_alter_column('attachments', 'ispatch',
|
||||||
{ TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'});
|
{ TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE'});
|
||||||
|
$dbh->bz_alter_column('keyworddefs', 'description',
|
||||||
|
{ TYPE => 'MEDIUMTEXT', NOTNULL => 1 }, '');
|
||||||
|
$dbh->bz_alter_column('products', 'description',
|
||||||
|
{ TYPE => 'MEDIUMTEXT', NOTNULL => 1 }, '');
|
||||||
|
|
||||||
|
# Revert 4.4 allows_unconfirmed default value change
|
||||||
|
$dbh->bz_alter_column('products', 'allows_unconfirmed',
|
||||||
|
{ TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'FALSE' });
|
||||||
|
|
||||||
# 2010-07-18 LpSolit@gmail.com - Bug 119703
|
# 2010-07-18 LpSolit@gmail.com - Bug 119703
|
||||||
_remove_attachment_isurl();
|
_remove_attachment_isurl();
|
||||||
|
@ -609,12 +623,39 @@ sub update_table_definitions
|
||||||
# 2009-05-07 ghendricks@novell.com - Bug 77193
|
# 2009-05-07 ghendricks@novell.com - Bug 77193
|
||||||
_add_isactive_to_product_fields();
|
_add_isactive_to_product_fields();
|
||||||
|
|
||||||
|
# 2010-10-09 LpSolit@gmail.com - Bug 505165
|
||||||
|
$dbh->bz_alter_column('flags', 'setter_id', {TYPE => 'INT4', NOTNULL => 1});
|
||||||
|
|
||||||
|
# 2010-10-09 LpSolit@gmail.com - Bug 451735
|
||||||
|
_fix_series_indexes();
|
||||||
|
|
||||||
# 2011-06-15 dkl@mozilla.com - Bug 658929
|
# 2011-06-15 dkl@mozilla.com - Bug 658929
|
||||||
_migrate_disabledtext_boolean();
|
_migrate_disabledtext_boolean();
|
||||||
|
|
||||||
# 2011-11-01 glob@mozilla.com - Bug 240437
|
# 2011-11-01 glob@mozilla.com - Bug 240437
|
||||||
$dbh->bz_add_column('profiles', 'last_seen_date', {TYPE => 'DATETIME'});
|
$dbh->bz_add_column('profiles', 'last_seen_date', {TYPE => 'DATETIME'});
|
||||||
|
|
||||||
|
# 2011-11-28 dkl@mozilla.com - Bug 685611
|
||||||
|
_fix_notnull_defaults();
|
||||||
|
|
||||||
|
# 2012-06-13 dkl@mozilla.com - Bug 764457
|
||||||
|
$dbh->bz_add_column('bugs_activity', 'id', {TYPE => 'INTSERIAL', NOTNULL => 1, PRIMARYKEY => 1});
|
||||||
|
|
||||||
|
# 2012-06-13 dkl@mozilla.com - Bug 764466
|
||||||
|
$dbh->bz_add_column('profiles_activity', 'id', {TYPE => 'INTSERIAL', NOTNULL => 1, PRIMARYKEY => 1});
|
||||||
|
|
||||||
|
# 2012-07-24 dkl@mozilla.com - Bug 776972
|
||||||
|
$dbh->bz_alter_column('bugs_activity', 'id', {TYPE => 'INTSERIAL', NOTNULL => 1, PRIMARYKEY => 1});
|
||||||
|
|
||||||
|
# 2012-08-02 dkl@mozilla.com - Bug 756953
|
||||||
|
_fix_dependencies_dupes();
|
||||||
|
|
||||||
|
# 2013-01-02 LpSolit@gmail.com - Bug 824361
|
||||||
|
_fix_longdescs_indexes();
|
||||||
|
|
||||||
|
# 2013-02-04 dkl@mozilla.com - Bug 824346
|
||||||
|
_fix_flagclusions_indexes();
|
||||||
|
|
||||||
# New product fields
|
# New product fields
|
||||||
$dbh->bz_add_column('products', wiki_url => {TYPE => 'varchar(255)', NOTNULL => 1, DEFAULT => "''"});
|
$dbh->bz_add_column('products', wiki_url => {TYPE => 'varchar(255)', NOTNULL => 1, DEFAULT => "''"});
|
||||||
$dbh->bz_add_column('products', notimetracking => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 0});
|
$dbh->bz_add_column('products', notimetracking => {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 0});
|
||||||
|
@ -680,6 +721,7 @@ WHERE description LIKE\'%[CC:%\'');
|
||||||
if ($dbh->bz_column_info(bugs_activity => 'added')->{TYPE} ne 'LONGTEXT')
|
if ($dbh->bz_column_info(bugs_activity => 'added')->{TYPE} ne 'LONGTEXT')
|
||||||
{
|
{
|
||||||
$dbh->bz_drop_index('bugs_activity', 'bugs_activity_added_idx');
|
$dbh->bz_drop_index('bugs_activity', 'bugs_activity_added_idx');
|
||||||
|
$dbh->bz_drop_index('bugs_activity', 'bugs_activity_removed_idx');
|
||||||
$dbh->bz_alter_column('bugs_activity', 'added', { TYPE => 'LONGTEXT' });
|
$dbh->bz_alter_column('bugs_activity', 'added', { TYPE => 'LONGTEXT' });
|
||||||
$dbh->bz_alter_column('bugs_activity', 'removed', { TYPE => 'LONGTEXT' });
|
$dbh->bz_alter_column('bugs_activity', 'removed', { TYPE => 'LONGTEXT' });
|
||||||
$dbh->bz_add_index('bugs_activity', 'bugs_activity_added_idx', ['added(255)']);
|
$dbh->bz_add_index('bugs_activity', 'bugs_activity_added_idx', ['added(255)']);
|
||||||
|
@ -699,6 +741,9 @@ WHERE description LIKE\'%[CC:%\'');
|
||||||
$dbh->do('DROP TABLE bugs_activity_joined');
|
$dbh->do('DROP TABLE bugs_activity_joined');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# 2012-06-06 dkl@mozilla.com - Bug 762288
|
||||||
|
$dbh->bz_add_index('bugs_activity', 'bugs_activity_removed_idx', ['removed(255)']);
|
||||||
|
|
||||||
# Change types of all ID fields to INT4
|
# Change types of all ID fields to INT4
|
||||||
if ($dbh->bz_column_info('bugs', 'bug_id')->{TYPE} ne 'INTSERIAL')
|
if ($dbh->bz_column_info('bugs', 'bug_id')->{TYPE} ne 'INTSERIAL')
|
||||||
{
|
{
|
||||||
|
@ -747,6 +792,9 @@ WHERE description LIKE\'%[CC:%\'');
|
||||||
# Varchar is VARIABLE, it's generally pointless to set a size limit less than 255 chars for it
|
# Varchar is VARIABLE, it's generally pointless to set a size limit less than 255 chars for it
|
||||||
_set_varchar_255();
|
_set_varchar_255();
|
||||||
|
|
||||||
|
# Revert 4.4 quips.quip varchar(512) change
|
||||||
|
$dbh->bz_alter_column('quips', 'quip', { TYPE => 'MEDIUMTEXT', NOTNULL => 1 });
|
||||||
|
|
||||||
################################################################
|
################################################################
|
||||||
# New --TABLE-- changes should go *** A B O V E *** this point #
|
# New --TABLE-- changes should go *** A B O V E *** this point #
|
||||||
################################################################
|
################################################################
|
||||||
|
@ -3684,6 +3732,118 @@ sub _migrate_disabledtext_boolean {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub _fix_series_indexes {
|
||||||
|
my $dbh = Bugzilla->dbh;
|
||||||
|
return if $dbh->bz_index_info('series', 'series_category_idx');
|
||||||
|
|
||||||
|
$dbh->bz_drop_index('series', 'series_creator_idx');
|
||||||
|
|
||||||
|
# Fix duplicated names under the same category/subcategory before
|
||||||
|
# adding the more restrictive index.
|
||||||
|
my $duplicated_series = $dbh->selectall_arrayref(
|
||||||
|
'SELECT s1.series_id, s1.category, s1.subcategory, s1.name
|
||||||
|
FROM series AS s1
|
||||||
|
INNER JOIN series AS s2
|
||||||
|
ON s1.category = s2.category
|
||||||
|
AND s1.subcategory = s2.subcategory
|
||||||
|
AND s1.name = s2.name
|
||||||
|
WHERE s1.series_id != s2.series_id');
|
||||||
|
my $sth_series_update = $dbh->prepare('UPDATE series SET name = ? WHERE series_id = ?');
|
||||||
|
my $sth_series_query = $dbh->prepare('SELECT 1 FROM series WHERE name = ?
|
||||||
|
AND category = ? AND subcategory = ?');
|
||||||
|
|
||||||
|
my %renamed_series;
|
||||||
|
foreach my $series (@$duplicated_series) {
|
||||||
|
my ($series_id, $category, $subcategory, $name) = @$series;
|
||||||
|
# Leave the first series alone, then rename duplicated ones.
|
||||||
|
if ($renamed_series{"${category}_${subcategory}_${name}"}++) {
|
||||||
|
print "Renaming series ${category}/${subcategory}/${name}...\n";
|
||||||
|
my $c = 0;
|
||||||
|
my $exists = 1;
|
||||||
|
while ($exists) {
|
||||||
|
$sth_series_query->execute($name . ++$c, $category, $subcategory);
|
||||||
|
$exists = $sth_series_query->fetchrow_array;
|
||||||
|
}
|
||||||
|
$sth_series_update->execute($name . $c, $series_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$dbh->bz_add_index('series', 'series_creator_idx', ['creator']);
|
||||||
|
$dbh->bz_add_index('series', 'series_category_idx',
|
||||||
|
{FIELDS => [qw(category subcategory name)], TYPE => 'UNIQUE'});
|
||||||
|
}
|
||||||
|
|
||||||
|
sub _fix_notnull_defaults {
|
||||||
|
my $dbh = Bugzilla->dbh;
|
||||||
|
|
||||||
|
$dbh->bz_alter_column('bugs', 'bug_file_loc',
|
||||||
|
{TYPE => 'MEDIUMTEXT', NOTNULL => 1,
|
||||||
|
DEFAULT => "''"}, '');
|
||||||
|
}
|
||||||
|
|
||||||
|
sub _fix_longdescs_indexes {
|
||||||
|
my $dbh = Bugzilla->dbh;
|
||||||
|
my $bug_id_idx = $dbh->bz_index_info('longdescs', 'longdescs_bug_id_idx');
|
||||||
|
if ($bug_id_idx && scalar @{$bug_id_idx->{'FIELDS'}} < 2) {
|
||||||
|
$dbh->bz_drop_index('longdescs', 'longdescs_bug_id_idx');
|
||||||
|
$dbh->bz_add_index('longdescs', 'longdescs_bug_id_idx', [qw(bug_id work_time)]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub _fix_dependencies_dupes {
|
||||||
|
my $dbh = Bugzilla->dbh;
|
||||||
|
my $blocked_idx = $dbh->bz_index_info('dependencies', 'dependencies_blocked_idx');
|
||||||
|
if ($blocked_idx && scalar @{$blocked_idx->{'FIELDS'}} < 2) {
|
||||||
|
# Remove duplicated entries
|
||||||
|
my $dupes = $dbh->selectall_arrayref("
|
||||||
|
SELECT blocked, dependson, COUNT(*) AS count
|
||||||
|
FROM dependencies " .
|
||||||
|
$dbh->sql_group_by('blocked, dependson') . "
|
||||||
|
HAVING COUNT(*) > 1",
|
||||||
|
{ Slice => {} });
|
||||||
|
print "Removing duplicated entries from the 'dependencies' table...\n" if @$dupes;
|
||||||
|
foreach my $dupe (@$dupes) {
|
||||||
|
$dbh->do("DELETE FROM dependencies
|
||||||
|
WHERE blocked = ? AND dependson = ?",
|
||||||
|
undef, $dupe->{blocked}, $dupe->{dependson});
|
||||||
|
$dbh->do("INSERT INTO dependencies (blocked, dependson) VALUES (?, ?)",
|
||||||
|
undef, $dupe->{blocked}, $dupe->{dependson});
|
||||||
|
}
|
||||||
|
$dbh->bz_drop_index('dependencies', 'dependencies_blocked_idx');
|
||||||
|
$dbh->bz_add_index('dependencies', 'dependencies_blocked_idx',
|
||||||
|
{ FIELDS => [qw(blocked dependson)], TYPE => 'UNIQUE' });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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 => {} });
|
||||||
|
print "Removing duplicated entries from the '$table' table...\n" 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' });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
# Fill 'fieldvaluecontrol' table when upgrading a stock Bugzilla installation
|
# Fill 'fieldvaluecontrol' table when upgrading a stock Bugzilla installation
|
||||||
sub _make_fieldvaluecontrol
|
sub _make_fieldvaluecontrol
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue