ResultSetColumn::func() now returns all results if called in list context
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / ResultSetColumn.pm
index 876a3c1..68cc4e0 100644 (file)
@@ -35,7 +35,9 @@ passed as params. Used internally by L<DBIx::Class::ResultSet/get_column>.
 sub new {
   my ($class, $rs, $column) = @_;
   $class = ref $class if ref $class;
-  my $new = bless { _column => $column, _parent_resultset => $rs }, $class;
+  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;
 }
@@ -173,8 +175,13 @@ value. Produces the following SQL:
 
 sub func {
   my ($self,$function) = @_;
-  my ($row) = $self->{_parent_resultset}->search(undef, {select => {$function => $self->{_column}}, as => [$self->{_column}]})->cursor->next;
-  return $row;
+  my $cursor = $self->{_parent_resultset}->search(undef, {select => {$function => $self->{_column}}, as => [$self->{_column}]})->cursor;
+  
+  if( wantarray ) {
+    return map { $_->[ 0 ] } $cursor->all;
+  }
+
+  return ( $cursor->next )[ 0 ];
 }
 
 1;