]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 460421: [Oracle] Adding custom fields with type FIELD_TYPE_MULTI_SELECT requires...
authormkanat%bugzilla.org <>
Wed, 5 Nov 2008 23:27:11 +0000 (23:27 +0000)
committermkanat%bugzilla.org <>
Wed, 5 Nov 2008 23:27:11 +0000 (23:27 +0000)
Patch By Xiaoou Wu <xiaoou.wu@oracle.com> r=mkanat, a=mkanat

Bugzilla/DB.pm
Bugzilla/DB/Oracle.pm

index cc4ddb9aa71382f42250f4099583f392ae2a0024..ff3ea0d4c72b1117bd0295c5145f45ff63c3211b 100644 (file)
@@ -684,7 +684,7 @@ sub bz_add_field_tables {
     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_schema->MULTI_SELECT_VALUE_TABLE, $field->type);
 
         $self->bz_add_fk($ms_table, 'bug_id', {TABLE => 'bugs',
                                                COLUMN => 'bug_id',
index c8195d4a7b2174e2e439e0f9c0fb58433f169d14..854b72a436e170337e63060accb87ff76517f074 100644 (file)
@@ -208,6 +208,15 @@ sub sql_in {
     return "( " . join(" OR ", @in_str) . " )";
 }
 
+sub _bz_add_field_table {
+    my ($self, $name, $schema_ref, $type) = @_;
+    $self->SUPER::_bz_add_field_table($name, $schema_ref);
+    if (defined($type) && $type == FIELD_TYPE_MULTI_SELECT) {
+        my $uk_name = "UK_" . $self->_bz_schema->_hash_identifier($name . '_value');
+        $self->do("ALTER TABLE $name ADD CONSTRAINT $uk_name UNIQUE(value)");
+    }
+}
+
 sub bz_drop_table {
      my ($self, $name) = @_;
      my $table_exists = $self->bz_table_info($name);