* Made DBIC::SQL::Abstract pass on order_by hashref ({-desc => 'colname'}) to SQL...
[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 => 8 );
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             { -desc => 'year' }
76           ],
77           undef,
78           undef
79 );
80
81 is_same_sql_bind(
82   $sql, \@bind,
83   q/SELECT `me`.`cdid`, `me`.`artist`, `me`.`title`, `me`.`year` FROM `cd` `me` ORDER BY `year` DESC/, [],
84   'hashref ORDER BY okay'
85 );
86
87
88 ($sql, @bind) = $sql_maker->select(
89       [
90         {
91           'me' => 'cd'
92         }
93       ],
94       [
95         'me.*'
96       ],
97       undef,
98       [],
99       undef,
100       undef    
101 );
102
103 is_same_sql_bind(
104   $sql, \@bind,
105   q/SELECT `me`.* FROM `cd` `me`/, [],
106   'select attr with me.* is right'
107 );
108
109 ($sql, @bind) = $sql_maker->select(
110           [
111             {
112               'me' => 'cd'
113             }
114           ],
115           [
116             'me.cdid',
117             'me.artist',
118             'me.title',
119             'me.year'
120           ],
121           undef,
122           [
123             \'year DESC'
124           ],
125           undef,
126           undef
127 );
128
129 is_same_sql_bind(
130   $sql, \@bind,
131   q/SELECT `me`.`cdid`, `me`.`artist`, `me`.`title`, `me`.`year` FROM `cd` `me` ORDER BY year DESC/, [],
132   'did not quote ORDER BY with scalarref'
133 );
134
135 ($sql, @bind) = $sql_maker->update(
136           'group',
137           {
138             'order' => '12',
139             'name' => 'Bill'
140           }
141 );
142
143 is_same_sql_bind(
144   $sql, \@bind,
145   q/UPDATE `group` SET `name` = ?, `order` = ?/, [ ['name' => 'Bill'], ['order' => '12'] ],
146   'quoted table names for UPDATE'
147 );
148
149 $sql_maker->quote_char([qw/[ ]/]);
150
151 ($sql, @bind) = $sql_maker->select(
152           [
153             {
154               'me' => 'cd'
155             },
156             [
157               {
158                 'artist' => 'artist',
159                 '-join_type' => ''
160               },
161               {
162                 'artist.artistid' => 'me.artist'
163               }
164             ]
165           ],
166           [
167             {
168               'count' => '*'
169             }
170           ],
171           {
172             'artist.name' => 'Caterwauler McCrae',
173             'me.year' => 2001
174           },
175           [],
176           undef,
177           undef
178 );
179
180 is_same_sql_bind(
181   $sql, \@bind,
182   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] ],
183   'got correct SQL and bind parameters for count query with bracket quoting'
184 );
185
186
187 ($sql, @bind) = $sql_maker->update(
188           'group',
189           {
190             'order' => '12',
191             'name' => 'Bill'
192           }
193 );
194
195 is_same_sql_bind(
196   $sql, \@bind,
197   q/UPDATE [group] SET [name] = ?, [order] = ?/, [ ['name' => 'Bill'], ['order' => '12'] ],
198   'bracket quoted table names for UPDATE'
199 );