DBIx-SQLCrosstab
view release on metacpan or search on metacpan
test/test_extended.pl view on Meta::CPAN
#!/usr/bin/perl -w
use strict;
use DBI;
use DBIx::SQLCrosstab 1.17;
use DBIx::SQLCrosstab::Format 0.07;
use Data::Dumper;
my $dbh;
my $driver = shift || 'SQLite';
if ($driver eq 'SQLite') {
$dbh = DBI->connect("dbi:SQLite:test/crosstab.sqlite",
"","",{RaiseError=>1, PrintError=> 0 });
}
elsif($driver eq 'mysql') {
# Adjust host, username, and password according to your needs
$dbh = DBI->connect("dbi:mysql:crosstab; host=localhost"
. ";mysql_read_default_file=$ENV{HOME}/.my.cnf" # only Unix. Remove this line for Windows
, undef, # username
undef, # password
{RaiseError=>1, PrintError=> 0 })
}
else {
die "You need a connection statement for driver <$driver>\n";
}
$dbh or die "Error in connection [ driver $driver ] ($DBI::errstr)\n";
my $params = {
dbh => $dbh,
op => [['COUNT','person_id'], [ 'SUM', 'salary']],
title => 'TBD',
title_in_header=> 1,
remove_if_null => 1, # remove columns with all nulls
remove_if_zero => 1, # remove columns with all zeroes
add_colors => 1, # distinct colors for string and numbers
add_real_names => 1, # real column name as comment in query
col_total => 1,
col_sub_total => 1,
row_total => 1,
row_sub_total => 1,
commify => 1, # add thousand separating commas in numbers
rows =>
[
{ col => 'CASE WHEN country="Italy" THEN "S" ELSE "N" END', alias => 'Area' },
{ col => 'country'},
{ col => 'loc', alias => 'location' }
],
cols =>
[
{
id => 'dept_id',
value => 'department',
from => 'xtab_departments'
},
{
id => 'cat_id',
value => 'category',
from => 'xtab_categories'
},
{
id => 'gender',
col_list => [ {id=>'f'}, {id =>'m'}],
from => 'xtab_person'
},
],
from =>
qq{xtab_person
INNER JOIN xtab_locations
ON (xtab_person.loc_id=xtab_locations.loc_id)
INNER JOIN xtab_countries
ON (xtab_countries.country_id=xtab_locations.country_id)
},
};
$params->{title} = "personnel by "
. (join "/", map {exists $_->{alias} ?
$_->{alias} : $_->{col}} @{$params->{rows}} )
( run in 1.498 second using v1.01-cache-2.11-cpan-39bf76dae61 )