1 BEGIN { do "./t/lib/ANFANG.pm" or die ( $@ || $! ) }
9 use DBICTest ':DiffSQL';
11 my $schema = DBICTest->init_schema();
13 # make sure order + distinct do not double-inject group criteria
14 my $rs = $schema->resultset ('CD')->search ({}, {
19 # title + cdid == unique constraint
20 my $unique_rs = $rs->search ({}, {
25 $rs->search({}, { order_by => 'title' })->as_query,
33 'Correct GROUP BY on selection+order_by on same column',
37 $rs->search({}, { order_by => 'year' })->as_query,
45 'Correct GROUP BY on non-unique selection and order by a different column',
49 $unique_rs->search({}, { order_by => 'year' })->as_query,
51 SELECT me.title, me.cdid
53 GROUP BY me.title, me.cdid, me.year
57 'Correct GROUP BY on unique selection and order by a different column',
61 $rs->search({}, { order_by => 'artist.name', join => 'artist' })->as_query,
66 ON artist.artistid = me.artist
68 ORDER BY MIN(artist.name)
71 'Correct GROUP BY on non-unique selection and external single order_by',
75 $unique_rs->search({}, { order_by => 'artist.name', join => 'artist' })->as_query,
77 SELECT me.title, me.cdid
80 ON artist.artistid = me.artist
81 GROUP BY me.title, me.cdid, artist.name
85 'Correct GROUP BY on unique selection and external single order_by',
89 $rs->search({}, { order_by => 'tracks.title', join => 'tracks' })->as_query,
93 LEFT JOIN track tracks
94 ON tracks.cd = me.cdid
96 ORDER BY MIN(tracks.title)
99 'Correct GROUP BY on non-unique selection and external multi order_by',
103 $unique_rs->search({}, { order_by => 'tracks.title', join => 'tracks' })->as_query,
105 SELECT me.title, me.cdid
107 LEFT JOIN track tracks
108 ON tracks.cd = me.cdid
109 GROUP BY me.title, me.cdid
110 ORDER BY MIN(tracks.title)
113 'Correct GROUP BY on unique selection and external multi order_by',