Chaining POC test
[dbsrgits/DBIx-Class.git] / t / search / select_chains.t
1 use strict;
2 use warnings;
3
4 use Test::More;
5 use Test::Exception;
6
7 use lib qw(t/lib);
8 use DBIC::SqlMakerTest;
9 use DBICTest;
10
11
12 my $schema = DBICTest->init_schema();
13
14 my @chain = (
15   {
16     columns     => [ 'cdid' ],
17     '+select'   => [ { lower => 'title' }, 'genreid' ],
18     '+as'       => [ qw/title_lc genreid/ ],
19   } => 'SELECT me.cdid, LOWER( title ), me.genreid FROM cd me',
20
21   {
22     '+columns'  => [ { max_year => { max => 'me.year' }}, ],
23     '+select'   => [ { count => 'me.cdid' }, ],
24     '+as'       => [ 'cnt' ],
25   } => 'SELECT me.cdid, MAX( me.year ), LOWER( title ), me.genreid, COUNT( me.cdid ) FROM cd me',
26
27   {
28     select      => [ { min => 'me.cdid' }, ],
29     as          => [ 'min_id' ],
30   } => 'SELECT MIN( me.cdid ) FROM cd me',
31
32   {
33     '+columns' => [ { cnt => { count => 'cdid' } } ],
34   } => 'SELECT COUNT ( cdid ), MIN( me.cdid ) FROM cd me',
35
36   {
37     columns => [ 'year' ],
38   } => 'SELECT me.year FROM cd me',
39 );
40
41 my $rs = $schema->resultset('CD');
42
43 my $testno = 1;
44 while (@chain) {
45   my $attrs = shift @chain;
46   my $sql = shift @chain;
47
48   $rs = $rs->search ({}, $attrs);
49
50   is_same_sql_bind (
51     $rs->as_query,
52     "x( $sql )", # the x-es are here until SQLA is fixed
53     [],
54     "Test $testno of SELECT assembly ok",
55   );
56
57   $testno++;
58 }
59
60 done_testing;