X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FCursor.pm;h=95cbe557aca7591da353f030e6924273fe7670e5;hb=c5340bfac7aff784999be6ab4fa803fd9440043f;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..95cbe55 100644 --- a/lib/DBIx/Class/Cursor.pm +++ b/lib/DBIx/Class/Cursor.pm @@ -2,64 +2,96 @@ 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(); + + # raw values off the database handle in resultset columns/select order + my @next_cd_column_values = $cursor->next; + + # list of all raw values as arrayrefs + my @all_cds_column_values = $cursor->all; + +=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]; -} +=head1 FURTHER QUESTIONS? -sub first { - return $_[0]->reset->next; -} +Check the list of L. + +=head1 COPYRIGHT AND LICENSE + +This module is free software L +by the L. You can +redistribute it and/or modify it under the same terms as the +L. + +=cut 1;