Koha/installer/data/mysql/db_revs/220600048.pl
Marcel de Rooy 0397251ece
Bug 33671: (follow-up) Disable FK check for column change
See also BZ report. As suggested by Tomas.

NOTE: The dbrev is extended too for removing records with a failing guarantor_id
foreign key (theoretically not present obviously).

Test plan:
1) cp installer/data/mysql/db_revs/220600048.pl installer/data/mysql/atomicupdate/
2) Run updatedatabase.pl
3) Remove copied file

Bonus:
Manually remove FK constraint before running updatedatabase.
Insert a record with bad guarantor_id into relationships manually.
Run the update again.
You should not see the message that the constraint is removed.
Is the bad record count reported and record removed?

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
[EDIT] Simplified. No longer removes the FK. Just disables during ALTER.
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
2023-07-18 14:07:43 -03:00

23 lines
932 B
Perl
Executable file

use Modern::Perl;
return {
bug_number => 30472, # adjusted on bug 33671
description => "borrower_relationships.guarantor_id NOT NULL",
up => sub {
my ($args) = @_;
my ($dbh, $out) = @$args{qw(dbh out)};
# Delete bad/empty guarantors. No longer possible to add them via interface. Have no use.
my $cnt = $dbh->do(q{
DELETE borrower_relationships FROM borrower_relationships LEFT JOIN borrowers bo ON bo.borrowernumber=guarantor_id WHERE guarantor_id IS NULL OR bo.borrowernumber IS NULL;
});
say $out "Removed $cnt bad guarantor relationship records" if $cnt && $cnt =~ /^\d+$/;
# Make column NOT NULL, disable FK checks while doing so
$dbh->do('SET FOREIGN_KEY_CHECKS=0');
$dbh->do(q{
ALTER TABLE borrower_relationships CHANGE COLUMN guarantor_id guarantor_id int(11) NOT NULL
});
$dbh->do('SET FOREIGN_KEY_CHECKS=1');
},
};