X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSet.pm;h=8b8da5fbfea7857596b92eec9b21f72ce1e1c65d;hb=bfab575afa37545ee175b824cea554c9c37ab6f5;hp=f5574edd6601304618bbf222fbc3464cc7ff0011;hpb=58a4bd18e28485398f71429b129ac9e2e1073e92;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSet.pm b/lib/DBIx/Class/ResultSet.pm index f5574ed..8b8da5f 100644 --- a/lib/DBIx/Class/ResultSet.pm +++ b/lib/DBIx/Class/ResultSet.pm @@ -9,24 +9,26 @@ use Data::Page; =head1 NAME -DBIX::Class::ResultSet - Responsible for fetching and creating resultset. +DBIx::Class::ResultSet - Responsible for fetching and creating resultset. -=head1 SYNOPSIS; +=head1 SYNOPSIS -$rs=MyApp::DB::Class->search(registered=>1); +my $rs = MyApp::DB::Class->search(registered => 1); +my @rows = MyApp::DB::Class->search(foo => 'bar'); =head1 DESCRIPTION -The resultset is also known as an iterator. +The resultset is also known as an iterator. It is responsible for handling +queries that may return an arbitrary number of rows, e.g. via C +or a C relationship. =head1 METHODS -=over 4 +=head2 new($db_class, \%$attrs) -=item new - -The resultset constructor. Takes a db class and an -attribute hash (see below for more info on attributes) +The resultset constructor. Takes a table class and an attribute hash +(see below for more information on attributes). Does not perform +any queries -- these are executed as needed by the other methods. =cut @@ -69,7 +71,7 @@ sub new { return $new; } -=item search +=head2 search my @obj = $rs->search({ foo => 3 }); # "... WHERE foo = 3" my $new_rs = $rs->search({ foo => 3 }); @@ -104,14 +106,15 @@ sub search { return (wantarray ? $rs->all : $rs); } -=item search_literal +=head2 search_literal my @obj = $rs->search_literal($literal_where_cond, @bind); my $new_rs = $rs->search_literal($literal_where_cond, @bind); Pass a literal chunk of SQL to be added to the conditional part of the resultset -=cut +=cut + sub search_literal { my ($self, $cond, @vals) = @_; my $attrs = (ref $vals[$#vals] eq 'HASH' ? { %{ pop(@vals) } } : {}); @@ -119,9 +122,9 @@ sub search_literal { return $self->search(\$cond, $attrs); } -=item cursor +=head2 cursor -Return a storage driven cursor to the given resultset. +Returns a storage-driven cursor to the given resultset. =cut @@ -137,7 +140,7 @@ sub cursor { $attrs->{where},$attrs); } -=item search_like +=head2 search_like Identical to search except defaults to 'LIKE' instead of '=' in condition @@ -154,9 +157,9 @@ sub search_like { return $class->search($query, { %$attrs }); } -=item slice +=head2 slice($first, $last) -return a number of elements from the given resultset. +Returns a subset of elements from the resultset. =cut @@ -170,9 +173,9 @@ sub slice { return (wantarray ? $slice->all : $slice); } -=item next +=head2 next -Returns the next element in this resultset. +Returns the next element in the resultset (undef is there is none). =cut @@ -222,9 +225,9 @@ sub _construct_object { return $new; } -=item count +=head2 count -Performs an SQL count with the same query as the resultset was built +Performs an SQL C with the same query as the resultset was built with to find the number of elements. If passed arguments, does a search on the resultset and counts the results of that. @@ -249,18 +252,18 @@ sub count { : $self->{count}; } -=item count_literal +=head2 count_literal -Calls search_literal with the passed arguments, then count +Calls search_literal with the passed arguments, then count. =cut sub count_literal { shift->search_literal(@_)->count; } -=item all +=head2 all -Returns all elements in the resultset. Is called implictly if the search -method is used in list context. +Returns all elements in the resultset. Called implictly if the resultset +is returned in list context. =cut @@ -270,9 +273,9 @@ sub all { $self->cursor->all; } -=item reset +=head2 reset -Reset this resultset's cursor, so you can iterate through the elements again. +Resets the resultset's cursor, so you can iterate through the elements again. =cut @@ -282,9 +285,9 @@ sub reset { return $self; } -=item first +=head2 first -resets the resultset and returns the first element. +Resets the resultset and returns the first element. =cut @@ -292,7 +295,7 @@ sub first { return $_[0]->reset->next; } -=item delete +=head2 delete Deletes all elements in the resultset. @@ -306,7 +309,7 @@ sub delete { *delete_all = \&delete; # Yeah, yeah, yeah ... -=item pager +=head2 pager Returns a L object for the current resultset. Only makes sense for queries with page turned on. @@ -324,9 +327,9 @@ sub pager { return $self->{pager}; } -=item page +=head2 page($page_num) -Returns a new resultset representing a given page. +Returns a new resultset for the specified page. =cut @@ -337,49 +340,56 @@ sub page { return $self->new($self->{source}, $attrs); } -=back - =head1 Attributes -The resultset is responsible for handling the various attributes that -can be passed in with the search functions. Here's an overview of them: +The resultset takes various attributes that modify its behavior. +Here's an overview of them: + +=head2 order_by -=over 4 +Which column(s) to order the results by. This is currently passed +through directly to SQL, so you can give e.g. C for a +descending order. -=item order_by +=head2 cols -Which column to order the results by. +Which columns should be retrieved. -=item cols +=head2 join -Which cols should be retrieved on the first search. +Contains a list of relationships that should be joined for this query. Can also +contain a hash reference to refer to that relation's relations. So, if one column +in your class C foo and another C bar, you can do +C<< join => [qw/ foo bar /] >> to join both (and e.g. use them for C). +If a foo contains many margles and you want to join those too, you can do +C<< join => { foo => 'margle' } >>. If you want to fetch the columns from the +related table as well, see C below. -=item join +=head2 prefetch -Contains a list of relations that should be joined for this query. Can also -contain a hash referece to refer to that relation's relations. +Contains a list of relationships that should be fetched along with the main +query (when they are accessed afterwards they will have already been +"prefetched"). This is useful for when you know you will need the related +object(s), because it saves a query. Currently limited to prefetching +one relationship deep, so unlike C, prefetch must be an arrayref. -=item from +=head2 from -This attribute can contain a arrayref of elements. each element can be another +This attribute can contain a arrayref of elements. Each element can be another arrayref, to nest joins, or it can be a hash which represents the two sides of the join. -*NOTE* Use this on your own risk. This allows you to shoot your foot off! +NOTE: Use this on your own risk. This allows you to shoot your foot off! -=item page +=head2 page -Should the resultset be paged? This can also be enabled by using the -'page' option. +For a paged resultset, specifies which page to retrieve. Leave unset +for an unpaged resultset. -=item rows +=head2 rows -For paged resultsset, how many rows per page +For a paged resultset, how many rows per page -=item offset - -For paged resultsset, which page to start on. - -=back +=cut 1;