]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 377564: Indexes are not renamed when renaming tables
authormkanat%bugzilla.org <>
Thu, 19 Apr 2007 18:01:03 +0000 (18:01 +0000)
committermkanat%bugzilla.org <>
Thu, 19 Apr 2007 18:01:03 +0000 (18:01 +0000)
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=mkanat

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

index c903594ff8b8887596348536f0b81b2bad6a42a7..4bfb3ae431cbfdc49f3f6ceeac600c70ec5b5b82 100644 (file)
@@ -791,6 +791,17 @@ sub bz_table_columns {
     return $self->_bz_real_schema->get_table_columns($table);
 }
 
+sub bz_table_indexes {
+    my ($self, $table) = @_;
+    my $indexes = $self->_bz_real_schema->get_table_indexes_abstract($table);
+    my %return_indexes;
+    # We do this so that they're always hashes.
+    foreach my $name (keys %$indexes) {
+        $return_indexes{$name} = $self->bz_index_info($table, $name);
+    }
+    return \%return_indexes;
+}
+
 #####################################################################
 # Protected "Real Database" Schema Information Methods
 #####################################################################
index 69ac18f56d89d76b22eebe8a573f092d18d1a1f6..ff81d9c6268283ce99bd49017648058665728744 100644 (file)
@@ -1403,6 +1403,13 @@ sub get_table_columns {
 
 } #eosub--get_table_columns
 
+sub get_table_indexes_abstract {
+    my ($self, $table) = @_;
+    my $table_def = $self->get_table_abstract($table);
+    my %indexes = @{$table_def->{INDEXES} || []};
+    return \%indexes;
+}
+
 sub get_create_database_sql {
     my ($self, $name) = @_;
     return ("CREATE DATABASE $name");
index 20a6e1f673248c7423332967968c1f12362acb41..df8faa094de8b4788495f33b4bd0f9dd71121673 100644 (file)
@@ -520,6 +520,7 @@ sub update_table_definitions {
         {TYPE => 'MEDIUMSERIAL', NOTNULL => 1, PRIMARYKEY => 1});
 
     _fix_uppercase_custom_field_names();
+    _fix_uppercase_index_names();
 
     ################################################################
     # New --TABLE-- changes should go *** A B O V E *** this point #
@@ -2760,7 +2761,28 @@ sub _fix_uppercase_custom_field_names {
                      undef, lc($name), $name);
         }
     }
-    
+}
+
+sub _fix_uppercase_index_names {
+    # We forgot to fix indexes in the above code.
+    my $dbh = Bugzilla->dbh;
+    my $fields = $dbh->selectcol_arrayref(
+        'SELECT name FROM fielddefs WHERE type = ? AND custom = 1',
+        undef, FIELD_TYPE_SINGLE_SELECT);
+    foreach my $field (@$fields) {
+        my $indexes = $dbh->bz_table_indexes($field);
+        foreach my $name (keys %$indexes) {
+            next if $name eq lc($name);
+            my $index = $indexes->{$name};
+            # Lowercase the name and everything in the definition.
+            my $new_name   = lc($name);
+            my @new_fields = map {lc($_)} @{$index->{FIELDS}};
+            my $new_def = {FIELDS => \@new_fields, TYPE => $index->{TYPE}};
+            $new_def = \@new_fields if !$index->{TYPE};
+            $dbh->bz_drop_index($field, $name);
+            $dbh->bz_add_index($field, $new_name, $new_def);
+        }
+    }
 }
 
 1;