@@ -, +, @@ any primary key --- C4/Installer.pm | 15 +++++++++------ installer/data/mysql/atomicupdate/bug_26326.perl | 4 +++- t/db_dependent/Installer.t | 5 +++-- 3 files changed, 15 insertions(+), 9 deletions(-) --- a/C4/Installer.pm +++ a/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; } --- a/installer/data/mysql/atomicupdate/bug_26326.perl +++ a/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)" ); } --- a/t/db_dependent/Installer.t +++ a/t/db_dependent/Installer.t @@ -22,7 +22,7 @@ # Add more tests here!!! use Modern::Perl; -use Test::More tests => 18; +use Test::More tests => 19; use Koha::Database; BEGIN { @@ -67,6 +67,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'); + --