X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F76joins.t;h=538699f6d49d982c25aa66a1c45ec26d158665f3;hb=af2d42c04edc254f8b83010a8feadc31d0ac3860;hp=9401502246439686a5a483a1fcd2b25b64e2d111;hpb=907d3b9bba82ddb84bcf7ddb16a353e3c042d81a;p=dbsrgits%2FDBIx-Class.git diff --git a/t/76joins.t b/t/76joins.t index 9401502..538699f 100644 --- a/t/76joins.t +++ b/t/76joins.t @@ -16,7 +16,7 @@ BEGIN { eval "use DBD::SQLite"; plan $@ ? ( skip_all => 'needs DBD::SQLite for testing' ) - : ( tests => 50 ); + : ( tests => 53 ); } # figure out if we've got a version of sqlite that is older than 3.2.6, in @@ -89,6 +89,26 @@ $match = 'person mother LEFT JOIN (person child RIGHT JOIN person father ON (' ; is( $sa->_recurse_from(@j4), $match, 'join 4 (nested joins + join types) ok'); +my @j5 = ( + { child => 'person' }, + [ { father => 'person' }, { 'father.person_id' => \'!= child.father_id' }, ], + [ { mother => 'person' }, { 'mother.person_id' => 'child.mother_id' } ], +); +$match = 'person child JOIN person father ON ( father.person_id != ' + . 'child.father_id ) JOIN person mother ON ( mother.person_id ' + . '= child.mother_id )' + ; +is( $sa->_recurse_from(@j5), $match, 'join 5 (SCALAR reference for ON statement) ok' ); + +my @j6 = ( + { child => 'person' }, + [ { father => 'person' }, { 'father.person_id' => { '!=', '42' } }, ], + [ { mother => 'person' }, { 'mother.person_id' => 'child.mother_id' } ], +); +$match = qr/^\QHASH reference arguments are not supported in JOINS - try using \"..." instead\E/; +eval { $sa->_recurse_from(@j6) }; +like( $@, $match, 'join 6 (HASH reference for ON statement dies) ok' ); + my $rs = $schema->resultset("CD")->search( { 'year' => 2001, 'artist.name' => 'Caterwauler McCrae' }, { from => [ { 'me' => 'cd' }, @@ -344,6 +364,12 @@ like( $sql, qr/^SELECT tracks_2\.trackid/, "join not collapsed for search_relate $schema->storage->debug($orig_debug); $schema->storage->debugobj->callback(undef); +$rs = $schema->resultset('Artist'); +$rs->create({ artistid => 4, name => 'Unknown singer-songwriter' }); +$rs->create({ artistid => 5, name => 'Emo 4ever' }); +@artists = $rs->search(undef, { prefetch => 'cds', order_by => 'artistid' }); +is(scalar @artists, 5, 'has_many prefetch with adjacent empty rows ok'); + # ------------- # # Tests for multilevel has_many prefetch @@ -382,5 +408,9 @@ sub make_hash_struc { my $prefetch_result = make_hash_struc($art_rs_pr); my $nonpre_result = make_hash_struc($art_rs); +TODO: { + local $TODO = 'fixing collapse in -current'; is_deeply( $prefetch_result, $nonpre_result, 'Compare 2 level prefetch result to non-prefetch result' ); +} +