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 <gmcharlt@gmail.com>
This commit is contained in:
parent
0d2095072e
commit
e752822d04
|
|
@ -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 ?, ?";
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue