From 6d77a133d5a033e299c87a5cdfe094108ed899b7 Mon Sep 17 00:00:00 2001 From: Kyle M Hall Date: Tue, 7 Sep 2021 14:07:46 -0400 Subject: [PATCH] Bug 28966: Prefetch patron data for holds queue viewer We have a partner processing thousands of holds per day, per branch. At this number of holds, the script loads very slow if it manages to load at all. The primary slowdown is the individual fetch of the patron for each hold to be displayed. If we prefetch those patrons, the entire script should load much faster. Test Plan: 1) Create as many holds as you can ( up to a few thousand if you can ) 2) Run the holds queue viewer, note the load time 3) Apply this patch 4) Restart all the things! 5) Reload the holds queue viewer, load time should be improved 6) Note the HTML generated looks the same Signed-off-by: Emmi Takkinen --- C4/HoldsQueue.pm | 18 +++++++++++++++++- circ/view_holdsqueue.pl | 4 +--- .../prog/en/modules/circ/view_holdsqueue.tt | 2 +- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/C4/HoldsQueue.pm b/C4/HoldsQueue.pm index f3c7614750..bc8df7060e 100644 --- a/C4/HoldsQueue.pm +++ b/C4/HoldsQueue.pm @@ -133,7 +133,13 @@ sub GetHoldsQueueItems { my $dbh = C4::Context->dbh; my @bind_params = (); - my $query = q/SELECT tmp_holdsqueue.*, biblio.author, items.ccode, items.itype, biblioitems.itemtype, items.location, + my $query = q/SELECT borrowers.surname, + borrowers.othernames, + borrowers.firstname, + borrowers.cardnumber, + borrowers.borrowernumber, + borrowers.title AS borrower_title, + tmp_holdsqueue.*, biblio.author, items.ccode, items.itype, biblioitems.itemtype, items.location, items.enumchron, items.cn_sort, biblioitems.publishercode, biblio.copyrightdate, biblio.subtitle, biblio.medium, biblio.part_number, biblio.part_name, @@ -143,6 +149,7 @@ sub GetHoldsQueueItems { JOIN biblio USING (biblionumber) LEFT JOIN biblioitems USING (biblionumber) LEFT JOIN items USING ( itemnumber) + LEFT JOIN borrowers USING (borrowernumber) WHERE 1=1 /; if ($params->{branchlimit}) { @@ -172,6 +179,15 @@ sub GetHoldsQueueItems { } delete $row->{itemtype}; + $row->{borrower} = { + borrowernumber => $row->{borrowernumber}, + cardnumber => $row->{cardnumber}, + firstname => $row->{firstname}, + othernames => $row->{othernames}, + surname => $row->{surname}, + title => $row->{borrower_title}, + }; + push @$items, $row; } return $items; diff --git a/circ/view_holdsqueue.pl b/circ/view_holdsqueue.pl index cb0cabc9b5..0c20c90499 100755 --- a/circ/view_holdsqueue.pl +++ b/circ/view_holdsqueue.pl @@ -54,9 +54,7 @@ if ( $run_report ) { ccodeslimit => $ccodeslimit, locationslimit => $locationslimit }); - for my $item ( @$items ) { - $item->{patron} = Koha::Patrons->find( $item->{borrowernumber} ); - } + $template->param( branchlimit => $branchlimit, itemtypeslimit => $itemtypeslimit, diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/view_holdsqueue.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/view_holdsqueue.tt index 537fd747d6..0ca6163ef9 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/view_holdsqueue.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/circ/view_holdsqueue.tt @@ -187,7 +187,7 @@

- [% INCLUDE 'patron-title.inc' invert_name=1 patron=itemsloo.patron hide_patron_infos_if_needed=1 link_to="circulation_reserves" %] + [% INCLUDE 'patron-title.inc' invert_name=1 borrower=itemsloo.borrower hide_patron_infos_if_needed=0 link_to="circulation_reserves" %]

[% UNLESS Koha.Preference('HidePatronName') %]

[% itemsloo.patron.phone | html %]

-- 2.30.1 (Apple Git-130)