Bug 14769: (Follow-up) Reduce number of preference parses
authorMarcel de Rooy <m.de.rooy@rijksmuseum.nl>
Fri, 9 Feb 2018 08:03:26 +0000 (09:03 +0100)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Thu, 12 Apr 2018 13:50:35 +0000 (10:50 -0300)
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 <m.de.rooy@rijksmuseum.nl>
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 <josef.moravec@gmail.com>
Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
C4/AuthoritiesMarc.pm
Koha/Authority.pm

index f441c60..293f64b 100644 (file)
@@ -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),
index b427d7f..b4cf946 100644 (file)
@@ -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,
     });