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