From: Matt S Trout Date: Sat, 6 Aug 2005 20:22:52 +0000 (+0000) Subject: mst once again forgets to 'svk add', as spotted by dkubb X-Git-Tag: v0.03001~66 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=89c0a5a2dd20b4973b39b17caff0843efc8a5e60;p=dbsrgits%2FDBIx-Class.git mst once again forgets to 'svk add', as spotted by dkubb --- diff --git a/lib/DBIx/Class/ResultSet.pm b/lib/DBIx/Class/ResultSet.pm new file mode 100644 index 0000000..eb05a62 --- /dev/null +++ b/lib/DBIx/Class/ResultSet.pm @@ -0,0 +1,80 @@ +package DBIx::Class::ResultSet; + +use strict; +use warnings; +use overload + '0+' => 'count', + fallback => 1; + +sub new { + my ($it_class, $db_class, $cursor, $args, $cols, $attrs) = @_; + #use Data::Dumper; warn Dumper(@_); + $it_class = ref $it_class if ref $it_class; + $attrs = { %{ $attrs || {} } }; + unless ($cursor) { + $attrs->{bind} = $args; + $cursor = $db_class->storage->select($db_class->_table_name,$cols, + $attrs->{where},$attrs); + } + my $new = { + class => $db_class, + cursor => $cursor, + cols => $cols, + args => $args, + cond => $attrs->{where}, + 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) = @_; + my @row = $self->{cursor}->next; + return unless (@row); + return $self->{class}->_row_to_object($self->{cols}, \@row); +} + +sub count { + my ($self) = @_; + return $self->{attrs}{rows} if $self->{attrs}{rows}; + return $self->{class}->count($self->{cond}, { bind => $self->{args} }); +} + +sub all { + my ($self) = @_; + $self->reset; + my @all; + while (my $obj = $self->next) { + push(@all, $obj); + } + $self->reset; + return @all; +} + +sub reset { + my ($self) = @_; + $self->{cursor}->reset; + return $self; +} + +sub first { + return $_[0]->reset->next; +} + +sub delete_all { + my ($self) = @_; + $_->delete for $self->all; + return 1; +} + +1;