From: mkanat%bugzilla.org <> Date: Thu, 19 Apr 2007 18:01:03 +0000 (+0000) Subject: Bug 377564: Indexes are not renamed when renaming tables X-Git-Tag: bugzilla-3.0~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8e434cd1e8b8341a34bde9dd4c15ce22a6d9c2f6;p=thirdparty%2Fbugzilla.git Bug 377564: Indexes are not renamed when renaming tables Patch By Max Kanat-Alexander r=LpSolit, a=mkanat --- diff --git a/Bugzilla/DB.pm b/Bugzilla/DB.pm index c903594ff8..4bfb3ae431 100644 --- a/Bugzilla/DB.pm +++ b/Bugzilla/DB.pm @@ -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 ##################################################################### diff --git a/Bugzilla/DB/Schema.pm b/Bugzilla/DB/Schema.pm index 69ac18f56d..ff81d9c626 100644 --- a/Bugzilla/DB/Schema.pm +++ b/Bugzilla/DB/Schema.pm @@ -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"); diff --git a/Bugzilla/Install/DB.pm b/Bugzilla/Install/DB.pm index 20a6e1f673..df8faa094d 100644 --- a/Bugzilla/Install/DB.pm +++ b/Bugzilla/Install/DB.pm @@ -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;