Fix incorrect whitespace test outside of checkouts
[dbsrgits/DBIx-Class.git] / t / sqlmaker / msaccess.t
1 BEGIN { do "./t/lib/ANFANG.pm" or die ( $@ || $! ) }
2
3 use strict;
4 use warnings;
5 use Test::More;
6
7 use DBICTest ':DiffSQL';
8
9 # the entire point of the subclass is that parenthesis have to be
10 # just right for ACCESS to be happy
11 # globalize for entirety of the test
12 $SQL::Abstract::Test::parenthesis_significant = 1;
13
14 my $schema = DBICTest->init_schema (storage_type => 'DBIx::Class::Storage::DBI::ACCESS', no_deploy => 1, quote_names => 1);
15
16 is_same_sql_bind(
17   $schema->resultset('Artist')->search(
18     {
19       artistid => 1,
20     },
21     {
22       join => [{ cds => 'tracks' }],
23       '+select' => [ 'tracks.title' ],
24       '+as'     => [ 'track_title'  ],
25     }
26   )->as_query,
27   '(
28     SELECT [me].[artistid], [me].[name], [me].[rank], [me].[charfield],
29            [tracks].[title]
30       FROM (
31         (
32           [artist] [me]
33           LEFT JOIN cd [cds]
34             ON [cds].[artist] = [me].[artistid]
35         )
36         LEFT JOIN [track] [tracks]
37           ON [tracks].[cd] = [cds].[cdid]
38       )
39     WHERE ( [artistid] = ? )
40   )',
41   [
42     [{ sqlt_datatype => 'integer', dbic_colname => 'artistid' }
43       => 1 ],
44   ],
45   'correct SQL for two-step left join'
46 );
47
48 is_same_sql_bind(
49   $schema->resultset('Track')->search(
50     {
51       trackid => 1,
52     },
53     {
54       join => [{ cd => 'artist' }],
55       '+select' => [ 'artist.name' ],
56       '+as'     => [ 'artist_name'  ],
57     }
58   )->as_query,
59   '(
60     SELECT [me].[trackid], [me].[cd], [me].[position], [me].[title], [me].[last_updated_on], [me].[last_updated_at],
61            [artist].[name]
62       FROM (
63         (
64           [track] [me]
65           INNER JOIN cd [cd]
66             ON [cd].[cdid] = [me].[cd]
67         )
68         INNER JOIN [artist] [artist]
69           ON [artist].[artistid] = [cd].[artist]
70       )
71     WHERE ( [trackid] = ? )
72   )',
73   [
74     [{ sqlt_datatype => 'integer', dbic_colname => 'trackid' }
75       => 1 ],
76   ],
77   'correct SQL for two-step inner join',
78 );
79
80
81 my $sa = $schema->storage->sql_maker;
82 # the legacy tests assume no quoting - leave things as-is
83 local $sa->{quote_char};
84
85 #  my ($self, $table, $fields, $where, $order, @rest) = @_;
86 my ($sql, @bind) = $sa->select(
87     [
88         { me => "cd" },
89         [
90             { "-join_type" => "LEFT", artist => "artist" },
91             { "artist.artistid" => { -ident => "me.artist" } },
92         ],
93     ],
94     [ 'cd.cdid', 'cd.artist', 'cd.title', 'cd.year', 'artist.artistid', 'artist.name' ],
95     undef,
96     undef
97 );
98 is_same_sql_bind(
99   $sql, \@bind,
100   'SELECT cd.cdid, cd.artist, cd.title, cd.year, artist.artistid, artist.name FROM (cd me LEFT JOIN artist artist ON artist.artistid = me.artist)', [],
101   'one-step join parenthesized'
102 );
103
104 ($sql, @bind) = $sa->select(
105     [
106         { me => "cd" },
107         [
108             { "-join_type" => "LEFT", track => "track" },
109             { "track.cd" => { -ident => "me.cdid" } },
110         ],
111         [
112             { artist => "artist" },
113             { "artist.artistid" => { -ident => "me.artist" } },
114         ],
115     ],
116     [ 'track.title', 'cd.cdid', 'cd.artist', 'cd.title', 'cd.year', 'artist.artistid', 'artist.name' ],
117     undef,
118     undef
119 );
120 is_same_sql_bind(
121   $sql, \@bind,
122   'SELECT track.title, cd.cdid, cd.artist, cd.title, cd.year, artist.artistid, artist.name FROM ((cd me LEFT JOIN track track ON track.cd = me.cdid) INNER JOIN artist artist ON artist.artistid = me.artist)', [],
123   'two-step join parenthesized and inner join prepended with INNER'
124 );
125
126 done_testing;