Marcel de Rooy
129e353685
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>
57 lines
1.9 KiB
Perl
Executable file
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`)
|
|
|);
|
|
}
|
|
},
|
|
};
|