From 7535b28f77269a3f0efecf9055477a345c9a63c4 Mon Sep 17 00:00:00 2001 From: Sophie Meynieux Date: Wed, 10 Aug 2016 16:06:35 +0200 Subject: [PATCH] Bug 13914 : Fix UNION in SQL request for reserves statistics Test plan ========= On Reports > reservations, select all statuses as line, pickup library as column (empty) and a range of hold date. Keep the results Run the same reports but with statuses as column and pickup library as line You should get the same results on another display. * Without patch, if you've got representative data, most of the time you can observe significant differences between both results * With the patch, results are always the same (and right if you request directly your database) Signed-off-by: Chris Cormack Signed-off-by: Jonathan Druart Signed-off-by: Kyle M Hall --- reports/reserves_stats.pl | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/reports/reserves_stats.pl b/reports/reserves_stats.pl index 40a231db51..a444bc519d 100755 --- a/reports/reserves_stats.pl +++ b/reports/reserves_stats.pl @@ -221,7 +221,7 @@ sub calculate { ($process == 3) ? "(COUNT(DISTINCT reserves.itemnumber)) calculation" : ($process == 4) ? "(COUNT(DISTINCT reserves.biblionumber)) calculation" : '*'; $strcalc .= " - FROM reserves + FROM (select * from reserves union select * from old_reserves) reserves LEFT JOIN borrowers USING (borrowernumber) "; $strcalc .= "LEFT JOIN biblio ON reserves.biblionumber=biblio.biblionumber " @@ -266,14 +266,11 @@ sub calculate { $strcalc .= " WHERE ".join(" AND ",@sqlwhere) if (@sqlwhere); $strcalc .= " AND (".join(" OR ",@sqlor).")" if (@sqlor); $strcalc .= " GROUP BY line, col )"; - my $strcalc_old=$strcalc; - $strcalc_old=~s/reserves/old_reserves/g; - $strcalc.=qq{ UNION $strcalc_old ORDER BY line, col}; ($debug) and print STDERR $strcalc; my $dbcalc = $dbh->prepare($strcalc); push @loopfilter, {crit=>'SQL =', sql=>1, filter=>$strcalc}; @sqlparams=(@sqlparams,@sqlorparams); - $dbcalc->execute(@sqlparams,@sqlparams); + $dbcalc->execute(@sqlparams); my ($emptycol,$emptyrow); my $data = $dbcalc->fetchall_hashref([qw(line col)]); my %cols_hash; -- 2.39.5