Improve complex order+prefetch exception message
Peter Rabbitson [Sun, 25 May 2014 09:52:13 +0000 (11:52 +0200)]
lib/DBIx/Class.pm
lib/DBIx/Class/Storage/DBIHacks.pm
t/prefetch/with_limit.t

index 6c30f4a..ac9f581 100644 (file)
@@ -436,6 +436,8 @@ mattp: Matt Phillips <mattp@cpan.org>
 
 mdk: Mark Keating <m.keating@shadowcat.co.uk>
 
+mna: Maya
+
 michaelr: Michael Reddick <michael.reddick@gmail.com>
 
 milki: Jonathan Chu <milki@rescomp.berkeley.edu>
index 4147e81..aa11286 100644 (file)
@@ -653,9 +653,10 @@ sub _group_over_selection {
   }
 
   $self->throw_exception ( sprintf
-    'A required group_by clause could not be constructed automatically due to a complex '
-  . 'order_by criteria (%s). Either order_by columns only (no functions) or construct a suitable '
-  . 'group_by by hand',
+    'Unable to programatically derive a required group_by from the supplied '
+  . 'order_by criteria. To proceed either add an explicit group_by, or '
+  . 'simplify your order_by to only include plain columns '
+  . '(supplied order_by: %s)',
     join ', ', map { "'$_'" } @$leftovers,
   ) if $leftovers;
 
index 480dc40..4d08cd0 100644 (file)
@@ -152,8 +152,8 @@ throws_ok (
       {'tracks.title' => { '!=' => 'foo' }},
       { order_by => \ 'some oddball literal sql', join => { cds => 'tracks' } }
     )->next
-  }, qr/A required group_by clause could not be constructed automatically/,
-) || exit;
+  }, qr/Unable to programatically derive a required group_by from the supplied order_by criteria/,
+);
 
 my $artist = $use_prefetch->search({'cds.title' => $artist_many_cds->cds->first->title })->next;
 is($artist->cds->count, 1, "count on search limiting prefetched has_many");