Some cosmetic fixes in ANFANG
[dbsrgits/DBIx-Class.git] / t / search / distinct.t
1 BEGIN { do "./t/lib/ANFANG.pm" or die ( $@ || $! ) }
2
3 use strict;
4 use warnings;
5
6 use Test::More;
7
8
9 use DBICTest ':DiffSQL';
10
11 my $schema = DBICTest->init_schema();
12
13 # make sure order + distinct do not double-inject group criteria
14 my $rs = $schema->resultset ('CD')->search ({}, {
15   distinct => 1,
16   columns => 'title',
17 });
18
19 # title + cdid == unique constraint
20 my $unique_rs = $rs->search ({}, {
21   '+columns' => 'cdid',
22 });
23
24 is_same_sql_bind (
25   $rs->search({}, { order_by => 'title' })->as_query,
26   '(
27     SELECT me.title
28       FROM cd me
29     GROUP BY me.title
30     ORDER BY title
31   )',
32   [],
33   'Correct GROUP BY on selection+order_by on same column',
34 );
35
36 is_same_sql_bind (
37   $rs->search({}, { order_by => 'year' })->as_query,
38   '(
39     SELECT me.title
40       FROM cd me
41     GROUP BY me.title
42     ORDER BY MIN(year)
43   )',
44   [],
45   'Correct GROUP BY on non-unique selection and order by a different column',
46 );
47
48 is_same_sql_bind (
49   $unique_rs->search({}, { order_by => 'year' })->as_query,
50   '(
51     SELECT me.title, me.cdid
52       FROM cd me
53     GROUP BY me.title, me.cdid, me.year
54     ORDER BY year
55   )',
56   [],
57   'Correct GROUP BY on unique selection and order by a different column',
58 );
59
60 is_same_sql_bind (
61   $rs->search({}, { order_by => 'artist.name', join => 'artist'  })->as_query,
62   '(
63     SELECT me.title
64       FROM cd me
65       JOIN artist artist
66         ON artist.artistid = me.artist
67     GROUP BY me.title
68     ORDER BY MIN(artist.name)
69   )',
70   [],
71   'Correct GROUP BY on non-unique selection and external single order_by',
72 );
73
74 is_same_sql_bind (
75   $unique_rs->search({}, { order_by => 'artist.name', join => 'artist'  })->as_query,
76   '(
77     SELECT me.title, me.cdid
78       FROM cd me
79       JOIN artist artist
80         ON artist.artistid = me.artist
81     GROUP BY me.title, me.cdid, artist.name
82     ORDER BY artist.name
83   )',
84   [],
85   'Correct GROUP BY on unique selection and external single order_by',
86 );
87
88 is_same_sql_bind (
89   $rs->search({}, { order_by => 'tracks.title', join => 'tracks'  })->as_query,
90   '(
91     SELECT me.title
92       FROM cd me
93       LEFT JOIN track tracks
94         ON tracks.cd = me.cdid
95     GROUP BY me.title
96     ORDER BY MIN(tracks.title)
97   )',
98   [],
99   'Correct GROUP BY on non-unique selection and external multi order_by',
100 );
101
102 is_same_sql_bind (
103   $unique_rs->search({}, { order_by => 'tracks.title', join => 'tracks'  })->as_query,
104   '(
105     SELECT me.title, me.cdid
106       FROM cd me
107       LEFT JOIN track tracks
108         ON tracks.cd = me.cdid
109     GROUP BY me.title, me.cdid
110     ORDER BY MIN(tracks.title)
111   )',
112   [],
113   'Correct GROUP BY on unique selection and external multi order_by',
114 );
115
116 done_testing;