Commit 34e54028 authored by mkanat%bugzilla.org's avatar mkanat%bugzilla.org

Bug 495783: Create the default Classification before setting up foreign keys, so…

Bug 495783: Create the default Classification before setting up foreign keys, so that the products.classification_id -> classifications.id FK doesn't fail during upgrades that add the classification_id column. Patch by Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=mkanat
parent 1a9927c0
...@@ -217,15 +217,20 @@ sub update_system_groups { ...@@ -217,15 +217,20 @@ sub update_system_groups {
} }
# This function should be called only after creating the admin user. sub create_default_classification {
sub create_default_product {
my $dbh = Bugzilla->dbh; my $dbh = Bugzilla->dbh;
# Make the default Classification if it doesn't already exist. # Make the default Classification if it doesn't already exist.
if (!$dbh->selectrow_array('SELECT 1 FROM classifications')) { if (!$dbh->selectrow_array('SELECT 1 FROM classifications')) {
print get_text('install_default_classification', print get_text('install_default_classification',
{ name => DEFAULT_CLASSIFICATION->{name} }) . "\n"; { name => DEFAULT_CLASSIFICATION->{name} }) . "\n";
Bugzilla::Classification->create(DEFAULT_CLASSIFICATION); Bugzilla::Classification->create(DEFAULT_CLASSIFICATION);
} }
}
# This function should be called only after creating the admin user.
sub create_default_product {
my $dbh = Bugzilla->dbh;
# And same for the default product/component. # And same for the default product/component.
if (!$dbh->selectrow_array('SELECT 1 FROM products')) { if (!$dbh->selectrow_array('SELECT 1 FROM products')) {
...@@ -426,9 +431,14 @@ Params: none ...@@ -426,9 +431,14 @@ Params: none
Returns: nothing. Returns: nothing.
=item C<create_default_classification>
Creates the default "Unclassified" L<Classification|Bugzilla::Classification>
if it doesn't already exist
=item C<create_default_product()> =item C<create_default_product()>
Description: Creates the default product and classification if Description: Creates the default product and component if
they don't exist. they don't exist.
Params: none Params: none
......
...@@ -24,6 +24,7 @@ use strict; ...@@ -24,6 +24,7 @@ use strict;
use Bugzilla::Constants; use Bugzilla::Constants;
use Bugzilla::Hook; use Bugzilla::Hook;
use Bugzilla::Install ();
use Bugzilla::Install::Util qw(indicate_progress install_string); use Bugzilla::Install::Util qw(indicate_progress install_string);
use Bugzilla::Util; use Bugzilla::Util;
use Bugzilla::Series; use Bugzilla::Series;
...@@ -578,6 +579,13 @@ sub update_table_definitions { ...@@ -578,6 +579,13 @@ sub update_table_definitions {
Bugzilla::Hook::process('install-update_db'); Bugzilla::Hook::process('install-update_db');
# We do this here because otherwise the foreign key from
# products.classification_id to classifications.id will fail
# (because products.classification_id defaults to "1", so on upgraded
# installations it's already been set before the first Classification
# exists).
Bugzilla::Install::create_default_classification();
$dbh->bz_setup_foreign_keys(); $dbh->bz_setup_foreign_keys();
} }
......
...@@ -217,7 +217,7 @@ Bugzilla::Install::reset_password($switch{'reset-password'}) ...@@ -217,7 +217,7 @@ Bugzilla::Install::reset_password($switch{'reset-password'})
if $switch{'reset-password'}; if $switch{'reset-password'};
########################################################################### ###########################################################################
# Create default Product and Classification # Create default Product
########################################################################### ###########################################################################
Bugzilla::Install::create_default_product(); Bugzilla::Install::create_default_product();
...@@ -406,6 +406,10 @@ from one version of Bugzilla to another. ...@@ -406,6 +406,10 @@ from one version of Bugzilla to another.
The code for this is in L<Bugzilla::Install::DB/update_table_definitions>. The code for this is in L<Bugzilla::Install::DB/update_table_definitions>.
This includes creating the default Classification (using
L<Bugzilla::Install/create_default_classification>) and setting up all
the foreign keys for all tables, using L<Bugzilla::DB/bz_setup_foreign_keys>.
=item 14 =item 14
Creates the system groups--the ones like C<editbugs>, C<admin>, and so on. Creates the system groups--the ones like C<editbugs>, C<admin>, and so on.
...@@ -426,7 +430,7 @@ the C<--make-admin> switch. ...@@ -426,7 +430,7 @@ the C<--make-admin> switch.
=item 17 =item 17
Creates the default Classification, Product, and Component, using Creates the default Product and Component, using
L<Bugzilla::Install/create_default_product>. L<Bugzilla::Install/create_default_product>.
=back =back
......
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