From ae0325565b89ad1d5c4614fd1c87df3c22b33059 Mon Sep 17 00:00:00 2001 From: Nick Clemens Date: Tue, 30 Mar 2021 15:08:09 +0000 Subject: [PATCH] Bug 26326: (follow-up) Add ability to check for existence of any primary key Before dropping a primary key we need to see if one exists - this updates the installer method to allow searching for existence of key --- C4/Installer.pm | 15 +++++++++------ installer/data/mysql/atomicupdate/bug_26326.perl | 4 +++- t/db_dependent/Installer.t | 2 +- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/C4/Installer.pm b/C4/Installer.pm index 2d6b523eed..17570caccd 100644 --- a/C4/Installer.pm +++ b/C4/Installer.pm @@ -630,12 +630,15 @@ sub get_file_path_from_name { sub primary_key_exists { my ( $table_name, $key_name ) = @_; my $dbh = C4::Context->dbh; - my ($exists) = $dbh->selectrow_array( - qq| - SHOW INDEX FROM $table_name - WHERE key_name = 'PRIMARY' AND column_name = ? - |, undef, $key_name - ); + my $sql = qq| SHOW INDEX FROM $table_name WHERE key_name='PRIMARY' |; + my $exists; + if( $key_name ){ + $sql .= 'AND column_name = ? ' if $key_name; + ($exists) = $dbh->selectrow_array( $sql, undef, $key_name ); + } else { + ($exists) = $dbh->selectrow_array( $sql, undef ); + } + return $exists; } diff --git a/installer/data/mysql/atomicupdate/bug_26326.perl b/installer/data/mysql/atomicupdate/bug_26326.perl index b6a9c380fb..000aedc9f7 100644 --- a/installer/data/mysql/atomicupdate/bug_26326.perl +++ b/installer/data/mysql/atomicupdate/bug_26326.perl @@ -4,7 +4,9 @@ if( CheckVersion( $DBversion ) ) { primary_key_exists('import_record_matches','import_record_id') && primary_key_exists('import_record_matches','candidate_match_id') ){ - $dbh->do( "ALTER TABLE import_record_matches DROP PRIMARY KEY" ); + if( primary_key_exists('import_record_matches' ) ){ + $dbh->do( "ALTER TABLE import_record_matches DROP PRIMARY KEY" ); + } $dbh->do( "ALTER TABLE import_record_matches ADD PRIMARY KEY (import_record_id,candidate_match_id)" ); } diff --git a/t/db_dependent/Installer.t b/t/db_dependent/Installer.t index c8cbe6ceb7..57235a811a 100755 --- a/t/db_dependent/Installer.t +++ b/t/db_dependent/Installer.t @@ -70,7 +70,7 @@ ok( ! index_exists( 'borrowers', 'xxx'), 'Constraint xxx does not exist' ); ok( foreign_key_exists( 'borrowers', 'borrowers_ibfk_1' ), 'FK borrowers_ibfk_1 exists' ); ok( ! foreign_key_exists( 'borrowers', 'xxx' ), 'FK xxxx does not exist' ); - +ok( primary_key_exists( 'borrowers' ), 'Borrowers does have a primary key on some column'); ok( primary_key_exists( 'borrowers', 'borrowernumber'), 'Borrowers has primary key on borrowernumber'); ok( ! primary_key_exists( 'borrowers', 'email'), 'Borrowers does not have a primary key on email'); -- 2.11.0