From 6de105084e8ed08846545848e0d5cd3e3ba9d178 Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Thu, 7 Apr 2011 16:14:29 +0200 Subject: [PATCH] Bug 6099: error in report pagination when GROUP BY Signed-off-by: Jonathan Druart Signed-off-by: fdurand Signed-off-by: Ian Walls Signed-off-by: Chris Cormack --- C4/Reports/Guided.pm | 20 +++++++++----------- reports/guided_reports.pl | 2 +- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/C4/Reports/Guided.pm b/C4/Reports/Guided.pm index 0da7c13e62..d3b8025b1e 100644 --- a/C4/Reports/Guided.pm +++ b/C4/Reports/Guided.pm @@ -43,7 +43,7 @@ BEGIN { save_report get_saved_reports execute_query get_saved_report create_compound run_compound get_column_type get_distinct_values save_dictionary get_from_dictionary delete_definition delete_report format_results get_sql - select_2_select_count_value update_sql + nb_rows update_sql ); } @@ -373,6 +373,14 @@ sub get_criteria { return ( \@criteria_array ); } +sub nb_rows($) { + my $sql = shift or return; + my $sth = C4::Context->dbh->prepare($sql); + $sth->execute(); + my $rows = $sth->fetchall_arrayref(); + return scalar (@$rows); +} + =item execute_query ($results, $total, $error) = execute_query($sql, $offset, $limit) @@ -399,16 +407,6 @@ the user in a user-supplied SQL query WILL apply in any case. # ~ remove any LIMIT clause # ~ repace SELECT clause w/ SELECT count(*) -sub select_2_select_count_value ($) { - my $sql = shift or return; - my $countsql = select_2_select_count($sql); - $debug and warn "original query: $sql\ncount query: $countsql\n"; - my $sth1 = C4::Context->dbh->prepare($countsql); - $sth1->execute(); - my $total = $sth1->fetchrow(); - $debug and warn "total records for this query: $total\n"; - return $total; -} sub select_2_select_count ($) { # Modify the query passed in to create a count query... (I think this covers all cases -crn) my ($sql) = strip_limit(shift) or return; diff --git a/reports/guided_reports.pl b/reports/guided_reports.pl index a53712e5bd..746174c61c 100755 --- a/reports/guided_reports.pl +++ b/reports/guided_reports.pl @@ -484,7 +484,7 @@ elsif ($phase eq 'Run this report'){ $sql =~ s/<<$split[$i*2+1]>>/$quoted/; } my ($sth, $errors) = execute_query($sql, $offset, $limit); - my $total = select_2_select_count_value($sql) || 0; + my $total = nb_rows($sql) || 0; unless ($sth) { die "execute_query failed to return sth for report $report: $sql"; } else { -- 2.39.5