X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Frelationship%2Fcustom.t;h=4fb96ff087672093790e0bd1db5c01a3431c7de5;hb=abf8d91e24dae052a0af4b65ffee4e72044d54bb;hp=9809a65e98bf2087de0342c728050a6cec98ad00;hpb=f3cfaac640901858c6d9983758e5485ae9baf30f;p=dbsrgits%2FDBIx-Class.git diff --git a/t/relationship/custom.t b/t/relationship/custom.t index 9809a65..4fb96ff 100644 --- a/t/relationship/custom.t +++ b/t/relationship/custom.t @@ -9,10 +9,13 @@ use DBIC::SqlMakerTest; my $schema = DBICTest->init_schema(); -my $artist = $schema->resultset("Artist")->create({ name => 'Michael Jackson', rank => 20 }); -my $artist2 = $schema->resultset("Artist")->create({ name => 'Chico Buarque', rank => 1 }) ; -my $artist3 = $schema->resultset("Artist")->create({ name => 'Ziraldo', rank => 1 }); -my $artist4 = $schema->resultset("Artist")->create({ name => 'Paulo Caruso', rank => 20 }); +$schema->resultset('Artist')->delete; +$schema->resultset('CD')->delete; + +my $artist = $schema->resultset("Artist")->create({ artistid => 21, name => 'Michael Jackson', rank => 20 }); +my $artist2 = $schema->resultset("Artist")->create({ artistid => 22, name => 'Chico Buarque', rank => 1 }) ; +my $artist3 = $schema->resultset("Artist")->create({ artistid => 23, name => 'Ziraldo', rank => 1 }); +my $artist4 = $schema->resultset("Artist")->create({ artistid => 24, name => 'Paulo Caruso', rank => 20 }); my @artworks; @@ -30,6 +33,7 @@ foreach my $artwork (@artworks) { $artwork->create_related('artwork_to_artist', { artist => $_ }) for ($artist3, $artist4); } + my $cds_80s_rs = $artist->cds_80s; is_same_sql_bind($cds_80s_rs->as_query, '(SELECT me.cdid, me.artist, me.title, me.year, me.genreid, me.single_track FROM cd me'. @@ -77,21 +81,6 @@ is(@cds_90s_95, 1, '1 90s (95) cds found even with non-optimized search'); map { ok($_->year == 1995) } @cds_90s_95; # search for all artists prefetching published cds in the 80s... -##### -# the join must be a prefetch, but it can't work until the collapse rewrite is finished -# (right-side vs left-side order) -##### -lives_ok { - my @all_artists_with_80_cds = $schema->resultset("Artist")->search - ({ 'cds_80s.cdid' => { '!=' => undef } }, { prefetch => 'cds_80s' })->all; - - is_deeply - ([ sort ( map { $_->year } map { $_->cds_80s->all } @all_artists_with_80_cds ) ], - [ sort (1980..1989, 1980..1985) ], - '16 correct cds found' - ); -} 'prefetchy-fetchy-fetch'; - my @all_artists_with_80_cds = $schema->resultset("Artist")->search ({ 'cds_80s.cdid' => { '!=' => undef } }, { join => 'cds_80s', distinct => 1 }); @@ -101,6 +90,24 @@ is_deeply( '16 correct cds found' ); +TODO: { +local $TODO = 'Prefetch on custom rels can not work until the collapse rewrite is finished ' + . '(currently collapser requires a right-side (which is indeterministic) order-by)'; +lives_ok { + +my @all_artists_with_80_cds_pref = $schema->resultset("Artist")->search + ({ 'cds_80s.cdid' => { '!=' => undef } }, { prefetch => 'cds_80s' }); + +is_deeply( + [ sort ( map { $_->year } map { $_->cds_80s->all } @all_artists_with_80_cds_pref ) ], + [ sort (1980..1989, 1980..1985) ], + '16 correct cds found' +); + +} 'prefetchy-fetchy-fetch'; +} # end of TODO + + # try to create_related a 80s cd throws_ok { $artist->create_related('cds_80s', { title => 'related creation 1' });