summaryrefslogtreecommitdiffstats
path: root/Bugzilla
diff options
context:
space:
mode:
authormkanat%bugzilla.org <>2007-04-19 19:59:37 +0200
committermkanat%bugzilla.org <>2007-04-19 19:59:37 +0200
commitd4e9172ad5f59d882ff372aff2cadd2c8c7f1ed3 (patch)
tree0ea78337de4f174d2bf7bb532c471fec402fa862 /Bugzilla
parent40e63525a8bda9132a4d2c0d296b2b7e89fe75de (diff)
downloadbugzilla-d4e9172ad5f59d882ff372aff2cadd2c8c7f1ed3.tar.gz
bugzilla-d4e9172ad5f59d882ff372aff2cadd2c8c7f1ed3.tar.xz
Bug 377564: Indexes are not renamed when renaming tables
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=mkanat
Diffstat (limited to 'Bugzilla')
-rw-r--r--Bugzilla/DB.pm11
-rw-r--r--Bugzilla/DB/Schema.pm7
-rw-r--r--Bugzilla/Install/DB.pm24
3 files changed, 41 insertions, 1 deletions
diff --git a/Bugzilla/DB.pm b/Bugzilla/DB.pm
index c87ecbdf5..b42672398 100644
--- a/Bugzilla/DB.pm
+++ b/Bugzilla/DB.pm
@@ -841,6 +841,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 44bda1acb..844f0b0e8 100644
--- a/Bugzilla/DB/Schema.pm
+++ b/Bugzilla/DB/Schema.pm
@@ -1588,6 +1588,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 f05f1722e..24a885118 100644
--- a/Bugzilla/Install/DB.pm
+++ b/Bugzilla/Install/DB.pm
@@ -504,6 +504,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 #
@@ -2750,7 +2751,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;