X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FCursor.pm;h=3cd5505d30aea72b4ba8300c432ee0781d984b00;hb=223b8fe3185dba976b275c120ba7a07c05c06644;hp=687c5a4ba006f16226d9de006493e60607a50de4;hpb=74b92d9a6f3501f2db4e612da228b5debb33ac30;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Cursor.pm b/lib/DBIx/Class/Cursor.pm index 687c5a4..3cd5505 100644 --- a/lib/DBIx/Class/Cursor.pm +++ b/lib/DBIx/Class/Cursor.pm @@ -2,40 +2,19 @@ package DBIx::Class::Cursor; use strict; use warnings; -use overload - '0+' => 'count', - fallback => 1; sub new { - my ($it_class, $db_class, $sth, $args, $cols, $attrs) = @_; + my ($it_class, $sth, $args, $attrs) = @_; #use Data::Dumper; warn Dumper(@_); $it_class = ref $it_class if ref $it_class; - unless ($sth) { - $attrs->{bind} = $args; - $sth = $db_class->storage->select($db_class->_table_name,$cols, - $attrs->{where},$attrs); - } my $new = { - class => $db_class, sth => $sth, - cols => $cols, args => $args, pos => 0, attrs => $attrs }; return bless ($new, $it_class); } -sub slice { - my ($self, $min, $max) = @_; - my $attrs = { %{ $self->{attrs} || {} } }; - $self->{class}->throw("Can't slice without where") unless $attrs->{where}; - $attrs->{offset} = $min; - $attrs->{rows} = ($max ? ($max - $min + 1) : 1); - my $slice = $self->new($self->{class}, undef, $self->{args}, - $self->{cols}, $attrs); - return (wantarray ? $slice->all : $slice); -} - sub next { my ($self) = @_; return if $self->{attrs}{rows} @@ -43,36 +22,13 @@ sub next { unless ($self->{live_sth}) { $self->{sth}->execute(@{$self->{args} || []}); if (my $offset = $self->{attrs}{offset}) { - $self->{sth}->fetchrow_array for 1 .. $offset; + $self->{sth}->fetch for 1 .. $offset; } $self->{live_sth} = 1; } my @row = $self->{sth}->fetchrow_array; - return unless (@row); - $self->{pos}++; - return $self->{class}->_row_to_object($self->{cols}, \@row); -} - -sub count { - my ($self) = @_; - return $self->{attrs}{rows} if $self->{attrs}{rows}; - if (my $cond = $self->{attrs}->{where}) { -#warn "Counting ".$$cond; - return $self->{class}->count($cond, { bind => $self->{args} }); - } else { - return scalar $_[0]->all; # So inefficient - } -} - -sub all { - my ($self) = @_; - $self->reset; - my @all; - while (my $obj = $self->next) { - push(@all, $obj); - } - $self->reset; - return @all; + $self->{pos}++ if @row; + return @row; } sub reset { @@ -83,16 +39,6 @@ sub reset { return $self; } -sub first { - return $_[0]->reset->next; -} - -sub delete_all { - my ($self) = @_; - $_->delete for $self->all; - return 1; -} - sub DESTROY { my ($self) = @_; $self->{sth}->finish if $self->{sth}->{Active};