Another revamp of the selector resolution - now supporting unbalanced select/as
[dbsrgits/DBIx-Class.git] / t / search / select_chains_unbalanced.t
1 use strict;
2 use warnings;
3
4 use Test::More;
5
6 use lib qw(t/lib);
7 use DBIC::SqlMakerTest;
8 use DBICTest;
9
10
11 my $schema = DBICTest->init_schema();
12
13 my $multicol_rs = $schema->resultset('Artist')->search({ artistid => \'1' }, { columns => [qw/name rank/] });
14
15 my @chain = (
16   {
17     select      => 'title',
18     as          => 'title',
19     columns     => [ 'cdid' ],
20   } => 'SELECT
21           me.cdid,
22           me.title
23         FROM cd me'
24     => [qw/cdid title/],
25
26   {
27     '+select'   => \ 'DISTINCT(foo, bar)',
28     '+as'       => [qw/foo bar/],
29   } => 'SELECT
30           me.cdid,
31           me.title,
32           DISTINCT(foo, bar)
33         FROM cd me'
34     => [qw/cdid title foo bar/],
35
36   {
37     '+select'   => [ 'genreid', $multicol_rs->as_query ],
38     '+as'       => [qw/genreid name rank/],
39   } => 'SELECT
40           me.cdid,
41           me.title,
42           DISTINCT(foo, bar),
43           me.genreid,
44           (SELECT me.name, me.rank FROM artist me WHERE ( artistid 1 ))
45         FROM cd me'
46     => [qw/cdid title foo bar genreid name rank/],
47
48   {
49     '+select'   => { count => 'me.cdid', -as => 'cnt' },  # lack of 'as' infers from '-as'
50     '+columns'  => { len => { length => 'me.title' } },
51   } => 'SELECT
52           me.cdid,
53           me.title,
54           LENGTH( me.title ),
55           COUNT( me.cdid ) AS cnt,
56           DISTINCT(foo, bar),
57           me.genreid,
58           (SELECT me.name, me.rank FROM artist me WHERE ( artistid 1 ))
59         FROM cd me'
60     => [qw/cdid title len cnt foo bar genreid name rank/],
61
62   {
63     '+select'   => \'unaliased randomness',
64   } => 'SELECT
65           me.cdid,
66           me.title,
67           LENGTH( me.title ),
68           COUNT( me.cdid ) AS cnt,
69           DISTINCT(foo, bar),
70           me.genreid,
71           (SELECT me.name, me.rank FROM artist me WHERE ( artistid 1 )),
72           unaliased randomness
73         FROM cd me'
74     => [qw/cdid title len cnt foo bar genreid name rank/],
75
76 );
77
78 my $rs = $schema->resultset('CD');
79
80 my $testno = 1;
81 while (@chain) {
82   my $attrs = shift @chain;
83   my $sql = shift @chain;
84   my $as = shift @chain;
85
86   $rs = $rs->search ({}, $attrs);
87
88   is_same_sql_bind (
89     $rs->as_query,
90     "($sql)",
91     [],
92     "Test $testno of SELECT assembly ok",
93   );
94
95   is_deeply(
96     $rs->_resolved_attrs->{as},
97     $as,
98     'Correct dbic-side aliasing',
99   );
100
101   $testno++;
102 }
103
104 done_testing;