Koha/installer/data/mysql/db_revs/211200041.pl
Marcel de Rooy 129e353685 Bug 30899: Correct dbrev 211200041
Replace DROP CONSTRAINT by DROP FOREIGN KEY.

Note: It seems that we do not need a new dbrev for master. A developer
could follow test plan below to correct if really needed.

Test plan:

NOTE: When you check show create table, verify that you see an index for category_code and a foreign key called borrower_attribute_types_ibfk_1.

[1] cp installer/data/mysql/db_revs/211200041.pl installer/data/mysql/atomicupdate/
[2] run updatedatabase; check show create table
[3] alter table borrower_attribute_types drop foreign key borrower_attribute_types_ibfk_1; alter table borrower_attribute_types drop index category_code; RUN updatedatabase again; check show create table
[4] alter table borrower_attribute_types drop foreign key borrower_attribute_types_ibfk_1; ALTER TABLE borrower_attribute_types ADD CONSTRAINT category_code_fk FOREIGN KEY (category_code) REFERENCES categories(categorycode); RUN updatedatabase again; check show create table
[5] rm installer/data/atomicupdate/211200041.pl

Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
2022-06-08 11:04:57 -03:00

57 lines
1.9 KiB
Perl
Executable file

use Modern::Perl;
return {
bug_number => 30449,
description => "Check borrower_attribute_types FK constraint",
up => sub {
my ($args) = @_;
my ($dbh, $out) = @$args{qw(dbh out)};
if( foreign_key_exists('borrower_attribute_types', 'category_code_fk') ) {
$dbh->do( q|ALTER TABLE borrower_attribute_types DROP FOREIGN KEY category_code_fk| );
if( index_exists('borrower_attribute_types', 'category_code_fk') ) {
$dbh->do( q|ALTER TABLE borrower_attribute_types DROP INDEX category_code_fk| );
}
}
if (
!foreign_key_exists(
'borrower_attribute_types', 'borrower_attribute_types_ibfk_1'
)
)
{
my $sth = $dbh->prepare(
q{
SELECT category_code
FROM borrower_attribute_types
WHERE category_code NOT IN (SELECT categorycode FROM categories);
}
);
$sth->execute;
my @invalid_categories;
while ( my $row = $sth->fetchrow_arrayref() ) {
push( @invalid_categories, $row->[0] );
}
if (@invalid_categories) {
die "The 'borrower_attribute_types' table contains "
. "references to invalid category codes: "
. join( ', ', @invalid_categories );
}
if ( !index_exists( 'borrower_attribute_types', 'category_code' ) )
{
$dbh->do(q|
ALTER TABLE borrower_attribute_types ADD INDEX category_code (category_code)
|);
}
$dbh->do(q|
ALTER TABLE borrower_attribute_types
ADD CONSTRAINT borrower_attribute_types_ibfk_1 FOREIGN KEY (`category_code`) REFERENCES `categories` (`categorycode`)
|);
}
},
};