Sybase count by first pk, if available
Rafael Kitover [Wed, 10 Jun 2009 12:35:52 +0000 (12:35 +0000)]
lib/DBIx/Class/Storage/DBI.pm
lib/DBIx/Class/Storage/DBI/Sybase.pm

index a9070e0..c95195f 100644 (file)
@@ -1325,7 +1325,7 @@ sub _resolve_ident_sources {
   return $alias2source;
 }
 
-sub _trim_attributes_for_count {
+sub _copy_attributes_for_count {
   my ($self, $source, $attrs) = @_;
   my %attrs = %$attrs;
 
@@ -1338,7 +1338,7 @@ sub _trim_attributes_for_count {
 sub count {
   my ($self, $source, $attrs) = @_;
 
-  my $tmp_attrs = $self->_trim_attributes_for_count($source, $attrs);
+  my $tmp_attrs = $self->_copy_attributes_for_count($source, $attrs);
 
   # overwrite the selector
   $tmp_attrs->{select} = { count => '*' };
index 385ac30..4ffaae2 100644 (file)
@@ -81,9 +81,11 @@ sub count {
   my $offset = $attrs->{offset} || 0;
   my $total  = $attrs->{rows} + $offset;
 
-  my $new_attrs = $self->_trim_attributes_for_count($source, $attrs);
-  $new_attrs->{select} = '1';
-  $new_attrs->{as}     = ['dummy'];
+  my $new_attrs = $self->_copy_attributes_for_count($source, $attrs);
+
+  my $first_pk = ($source->primary_columns)[0];
+
+  $new_attrs->{select} = $first_pk ? "me.$first_pk" : 1;
 
   my $tmp_rs = $source->resultset_class->new($source, $new_attrs);