1 package DBIx::Class::ResultSet;
11 my ($it_class, $db_class, $attrs) = @_;
12 #use Data::Dumper; warn Dumper(@_);
13 $it_class = ref $it_class if ref $it_class;
14 $attrs = { %{ $attrs || {} } };
15 my $cols = [ $db_class->_select_columns ];
19 cond => $attrs->{where},
23 return bless ($new, $it_class);
28 my ($db_class, $attrs) = @{$self}{qw/class attrs/};
30 $attrs->{rows} = $self->pager->entries_per_page;
31 $attrs->{offset} = $self->pager->skipped;
33 return $self->{cursor}
34 ||= $db_class->storage->select($db_class->_table_name, $self->{cols},
35 $attrs->{where},$attrs);
39 my ($self, $min, $max) = @_;
40 my $attrs = { %{ $self->{attrs} || {} } };
41 $self->{class}->throw("Can't slice without where") unless $attrs->{where};
42 $attrs->{offset} = $min;
43 $attrs->{rows} = ($max ? ($max - $min + 1) : 1);
44 my $slice = $self->new($self->{class}, $attrs);
45 return (wantarray ? $slice->all : $slice);
50 my @row = $self->cursor->next;
52 return $self->{class}->_row_to_object($self->{cols}, \@row);
57 my $db_class = $self->{class};
58 my $attrs = { %{ $self->{attrs} } };
59 unless ($self->{count}) {
60 # offset and order by are not needed to count
61 delete $attrs->{$_} for qw/offset order_by/;
63 my @cols = 'COUNT(*)';
64 $self->{count} = $db_class->storage->select_single($db_class->_table_name, \@cols,
65 $self->{cond}, $attrs);
67 return 0 unless $self->{count};
68 return ( $attrs->{rows} && $attrs->{rows} < $self->{count} )
75 return map { $self->{class}->_row_to_object($self->{cols}, $_); }
86 return $_[0]->reset->next;
91 $_->delete for $self->all;
95 *delete_all = \&delete; # Yeah, yeah, yeah ...
99 my $attrs = $self->{attrs};
100 delete $attrs->{offset};
101 my $rows_per_page = delete $attrs->{rows} || 10;
102 $self->{pager} ||= Data::Page->new(
103 $self->count, $rows_per_page, $attrs->{page} || 1);
104 $attrs->{rows} = $rows_per_page;
105 return $self->{pager};
109 my ($self, $page) = @_;
110 my $attrs = $self->{attrs};
111 $attrs->{page} = $page;
112 return $self->new($self->{class}, $attrs);