summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Bugzilla/DB.pm62
-rw-r--r--Bugzilla/DB/Mysql.pm27
2 files changed, 56 insertions, 33 deletions
diff --git a/Bugzilla/DB.pm b/Bugzilla/DB.pm
index 3a52e8802..a32406d5b 100644
--- a/Bugzilla/DB.pm
+++ b/Bugzilla/DB.pm
@@ -414,17 +414,36 @@ sub bz_add_index {
my $index_exists = $self->bz_index_info($table, $name);
if (!$index_exists) {
- my @statements = $self->_bz_real_schema->get_add_index_ddl(
- $table, $name, $definition);
- print "Adding new index '$name' to the $table table ...\n";
- foreach my $sql (@statements) {
- $self->do($sql);
- }
+ $self->_bz_add_index_raw($table, $name, $definition);
$self->_bz_real_schema->set_index($table, $name, $definition);
$self->_bz_store_real_schema;
}
}
+# bz_add_index_raw($table, $name, $silent)
+#
+# Description: A helper function for bz_add_index.
+# Adds an index to the database
+# without updating any Schema object. Generally
+# should only be called by bz_add_index.
+# Used when you don't yet have a Schema
+# object but you need to add an index, for some reason.
+# Params: $table - The name of the table the index is on.
+# $name - The name of the index you're adding.
+# $definition - The abstract index definition, in hashref
+# or arrayref format.
+# $silent - (optional) If specified and true, don't output
+# any message about this change.
+# Returns: nothing
+#
+sub bz_add_index_raw {
+ my ($self, $table, $name, $definition, $silent) = @_;
+ my @statements = $self->_bz_schema->get_add_index_ddl(
+ $table, $name, $definition);
+ print "Adding new index '$name' to the $table table ...\n" unless $silent;
+ $self->do($_) foreach (@statements);
+}
+
sub bz_add_table {
my ($self, $name) = @_;
@@ -520,17 +539,36 @@ sub bz_drop_index {
my $index_exists = $self->bz_index_info($table, $name);
if ($index_exists) {
- my @statements = $self->_bz_real_schema->get_drop_index_ddl(
- $table, $name);
- print "Removing index '$name' from the $table table...\n";
- foreach my $sql (@statements) {
- $self->do($sql);
- }
+ $self->_bz_drop_index_raw($table, $name);
$self->_bz_real_schema->delete_index($table, $name);
$self->_bz_store_real_schema;
}
}
+# bz_drop_index_raw($table, $name, $silent)
+#
+# Description: A helper function for bz_drop_index.
+# Drops an index from the database
+# without updating any Schema object. Generally
+# should only be called by bz_drop_index.
+# Used when either: (1) You don't yet have a Schema
+# object but you need to drop an index, for some reason.
+# (2) You need to drop an index that somehow got into the
+# database but doesn't exist in Schema.
+# Params: $table - The name of the table the index is on.
+# $name - The name of the index you're dropping.
+# $silent - (optional) If specified and true, don't output
+# any message about this change.
+# Returns: nothing
+#
+sub bz_drop_index_raw {
+ my ($self, $table, $name, $silent) = @_;
+ my @statements = $self->_bz_schema->get_drop_index_ddl(
+ $table, $name);
+ print "Removing index '$name' from the $table table...\n" unless $silent;
+ $self->do($_) foreach (@statements);
+}
+
# XXX - Needs to be made cross-db compatible
sub bz_drop_table_indexes ($) {
my ($self, $table) = @_;
diff --git a/Bugzilla/DB/Mysql.pm b/Bugzilla/DB/Mysql.pm
index aed2b89fb..cb7cdbe7e 100644
--- a/Bugzilla/DB/Mysql.pm
+++ b/Bugzilla/DB/Mysql.pm
@@ -304,16 +304,7 @@ sub bz_setup_database {
elsif ($self->bz_index_info_real('series', 'series_creator_idx')) {
$dropname = 'series_creator_idx';
}
-
- if ($dropname) {
- print "Removing the useless index $dropname on the"
- . " series table...\n";
- my @drop = $self->_bz_schema->get_drop_index_ddl(
- 'series', $dropname);
- foreach my $sql (@drop) {
- $self->do($sql);
- }
- }
+ $self->bz_drop_index_raw('series', $dropname) if $dropname;
}
# The email_setting table also had the same problem.
@@ -321,11 +312,8 @@ sub bz_setup_database {
&& $self->bz_index_info_real('email_setting',
'email_settings_user_id_idx') )
{
- print "Removing the useless index email_settings_user_id_idx\n"
- . " on the email_setting table...\n";
- my @drop = $self->_bz_schema->get_drop_index_ddl('email_setting',
- 'email_settings_user_id_idx');
- $self->do($_) foreach (@drop);
+ $self->bz_drop_index_raw('email_setting',
+ 'email_settings_user_id_idx');
}
# Go through all the tables.
@@ -361,12 +349,9 @@ sub bz_setup_database {
print "Renaming index $column to to $new_name...\n";
# Unfortunately, MySQL has no way to rename an index. :-(
# So we have to drop and recreate the indexes.
- my @drop = $self->_bz_schema->get_drop_index_ddl(
- $table, $column);
- my @add = $self->_bz_schema->get_add_index_ddl(
- $table, $new_name, $index);
- $self->do($_) foreach (@drop);
- $self->do($_) foreach (@add);
+ $self->bz_drop_index_raw($table, $column, "silent");
+ $self->bz_add_index_raw($table, $new_name,
+ $index, "silent");
} # if
} # foreach column
} # foreach table