Bug 29702: Fetch group libraries in a single call

The current code gets all group members, then loops through and fetches the library if there is a
branchcode, or recursively calls itself if a group. This slows down performance.

We can utilize the 'libraries' method to get all child libraries at once, then make a check
for child groups separately

To recreate:
 1 - Add 100 items to a biblio
 2 - Define a library group as a hold group
 3 - Add all libraries to the group
 4 - Set 'Default checkout, hold and return policy'->'Hold pickup library match' = 'Any library'
 5 - place a hold on the record and note load time after patron is selected
 6 - Set 'Default checkout, hold and return policy'->'Hold pickup library match' = 'Patrons hold group'
 7 - place a hold, note longer load time after patron selection
 8 - Apply patch
 9 - note improvement
10 - prove -v t/db_dependent/Koha/Libraries.t

Signed-off-by: Andrew Fuerste-Henry <andrew@bywatersolutions.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Fridolin Somers <fridolin.somers@biblibre.com>
This commit is contained in:
Nick Clemens 2021-12-15 15:44:06 +00:00 committed by Fridolin Somers
parent 2f554fd288
commit 9d31f0d4ed

View file

@ -144,14 +144,10 @@ sub all_libraries {
my @libraries;
my @children = $self->children;
push (@libraries, $self->libraries);
my @children = $self->children->search({ branchcode => undef });
foreach my $c (@children) {
if ( $c->branchcode ) {
push( @libraries, $c->library );
}
else {
push( @libraries, $c->all_libraries );
}
push( @libraries, $c->all_libraries );
}
my %seen;