From d12114019f91718f26a32012f610a249e0f359ff Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Sat, 13 Aug 2016 02:12:50 -0400 Subject: initial sketch --- lib/Chart/Clicker/SQL.pm | 80 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) 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; -- cgit v1.2.3