Bug 37349: Use cache for authority types and remove extra fetch

This patch caches the authority types when fetched during linking to avoid grabbing the same type more than once.
Additionally it removes a second call to fetch the same type in some scenarios

To test:
1 - Apply patch
2 - Enable linking during cataloging/updating records
3 - Edit a record and confirm it is linked ocrrectly
4 - Run the authority linking cron and confirm it works as expected

Signed-off-by: Phil Ringnalda <phil@chetcolibrary.org>

Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
This commit is contained in:
Nick Clemens 2024-07-12 15:56:45 +00:00 committed by Katrin Fischer
parent e2538b5e83
commit b124cab0b7
Signed by: kfischer
GPG key ID: 0EF6E2C03357A834

View file

@ -667,6 +667,7 @@ sub LinkBibHeadingsToAuthorities {
my $tagtolink = shift;
my $verbose = shift;
my %results;
my $memory_cache = Koha::Cache::Memory::Lite->get_instance();
if (!$bib) {
carp 'LinkBibHeadingsToAuthorities called on undefined bib record';
return ( 0, {});
@ -708,7 +709,12 @@ sub LinkBibHeadingsToAuthorities {
push(@{$results{'details'}}, { tag => $field->tag(), authid => $authid, status => 'LOCAL_FOUND'}) if $verbose;
}
else {
my $authority_type = Koha::Authority::Types->find( $heading->auth_type() );
my $authority_type =
$memory_cache->get_from_cache( "LinkBibHeadingsToAuthorities:AuthorityType:" . $heading->auth_type() );
unless ($authority_type) {
$authority_type = Koha::Authority::Types->find( $heading->auth_type() );
$memory_cache->set_in_cache( "LinkBibHeadingsToAuthorities:AuthorityType:" . $heading->auth_type() );
}
if ( defined $current_link
&& (!$allowrelink || C4::Context->preference('LinkerKeepStale')) )
{
@ -722,7 +728,6 @@ sub LinkBibHeadingsToAuthorities {
$results{'unlinked'}->{ $heading->display_form() }++;
push(@{$results{'details'}}, { tag => $field->tag(), authid => undef, status => 'MULTIPLE_MATCH', auth_type => $heading->auth_type(), tag_to_report => $authority_type->auth_tag_to_report}) if $verbose;
} elsif ( !$match_count ) {
my $authority_type = Koha::Authority::Types->find( $heading->auth_type() );
my $marcrecordauth = MARC::Record->new();
if ( C4::Context->preference('marcflavour') eq 'MARC21' ) {
$marcrecordauth->leader(' nz a22 o 4500');