fix for count after slice (report and tests from JOHANL)
Matt S Trout [Tue, 17 Jul 2007 23:07:06 +0000 (23:07 +0000)]
Changes
lib/DBIx/Class/ResultSet.pm
t/76joins.t

diff --git a/Changes b/Changes
index da22d82..3d7ef2d 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,5 +1,7 @@
 Revision history for DBIx::Class
 
+        - count no longer returns negative values after slice
+          (report and test from JOHANL)
         - rebless before building datetime_parser
           (patch from mattlaw / Matt Lawrence)
 
index 8d9f569..75ba410 100644 (file)
@@ -938,6 +938,7 @@ sub count {
   $count -= $self->{_attrs}{offset} if $self->{_attrs}{offset};
   $count = $self->{attrs}{rows} if
     $self->{attrs}{rows} and $self->{attrs}{rows} < $count;
+  $count = 0 if ($count < 0);
   return $count;
 }
 
index a401927..92e5785 100644 (file)
@@ -16,7 +16,7 @@ BEGIN {
     eval "use DBD::SQLite";
     plan $@
         ? ( skip_all => 'needs DBD::SQLite for testing' )
-        : ( tests => 63 );
+        : ( tests => 64 );
 }
 
 # figure out if we've got a version of sqlite that is older than 3.2.6, in
@@ -146,6 +146,9 @@ $rs = $schema->resultset("CD")->search(
 );
 cmp_ok( scalar $rs->all, '==', scalar $rs->slice(0, $rs->count - 1), 'slice() with join has same count as all()' );
 
+ok(!$rs->slice($rs->count+1000, $rs->count+1002)->count,
+  'Slicing beyond end of rs returns a zero count');
+
 $rs = $schema->resultset("Artist")->search(
         { 'liner_notes.notes' => 'Kill Yourself!' },
         { join => { 'cds' => 'liner_notes' } });