+BEGIN { do "./t/lib/ANFANG.pm" or die ( $@ || $! ) }
+
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();
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' => \'unaliased randomness',
+ '+select' => [ 'genreid', $multicol_rs->as_query ],
+ '+as' => [qw/genreid name rank/],
} => 'SELECT
- me.cdid,
me.title,
+ me.cdid,
DISTINCT(foo, bar),
- unaliased randomness
+ me.genreid,
+ (SELECT me.name, me.rank FROM artist me WHERE ( artistid 1 ))
FROM cd me'
- => [qw/cdid title foo bar/],
+ => [qw/title cd_id foo bar genreid name rank/],
+
{
- '+select' => [ 'genreid', $multicol_rs->as_query ],
- '+as' => [qw/genreid name rank/],
+ '+select' => { count => 'me.cdid', -as => 'cnt' }, # lack of 'as' infers from '-as'
+ '+columns' => { len => { length => 'me.title' } },
} => '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
+ FROM cd me'
+ => [qw/title len cd_id foo bar genreid name rank cnt/],
+ {
+ '+select' => \'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
FROM cd me'
- => [qw/cdid title foo bar genreid name rank/],
-
+ => [qw/title len cd_id foo bar genreid name rank cnt/],
{
- '+select' => { count => 'me.cdid', -as => 'cnt' }, # lack of 'as' infers from '-as'
- '+columns' => { len => { length => 'me.title' } },
+ '+select' => \'MOAR 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 )),
- unaliased randomness
+ COUNT( me.cdid ) AS cnt,
+ unaliased randomness,
+ MOAR 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/],
);
my $rs = $schema->resultset('CD');
$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;