]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 429804: Add Foreign Keys to Multiselect fields
authormkanat%bugzilla.org <>
Sun, 29 Jun 2008 00:17:47 +0000 (00:17 +0000)
committermkanat%bugzilla.org <>
Sun, 29 Jun 2008 00:17:47 +0000 (00:17 +0000)
Patch By Alex Eiser <aeiser@arc.nasa.gov> r=mkanat, a=mkanat

Bugzilla/DB.pm
Bugzilla/DB/Schema.pm
Bugzilla/Install/DB.pm

index 2eba30482834e60f39c23179fb114f9b0ec5d056..9d4f41546b5f72abec7c16c114b45cabf200d9db 100644 (file)
@@ -674,11 +674,17 @@ sub bz_add_field_tables {
     
     $self->_bz_add_field_table($field->name,
                                 $self->_bz_schema->FIELD_TABLE_SCHEMA);
-    if ( $field->type == FIELD_TYPE_MULTI_SELECT ) {
-        $self->_bz_add_field_table('bug_' . $field->name,
-                $self->_bz_schema->MULTI_SELECT_VALUE_TABLE);
+    if ($field->type == FIELD_TYPE_MULTI_SELECT) {
+        my $ms_table = "bug_" . $field->name;
+        $self->_bz_add_field_table($ms_table,
+            $self->_bz_schema->MULTI_SELECT_VALUE_TABLE);
+
+        $self->bz_add_fk($ms_table, 'bug_id', {TABLE => 'bugs',
+                                               COLUMN => 'bug_id',
+                                               DELETE => 'CASCADE'});
+        $self->bz_add_fk($ms_table, 'value',  {TABLE  => $field->name,
+                                               COLUMN => 'value'});
     }
-
 }
 
 sub bz_drop_field_tables {
index 4cfb62eb4871a249507c605e390106c3e0445bcc..06a956222c8882b0e71e48f5b5c260d663264f6d 100644 (file)
@@ -1401,6 +1401,7 @@ use constant FIELD_TABLE_SCHEMA => {
     ],
 };
 
+# Foreign Keys are added in Bugzilla::DB::bz_add_field_tables
 use constant MULTI_SELECT_VALUE_TABLE => {
     FIELDS => [
         bug_id => {TYPE => 'INT3', NOTNULL => 1},
index d1f1aadb5c1d1c960a67ed47dd5f7049ec3f53a0..54dbfc5644947d4f11a6b0cfffd613343e86e509 100644 (file)
@@ -526,6 +526,9 @@ sub update_table_definitions {
     $dbh->bz_alter_column('series', 'query',
         { TYPE => 'MEDIUMTEXT', NOTNULL => 1 });
 
+    # Add FK to multi select field tables
+    _add_foreign_keys_to_multiselects();
+    
     ################################################################
     # New --TABLE-- changes should go *** A B O V E *** this point #
     ################################################################
@@ -2993,6 +2996,25 @@ sub _check_content_length {
     }
 }
 
+sub _add_foreign_keys_to_multiselects {
+    my $dbh = Bugzilla->dbh;
+
+    my $names = $dbh->selectcol_arrayref(
+        'SELECT name 
+           FROM fielddefs 
+          WHERE type = ' . FIELD_TYPE_MULTI_SELECT);
+
+    foreach my $name (@$names) {
+        $dbh->bz_add_fk("bug_$name", "bug_id", {TABLE  => 'bugs',
+                                                COLUMN => 'bug_id',
+                                                DELETE => 'CASCADE',});
+                                                
+        $dbh->bz_add_fk("bug_$name", "value", {TABLE  => $name,
+                                               COLUMN => 'value',
+                                               DELETE => 'RESTRICT',});
+    }
+}
+
 sub _populate_bugs_fulltext {
     my $dbh = Bugzilla->dbh;
     my $fulltext = $dbh->selectrow_array('SELECT 1 FROM bugs_fulltext '