X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FResultSetColumn.pm;h=68cc4e0c795f8c765a5e9135da4ef67c7e2bd347;hb=b6d9f089c019e7d613f97ef4c8384715c1d5cfdc;hp=49b84560c3af8b78392ae638985ae412afb07903;hpb=eb98561caf4a8342cd6cc477499ef71120765fee;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/ResultSetColumn.pm b/lib/DBIx/Class/ResultSetColumn.pm index 49b8456..68cc4e0 100644 --- a/lib/DBIx/Class/ResultSetColumn.pm +++ b/lib/DBIx/Class/ResultSetColumn.pm @@ -35,12 +35,10 @@ passed as params. Used internally by L. sub new { my ($class, $rs, $column) = @_; $class = ref $class if ref $class; - - my $object_ref = { _column => $column, - _parent_resultset => $rs }; - - my $new = bless $object_ref, $class; - $new->throw_exception("column must be supplied") unless ($column); + my $new_parent_rs = $rs->search_rs; # we don't want to mess up the original, so clone it + $new_parent_rs->{attrs}->{prefetch} = undef; # prefetch causes additional columns to be fetched + my $new = bless { _column => $column, _parent_resultset => $new_parent_rs }, $class; + $new->throw_exception("column must be supplied") unless $column; return $new; } @@ -64,7 +62,6 @@ one value. sub next { my $self = shift; - $self->{_resultset} = $self->{_parent_resultset}->search(undef, {select => [$self->{_column}], as => [$self->{_column}]}) unless ($self->{_resultset}); my ($row) = $self->{_resultset}->cursor->next; return $row; @@ -111,8 +108,7 @@ resultset (or C if there are none). =cut sub min { - my $self = shift; - return $self->func('MIN'); + return shift->func('MIN'); } =head2 max @@ -133,8 +129,7 @@ resultset (or C if there are none). =cut sub max { - my $self = shift; - return $self->func('MAX'); + return shift->func('MAX'); } =head2 sum @@ -155,8 +150,7 @@ the resultset. Use on varchar-like columns at your own risk. =cut sub sum { - my $self = shift; - return $self->func('SUM'); + return shift->func('SUM'); } =head2 func @@ -180,11 +174,14 @@ value. Produces the following SQL: =cut sub func { - my $self = shift; - my $function = shift; + my ($self,$function) = @_; + my $cursor = $self->{_parent_resultset}->search(undef, {select => {$function => $self->{_column}}, as => [$self->{_column}]})->cursor; + + if( wantarray ) { + return map { $_->[ 0 ] } $cursor->all; + } - my ($row) = $self->{_parent_resultset}->search(undef, {select => {$function => $self->{_column}}, as => [$self->{_column}]})->cursor->next; - return $row; + return ( $cursor->next )[ 0 ]; } 1;