Make sure unaliased selectors and prefetch coexist peacefully
[dbsrgits/DBIx-Class.git] / t / search / select_chains_unbalanced.t
CommitLineData
00336453 1use strict;
2use warnings;
3
4use Test::More;
5
6use lib qw(t/lib);
7use DBIC::SqlMakerTest;
8use DBICTest;
9
10
11my $schema = DBICTest->init_schema();
12
13my $multicol_rs = $schema->resultset('Artist')->search({ artistid => \'1' }, { columns => [qw/name rank/] });
14
15my @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 {
36fd7f07 37 '+select' => \'unaliased randomness',
00336453 38 } => 'SELECT
39 me.cdid,
40 me.title,
41 DISTINCT(foo, bar),
36fd7f07 42 unaliased randomness
00336453 43 FROM cd me'
36fd7f07 44 => [qw/cdid title foo bar/],
00336453 45 {
36fd7f07 46 '+select' => [ 'genreid', $multicol_rs->as_query ],
47 '+as' => [qw/genreid name rank/],
00336453 48 } => 'SELECT
49 me.cdid,
50 me.title,
00336453 51 DISTINCT(foo, bar),
52 me.genreid,
36fd7f07 53 (SELECT me.name, me.rank FROM artist me WHERE ( artistid 1 )),
54 unaliased randomness
00336453 55 FROM cd me'
36fd7f07 56 => [qw/cdid title foo bar genreid name rank/],
00336453 57
58 {
36fd7f07 59 '+select' => { count => 'me.cdid', -as => 'cnt' }, # lack of 'as' infers from '-as'
60 '+columns' => { len => { length => 'me.title' } },
00336453 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
36fd7f07 73
00336453 74);
75
76my $rs = $schema->resultset('CD');
77
78my $testno = 1;
79while (@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,
36fd7f07 96 "Correct dbic-side aliasing for test $testno",
00336453 97 );
98
99 $testno++;
100}
101
102done_testing;