added test case for ensuring a column mentioned in the order by clause is also includ...
[dbsrgits/DBIx-Class.git] / t / prefetch / grouped.t
index 501b250..f6fabae 100644 (file)
@@ -217,7 +217,7 @@ for ($cd_rs->all) {
     $rs->as_query,
     '(
       SELECT me.cdid, me.artist, me.title, me.year, me.genreid, me.single_track,
-             tags.tagid, tags.cd, tags.tag 
+             tags.tagid, tags.cd, tags.tag
         FROM (
           SELECT me.cdid, me.artist, me.title, me.year, me.genreid, me.single_track
             FROM cd me
@@ -280,6 +280,25 @@ for ($cd_rs->all) {
     is($cd_rs->count, 5, 'complex prefetch + non-prefetching has_many join count correct');
     is($cd_rs->all, 5, 'complex prefetch + non-prefetching has_many join number of objects correct');
 
+    # make sure join tracks was thrown out
+    is_same_sql_bind (
+      $cd_rs->as_query,
+      '(
+        SELECT me.cdid, me.artist, me.title, me.year, me.genreid, me.single_track,
+               artist.artistid, artist.name, artist.rank, artist.charfield
+          FROM (
+            SELECT me.cdid, me.artist, me.title, me.year, me.genreid, me.single_track
+              FROM cd me
+              JOIN artist artist ON artist.artistid = me.artist
+            GROUP BY me.cdid, me.artist, me.title, me.year, me.genreid, me.single_track
+          ) me
+          JOIN artist artist ON artist.artistid = me.artist
+      )',
+      [],
+    );
+
+
+
     # try the same as above, but add a condition so the tracks join can not be thrown away
     my $cd_rs2 = $cd_rs->search ({ 'tracks.title' => { '!=' => 'ugabuganoexist' } });
     is($cd_rs2->count, 5, 'complex prefetch + non-prefetching restricted has_many join count correct');
@@ -310,4 +329,27 @@ for ($cd_rs->all) {
     );
 }
 
+{
+    my $rs = $schema->resultset('CD')->search({},
+        {
+           '+select' => [{ count => 'tags.tag' }],
+           '+as' => ['test_count'],
+           prefetch => ['tags'],
+           distinct => 1,
+           order_by => {'-asc' => 'tags.tag'},
+           rows => 1
+        }
+    );
+    is_same_sql_bind($rs->as_query, q{
+        SELECT me.cdid, me.artist, me.title, me.year, me.genreid, me.single_track, me.test_count, tags.tagid, tags.cd, tags.tag
+        FROM (SELECT me.cdid, me.artist, me.title, me.year, me.genreid, me.single_track, COUNT( tags.tag ) AS test_count
+                FROM cd me LEFT JOIN tags tags ON tags.cd = me.cdid
+            GROUP BY me.cdid, me.artist, me.title, me.year, me.genreid, me.single_track, tags.tag
+            ORDER BY tags.tag ASC LIMIT 1)
+            me
+        LEFT JOIN tags tags ON tags.cd = me.cdid
+        ORDER BY tags.tag ASC, tags.cd, tags.tag
+    }, []);
+}
+
 done_testing;