summaryrefslogtreecommitdiffstats
path: root/Bugzilla/Install
diff options
context:
space:
mode:
authormkanat%bugzilla.org <>2007-03-11 01:21:19 +0100
committermkanat%bugzilla.org <>2007-03-11 01:21:19 +0100
commit40a199771b751ebf7378efe32a68584ad7570ee7 (patch)
treefd2dbdbdbb782cd3cb5fa3bd4e09dd5be9fa3c09 /Bugzilla/Install
parent2884cd8606668e3174617cecf159e9e2bd128edd (diff)
downloadbugzilla-40a199771b751ebf7378efe32a68584ad7570ee7.tar.gz
bugzilla-40a199771b751ebf7378efe32a68584ad7570ee7.tar.xz
Bug 373442: Add referential integrity against the profiles table in some more simple places
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> (module owner) a=mkanat
Diffstat (limited to 'Bugzilla/Install')
-rw-r--r--Bugzilla/Install/DB.pm53
1 files changed, 4 insertions, 49 deletions
diff --git a/Bugzilla/Install/DB.pm b/Bugzilla/Install/DB.pm
index 5e6401828..6ddca06bd 100644
--- a/Bugzilla/Install/DB.pm
+++ b/Bugzilla/Install/DB.pm
@@ -49,39 +49,6 @@ sub indicate_progress {
}
}
-# This is used before adding a foreign key to a column, to make sure
-# that the database won't fail adding the key.
-sub check_references {
- my ($table, $column, $foreign_table, $foreign_column) = @_;
- my $dbh = Bugzilla->dbh;
-
- my $bad_values = $dbh->selectcol_arrayref(
- "SELECT DISTINCT $table.$column
- FROM $table LEFT JOIN $foreign_table
- ON $table.$column = $foreign_table.$foreign_column
- WHERE $foreign_table.$foreign_column IS NULL");
-
- if (@$bad_values) {
- my $values = join(', ', @$bad_values);
- print <<EOT;
-
-ERROR: There are invalid values for the $column column in the $table
-table. (These values do not exist in the $foreign_table table, in the
-$foreign_column column.)
-
-Before continuing with checksetup, you will need to fix these values,
-either by deleting these rows from the database, or changing the values
-of $column in $table to point to valid values in $foreign_table.$foreign_column.
-
-The bad values from the $table.$column column are:
-$values
-
-EOT
- # I just picked a number above 2, to be considered "abnormal exit."
- exit 3;
- }
-}
-
# NOTE: This is NOT the function for general table updates. See
# update_table_definitions for that. This is only for the fielddefs table.
sub update_fielddefs_definition {
@@ -413,9 +380,9 @@ sub update_table_definitions {
if ($dbh->bz_column_info('components', 'initialqacontact')->{NOTNULL}) {
$dbh->bz_alter_column('components', 'initialqacontact',
{TYPE => 'INT3'});
- $dbh->do("UPDATE components SET initialqacontact = NULL " .
- "WHERE initialqacontact = 0");
}
+ $dbh->do("UPDATE components SET initialqacontact = NULL " .
+ "WHERE initialqacontact = 0");
_migrate_email_prefs_to_new_table();
_initialize_dependency_tree_changes_email_pref();
@@ -552,25 +519,13 @@ sub update_table_definitions {
$dbh->bz_add_column('milestones', 'id',
{TYPE => 'MEDIUMSERIAL', NOTNULL => 1, PRIMARYKEY => 1});
- # Referential Integrity begins here
- check_references('profiles_activity', 'userid', 'profiles', 'userid');
- $dbh->bz_alter_column('profiles_activity', 'userid',
- {TYPE => 'INT3', NOTNULL => 1, REFERENCES =>
- {TABLE => 'profiles', COLUMN => 'userid', DELETE => 'CASCADE'}});
- check_references('profiles_activity', 'who', 'profiles', 'userid');
- $dbh->bz_alter_column('profiles_activity', 'who',
- {TYPE => 'INT3', NOTNULL => 1, REFERENCES =>
- {TABLE => 'profiles', COLUMN => 'userid'}});
- check_references('profiles_activity', 'fieldid', 'fielddefs', 'id');
- $dbh->bz_alter_column('profiles_activity', 'fieldid',
- {TYPE => 'INT3', NOTNULL => 1, REFERENCES =>
- {TABLE => 'fielddefs', COLUMN => 'id'}});
-
################################################################
# New --TABLE-- changes should go *** A B O V E *** this point #
################################################################
Bugzilla::Hook::process('install-update_db');
+
+ $dbh->bz_setup_foreign_keys();
}
# Subroutines should be ordered in the order that they are called.