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
);
}
}
=head1 NAME
-
+
C4::Reports::Guided - Module for generating guided reports
=head1 SYNOPSIS
=head1 DESCRIPTION
+=cut
=head1 METHODS
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
-=over
+ ($results, $total, $error) = execute_query($sql, $offset, $limit)
-($results, $total, $error) = execute_query($sql, $offset, $limit)
-=back
+When passed C<$sql>, this function returns an array ref containing a result set
+suitably formatted for display in html or for output as a flat file when passed in
+C<$format> and C<$id>. It also returns the C<$total> records available for the
+supplied query. If passed any query other than a SELECT, or if there is a db error,
+C<$errors> an array ref is returned containing the error after this manner:
- When passed C<$sql>, this function returns an array ref containing a result set
- suitably formatted for display in html or for output as a flat file when passed in
- C<$format> and C<$id>. It also returns the C<$total> records available for the
- supplied query. If passed any query other than a SELECT, or if there is a db error,
- C<$errors> an array ref is returned containing the error after this manner:
+C<$error->{'sqlerr'}> contains the offending SQL keyword.
+C<$error->{'queryerr'}> contains the native db engine error returned for the query.
- C<$error->{'sqlerr'}> contains the offending SQL keyword.
- C<$error->{'queryerr'}> contains the native db engine error returned for the query.
-
- Valid values for C<$format> are 'text,' 'tab,' 'csv,' or 'url. C<$sql>, C<$type>,
- C<$offset>, and C<$limit> are required parameters. If a valid C<$format> is passed
- in, C<$offset> and C<$limit> are ignored for obvious reasons. A LIMIT specified by
- the user in a user-supplied SQL query WILL apply in any case.
+Valid values for C<$format> are 'text,' 'tab,' 'csv,' or 'url. C<$sql>, C<$type>,
+C<$offset>, and C<$limit> are required parameters. If a valid C<$format> is passed
+in, C<$offset> and C<$limit> are ignored for obvious reasons. A LIMIT specified by
+the user in a user-supplied SQL query WILL apply in any case.
=cut
# ~ 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;
return;
}
$offset = 0 unless $offset;
- $limit = 9999 unless $limit;
+ $limit = 999999 unless $limit;
$debug and print STDERR "execute_query($sql, $offset, $limit)\n";
if ($sql =~ /;?\W?(UPDATE|DELETE|DROP|INSERT|SHOW|CREATE)\W/i) {
return (undef, { sqlerr => $1} );
=item save_report($sql,$name,$type,$notes)
-Given some sql and a name this will saved it so that it can resued
+Given some sql and a name this will saved it so that it can reused
+Returns id of the newly created report
=cut
$sql =~ s/(\s*\;\s*)$//; # removes trailing whitespace and /;/
my $query =
"INSERT INTO saved_sql (borrowernumber,date_created,last_modified,savedsql,report_name,type,notes) VALUES (?,now(),now(),?,?,?,?)";
- my $sth = $dbh->prepare($query);
- $sth->execute( $borrowernumber, $sql, $name, $type, $notes );
+ $dbh->do( $query, undef, $borrowernumber, $sql, $name, $type, $notes );
+ my $id = $dbh->selectrow_array("SELECT max(id) FROM saved_sql WHERE borrowernumber=? AND report_name=?", undef,
+ $borrowernumber, $name);
+ return $id;
}
sub update_sql {
my $full_path_to_columns_def_file="$htdocs/$theme/$lang/$columns_def_file";
open (COLUMNS,$full_path_to_columns_def_file);
while (my $input = <COLUMNS>){
+ chomp $input;
my @row =split(/\t/,$input);
- $columns{$row[0]}=$row[1];
+ $columns{$row[0]}= $row[1];
}
close COLUMNS;