From a37152217af29c5d4702b799793f684941e155ac Mon Sep 17 00:00:00 2001 From: Marcel de Rooy Date: Fri, 9 Feb 2018 09:03:26 +0100 Subject: [PATCH] Bug 14769: (Follow-up) Reduce number of preference parses In sub merge the Koha::Authority object was already created, so it was kind of silly to recreate it each time with new. In Koha::Authority, the ControlledIndicators object can be saved in the object too for reuse during its life time. Similarly, we prevent repeated lookups for the reporting tag (via authority type). Test plan: [1] Run t/db_dependent/Authority/Merge.t [2] Run t/db_dependent/Koha/Authorities.t Signed-off-by: Marcel de Rooy Limited benchmarking shows me a reduction of 11% on Merge.t and a reduction of 4% on Authorities.t when comparing with and without this last patch. The larger impact on Merge.t could be expected. Signed-off-by: Josef Moravec Signed-off-by: Nick Clemens --- C4/AuthoritiesMarc.pm | 2 +- Koha/Authority.pm | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/C4/AuthoritiesMarc.pm b/C4/AuthoritiesMarc.pm index f441c60..293f64b 100644 --- a/C4/AuthoritiesMarc.pm +++ b/C4/AuthoritiesMarc.pm @@ -1471,7 +1471,7 @@ sub merge { my $newtag = $tags_new && @$tags_new ? _merge_newtag( $tag, $tags_new ) : $tag; - my $controlled_ind = Koha::Authority->new({ authtypecode => $authtypeto ? $authtypeto->authtypecode : undef })->controlled_indicators({ record => $MARCto, biblio_tag => $newtag }); #FIXME Replace this tric with new when refactoring + my $controlled_ind = $authto->controlled_indicators({ record => $MARCto, biblio_tag => $newtag }); my $field_to = MARC::Field->new( $newtag, $controlled_ind->{ind1} // $field->indicator(1), diff --git a/Koha/Authority.pm b/Koha/Authority.pm index b427d7f..b4cf946 100644 --- a/Koha/Authority.pm +++ b/Koha/Authority.pm @@ -99,12 +99,16 @@ sub controlled_indicators { $self->marcxml, 'UTF-8', $flavour ); } - my $authtype = Koha::Authority::Types->find( $self->authtypecode ); - return {} if !$authtype; + if( !$self->{_report_tag} ) { + my $authtype = Koha::Authority::Types->find( $self->authtypecode ); + return {} if !$authtype; # very exceptional + $self->{_report_tag} = $authtype->auth_tag_to_report; + } - return Koha::Authority::ControlledIndicators->new->get({ + $self->{_ControlledInds} //= Koha::Authority::ControlledIndicators->new; + return $self->{_ControlledInds}->get({ auth_record => $record, - report_tag => $authtype->auth_tag_to_report, + report_tag => $self->{_report_tag}, biblio_tag => $tag, flavour => $flavour, }); -- 2.1.4