Revert the smart-select-ordering introduced in 36fd7f07
[dbsrgits/DBIx-Class.git] / t / search / select_chains_unbalanced.t
CommitLineData
00336453 1use strict;
2use warnings;
3
4use Test::More;
f7f53a89 5use Test::Exception;
00336453 6
7use lib qw(t/lib);
8use DBIC::SqlMakerTest;
9use DBICTest;
10
11
12my $schema = DBICTest->init_schema();
13
14my $multicol_rs = $schema->resultset('Artist')->search({ artistid => \'1' }, { columns => [qw/name rank/] });
15
16my @chain = (
17 {
f7f53a89 18 select => 'cdid',
19 as => 'cd_id',
20 columns => [ 'title' ],
00336453 21 } => 'SELECT
f7f53a89 22 me.title,
23 me.cdid
00336453 24 FROM cd me'
f7f53a89 25 => [qw/title cd_id/],
00336453 26
27 {
28 '+select' => \ 'DISTINCT(foo, bar)',
29 '+as' => [qw/foo bar/],
30 } => 'SELECT
00336453 31 me.title,
f7f53a89 32 me.cdid,
00336453 33 DISTINCT(foo, bar)
34 FROM cd me'
f7f53a89 35 => [qw/title cd_id foo bar/],
00336453 36
37 {
36fd7f07 38 '+select' => [ 'genreid', $multicol_rs->as_query ],
39 '+as' => [qw/genreid name rank/],
00336453 40 } => 'SELECT
00336453 41 me.title,
f7f53a89 42 me.cdid,
00336453 43 DISTINCT(foo, bar),
44 me.genreid,
36fd7f07 45 (SELECT me.name, me.rank FROM artist me WHERE ( artistid 1 )),
00336453 46 FROM cd me'
f7f53a89 47 => [qw/title cd_id foo bar genreid name rank/],
00336453 48
49 {
36fd7f07 50 '+select' => { count => 'me.cdid', -as => 'cnt' }, # lack of 'as' infers from '-as'
51 '+columns' => { len => { length => 'me.title' } },
00336453 52 } => 'SELECT
00336453 53 me.title,
54 LENGTH( me.title ),
f7f53a89 55 me.cdid,
56 DISTINCT(foo, bar),
57 me.genreid,
58 (SELECT me.name, me.rank FROM artist me WHERE ( artistid 1 )),
00336453 59 COUNT( me.cdid ) AS cnt,
f7f53a89 60 FROM cd me'
61 => [qw/title len cd_id foo bar genreid name rank cnt/],
62 {
63 '+select' => \'unaliased randomness',
64 } => 'SELECT
65 me.title,
66 LENGTH( me.title ),
67 me.cdid,
00336453 68 DISTINCT(foo, bar),
69 me.genreid,
70 (SELECT me.name, me.rank FROM artist me WHERE ( artistid 1 )),
f7f53a89 71 COUNT( me.cdid ) AS cnt,
00336453 72 unaliased randomness
73 FROM cd me'
f7f53a89 74 => [qw/title len cd_id foo bar genreid name rank cnt/],
75 {
76 '+select' => \'MOAR unaliased randomness',
77 } => 'SELECT
78 me.title,
79 LENGTH( me.title ),
80 me.cdid,
81 DISTINCT(foo, bar),
82 me.genreid,
83 (SELECT me.name, me.rank FROM artist me WHERE ( artistid 1 )),
84 COUNT( me.cdid ) AS cnt,
85 unaliased randomness,
86 MOAR unaliased randomness
87 FROM cd me'
88 => [qw/title len cd_id foo bar genreid name rank cnt/],
00336453 89);
90
91my $rs = $schema->resultset('CD');
92
93my $testno = 1;
94while (@chain) {
95 my $attrs = shift @chain;
96 my $sql = shift @chain;
97 my $as = shift @chain;
98
99 $rs = $rs->search ({}, $attrs);
100
101 is_same_sql_bind (
102 $rs->as_query,
103 "($sql)",
104 [],
105 "Test $testno of SELECT assembly ok",
106 );
107
108 is_deeply(
109 $rs->_resolved_attrs->{as},
110 $as,
36fd7f07 111 "Correct dbic-side aliasing for test $testno",
00336453 112 );
113
114 $testno++;
115}
116
f7f53a89 117# make sure proper exceptions are thrown on unbalanced use
118{
119 my $rs = $schema->resultset('CD')->search({}, { select => \'count(me.cdid)'});
120
121 lives_ok(sub {
122 $rs->search({}, { '+select' => 'me.cdid' })->next
123 }, 'Two dark selectors are ok');
124
125 throws_ok(sub {
126 $rs->search({}, { '+select' => 'me.cdid', '+as' => 'cdid' })->next
127 }, qr/resultset contains an unnamed selector/, 'Unnamed followed by named is not');
128
129 throws_ok(sub {
130 $rs->search_rs({}, { prefetch => 'tracks' })->next
131 }, qr/resultset contains an unnamed selector/, 'Throw on unaliased selector followed by prefetch');
132
133 throws_ok(sub {
134 $rs->search_rs({}, { '+select' => 'me.title', '+as' => 'title' })->next
135 }, qr/resultset contains an unnamed selector/, 'Throw on unaliased selector followed by +select/+as');
136}
137
138
00336453 139done_testing;