@@ -, +, @@ --- .../bug_18050_aqbudget_constraint.perl | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) --- a/installer/data/mysql/atomicupdate/bug_18050_aqbudget_constraint.perl +++ a/installer/data/mysql/atomicupdate/bug_18050_aqbudget_constraint.perl @@ -6,13 +6,29 @@ if( CheckVersion( $DBversion ) ) { |); + my $message = ""; + + if($count_missing_budget->[0] > 0) { + $dbh->do(q{ + CREATE TABLE _bug_18050_aqbudgets AS + SELECT * FROM aqbudgets ab WHERE NOT EXISTS + (SELECT * FROM aqbudgetperiods abp WHERE abp.budget_period_id = ab.budget_period_id) + }); + + $dbh->do(q{ + UPDATE aqbudgets ab SET budget_period_id = NULL + WHERE NOT EXISTS + (SELECT * FROM aqbudgetperiods abp WHERE abp.budget_period_id = ab.budget_period_id) + }); + + $message = "There are $count_missing_budget->[0] funds in your database that are not linked to a valid budget. Setting invalid budget id (budget_period_id) to null. The table _bug_18050_aqbudgets was created with original data. Please check that table and place valid ids in aqbudget table as soon as possible." + } + if ( !foreign_key_exists( 'aqbudgets', 'aqbudgetperiods_ibfk_1' ) && $count_missing_budget->[0] == 0 ) { $dbh->do(q| ALTER TABLE aqbudgets ADD CONSTRAINT `aqbudgetperiods_ibfk_1` FOREIGN KEY (`budget_period_id`) REFERENCES `aqbudgetperiods` (`budget_period_id`) ON UPDATE CASCADE ON DELETE CASCADE |); NewVersion( $DBversion, 18050, "Add FK constraint on aqbudgets.budget_period_id"); - } elsif ( $count_missing_budget->[0] > 0 ) { - NewVersion( $DBversion, 18050, "FK constraint on aqbudgets.budget_period_id couldn't be added. There are $count_missing_budget->[0] funds in your database that are not linked to a valid budget."); } else { NewVersion( $DBversion, 18050, "FK constraint on aqbudgets.budget already exists"); } --