Commit | Line | Data |
5aa25b93 |
1 | use strict; |
2 | use warnings; |
3 | |
4 | use Test::More; |
5 | use Test::Exception; |
6 | use lib qw(t/lib); |
7 | use DBICTest; |
8 | |
376b7a93 |
9 | my $schema = DBICTest->init_schema(); |
5aa25b93 |
10 | |
376b7a93 |
11 | lives_ok(sub { |
376b7a93 |
12 | # while cds.* will be selected anyway (prefetch currently forces the result of _resolve_prefetch) |
951b7581 |
13 | # only the requested me.name column will be fetched. |
5aa25b93 |
14 | |
376b7a93 |
15 | # reference sql with select => [...] |
16 | # SELECT me.name, cds.title, cds.cdid, cds.artist, cds.title, cds.year, cds.genreid, cds.single_track FROM ... |
5aa25b93 |
17 | |
376b7a93 |
18 | my $rs = $schema->resultset('Artist')->search( |
19 | { 'cds.title' => { '!=', 'Generic Manufactured Singles' } }, |
20 | { |
21 | prefetch => [ qw/ cds / ], |
22 | order_by => [ { -desc => 'me.name' }, 'cds.title' ], |
951b7581 |
23 | select => [qw/ me.name cds.title / ], |
376b7a93 |
24 | } |
25 | ); |
5aa25b93 |
26 | |
376b7a93 |
27 | is ($rs->count, 2, 'Correct number of collapsed artists'); |
28 | my $we_are_goth = $rs->first; |
29 | is ($we_are_goth->name, 'We Are Goth', 'Correct first artist'); |
30 | is ($we_are_goth->cds->count, 1, 'Correct number of CDs for first artist'); |
31 | is ($we_are_goth->cds->first->title, 'Come Be Depressed With Us', 'Correct cd for artist'); |
951b7581 |
32 | }, 'explicit prefetch on a keyless object works'); |
33 | |
34 | |
35 | lives_ok(sub { |
36 | # test implicit prefetch as well |
37 | |
38 | my $rs = $schema->resultset('CD')->search( |
39 | { title => 'Generic Manufactured Singles' }, |
40 | { |
41 | join=> 'artist', |
42 | select => [qw/ me.title artist.name / ], |
43 | } |
44 | ); |
45 | |
46 | my $cd = $rs->next; |
47 | is ($cd->title, 'Generic Manufactured Singles', 'CD title prefetched correctly'); |
48 | isa_ok ($cd->artist, 'DBICTest::Artist'); |
49 | is ($cd->artist->name, 'Random Boy Band', 'Artist object has correct name'); |
5aa25b93 |
50 | |
951b7581 |
51 | }, 'implicit keyless prefetch works'); |
ce9f555e |
52 | |
53 | # sane error |
54 | throws_ok( |
55 | sub { |
56 | $schema->resultset('Track')->search({}, { join => { cd => 'artist' }, '+columns' => 'artist.name' } )->next; |
57 | }, |
58 | qr|\QCan't inflate manual prefetch into non-existent relationship 'artist' from 'Track', check the inflation specification (columns/as) ending in 'artist.name'|, |
59 | 'Sensible error message on mis-specified "as"', |
60 | ); |
61 | |
62 | done_testing; |