}
+sub bz_drop_related_fks {
+ my ($self, $table, $column) = @_;
+ my @tables = $self->_bz_real_schema->get_table_list();
+ my @dropped;
+ foreach my $check_table (@tables) {
+ my @columns = $self->bz_table_columns($check_table);
+ foreach my $check_column (@columns) {
+ my $def = $self->bz_column_info($check_table, $check_column);
+ my $fk = $def->{REFERENCES};
+ if ($fk
+ and (($fk->{TABLE} eq $table and $fk->{COLUMN} eq $column)
+ or ($check_column eq $column and $check_table eq $table)))
+ {
+ $self->bz_drop_fk($check_table, $check_column);
+ push(@dropped, [$check_table, $check_column, $fk]);
+ }
+ } # foreach $column
+ } # foreach $table
+
+ return \@dropped;
+}
+
sub bz_drop_index {
my ($self, $table, $name) = @_;
print "Converting table storage format to UTF-8. This may take a",
" while.\n";
+ my @dropped_fks;
foreach my $table ($self->bz_table_list_real) {
my $info_sth = $self->prepare("SHOW FULL COLUMNS FROM $table");
$info_sth->execute();
}
}
+ my $dropped = $self->bz_drop_related_fks($table, $name);
+ push(@dropped_fks, @$dropped);
+
print "Converting $table.$name to be stored as UTF-8...\n";
my $col_info =
$self->bz_column_info_real($table, $name);
# CHANGE COLUMN doesn't take PRIMARY KEY
delete $col_info->{PRIMARYKEY};
-
my $sql_def = $self->_bz_schema->get_type_ddl($col_info);
# We don't want MySQL to actually try to *convert*
# from our current charset to UTF-8, we just want to
}
$self->do("ALTER TABLE $table DEFAULT CHARACTER SET utf8");
+
} # foreach my $table (@tables)
+
+ foreach my $fk_args (@dropped_fks) {
+ $self->bz_add_fk(@$fk_args);
+ }
}
# Sometimes you can have a situation where all the tables are utf8,