Bug 14365 - Populate never used saved_sql column last_run when execute_query is called

Signed-off-by: Cab Vinton <director@plaistowlibrary.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
This commit is contained in:
Kyle Hall 2017-02-07 16:01:12 +00:00
parent 50f4024055
commit c2c3c11005
6 changed files with 40 additions and 8 deletions

View file

@ -496,7 +496,7 @@ sub strip_limit {
sub execute_query { sub execute_query {
my ( $sql, $offset, $limit, $sql_params ) = @_; my ( $sql, $offset, $limit, $sql_params, $report_id ) = @_;
$sql_params = [] unless defined $sql_params; $sql_params = [] unless defined $sql_params;
@ -531,8 +531,13 @@ sub execute_query {
} }
$sql .= " LIMIT ?, ?"; $sql .= " LIMIT ?, ?";
my $sth = C4::Context->dbh->prepare($sql); my $dbh = C4::Context->dbh;
$dbh->do( 'UPDATE saved_sql SET last_run = NOW() WHERE id = ?', undef, $report_id ) if $report_id;
my $sth = $dbh->prepare($sql);
$sth->execute(@$sql_params, $offset, $limit); $sth->execute(@$sql_params, $offset, $limit);
return ( $sth, { queryerr => $sth->errstr } ) if ($sth->err); return ( $sth, { queryerr => $sth->errstr } ) if ($sth->err);
return ( $sth ); return ( $sth );
} }

View file

@ -249,8 +249,7 @@ foreach my $report_id (@ARGV) {
$subject = 'Koha Saved Report'; $subject = 'Koha Saved Report';
} }
} }
# my $results = execute_query($sql, undef, 0, 99999, $format, $report_id); my ($sth) = execute_query( $sql, undef, undef, undef, $report_id );
my ($sth) = execute_query($sql);
my $count = scalar($sth->rows); my $count = scalar($sth->rows);
unless ($count) { unless ($count) {
print "NO OUTPUT: 0 results from execute_query\n"; print "NO OUTPUT: 0 results from execute_query\n";

View file

@ -61,7 +61,7 @@ unless ($json_text) {
$sql =~ s/(<<.*?>>)/\?/g; $sql =~ s/(<<.*?>>)/\?/g;
my ( $sth, $errors ) = my ( $sth, $errors ) =
execute_query( $sql, $offset, $limit, \@sql_params ); execute_query( $sql, $offset, $limit, \@sql_params, $report_id );
if ($sth) { if ($sth) {
my $lines; my $lines;
if ($report_annotation) { if ($report_annotation) {

View file

@ -772,7 +772,7 @@ elsif ($phase eq 'Run this report'){
$quoted = C4::Context->dbh->quote($quoted); $quoted = C4::Context->dbh->quote($quoted);
$sql =~ s/<<$split[$i*2+1]>>/$quoted/; $sql =~ s/<<$split[$i*2+1]>>/$quoted/;
} }
my ($sth, $errors) = execute_query($sql, $offset, $limit); my ( $sth, $errors ) = execute_query( $sql, $offset, $limit, undef, $report_id );
my $total = nb_rows($sql) || 0; my $total = nb_rows($sql) || 0;
unless ($sth) { unless ($sth) {
die "execute_query failed to return sth for report $report_id: $sql"; die "execute_query failed to return sth for report $report_id: $sql";

View file

@ -65,7 +65,7 @@ unless ($json_text) {
# convert SQL parameters to placeholders # convert SQL parameters to placeholders
$sql =~ s/(<<.*?>>)/\?/g; $sql =~ s/(<<.*?>>)/\?/g;
my ( $sth, $errors ) = execute_query( $sql, $offset, $limit, \@sql_params ); my ( $sth, $errors ) = execute_query( $sql, $offset, $limit, \@sql_params, $report_id );
if ($sth) { if ($sth) {
my $lines; my $lines;
if ($report_annotation) { if ($report_annotation) {

View file

@ -18,7 +18,7 @@
use Modern::Perl; use Modern::Perl;
use Test::More tests => 7; use Test::More tests => 8;
use Test::Warn; use Test::Warn;
use t::lib::TestBuilder; use t::lib::TestBuilder;
@ -260,6 +260,34 @@ subtest 'get_saved_reports' => sub {
"get_report_areas returns the correct array of report areas"); "get_report_areas returns the correct array of report areas");
}; };
subtest 'Ensure last_run is populated' => sub {
plan tests => 3;
my $rs = Koha::Database->new()->schema()->resultset('SavedSql');
my $report = $rs->new(
{
report_name => 'Test Report',
savedsql => 'SELECT * FROM branches',
notes => undef,
}
)->insert();
is( $report->last_run, undef, 'Newly created report has null last_run ' );
execute_query( $report->savedsql, undef, undef, undef, $report->id );
$report->discard_changes();
isnt( $report->last_run, undef, 'First run of report populates last_run' );
my $previous_last_run = $report->last_run;
sleep(1); # last_run is stored to the second, so we need to ensure at least one second has passed between runs
execute_query( $report->savedsql, undef, undef, undef, $report->id );
$report->discard_changes();
isnt( $report->last_run, $previous_last_run, 'Second run of report updates last_run' );
};
$schema->storage->txn_rollback; $schema->storage->txn_rollback;
sub trim { sub trim {