Refactoring, cleanup, lose unnecessary resultset/cursor objects
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI / Cursor.pm
1 package DBIx::Class::Storage::DBI::Cursor;
2
3 use base qw/DBIx::Class::Cursor/;
4
5 use strict;
6 use warnings;
7
8 sub new {
9   my ($it_class, $sth, $args, $attrs) = @_;
10   #use Data::Dumper; warn Dumper(@_);
11   $it_class = ref $it_class if ref $it_class;
12   my $new = {
13     sth => $sth,
14     args => $args,
15     pos => 0,
16     attrs => $attrs };
17   return bless ($new, $it_class);
18 }
19
20 sub next {
21   my ($self) = @_;
22   return if $self->{attrs}{rows}
23     && $self->{pos} >= $self->{attrs}{rows}; # + $self->{attrs}{offset});
24   my $sth = $self->{sth};
25   unless ($self->{live_sth}) {
26     $sth->execute(@{$self->{args} || []});
27     if (my $offset = $self->{attrs}{offset}) {
28       $sth->fetch for 1 .. $offset;
29     }
30     $self->{live_sth} = 1;
31   }
32   my @row = $sth->fetchrow_array;
33   $self->{pos}++ if @row;
34   return @row;
35 }
36
37 sub all {
38   my ($self) = @_;
39   return $self->SUPER::all if $self->{attrs}{rows};
40   my $sth = $self->{sth};
41   $sth->finish if $sth->{Active};
42   $sth->execute(@{$self->{args} || []});
43   delete $self->{live_sth};
44   return @{$sth->fetchall_arrayref};
45 }
46
47 sub reset {
48   my ($self) = @_;
49   $self->{sth}->finish if $self->{sth}->{Active};
50   $self->{pos} = 0;
51   $self->{live_sth} = 0;
52   return $self;
53 }
54
55 sub DESTROY {
56   my ($self) = @_;
57   $self->{sth}->finish if $self->{sth}->{Active};
58 }
59
60 1;