Reverted andyg's fixes to DBI.pm, updated tests accordingly.
[dbsrgits/DBIx-Class.git] / t / 16joins.t
CommitLineData
73856587 1use strict;
2use Test::More;
3
4BEGIN {
5 eval "use DBD::SQLite";
6 plan $@
7 ? ( skip_all => 'needs DBD::SQLite for testing' )
8 : ( tests => 4 );
9}
10
11use lib qw(t/lib);
12
13use_ok('DBICTest');
14
15# test the abstract join => SQL generator
16my $sa = new DBIC::SQL::Abstract;
17
18my @j = (
19 { child => 'person' },
20 [ { father => 'person' }, { 'father.person_id' => 'child.father_id' }, ],
21 [ { mother => 'person' }, { 'mother.person_id' => 'child.mother_id' } ],
22);
96cdbbab 23my $match = 'person child JOIN person father ON ( father.person_id = '
24 . 'child.father_id ) JOIN person mother ON ( mother.person_id '
73856587 25 . '= child.mother_id )'
26 ;
27is( $sa->_recurse_from(@j), $match, 'join 1 ok' );
28
29my @j2 = (
30 { mother => 'person' },
31 [ [ { child => 'person' },
32 [ { father => 'person' },
33 { 'father.person_id' => 'child.father_id' }
34 ]
35 ],
36 { 'mother.person_id' => 'child.mother_id' }
37 ],
38);
96cdbbab 39$match = 'person mother JOIN (person child JOIN person father ON ('
73856587 40 . ' father.person_id = child.father_id )) ON ( mother.person_id = '
41 . 'child.mother_id )'
42 ;
43is( $sa->_recurse_from(@j2), $match, 'join 2 ok' );
44
45my @j3 = (
46 { child => 'person' },
47 [ { father => 'person', -join_type => 'inner' }, { 'father.person_id' => 'child.father_id' }, ],
48 [ { mother => 'person', -join_type => 'inner' }, { 'mother.person_id' => 'child.mother_id' } ],
49);
96cdbbab 50my $match = 'person child INNER JOIN person father ON ( father.person_id = '
51 . 'child.father_id ) INNER JOIN person mother ON ( mother.person_id '
73856587 52 . '= child.mother_id )'
53 ;
54
55is( $sa->_recurse_from(@j3), $match, 'join 3 (inner join) ok');