X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fsearch%2Fselect_chains.t;h=234439dc4890380cd7be3349eb1f3a95701450de;hb=eb37b376461257fc2faf281c905d14d8bb3a3757;hp=bba3fd676906d30b0607ed06f2721d2198245b7e;hpb=14af4aa055c72fdbef6d741b3ad9f2d6537f493c;p=dbsrgits%2FDBIx-Class.git diff --git a/t/search/select_chains.t b/t/search/select_chains.t index bba3fd6..234439d 100644 --- a/t/search/select_chains.t +++ b/t/search/select_chains.t @@ -2,7 +2,6 @@ use strict; use warnings; use Test::More; -use Test::Exception; use lib qw(t/lib); use DBIC::SqlMakerTest; @@ -14,15 +13,16 @@ my $schema = DBICTest->init_schema(); my @chain = ( { columns => [ 'cdid' ], - '+select' => [ { lower => 'title' }, 'genreid' ], - '+as' => [ qw/title_lc genreid/ ], - } => 'SELECT me.cdid, LOWER( title ), me.genreid FROM cd me', + '+columns' => [ { title_lc => { lower => 'title', -as => 'lctitle' } } ], + '+select' => [ 'genreid' ], + '+as' => [ 'genreid' ], + } => 'SELECT me.cdid, LOWER( title ) AS lctitle, me.genreid FROM cd me', { - '+columns' => [ { max_year => { max => 'me.year' }}, ], + '+columns' => [ { max_year => { max => 'me.year', -as => 'last_y' }}, ], '+select' => [ { count => 'me.cdid' }, ], '+as' => [ 'cnt' ], - } => 'SELECT me.cdid, MAX( me.year ), LOWER( title ), me.genreid, COUNT( me.cdid ) FROM cd me', + } => 'SELECT me.cdid, LOWER( title ) AS lctitle, me.genreid, MAX( me.year ) AS last_y, COUNT( me.cdid ) FROM cd me', { select => [ { min => 'me.cdid' }, ], @@ -30,12 +30,38 @@ my @chain = ( } => 'SELECT MIN( me.cdid ) FROM cd me', { - '+columns' => [ { cnt => { count => 'cdid' } } ], - } => 'SELECT COUNT ( cdid ), MIN( me.cdid ) FROM cd me', + '+columns' => [ { cnt => { count => 'cdid', -as => 'cnt' } } ], + } => 'SELECT MIN( me.cdid ), COUNT ( cdid ) AS cnt FROM cd me', { - columns => [ 'year' ], - } => 'SELECT me.year FROM cd me', + columns => [ { foo => { coalesce => [qw/a b c/], -as => 'firstfound' } } ], + } => 'SELECT COALESCE( a, b, c ) AS firstfound FROM cd me', + + { + '+columns' => [ 'me.year' ], + '+select' => [ { max => 'me.year', -as => 'last_y' } ], + '+as' => [ 'ly' ], + } => 'SELECT COALESCE( a, b, c ) AS firstfound, me.year, MAX( me.year ) AS last_y FROM cd me', + + { + '+select' => [ { count => 'me.cdid', -as => 'cnt' } ], + '+as' => [ 'cnt' ], + } => 'SELECT COALESCE( a, b, c ) AS firstfound, me.year, MAX( me.year ) AS last_y, COUNT( me.cdid ) AS cnt FROM cd me', + + # adding existing stuff should not alter selector + { + '+select' => [ 'me.year' ], + '+as' => [ 'year' ], + } => 'SELECT COALESCE( a, b, c ) AS firstfound, me.year, MAX( me.year ) AS last_y, COUNT( me.cdid ) AS cnt FROM cd me', + + { + '+columns' => [ 'me.year' ], + } => 'SELECT COALESCE( a, b, c ) AS firstfound, me.year, MAX( me.year ) AS last_y, COUNT( me.cdid ) AS cnt FROM cd me', + + { + '+columns' => 'me.year', + } => 'SELECT COALESCE( a, b, c ) AS firstfound, me.year, MAX( me.year ) AS last_y, COUNT( me.cdid ) AS cnt FROM cd me', + ); my $rs = $schema->resultset('CD'); @@ -57,4 +83,42 @@ while (@chain) { $testno++; } -done_testing; \ No newline at end of file +# Make sure we don't lose bits even with weird selector specs +# also check that the default selector list is lazy +$rs = $schema->resultset('CD'); +for my $attr ( + { '+columns' => [ 'me.title' ] }, # this one should be de-duplicated but not the select's + + { '+select' => \'me.year AS foo' }, # duplication of identical select expected (FIXME ?) + { '+select' => \['me.year AS foo'] }, + + { '+select' => [ \'me.artistid AS bar' ] }, + { '+select' => { count => 'artistid', -as => 'baz' } }, +) { + for (qw/columns select as/) { + ok (! exists $rs->{attrs}{$_}, "No eager '$_' attr on fresh resultset" ); + } + + $rs = $rs->search({}, $attr); +} + +is_same_sql_bind ( + $rs->as_query, + '( SELECT + me.cdid, + me.artist, + me.title, + me.year, + me.genreid, + me.single_track, + COUNT( artistid ) AS baz, + me.year AS foo, + me.year AS foo, + me.artistid AS bar + FROM cd me + )', + [], + 'Correct chaining before attr resolution' +); + +done_testing;