[Bast-commits] r8739 - in DBIx-Class/0.08/branches/prefetch: lib/DBIx/Class t

ribasushi at dev.catalyst.perl.org ribasushi at dev.catalyst.perl.org
Thu Feb 18 10:53:10 GMT 2010


Author: ribasushi
Date: 2010-02-18 10:53:10 +0000 (Thu, 18 Feb 2010)
New Revision: 8739

Modified:
   DBIx-Class/0.08/branches/prefetch/lib/DBIx/Class/ResultSet.pm
   DBIx-Class/0.08/branches/prefetch/t/90join_torture.t
Log:
Remove useless empty merge call and test generated sql more extensively

Modified: DBIx-Class/0.08/branches/prefetch/lib/DBIx/Class/ResultSet.pm
===================================================================
--- DBIx-Class/0.08/branches/prefetch/lib/DBIx/Class/ResultSet.pm	2010-02-18 10:40:05 UTC (rev 8738)
+++ DBIx-Class/0.08/branches/prefetch/lib/DBIx/Class/ResultSet.pm	2010-02-18 10:53:10 UTC (rev 8739)
@@ -2922,7 +2922,6 @@
 
   if ( my $prefetch = delete $attrs->{prefetch} ) {
     $attrs->{collapse} = 1;
-    $prefetch = $self->_merge_attr( {}, $prefetch );
 
     my $prefetch_ordering = [];
 

Modified: DBIx-Class/0.08/branches/prefetch/t/90join_torture.t
===================================================================
--- DBIx-Class/0.08/branches/prefetch/t/90join_torture.t	2010-02-18 10:40:05 UTC (rev 8738)
+++ DBIx-Class/0.08/branches/prefetch/t/90join_torture.t	2010-02-18 10:53:10 UTC (rev 8739)
@@ -1,38 +1,65 @@
 use strict;
-use warnings;  
+use warnings;
 
 use Test::More;
+use Test::Exception;
+
 use lib qw(t/lib);
 use DBICTest;
+use DBIC::SqlMakerTest;
 my $schema = DBICTest->init_schema();
 
-plan tests => 22;
+lives_ok (sub {
+  my $rs = $schema->resultset( 'CD' )->search(
+    {
+      'producer.name'   => 'blah',
+      'producer_2.name' => 'foo',
+    },
+    {
+      'join' => [
+        { cd_to_producer => 'producer' },
+        { cd_to_producer => 'producer' },
+      ],
+      'prefetch' => [
+        'artist',
+        { cd_to_producer => { producer => 'producer_to_cd' } },
+      ],
+    }
+  );
 
- {
-   my $rs = $schema->resultset( 'CD' )->search(
-     {
-       'producer.name'   => 'blah',
-       'producer_2.name' => 'foo',
-     },
-     {
-       'join' => [
-         { cd_to_producer => 'producer' },
-         { cd_to_producer => 'producer' },
-       ],
-       'prefetch' => [
-         'artist',
-         { cd_to_producer => 'producer' },
-       ],
-     }
-   );
-  
-   eval {
-     my @rows = $rs->all();
-   };
-   is( $@, '' );
- }
+  my @executed = $rs->all();
 
+  is_same_sql_bind (
+    $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,
+              cd_to_producer.cd, cd_to_producer.producer, cd_to_producer.attribute,
+              producer.producerid, producer.name,
+              producer_to_cd.cd, producer_to_cd.producer, producer_to_cd.attribute
+        FROM cd me
+        LEFT JOIN cd_to_producer cd_to_producer
+          ON cd_to_producer.cd = me.cdid
+        LEFT JOIN producer producer
+          ON producer.producerid = cd_to_producer.producer
+        LEFT JOIN cd_to_producer producer_to_cd
+          ON producer_to_cd.producer = producer.producerid
+        LEFT JOIN cd_to_producer cd_to_producer_2
+          ON cd_to_producer_2.cd = me.cdid
+        LEFT JOIN producer producer_2
+          ON producer_2.producerid = cd_to_producer_2.producer
+        JOIN artist artist ON artist.artistid = me.artist
+      WHERE ( ( producer.name = ? AND producer_2.name = ? ) )
+      ORDER BY cd_to_producer.cd, producer_to_cd.producer
+    )',
+    [
+      [ 'producer.name' => 'blah' ],
+      [ 'producer_2.name' => 'foo' ],
+    ],
+  );
 
+}, 'Complex join parsed/executed properly');
+
 my @rs1a_results = $schema->resultset("Artist")->search_related('cds', {title => 'Forkful of bees'}, {order_by => 'title'});
 is($rs1a_results[0]->title, 'Forkful of bees', "bare field conditions okay after search related");
 my $rs1 = $schema->resultset("Artist")->search({ 'tags.tag' => 'Blue' }, { join => {'cds' => 'tracks'}, prefetch => {'cds' => 'tags'} });
@@ -125,4 +152,4 @@
 is(scalar(@{$second_search_rs->{attrs}->{join}}), 3, 'both joins kept');
 ok($second_search_rs->next, 'query on double joined rel runs okay');
 
-1;
+done_testing;




More information about the Bast-commits mailing list