X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FCursor.pm;h=14816abed20c8554b1f7397b8bc7ad014d9e3f28;hb=64ae166780d0cb2b9577e506da9b9b240c146d20;hp=d492ebb57fb6de049a5b1a5e72bec057ff5b2b91;hpb=1923c0b4b27dfc62e61cc02b6391e4d37349bcfb;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Cursor.pm b/lib/DBIx/Class/Cursor.pm index d492ebb..14816ab 100644 --- a/lib/DBIx/Class/Cursor.pm +++ b/lib/DBIx/Class/Cursor.pm @@ -2,52 +2,78 @@ package DBIx::Class::Cursor; use strict; use warnings; -use overload - '0+' => 'count', - fallback => 1; + +use base qw/DBIx::Class/; + +=head1 NAME + +DBIx::Class::Cursor - Abstract object representing a query cursor on a +resultset. + +=head1 SYNOPSIS + + my $cursor = $schema->resultset('CD')->cursor(); + my $first_cd = $cursor->next; + +=head1 DESCRIPTION + +A Cursor represents a query cursor on a L object. It +allows for traversing the result set with L, retrieving all results with +L and resetting the cursor with L. + +Usually, you would use the cursor methods built into L +to traverse it. See L, +L and L for more +information. + +=head1 METHODS + +=head2 new + +Virtual method. Returns a new L object. + +=cut sub new { - my ($it_class, $db_class, $sth, $args, $cols) = @_; - $sth->execute(@{$args || []}) unless $sth->{Active}; - my $new = { - class => $db_class, - sth => $sth, - cols => $cols, - args => $args }; - return bless ($new, $it_class); + die "Virtual method!"; } +=head2 next + +Virtual method. Advances the cursor to the next row. Returns an array of +column values (the result of L method). + +=cut + sub next { - my ($self) = @_; - my @row = $self->{sth}->fetchrow_array; - return unless @row; - #unless (@row) { $self->{sth}->finish; return; } - return $self->{class}->_row_to_object($self->{cols}, \@row); + die "Virtual method!"; } -sub count { - return scalar $_[0]->all; # So inefficient +=head2 reset + +Virtual method. Resets the cursor to the beginning. + +=cut + +sub reset { + die "Virtual method!"; } +=head2 all + +Virtual method. Returns all rows in the L. + +=cut + sub all { my ($self) = @_; $self->reset; my @all; - while (my $obj = $self->next) { - push(@all, $obj); + while (my @row = $self->next) { + push(@all, \@row); } $self->reset; return @all; } -sub reset { - $_[0]->{sth}->finish if $_[0]->{sth}->{Active}; - $_[0]->{sth}->execute(@{$_[0]->{args} || []}); - return $_[0]; -} - -sub first { - return $_[0]->reset->next; -} - 1;