From e752822d048e134d632e0dfbbdcbbdbb6a9769e8 Mon Sep 17 00:00:00 2001 From: Michael Hafen Date: Wed, 4 Nov 2009 14:31:48 -0700 Subject: [PATCH] bugfix Guided Reports - allow user specified limit in sql Tweak the regular expression in strip_limit to work. Tweak execute_query to use the user limit if it's lower than the hard coded one. Also total is calculated somewhere else now. This helps most with the csv export of a report so the user can set their own limit instead of having the hard coded limit of 9999. Signed-off-by: Galen Charlton --- C4/Reports/Guided.pm | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/C4/Reports/Guided.pm b/C4/Reports/Guided.pm index d8277b7e31..9f64cd9d4c 100644 --- a/C4/Reports/Guided.pm +++ b/C4/Reports/Guided.pm @@ -427,8 +427,8 @@ sub select_2_select_count ($) { sub strip_limit ($) { my $sql = shift or return; ($sql =~ /\bLIMIT\b/i) or return ($sql, 0, undef); - $sql =~ s/\bLIMIT\b\s*\d+(\,\s*\d+)?\s*/ /ig; - return ($sql, (defined $1 ? $1 : 0), $2); # offset can default to 0, LIMIT cannot! + $sql =~ s/\bLIMIT\b\s*(\d+)(\s*\,\s*(\d+))?\s*/ /ig; + return ($sql, (defined $2 ? $1 : 0), (defined $3 ? $3 : $1)); # offset can default to 0, LIMIT cannot! } sub execute_query ($;$$$) { @@ -457,13 +457,12 @@ sub execute_query ($;$$$) { $useroffset, (defined($userlimit ) ? $userlimit : 'UNDEF'); $offset += $useroffset; - my $total; if (defined($userlimit)) { if ($offset + $limit > $userlimit ) { $limit = $userlimit - $offset; + } elsif ( ! $offset && $limit > $userlimit ) { + $limit = $userlimit; } - $total = $userlimit if $userlimit < $total; # we will never exceed a user defined LIMIT and... - $userlimit = $total if $userlimit > $total; # we will never exceed the total number of records available to satisfy the query } $sql .= " LIMIT ?, ?"; -- 2.20.1