Commit 91b55fc9 authored by mkanat%bugzilla.org's avatar mkanat%bugzilla.org

Bug 419979: Bugzilla::DB::bz_add_field_table directly modifies the FIELD_TABLE_SCHEMA constant

Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=mkanat
parent 2429c5da
...@@ -660,18 +660,23 @@ sub _bz_add_table_raw { ...@@ -660,18 +660,23 @@ sub _bz_add_table_raw {
} }
sub _bz_add_field_table { sub _bz_add_field_table {
my ($self, $name, $table_schema) = @_; my ($self, $name, $schema_ref) = @_;
# We do nothing if the table already exists. # We do nothing if the table already exists.
return if $self->bz_table_info($name); return if $self->bz_table_info($name);
my $indexes = $table_schema->{INDEXES};
# $indexes is an arrayref, not a hash. In order to fix the keys, # Copy this so that we're not modifying the passed reference.
# we have to fix every other item. # (This avoids modifying a constant in Bugzilla::DB::Schema.)
for (my $i = 0; $i < scalar @$indexes; $i++) { my %table_schema = %$schema_ref;
next if ($i % 2 && $i != 0); # We skip 1, 3, 5, 7, etc. my %indexes = @{ $table_schema{INDEXES} };
$indexes->[$i] = $name . "_" . $indexes->[$i]; my %fixed_indexes;
foreach my $key (keys %indexes) {
$fixed_indexes{$name . "_" . $key} = $indexes{$key};
} }
# INDEXES is supposed to be an arrayref, so we have to convert back.
my @indexes_array = %fixed_indexes;
$table_schema{INDEXES} = \@indexes_array;
# We add this to the abstract schema so that bz_add_table can find it. # We add this to the abstract schema so that bz_add_table can find it.
$self->_bz_schema->add_table($name, $table_schema); $self->_bz_schema->add_table($name, \%table_schema);
$self->bz_add_table($name); $self->bz_add_table($name);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment