X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FCursor.pm;h=ded8b565cca815e51272201a166c6ad5e3ffda1c;hb=942cd0c142a828426a2ba3650991188c7c02178c;hp=b28bf27aeafb16cc78921d25e46e42966a9f5d23;hpb=5464485558c3ed1050cfb6d3dfbab11a0de16915;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Cursor.pm b/lib/DBIx/Class/Cursor.pm index b28bf27..ded8b56 100644 --- a/lib/DBIx/Class/Cursor.pm +++ b/lib/DBIx/Class/Cursor.pm @@ -2,64 +2,76 @@ package DBIx::Class::Cursor; use strict; use warnings; -use overload - '0+' => 'count', - fallback => 1; + +=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, $attrs) = @_; - $sth->execute(@{$args || []}) unless $sth->{Active}; - my $new = { - class => $db_class, - sth => $sth, - cols => $cols, - args => $args, - attrs => $attrs }; - 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 { - my ($self) = @_; - if (my $cond = $self->{attrs}->{where}) { - my $class = $self->{class}; - my $sth = $class->_get_sth( 'select', [ 'COUNT(*)' ], - $class->_table_name, $cond); - $sth->execute(@{$self->{args} || []}); - my ($count) = $sth->fetchrow_array; - $sth->finish; - return $count; - } else { - 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;