X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fsearch%2Fselect_chains_unbalanced.t;h=63de73cf9e8657cadc8e920a41f5d860d50a6a73;hb=da9346a03a7df80d02f40584422af71fbd2ca4f8;hp=d0facb8f6023806d49d199152eac3e9ac4d1ba7b;hpb=00336453444021a6422e05539ff4fc86c703a6b6;p=dbsrgits%2FDBIx-Class.git diff --git a/t/search/select_chains_unbalanced.t b/t/search/select_chains_unbalanced.t index d0facb8..63de73c 100644 --- a/t/search/select_chains_unbalanced.t +++ b/t/search/select_chains_unbalanced.t @@ -2,11 +2,10 @@ use strict; use warnings; use Test::More; +use Test::Exception; use lib qw(t/lib); -use DBIC::SqlMakerTest; -use DBICTest; - +use DBICTest ':DiffSQL'; my $schema = DBICTest->init_schema(); @@ -14,65 +13,77 @@ my $multicol_rs = $schema->resultset('Artist')->search({ artistid => \'1' }, { c my @chain = ( { - select => 'title', - as => 'title', - columns => [ 'cdid' ], + select => 'cdid', + as => 'cd_id', + columns => [ 'title' ], } => 'SELECT - me.cdid, - me.title + me.title, + me.cdid FROM cd me' - => [qw/cdid title/], + => [qw/title cd_id/], { '+select' => \ 'DISTINCT(foo, bar)', '+as' => [qw/foo bar/], } => 'SELECT - me.cdid, me.title, + me.cdid, DISTINCT(foo, bar) FROM cd me' - => [qw/cdid title foo bar/], + => [qw/title cd_id foo bar/], { '+select' => [ 'genreid', $multicol_rs->as_query ], '+as' => [qw/genreid name rank/], } => 'SELECT - me.cdid, me.title, + me.cdid, DISTINCT(foo, bar), me.genreid, (SELECT me.name, me.rank FROM artist me WHERE ( artistid 1 )) FROM cd me' - => [qw/cdid title foo bar genreid name rank/], + => [qw/title cd_id foo bar genreid name rank/], { '+select' => { count => 'me.cdid', -as => 'cnt' }, # lack of 'as' infers from '-as' '+columns' => { len => { length => 'me.title' } }, } => 'SELECT - me.cdid, me.title, LENGTH( me.title ), - COUNT( me.cdid ) AS cnt, + me.cdid, DISTINCT(foo, bar), me.genreid, - (SELECT me.name, me.rank FROM artist me WHERE ( artistid 1 )) + (SELECT me.name, me.rank FROM artist me WHERE ( artistid 1 )), + COUNT( me.cdid ) AS cnt FROM cd me' - => [qw/cdid title len cnt foo bar genreid name rank/], - + => [qw/title len cd_id foo bar genreid name rank cnt/], { '+select' => \'unaliased randomness', } => 'SELECT - me.cdid, me.title, LENGTH( me.title ), - COUNT( me.cdid ) AS cnt, + me.cdid, DISTINCT(foo, bar), me.genreid, (SELECT me.name, me.rank FROM artist me WHERE ( artistid 1 )), + COUNT( me.cdid ) AS cnt, unaliased randomness FROM cd me' - => [qw/cdid title len cnt foo bar genreid name rank/], - + => [qw/title len cd_id foo bar genreid name rank cnt/], + { + '+select' => \'MOAR unaliased randomness', + } => 'SELECT + me.title, + LENGTH( me.title ), + me.cdid, + DISTINCT(foo, bar), + me.genreid, + (SELECT me.name, me.rank FROM artist me WHERE ( artistid 1 )), + COUNT( me.cdid ) AS cnt, + unaliased randomness, + MOAR unaliased randomness + FROM cd me' + => [qw/title len cd_id foo bar genreid name rank cnt/], ); my $rs = $schema->resultset('CD'); @@ -95,10 +106,32 @@ while (@chain) { is_deeply( $rs->_resolved_attrs->{as}, $as, - 'Correct dbic-side aliasing', + "Correct dbic-side aliasing for test $testno", ); $testno++; } +# make sure proper exceptions are thrown on unbalanced use +{ + my $rs = $schema->resultset('CD')->search({}, { select => \'count(me.cdid)'}); + + lives_ok(sub { + $rs->search({}, { '+select' => 'me.cdid' })->next + }, 'Two dark selectors are ok'); + + throws_ok(sub { + $rs->search({}, { '+select' => 'me.cdid', '+as' => 'cdid' })->next + }, qr/resultset contains an unnamed selector/, 'Unnamed followed by named is not'); + + throws_ok(sub { + $rs->search_rs({}, { prefetch => 'tracks' })->next + }, qr/resultset contains an unnamed selector/, 'Throw on unaliased selector followed by prefetch'); + + throws_ok(sub { + $rs->search_rs({}, { '+select' => 'me.title', '+as' => 'title' })->next + }, qr/resultset contains an unnamed selector/, 'Throw on unaliased selector followed by +select/+as'); +} + + done_testing;