Make sure unaliased selectors and prefetch coexist peacefully
[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'   => \'unaliased randomness',
38   } => 'SELECT
39           me.cdid,
40           me.title,
41           DISTINCT(foo, bar),
42           unaliased randomness
43         FROM cd me'
44     => [qw/cdid title foo bar/],
45   {
46     '+select'   => [ 'genreid', $multicol_rs->as_query ],
47     '+as'       => [qw/genreid name rank/],
48   } => 'SELECT
49           me.cdid,
50           me.title,
51           DISTINCT(foo, bar),
52           me.genreid,
53           (SELECT me.name, me.rank FROM artist me WHERE ( artistid 1 )),
54           unaliased randomness
55         FROM cd me'
56     => [qw/cdid title foo bar genreid name rank/],
57
58   {
59     '+select'   => { count => 'me.cdid', -as => 'cnt' },  # lack of 'as' infers from '-as'
60     '+columns'  => { len => { length => 'me.title' } },
61   } => 'SELECT
62           me.cdid,
63           me.title,
64           LENGTH( me.title ),
65           COUNT( me.cdid ) AS cnt,
66           DISTINCT(foo, bar),
67           me.genreid,
68           (SELECT me.name, me.rank FROM artist me WHERE ( artistid 1 )),
69           unaliased randomness
70         FROM cd me'
71     => [qw/cdid title len cnt foo bar genreid name rank/],
72
73
74 );
75
76 my $rs = $schema->resultset('CD');
77
78 my $testno = 1;
79 while (@chain) {
80   my $attrs = shift @chain;
81   my $sql = shift @chain;
82   my $as = shift @chain;
83
84   $rs = $rs->search ({}, $attrs);
85
86   is_same_sql_bind (
87     $rs->as_query,
88     "($sql)",
89     [],
90     "Test $testno of SELECT assembly ok",
91   );
92
93   is_deeply(
94     $rs->_resolved_attrs->{as},
95     $as,
96     "Correct dbic-side aliasing for test $testno",
97   );
98
99   $testno++;
100 }
101
102 done_testing;