1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
package Chart::Clicker::SQL;
use Moose;
use 5.020;
use feature 'signatures', 'postderef';
no warnings 'experimental::signatures';
no warnings 'experimental::postderef';
use Chart::Clicker;
use Chart::Clicker::Data::DataSet;
use Chart::Clicker::Data::Series;
use DBI;
has dsn => (
is => 'ro',
isa => 'Str',
required => 1,
);
has user => (
is => 'ro',
isa => 'Str',
default => '',
);
has pass => (
is => 'ro',
isa => 'Str',
default => '',
);
has dbh => (
is => 'ro',
isa => 'DBI::db',
lazy => 1,
default => sub ($self) {
DBI->connect(
$self->dsn,
$self->user,
$self->pass,
{
RaiseError => 1,
ReadOnly => 1,
}
)
},
);
sub render($self, $query) {
my $sth = $self->dbh->prepare($query);
$sth->execute;
my $rows = $sth->fetchall_arrayref;
my @cols = map {
my $idx = $_;
[ map { $_->[$idx] } $rows->@* ]
} 0..($sth->{NUM_OF_FIELDS} - 1);
my @names = $sth->{NAME_lc}->@*;
my $xaxis = shift @names;
my $chart = Chart::Clicker->new;
$chart->get_context('default')->domain_axis->label($xaxis);
my $keys = shift @cols;
for my $col (@cols) {
my $series = Chart::Clicker::Data::Series->new(
name => shift @names,
keys => $keys,
values => $col,
);
my $ds = Chart::Clicker::Data::DataSet->new(series => [ $series ]);
$chart->add_to_datasets($ds);
}
return $chart;
}
__PACKAGE__->meta->make_immutable;
no Moose;
1;
|