Add joined count test
[dbsrgits/DBIx-Class.git] / t / count / count_distinct.t
1 use strict;
2 use warnings;  
3
4 use Test::More;
5
6 use lib qw(t/lib);
7
8 use DBICTest;
9 use DBIC::SqlMakerTest;
10
11 my $schema = DBICTest->init_schema();
12
13 eval "use DBD::SQLite";
14 plan skip_all => 'needs DBD::SQLite for testing' if $@;
15 plan tests => 13;
16
17 my $in_rs = $schema->resultset("Tag")->search({ tag => [ 'Blue', 'Shiny' ] });
18
19 cmp_ok($schema->resultset("Tag")->count({ tag => 'Blue' }),
20            '==', 4, 'Count without DISTINCT');
21
22 cmp_ok($schema->resultset("Tag")->count({ tag => [ 'Blue', 'Shiny' ] }, { group_by => 'tag' }),
23            '==', 2, 'Count with single column group_by');
24
25 cmp_ok($schema->resultset("Tag")->count({ tag => 'Blue' }, { group_by => [ qw/tag cd/ ]}), 
26            '==', 4, 'Count with multiple column group_by');
27
28 cmp_ok($schema->resultset("Tag")->count({ tag => 'Blue' }, { distinct => 1 }),
29            '==', 4, "Count with single column distinct");
30
31 cmp_ok($schema->resultset("Tag")->count({ tag => { -in => $in_rs->get_column('tag')->as_query } }),
32            '==', 4, "Count with IN subquery");
33
34 cmp_ok($schema->resultset("Tag")->count({ tag => { -in => $in_rs->get_column('tag')->as_query } }, { group_by => 'tag' }),
35            '==', 1, "Count with IN subquery with outside group_by");
36
37 cmp_ok($schema->resultset("Tag")->count({ tag => { -in => $in_rs->get_column('tag')->as_query } }, { distinct => 1 }),
38            '==', 4, "Count with IN subquery with outside distinct");
39
40 cmp_ok($schema->resultset("Tag")->count({ tag => { -in => $in_rs->get_column('tag')->as_query } }, { distinct => 1, select => 'tag' }),
41            '==', 1, "Count with IN subquery with outside distinct on a single column");
42
43 cmp_ok($schema->resultset("Tag")->count({ tag => { -in => $in_rs->search({}, { group_by => 'tag' })->get_column('tag')->as_query } }),
44            '==', 4, "Count with IN subquery with single group_by");
45
46 cmp_ok($schema->resultset("Tag")->count({ tag => { -in => $in_rs->search({}, { group_by => [ qw/tag cd/ ] })->get_column('tag')->as_query } }),
47            '==', 4, "Count with IN subquery with multiple group_by");
48
49 cmp_ok($schema->resultset("Tag")->count({ tag => \"= 'Blue'" }),
50            '==', 4, "Count without DISTINCT, using literal SQL");
51
52 cmp_ok($schema->resultset("Tag")->count({ tag => \" IN ('Blue', 'Shiny')" }, { group_by => 'tag' }),
53            '==', 2, "Count with literal SQL and single group_by");
54
55 cmp_ok($schema->resultset("Tag")->count({ tag => \" IN ('Blue', 'Shiny')" }, { group_by => [ qw/tag cd/ ] }),
56            '==', 6, "Count with literal SQL and multiple group_by");