X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fsearch%2Fsubquery.t;h=aa01183e10350eedbb873162d823fa9a657c5a1c;hb=77af494bb1ddc46a7a8eba467ab189daacccf32c;hp=b18bfa61483e8f77aeb3fc6230f1f72871c93655;hpb=f7160d10990d213908240d7b5e6fcc7f94af5ee3;p=dbsrgits%2FDBIx-Class.git diff --git a/t/search/subquery.t b/t/search/subquery.t index b18bfa6..aa01183 100644 --- a/t/search/subquery.t +++ b/t/search/subquery.t @@ -7,7 +7,7 @@ use Data::Dumper; use Test::More; -plan ( tests => 7 ); +plan ( tests => 8 ); use lib qw(t/lib); use DBICTest; @@ -22,10 +22,8 @@ my $cdrs = $schema->resultset('CD'); artist_id => { 'in' => $art_rs->search({}, { rows => 1 })->get_column( 'id' )->as_query }, }); - my $arr = $cdrs2->as_query; - my ($query, @bind) = @{$$arr}; is_same_sql_bind( - $query, \@bind, + $cdrs2->as_query, "( SELECT me.cdid,me.artist,me.title,me.year,me.genreid,me.single_track FROM cd me WHERE artist_id IN ( SELECT id FROM artist me LIMIT 1 ) )", [], ); @@ -41,10 +39,8 @@ my $cdrs = $schema->resultset('CD'); }, ); - my $arr = $rs->as_query; - my ($query, @bind) = @{$$arr}; is_same_sql_bind( - $query, \@bind, + $rs->as_query, "( SELECT (SELECT id FROM cd me LIMIT 1) FROM artist me )", [], ); @@ -60,10 +56,8 @@ my $cdrs = $schema->resultset('CD'); }, ); - my $arr = $rs->as_query; - my ($query, @bind) = @{$$arr}; is_same_sql_bind( - $query, \@bind, + $rs->as_query, "( SELECT me.artistid, me.name, me.rank, me.charfield, (SELECT id FROM cd me LIMIT 1) FROM artist me )", [], ); @@ -81,12 +75,12 @@ my $cdrs = $schema->resultset('CD'); }, ); - my $arr = $rs->as_query; - my ($query, @bind) = @{$$arr}; is_same_sql_bind( - $query, \@bind, - "( SELECT cd2.cdid, cd2.artist, cd2.title, cd2.year, cd2.genreid, cd2.single_track FROM (SELECT me.cdid,me.artist,me.title,me.year,me.genreid,me.single_track FROM cd me WHERE id > 20) cd2 )", - [], + $rs->as_query, + "( SELECT cd2.cdid, cd2.artist, cd2.title, cd2.year, cd2.genreid, cd2.single_track FROM (SELECT me.cdid,me.artist,me.title,me.year,me.genreid,me.single_track FROM cd me WHERE id > ?) cd2 )", + [ + [ 'id', 20 ] + ], ); } @@ -99,10 +93,8 @@ my $cdrs = $schema->resultset('CD'); { 'me.artistid' => 'cds_artist' } ] ] }); - my $arr = $art_rs2->as_query; - my ($query, @bind) = @{$$arr}; is_same_sql_bind( - $query, \@bind, + $art_rs2->as_query, "( SELECT me.artistid, me.name, me.rank, me.charfield FROM artist me JOIN (SELECT me.artist as cds_artist FROM cd me) cds ON me.artistid = cds_artist )", [] ); @@ -128,19 +120,20 @@ my $cdrs = $schema->resultset('CD'); }, ); - my $arr = $rs->as_query; - my ($query, @bind) = @{$$arr}; is_same_sql_bind( - $query, \@bind, + $rs->as_query, "( SELECT cd2.cdid, cd2.artist, cd2.title, cd2.year, cd2.genreid, cd2.single_track FROM (SELECT cd3.cdid,cd3.artist,cd3.title,cd3.year,cd3.genreid,cd3.single_track FROM (SELECT me.cdid,me.artist,me.title,me.year,me.genreid,me.single_track - FROM cd me WHERE id < 40) cd3 - WHERE id > 20) cd2 + FROM cd me WHERE id < ?) cd3 + WHERE id > ?) cd2 )", - [], + [ + [ 'id', 40 ], + [ 'id', 20 ] + ], ); } @@ -154,13 +147,32 @@ my $cdrs = $schema->resultset('CD'); )->get_column('year')->max_rs->as_query, }, }); - my $arr = $rs->as_query; - my ($query, @bind) = @{$$arr}; + is_same_sql_bind( - $query, \@bind, + $rs->as_query, "( SELECT me.cdid, me.artist, me.title, me.year, me.genreid, me.single_track FROM cd me WHERE year = (SELECT MAX(inner.year) FROM cd inner WHERE artistid = me.artistid) )", [], ); } -__END__ +{ + my $rs = $cdrs->search( + {}, + { + alias => 'cd2', + from => [ + { cd2 => $cdrs->search({ title => 'Thriller' })->as_query }, + ], + }, + ); + + is_same_sql_bind( + $rs->as_query, + "(SELECT cd2.cdid, cd2.artist, cd2.title, cd2.year, cd2.genreid, cd2.single_track FROM (SELECT me.cdid,me.artist,me.title,me.year,me.genreid,me.single_track FROM cd me WHERE title = ?) cd2)", + [ + [ 'title', + 'Thriller' + ] + ], + ); +}