very basic outline
[dbsrgits/DBIx-Data-Store.git] / lib / DBIx / Data / Store / Raw.pm
1 package DBIx::Data::Store::Raw;
2
3 use strictures 1;
4
5 use DBIx::Connector;
6
7 sub new {
8   my $proto = shift;
9   bless({ %{$_[0]} }, ref($proto)||$proto);
10 }
11
12 sub connect {
13   my $class = shift;
14   $class->new({ connect_info => [ @_ ] });
15 }
16
17 sub connect_info { shift->{connect_info} }
18
19 sub _connector { $_[0]->{_connector} ||= $_[0]->_build__connector }
20
21 sub _build__connector {
22   DBIx::Connector->new(@{$_[0]->connect_info});
23 }
24
25 sub run_row { shift->_exec_calling('fetchrow_arrayref', @_) }
26
27 sub run_rowset { shift->_exec_calling('fetchall_arrayref', @_) }
28
29 sub run_rowstream {
30   shift->_exec_calling(sub {
31     DBIx::Data::Stream::STH->new({ sth => $_[0] })
32   }, @_);
33 }
34
35 sub _exec_calling {
36   my ($self, $call, @sth_args) = @_;
37   $self->_exec(sub {
38     $self->_sth_for($_[0], @sth_args)->$call
39   });
40 }
41
42 sub _exec {
43   $_[0]->_connector->run($_[1]);
44 }
45
46 sub _sth_for {
47   my ($self, $dbh, $sql, $args) = @_;
48   my $sth = $dbh->prepare_cached($sql, {}, 3);
49   $sth->execute(@$args);
50   return $sth;
51 }
52
53 1;