f0772292f8a86c8870f457d101cda3d79099772c
[dbsrgits/DBIx-Class.git] / t / prefetch / join_type.t
1 use warnings;
2
3 use Test::More;
4 use lib qw(t/lib);
5 use DBIC::SqlMakerTest;
6 use DBICTest;
7
8 my $schema = DBICTest->init_schema();
9
10
11 # a regular belongs_to prefetch
12 my $cds = $schema->resultset('CD')->search ({}, { prefetch => 'artist' } );
13
14 my $nulls = {
15   hashref => {},
16   arrayref => [],
17   undef => undef,
18 };
19
20 # make sure null-prefetches do not screw with the final sql:
21 for my $type (keys %$nulls) {
22 #  is_same_sql_bind (
23 #    $cds->search({}, { prefetch => { artist => $nulls->{$type} } })->as_query,
24 #    $cds->as_query,
25 #    "same sql with null $type prefetch"
26 #  );
27 }
28
29 # make sure left join is carried only starting from the first has_many
30 is_same_sql_bind (
31   $cds->search({}, { prefetch => { artist => { cds => 'artist' } } })->as_query,
32   '(
33     SELECT  me.cdid, me.artist, me.title, me.year, me.genreid, me.single_track,
34             artist.artistid, artist.name, artist.rank, artist.charfield,
35             cds.cdid, cds.artist, cds.title, cds.year, cds.genreid, cds.single_track,
36             artist_2.artistid, artist_2.name, artist_2.rank, artist_2.charfield
37       FROM cd me
38       JOIN artist artist ON artist.artistid = me.artist
39       LEFT JOIN cd cds ON cds.artist = artist.artistid
40       LEFT JOIN artist artist_2 ON artist_2.artistid = cds.artist
41     ORDER BY cds.artist, cds.year ASC
42   )',
43   [],
44 );
45
46 done_testing;