summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2016-08-13 02:12:50 -0400
committerJesse Luehrs <doy@tozt.net>2016-08-13 02:12:50 -0400
commitd12114019f91718f26a32012f610a249e0f359ff (patch)
tree2cafcbb6824f53a48e2c6207b1b07f9f7d920611
parent63e188234a7ecb0a0e20944c9477dd6e82cc8343 (diff)
downloadchart-clicker-sql-d12114019f91718f26a32012f610a249e0f359ff.tar.gz
chart-clicker-sql-d12114019f91718f26a32012f610a249e0f359ff.zip
initial sketch
-rw-r--r--lib/Chart/Clicker/SQL.pm80
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;