[Bast-commits] r6283 - in DBIx-Class/0.08/branches/joined_count:
lib/DBIx/Class t/count
ribasushi at dev.catalyst.perl.org
ribasushi at dev.catalyst.perl.org
Sat May 16 08:40:44 GMT 2009
Author: ribasushi
Date: 2009-05-16 08:40:44 +0000 (Sat, 16 May 2009)
New Revision: 6283
Added:
DBIx-Class/0.08/branches/joined_count/t/count/grouped_pager.t
Modified:
DBIx-Class/0.08/branches/joined_count/lib/DBIx/Class/ResultSet.pm
Log:
Test and fixed for paged grouped count
Modified: DBIx-Class/0.08/branches/joined_count/lib/DBIx/Class/ResultSet.pm
===================================================================
--- DBIx-Class/0.08/branches/joined_count/lib/DBIx/Class/ResultSet.pm 2009-05-16 07:35:47 UTC (rev 6282)
+++ DBIx-Class/0.08/branches/joined_count/lib/DBIx/Class/ResultSet.pm 2009-05-16 08:40:44 UTC (rev 6283)
@@ -1712,8 +1712,15 @@
$self->throw_exception("Can't create pager for non-paged rs")
unless $self->{attrs}{page};
$attrs->{rows} ||= 10;
+
+ # throw away the paging flags and re-run the count (possibly
+ # with a subselect) to get the real total count
+ my $count_attrs = { %$attrs };
+ delete $count_attrs->{$_} for qw/rows offset page pager/;
+ my $total_count = (ref $self)->new($self->result_source, $count_attrs);
+
return $self->{pager} ||= Data::Page->new(
- $self->__count, $attrs->{rows}, $self->{attrs}{page});
+ $total_count, $attrs->{rows}, $self->{attrs}{page});
}
=head2 page
Added: DBIx-Class/0.08/branches/joined_count/t/count/grouped_pager.t
===================================================================
--- DBIx-Class/0.08/branches/joined_count/t/count/grouped_pager.t (rev 0)
+++ DBIx-Class/0.08/branches/joined_count/t/count/grouped_pager.t 2009-05-16 08:40:44 UTC (rev 6283)
@@ -0,0 +1,44 @@
+use strict;
+use warnings;
+
+use Test::More;
+
+use lib qw(t/lib);
+
+use DBICTest;
+
+plan tests => 7;
+
+my $schema = DBICTest->init_schema();
+
+use Data::Dumper;
+
+# add 2 extra artists
+$schema->populate ('Artist', [
+ [qw/name/],
+ [qw/ar_1/],
+ [qw/ar_2/],
+]);
+
+# add 3 extra cds to every artist
+for my $ar ($schema->resultset ('Artist')->all) {
+ for my $cdnum (1 .. 3) {
+ $ar->create_related ('cds', {
+ title => "bogon $cdnum",
+ year => 2000 + $cdnum,
+ });
+ }
+}
+
+my $cds = $schema->resultset ('CD')->search ({}, { group_by => 'artist' } );
+is ($cds->count, 5, 'Resultset collapses to 5 groups');
+
+my ($pg1, $pg2, $pg3) = map { $cds->search_rs ({}, {rows => 2, page => $_}) } (1..3);
+
+for ($pg1, $pg2, $pg3) {
+ is ($_->pager->total_entries, 5, 'Total count via pager correct');
+}
+
+is ($pg1->count, 2, 'First page has 2 groups');
+is ($pg2->count, 2, 'Second page has 2 groups');
+is ($pg3->count, 1, 'Third page has one group remaining');
More information about the Bast-commits
mailing list