diff options
-rw-r--r-- | Bugzilla/DB.pm | 23 | ||||
-rw-r--r-- | Bugzilla/DB/Schema.pm | 31 |
2 files changed, 53 insertions, 1 deletions
diff --git a/Bugzilla/DB.pm b/Bugzilla/DB.pm index a32406d5b..42328c9ea 100644 --- a/Bugzilla/DB.pm +++ b/Bugzilla/DB.pm @@ -569,6 +569,21 @@ sub bz_drop_index_raw { $self->do($_) foreach (@statements); } +sub bz_drop_table { + my ($self, $name) = @_; + + my $table_exists = $self->bz_table_info($name); + + if ($table_exists) { + my @statements = $self->_bz_schema->get_drop_table_ddl($name); + print "Dropping table $name...\n"; + $self->do($_) foreach (@statements); + $self->_bz_real_schema->delete_table($name); + $self->_bz_store_real_schema; + } +} + + # XXX - Needs to be made cross-db compatible sub bz_drop_table_indexes ($) { my ($self, $table) = @_; @@ -1006,6 +1021,7 @@ Bugzilla::DB - Database access routines, using L<DBI> $dbh->bz_add_index($table, $name, $definition); $dbh->bz_add_table($name); $dbh->bz_drop_index($table, $name); + $dbh->bz_drop_table($name); $dbh->bz_alter_column($table, $name, \%new_def); $dbh->bz_drop_column($table, $column); $dbh->bz_rename_column($table, $old_name, $new_name); @@ -1363,6 +1379,13 @@ C<Bugzilla::DB::Schema::ABSTRACT_SCHEMA>. $name - The name of the index that you want to drop. Returns: nothing +=item C<bz_drop_table($name)> + + Description: Drops a table from the database. If the table + doesn't exist, we just return silently. + Params: $name - The name of the table to drop. + Returns: nothing + =item C<bz_alter_column($table, $name, \%new_def)> Description: Changes the data type of a column in a table. Prints out diff --git a/Bugzilla/DB/Schema.pm b/Bugzilla/DB/Schema.pm index c65d1f0f2..8dce761d8 100644 --- a/Bugzilla/DB/Schema.pm +++ b/Bugzilla/DB/Schema.pm @@ -1549,6 +1549,18 @@ sub get_drop_column_ddl { return ("ALTER TABLE $table DROP COLUMN $column"); } +=item C<get_drop_table_ddl($table)> + + Description: Generate SQL to drop a table from the database. + Params: $table - The name of the table to drop. + Returns: An array of SQL statements. + +=cut +sub get_drop_table_ddl { + my ($self, $table) = @_; + return ("DROP TABLE $table"); +} + sub get_rename_column_ddl { =item C<get_rename_column_ddl($table, $old_name, $new_name)> @@ -1568,11 +1580,28 @@ sub get_rename_column_ddl { . " has not implemented a method."; } +=item C<delete_table($name)> + + Description: Deletes a table from this Schema object. + Dies if you try to delete a table that doesn't exist. + Params: $name - The name of the table to delete. + Returns: nothing + +=cut +sub delete_table { + my ($self, $name) = @_; + + die "Attempted to delete nonexistent table '$name'." unless + $self->get_table_abstract($name); + + delete $self->{abstract_schema}->{$name}; + delete $self->{schema}->{$name}; +} + sub get_column_abstract { =item C<get_column_abstract($table, $column)> - Description: A column definition from the abstract internal schema. cross-database format. Params: $table - The name of the table |