diff --git a/installer/data/mysql/atomicupdate/bug_18050_aqbudget_constraint.perl b/installer/data/mysql/atomicupdate/bug_18050_aqbudget_constraint.perl new file mode 100644 index 0000000000..f110bad237 --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_18050_aqbudget_constraint.perl @@ -0,0 +1,20 @@ +$DBversion = 'XXX'; # will be replaced by the RM +if( CheckVersion( $DBversion ) ) { + my $count_missing_budget = $dbh->selectrow_arrayref(q| + SELECT COUNT(*) FROM aqbudgets ab WHERE NOT EXISTS + (SELECT * FROM aqbudgetperiods abp WHERE abp.budget_period_id = ab.budget_period_id) + + |); + + 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"); + } + +} diff --git a/installer/data/mysql/kohastructure.sql b/installer/data/mysql/kohastructure.sql index 6e092eae80..b46380a598 100644 --- a/installer/data/mysql/kohastructure.sql +++ b/installer/data/mysql/kohastructure.sql @@ -2858,7 +2858,8 @@ CREATE TABLE `aqbudgets` ( -- information related to Funds KEY `budget_code` (`budget_code`), KEY `budget_branchcode` (`budget_branchcode`), KEY `budget_period_id` (`budget_period_id`), - KEY `budget_owner_id` (`budget_owner_id`) + KEY `budget_owner_id` (`budget_owner_id`), + CONSTRAINT `aqbudgetperiods_ibfk_1` FOREIGN KEY (`budget_period_id`) REFERENCES `aqbudgetperiods` (`budget_period_id`) ON UPDATE CASCADE ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; --