diff options
author | Jesse Luehrs <doy@tozt.net> | 2016-08-13 02:12:50 -0400 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2016-08-13 02:12:50 -0400 |
commit | d12114019f91718f26a32012f610a249e0f359ff (patch) | |
tree | 2cafcbb6824f53a48e2c6207b1b07f9f7d920611 /lib/Chart/Clicker | |
parent | 63e188234a7ecb0a0e20944c9477dd6e82cc8343 (diff) | |
download | chart-clicker-sql-d12114019f91718f26a32012f610a249e0f359ff.tar.gz chart-clicker-sql-d12114019f91718f26a32012f610a249e0f359ff.zip |
initial sketch
Diffstat (limited to 'lib/Chart/Clicker')
-rw-r--r-- | lib/Chart/Clicker/SQL.pm | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/lib/Chart/Clicker/SQL.pm b/lib/Chart/Clicker/SQL.pm index e69de29..d4ca68a 100644 --- a/lib/Chart/Clicker/SQL.pm +++ b/lib/Chart/Clicker/SQL.pm @@ -0,0 +1,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; |