* Removed a wrong TODO test: "order_by with quoting needs fixing (ash/castaway)...
[dbsrgits/DBIx-Class.git] / t / 95sql_maker_quote.t
1 use strict;
2 use warnings;
3
4 use Test::More;
5 use SQL::Abstract::Test import => ['is_same_sql_bind'];
6
7
8 BEGIN {
9     eval "use DBD::SQLite";
10     plan $@
11         ? ( skip_all => 'needs DBD::SQLite for testing' )
12         : ( tests => 7 );
13 }
14
15 use lib qw(t/lib);
16
17 use_ok('DBICTest');
18
19 my $schema = DBICTest->init_schema();
20
21 my $sql_maker = $schema->storage->sql_maker;
22
23 $sql_maker->quote_char('`');
24 $sql_maker->name_sep('.');
25
26 my ($sql, @bind) = $sql_maker->select(
27           [
28             {
29               'me' => 'cd'
30             },
31             [
32               {
33                 'artist' => 'artist',
34                 '-join_type' => ''
35               },
36               {
37                 'artist.artistid' => 'me.artist'
38               }
39             ]
40           ],
41           [
42             {
43               'count' => '*'
44             }
45           ],
46           {
47             'artist.name' => 'Caterwauler McCrae',
48             'me.year' => 2001
49           },
50           [],
51           undef,
52           undef
53 );
54
55 is_same_sql_bind(
56   $sql, \@bind,
57   q/SELECT COUNT( * ) FROM `cd` `me`  JOIN `artist` `artist` ON ( `artist`.`artistid` = `me`.`artist` ) WHERE ( `artist`.`name` = ? AND `me`.`year` = ? )/, [ ['artist.name' => 'Caterwauler McCrae'], ['me.year' => 2001] ],
58   'got correct SQL and bind parameters for count query with quoting'
59 );
60
61 ($sql, @bind) = $sql_maker->select(
62           [
63             {
64               'me' => 'cd'
65             }
66           ],
67           [
68             'me.cdid',
69             'me.artist',
70             'me.title',
71             'me.year'
72           ],
73           undef,
74           [
75             'year DESC'
76           ],
77           undef,
78           undef
79 );
80
81 ($sql, @bind) = $sql_maker->select(
82       [
83         {
84           'me' => 'cd'
85         }
86       ],
87       [
88         'me.*'
89       ],
90       undef,
91       [],
92       undef,
93       undef    
94 );
95
96 is_same_sql_bind(
97   $sql, \@bind,
98   q/SELECT `me`.* FROM `cd` `me`/, [],
99   'select attr with me.* is right'
100 );
101
102 ($sql, @bind) = $sql_maker->select(
103           [
104             {
105               'me' => 'cd'
106             }
107           ],
108           [
109             'me.cdid',
110             'me.artist',
111             'me.title',
112             'me.year'
113           ],
114           undef,
115           [
116             \'year DESC'
117           ],
118           undef,
119           undef
120 );
121
122 is_same_sql_bind(
123   $sql, \@bind,
124   q/SELECT `me`.`cdid`, `me`.`artist`, `me`.`title`, `me`.`year` FROM `cd` `me` ORDER BY year DESC/, [],
125   'did not quote ORDER BY with scalarref'
126 );
127
128 ($sql, @bind) = $sql_maker->update(
129           'group',
130           {
131             'order' => '12',
132             'name' => 'Bill'
133           }
134 );
135
136 is_same_sql_bind(
137   $sql, \@bind,
138   q/UPDATE `group` SET `name` = ?, `order` = ?/, [ ['name' => 'Bill'], ['order' => '12'] ],
139   'quoted table names for UPDATE'
140 );
141
142 $sql_maker->quote_char([qw/[ ]/]);
143
144 ($sql, @bind) = $sql_maker->select(
145           [
146             {
147               'me' => 'cd'
148             },
149             [
150               {
151                 'artist' => 'artist',
152                 '-join_type' => ''
153               },
154               {
155                 'artist.artistid' => 'me.artist'
156               }
157             ]
158           ],
159           [
160             {
161               'count' => '*'
162             }
163           ],
164           {
165             'artist.name' => 'Caterwauler McCrae',
166             'me.year' => 2001
167           },
168           [],
169           undef,
170           undef
171 );
172
173 is_same_sql_bind(
174   $sql, \@bind,
175   q/SELECT COUNT( * ) FROM [cd] [me]  JOIN [artist] [artist] ON ( [artist].[artistid] = [me].[artist] ) WHERE ( [artist].[name] = ? AND [me].[year] = ? )/, [ ['artist.name' => 'Caterwauler McCrae'], ['me.year' => 2001] ],
176   'got correct SQL and bind parameters for count query with bracket quoting'
177 );
178
179
180 ($sql, @bind) = $sql_maker->update(
181           'group',
182           {
183             'order' => '12',
184             'name' => 'Bill'
185           }
186 );
187
188 is_same_sql_bind(
189   $sql, \@bind,
190   q/UPDATE [group] SET [name] = ?, [order] = ?/, [ ['name' => 'Bill'], ['order' => '12'] ],
191   'bracket quoted table names for UPDATE'
192 );