9 use DBIC::SqlMakerTest;
11 my $schema = DBICTest->init_schema();
13 eval "use DBD::SQLite";
14 plan skip_all => 'needs DBD::SQLite for testing' if $@;
17 my $in_rs = $schema->resultset("Tag")->search({ tag => [ 'Blue', 'Shiny' ] });
19 cmp_ok($schema->resultset("Tag")->count({ tag => 'Blue' }),
20 '==', 4, 'Count without DISTINCT');
22 cmp_ok($schema->resultset("Tag")->count({ tag => [ 'Blue', 'Shiny' ] }, { group_by => 'tag' }),
23 '==', 2, 'Count with single column group_by');
25 cmp_ok($schema->resultset("Tag")->count({ tag => 'Blue' }, { group_by => [ qw/tag cd/ ]}),
26 '==', 4, 'Count with multiple column group_by');
28 cmp_ok($schema->resultset("Tag")->count({ tag => 'Blue' }, { distinct => 1 }),
29 '==', 4, "Count with single column distinct");
31 cmp_ok($schema->resultset("Tag")->count({ tag => { -in => $in_rs->get_column('tag')->as_query } }),
32 '==', 4, "Count with IN subquery");
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");
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");
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");
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");
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");
49 cmp_ok($schema->resultset("Tag")->count({ tag => \"= 'Blue'" }),
50 '==', 4, "Count without DISTINCT, using literal SQL");
52 cmp_ok($schema->resultset("Tag")->count({ tag => \" IN ('Blue', 'Shiny')" }, { group_by => 'tag' }),
53 '==', 2, "Count with literal SQL and single group_by");
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");