changes to handling of from
Justin Hunter [Fri, 13 Mar 2009 05:45:32 +0000 (05:45 +0000)]
lib/DBIx/Class.pm
lib/DBIx/Class/ResultSet.pm
lib/DBIx/Class/Storage/DBI.pm
t/distinct_count.t [new file with mode: 0644]

index bb73581..d9a2012 100644 (file)
@@ -323,6 +323,8 @@ zamolxes: Bogdan Lucaciu <bogdan@wiz.ro>
 
 norbi: Norbert Buchmuller <norbi@nix.hu>
 
+arcanez: Justin Hunter <justin.d.hunter@gmail.com>
+
 =head1 LICENSE
 
 You may distribute this code under the same terms as Perl itself.
index f4ac871..cffc524 100644 (file)
@@ -1156,7 +1156,6 @@ sub _count { # Separated out so pager can get the full count
   # offset, order by, group by, where and page are not needed to count. record_filter is cdbi
   delete $attrs->{$_} for qw/rows offset order_by group_by where page pager record_filter/;
 
-  $self->result_source->resultset;
   my $tmp_rs = (ref $self)->new($self->result_source, $attrs);
   my ($count) = $tmp_rs->cursor->next;
   return $count;
index 09dc92a..54491a7 100644 (file)
@@ -96,17 +96,19 @@ sub _find_syntax {
 sub select {
   my ($self, $table, $fields, $where, $order, @rest) = @_;
   local $self->{having_bind} = [];
+
+#  if (ref $table eq 'HASH') {
+#    my $alias;
+#    ($alias, $table) = %$table;
+#  }
   if (ref $table eq 'SCALAR') {
     $table = $$table;
   }
-  elsif (ref $table eq 'HASH') {
-    ## what if they want to alias a sub query?
-  }
   elsif (ref $table eq 'REF') {
-    #my ($sql, @bind) = @{${$t}}; push(@{$self->{having_bind}}, @bind;);
-    my $t = $table; 
-    $table = shift @$$t;
-    while (my $b = shift @$$t) { push @{$self->{having_bind}}, $b; }
+    my ($sql, @bind) = @{${$table}};
+    push(@{$self->{having_bind}}, @bind);
+    $table = $sql;
   }
   elsif (not ref $table) {
     $table = $self->_quote($table);
diff --git a/t/distinct_count.t b/t/distinct_count.t
new file mode 100644 (file)
index 0000000..b3f3446
--- /dev/null
@@ -0,0 +1,26 @@
+use strict;
+use warnings;  
+
+use Test::More;
+use lib qw(t/lib);
+use lib '/sporkrw/xfer/DBIx-Class/0.08/branches/count_distinct/lib';
+use DBICTest;
+
+my $schema = DBICTest->init_schema();
+
+eval "use DBD::SQLite";
+plan skip_all => 'needs DBD::SQLite for testing' if $@;
+plan tests => 4;
+
+cmp_ok($schema->resultset("Tag")->count({ tag => 'Blue' }),
+           '==', 9, 'Count without DISTINCT ok');
+
+cmp_ok($schema->resultset("Tag")->count({ tag => [ 'Blue', 'Shiny' ] }, { group_by => 'tag' }),
+           '==', 2, 'Count with single column group_by ok');
+
+cmp_ok($schema->resultset("Tag")->count({ tag => 'Blue' }, { group_by => [ qw/tag cd/ ]}), 
+           '==', 4, 'Count with multiple column group_by ok');
+
+cmp_ok($schema->resultset("Tag")->count({ tag => 'Blue' }, { distinct => 1 }),
+           '==', 4, "Count with single column distinct ok");
+