fixed test plan
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI / Cursor.pm
CommitLineData
c0e7b4e5 1package # hide from PAUSE
2 DBIx::Class::Storage::DBI::Cursor;
28927b50 3
4use base qw/DBIx::Class::Cursor/;
5
6use strict;
7use warnings;
8
9sub new {
cb5f2eea 10 my ($class, $storage, $args, $attrs) = @_;
28927b50 11 #use Data::Dumper; warn Dumper(@_);
cb5f2eea 12 $class = ref $class if ref $class;
28927b50 13 my $new = {
cb5f2eea 14 storage => $storage,
28927b50 15 args => $args,
16 pos => 0,
17 attrs => $attrs };
cb5f2eea 18 return bless ($new, $class);
28927b50 19}
20
21sub next {
22 my ($self) = @_;
cb5f2eea 23 if ($self->{attrs}{rows} && $self->{pos} >= $self->{attrs}{rows}) {
71e65b39 24 $self->{sth}->finish if $self->{sth}->{Active};
cb5f2eea 25 delete $self->{sth};
26 $self->{done} = 1;
27 }
28 return if $self->{done};
29 unless ($self->{sth}) {
30 $self->{sth} = ($self->{storage}->_select(@{$self->{args}}))[1];
5c91499f 31 if ($self->{attrs}{software_limit}) {
32 if (my $offset = $self->{attrs}{offset}) {
cb5f2eea 33 $self->{sth}->fetch for 1 .. $offset;
5c91499f 34 }
35 }
28927b50 36 }
cb5f2eea 37 my @row = $self->{sth}->fetchrow_array;
38 if (@row) {
39 $self->{pos}++;
40 } else {
41 delete $self->{sth};
42 $self->{done} = 1;
43 }
28927b50 44 return @row;
45}
46
1a14aa3f 47sub all {
48 my ($self) = @_;
49 return $self->SUPER::all if $self->{attrs}{rows};
cb5f2eea 50 $self->{sth}->finish if $self->{sth}->{Active};
51 delete $self->{sth};
52 my ($rv, $sth) = $self->{storage}->_select(@{$self->{args}});
1a14aa3f 53 return @{$sth->fetchall_arrayref};
54}
55
28927b50 56sub reset {
57 my ($self) = @_;
58 $self->{sth}->finish if $self->{sth}->{Active};
cb5f2eea 59 delete $self->{sth};
28927b50 60 $self->{pos} = 0;
cb5f2eea 61 delete $self->{done};
28927b50 62 return $self;
63}
64
65sub DESTROY {
66 my ($self) = @_;
67 $self->{sth}->finish if $self->{sth}->{Active};
68}
69
701;