OLD | NEW |
| (Empty) |
1 # | |
2 # 2001 September 15 | |
3 # | |
4 # The author disclaims copyright to this source code. In place of | |
5 # a legal notice, here is a blessing: | |
6 # | |
7 # May you do good and not evil. | |
8 # May you find forgiveness for yourself and forgive others. | |
9 # May you share freely, never taking more than you give. | |
10 # | |
11 #*********************************************************************** | |
12 # This file implements regression tests for SQLite library. The | |
13 # focus of this script is page cache subsystem. | |
14 # | |
15 # $Id: collate2.test,v 1.6 2008/08/20 16:35:10 drh Exp $ | |
16 | |
17 set testdir [file dirname $argv0] | |
18 source $testdir/tester.tcl | |
19 | |
20 set ::testprefix collate2 | |
21 | |
22 # | |
23 # Tests are organised as follows: | |
24 # | |
25 # collate2-1.* WHERE <expr> expressions (sqliteExprIfTrue). | |
26 # collate2-2.* WHERE NOT <expr> expressions (sqliteExprIfFalse). | |
27 # collate2-3.* SELECT <expr> expressions (sqliteExprCode). | |
28 # collate2-4.* Precedence of collation/data types in binary comparisons | |
29 # collate2-5.* JOIN syntax. | |
30 # | |
31 | |
32 # Create a collation type BACKWARDS for use in testing. This collation type | |
33 # is similar to the built-in TEXT collation type except the order of | |
34 # characters in each string is reversed before the comparison is performed. | |
35 db collate BACKWARDS backwards_collate | |
36 proc backwards_collate {a b} { | |
37 set ra {}; | |
38 set rb {} | |
39 foreach c [split $a {}] { set ra $c$ra } | |
40 foreach c [split $b {}] { set rb $c$rb } | |
41 return [string compare $ra $rb] | |
42 } | |
43 | |
44 # The following values are used in these tests: | |
45 # NULL aa ab ba bb aA aB bA bB Aa Ab Ba Bb AA AB BA BB | |
46 # | |
47 # The collation orders for each of the tested collation types are: | |
48 # | |
49 # BINARY: NULL AA AB Aa Ab BA BB Ba Bb aA aB aa ab bA bB ba bb | |
50 # NOCASE: NULL aa aA Aa AA ab aB Ab AB ba bA Ba BA bb bB Bb BB | |
51 # BACKWARDS: NULL AA BA aA bA AB BB aB bB Aa Ba aa ba Ab Bb ab bb | |
52 # | |
53 # These tests verify that the default collation type for a column is used | |
54 # for comparison operators (<, >, <=, >=, =) involving that column and | |
55 # an expression that is not a column with a default collation type. | |
56 # | |
57 # The collation sequences BINARY and NOCASE are built-in, the BACKWARDS | |
58 # collation sequence is implemented by the TCL proc backwards_collate | |
59 # above. | |
60 # | |
61 do_test collate2-1.0 { | |
62 execsql { | |
63 CREATE TABLE collate2t1( | |
64 a COLLATE BINARY, | |
65 b COLLATE NOCASE, | |
66 c COLLATE BACKWARDS | |
67 ); | |
68 INSERT INTO collate2t1 VALUES( NULL, NULL, NULL ); | |
69 | |
70 INSERT INTO collate2t1 VALUES( 'aa', 'aa', 'aa' ); | |
71 INSERT INTO collate2t1 VALUES( 'ab', 'ab', 'ab' ); | |
72 INSERT INTO collate2t1 VALUES( 'ba', 'ba', 'ba' ); | |
73 INSERT INTO collate2t1 VALUES( 'bb', 'bb', 'bb' ); | |
74 | |
75 INSERT INTO collate2t1 VALUES( 'aA', 'aA', 'aA' ); | |
76 INSERT INTO collate2t1 VALUES( 'aB', 'aB', 'aB' ); | |
77 INSERT INTO collate2t1 VALUES( 'bA', 'bA', 'bA' ); | |
78 INSERT INTO collate2t1 VALUES( 'bB', 'bB', 'bB' ); | |
79 | |
80 INSERT INTO collate2t1 VALUES( 'Aa', 'Aa', 'Aa' ); | |
81 INSERT INTO collate2t1 VALUES( 'Ab', 'Ab', 'Ab' ); | |
82 INSERT INTO collate2t1 VALUES( 'Ba', 'Ba', 'Ba' ); | |
83 INSERT INTO collate2t1 VALUES( 'Bb', 'Bb', 'Bb' ); | |
84 | |
85 INSERT INTO collate2t1 VALUES( 'AA', 'AA', 'AA' ); | |
86 INSERT INTO collate2t1 VALUES( 'AB', 'AB', 'AB' ); | |
87 INSERT INTO collate2t1 VALUES( 'BA', 'BA', 'BA' ); | |
88 INSERT INTO collate2t1 VALUES( 'BB', 'BB', 'BB' ); | |
89 } | |
90 if {[info exists collate_test_use_index]} { | |
91 execsql { | |
92 CREATE INDEX collate2t1_i1 ON collate2t1(a); | |
93 CREATE INDEX collate2t1_i2 ON collate2t1(b); | |
94 CREATE INDEX collate2t1_i3 ON collate2t1(c); | |
95 } | |
96 } | |
97 } {} | |
98 do_test collate2-1.1 { | |
99 execsql { | |
100 SELECT a FROM collate2t1 WHERE a > 'aa' ORDER BY 1; | |
101 } | |
102 } {ab bA bB ba bb} | |
103 do_test collate2-1.1.1 { | |
104 execsql { | |
105 SELECT a FROM collate2t1 WHERE a COLLATE binary > 'aa' ORDER BY 1; | |
106 } | |
107 } {ab bA bB ba bb} | |
108 do_test collate2-1.1.2 { | |
109 execsql { | |
110 SELECT a FROM collate2t1 WHERE b COLLATE binary > 'aa' ORDER BY 1; | |
111 } | |
112 } {ab bA bB ba bb} | |
113 do_test collate2-1.1.3 { | |
114 execsql { | |
115 SELECT a FROM collate2t1 WHERE c COLLATE binary > 'aa' ORDER BY 1; | |
116 } | |
117 } {ab bA bB ba bb} | |
118 do_test collate2-1.2 { | |
119 execsql { | |
120 SELECT b FROM collate2t1 WHERE b > 'aa' ORDER BY 1, oid; | |
121 } | |
122 } {ab aB Ab AB ba bA Ba BA bb bB Bb BB} | |
123 do_test collate2-1.2.1 { | |
124 execsql { | |
125 SELECT b FROM collate2t1 WHERE a COLLATE nocase > 'aa' | |
126 ORDER BY 1, oid; | |
127 } | |
128 } {ab aB Ab AB ba bA Ba BA bb bB Bb BB} | |
129 do_test collate2-1.2.2 { | |
130 execsql { | |
131 SELECT b FROM collate2t1 WHERE b COLLATE nocase > 'aa' | |
132 ORDER BY 1, oid; | |
133 } | |
134 } {ab aB Ab AB ba bA Ba BA bb bB Bb BB} | |
135 do_test collate2-1.2.3 { | |
136 execsql { | |
137 SELECT b FROM collate2t1 WHERE c COLLATE nocase > 'aa' | |
138 ORDER BY 1, oid; | |
139 } | |
140 } {ab aB Ab AB ba bA Ba BA bb bB Bb BB} | |
141 do_test collate2-1.2.4 { | |
142 execsql { | |
143 SELECT b FROM collate2t1 WHERE b > 'aa' ORDER BY +b; | |
144 } | |
145 } {ab aB Ab AB ba bA Ba BA bb bB Bb BB} | |
146 do_test collate2-1.2.5 { | |
147 execsql { | |
148 SELECT b FROM collate2t1 WHERE a COLLATE nocase > 'aa' ORDER BY +b; | |
149 } | |
150 } {ab aB Ab AB ba bA Ba BA bb bB Bb BB} | |
151 do_test collate2-1.2.6 { | |
152 execsql { | |
153 SELECT b FROM collate2t1 WHERE b COLLATE nocase > 'aa' ORDER BY +b; | |
154 } | |
155 } {ab aB Ab AB ba bA Ba BA bb bB Bb BB} | |
156 do_test collate2-1.2.7 { | |
157 execsql { | |
158 SELECT b FROM collate2t1 WHERE c COLLATE nocase > 'aa' ORDER BY +b; | |
159 } | |
160 } {ab aB Ab AB ba bA Ba BA bb bB Bb BB} | |
161 do_test collate2-1.3 { | |
162 execsql { | |
163 SELECT c FROM collate2t1 WHERE c > 'aa' ORDER BY 1; | |
164 } | |
165 } {ba Ab Bb ab bb} | |
166 do_test collate2-1.3.1 { | |
167 execsql { | |
168 SELECT c FROM collate2t1 WHERE a COLLATE backwards > 'aa' | |
169 ORDER BY 1; | |
170 } | |
171 } {ba Ab Bb ab bb} | |
172 do_test collate2-1.3.2 { | |
173 execsql { | |
174 SELECT c FROM collate2t1 WHERE b COLLATE backwards > 'aa' | |
175 ORDER BY 1; | |
176 } | |
177 } {ba Ab Bb ab bb} | |
178 do_test collate2-1.3.3 { | |
179 execsql { | |
180 SELECT c FROM collate2t1 WHERE c COLLATE backwards > 'aa' | |
181 ORDER BY 1; | |
182 } | |
183 } {ba Ab Bb ab bb} | |
184 do_test collate2-1.4 { | |
185 execsql { | |
186 SELECT a FROM collate2t1 WHERE a < 'aa' ORDER BY 1; | |
187 } | |
188 } {AA AB Aa Ab BA BB Ba Bb aA aB} | |
189 do_test collate2-1.5 { | |
190 execsql { | |
191 SELECT b FROM collate2t1 WHERE b < 'aa' ORDER BY 1, oid; | |
192 } | |
193 } {} | |
194 do_test collate2-1.5.1 { | |
195 execsql { | |
196 SELECT b FROM collate2t1 WHERE b < 'aa' ORDER BY +b; | |
197 } | |
198 } {} | |
199 do_test collate2-1.6 { | |
200 execsql { | |
201 SELECT c FROM collate2t1 WHERE c < 'aa' ORDER BY 1; | |
202 } | |
203 } {AA BA aA bA AB BB aB bB Aa Ba} | |
204 do_test collate2-1.7 { | |
205 execsql { | |
206 SELECT a FROM collate2t1 WHERE a = 'aa'; | |
207 } | |
208 } {aa} | |
209 do_test collate2-1.8 { | |
210 execsql { | |
211 SELECT b FROM collate2t1 WHERE b = 'aa' ORDER BY oid; | |
212 } | |
213 } {aa aA Aa AA} | |
214 do_test collate2-1.9 { | |
215 execsql { | |
216 SELECT c FROM collate2t1 WHERE c = 'aa'; | |
217 } | |
218 } {aa} | |
219 do_test collate2-1.10 { | |
220 execsql { | |
221 SELECT a FROM collate2t1 WHERE a >= 'aa' ORDER BY 1; | |
222 } | |
223 } {aa ab bA bB ba bb} | |
224 do_test collate2-1.11 { | |
225 execsql { | |
226 SELECT b FROM collate2t1 WHERE b >= 'aa' ORDER BY 1, oid; | |
227 } | |
228 } {aa aA Aa AA ab aB Ab AB ba bA Ba BA bb bB Bb BB} | |
229 do_test collate2-1.12 { | |
230 execsql { | |
231 SELECT c FROM collate2t1 WHERE c >= 'aa' ORDER BY 1; | |
232 } | |
233 } {aa ba Ab Bb ab bb} | |
234 do_test collate2-1.13 { | |
235 execsql { | |
236 SELECT a FROM collate2t1 WHERE a <= 'aa' ORDER BY 1; | |
237 } | |
238 } {AA AB Aa Ab BA BB Ba Bb aA aB aa} | |
239 do_test collate2-1.14 { | |
240 execsql { | |
241 SELECT b FROM collate2t1 WHERE b <= 'aa' ORDER BY 1, oid; | |
242 } | |
243 } {aa aA Aa AA} | |
244 do_test collate2-1.15 { | |
245 execsql { | |
246 SELECT c FROM collate2t1 WHERE c <= 'aa' ORDER BY 1; | |
247 } | |
248 } {AA BA aA bA AB BB aB bB Aa Ba aa} | |
249 do_test collate2-1.16 { | |
250 execsql { | |
251 SELECT a FROM collate2t1 WHERE a BETWEEN 'Aa' AND 'Bb' ORDER BY 1; | |
252 } | |
253 } {Aa Ab BA BB Ba Bb} | |
254 do_test collate2-1.17 { | |
255 execsql { | |
256 SELECT b FROM collate2t1 WHERE b BETWEEN 'Aa' AND 'Bb' ORDER BY 1, oid; | |
257 } | |
258 } {aa aA Aa AA ab aB Ab AB ba bA Ba BA bb bB Bb BB} | |
259 do_test collate2-1.17.1 { | |
260 execsql { | |
261 SELECT b FROM collate2t1 WHERE b BETWEEN 'Aa' AND 'Bb' ORDER BY +b; | |
262 } | |
263 } {aa aA Aa AA ab aB Ab AB ba bA Ba BA bb bB Bb BB} | |
264 do_test collate2-1.18 { | |
265 execsql { | |
266 SELECT c FROM collate2t1 WHERE c BETWEEN 'Aa' AND 'Bb' ORDER BY 1; | |
267 } | |
268 } {Aa Ba aa ba Ab Bb} | |
269 do_test collate2-1.19 { | |
270 execsql { | |
271 SELECT a FROM collate2t1 WHERE | |
272 CASE a WHEN 'aa' THEN 1 ELSE 0 END | |
273 ORDER BY 1, oid; | |
274 } | |
275 } {aa} | |
276 do_test collate2-1.20 { | |
277 execsql { | |
278 SELECT b FROM collate2t1 WHERE | |
279 CASE b WHEN 'aa' THEN 1 ELSE 0 END | |
280 ORDER BY 1, oid; | |
281 } | |
282 } {aa aA Aa AA} | |
283 do_test collate2-1.21 { | |
284 execsql { | |
285 SELECT c FROM collate2t1 WHERE | |
286 CASE c WHEN 'aa' THEN 1 ELSE 0 END | |
287 ORDER BY 1, oid; | |
288 } | |
289 } {aa} | |
290 | |
291 ifcapable subquery { | |
292 do_test collate2-1.22 { | |
293 execsql { | |
294 SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb') ORDER BY 1, oid; | |
295 } | |
296 } {aa bb} | |
297 do_test collate2-1.23 { | |
298 execsql { | |
299 SELECT b FROM collate2t1 WHERE b IN ('aa', 'bb') ORDER BY 1, oid; | |
300 } | |
301 } {aa aA Aa AA bb bB Bb BB} | |
302 do_test collate2-1.24 { | |
303 execsql { | |
304 SELECT c FROM collate2t1 WHERE c IN ('aa', 'bb') ORDER BY 1, oid; | |
305 } | |
306 } {aa bb} | |
307 do_test collate2-1.25 { | |
308 execsql { | |
309 SELECT a FROM collate2t1 | |
310 WHERE a IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')); | |
311 } | |
312 } {aa bb} | |
313 do_test collate2-1.26 { | |
314 execsql { | |
315 SELECT b FROM collate2t1 | |
316 WHERE b IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')); | |
317 } | |
318 } {aa bb aA bB Aa Bb AA BB} | |
319 do_test collate2-1.27 { | |
320 execsql { | |
321 SELECT c FROM collate2t1 | |
322 WHERE c IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')); | |
323 } | |
324 } {aa bb} | |
325 } ;# ifcapable subquery | |
326 | |
327 do_test collate2-2.1 { | |
328 execsql { | |
329 SELECT a FROM collate2t1 WHERE NOT a > 'aa' ORDER BY 1; | |
330 } | |
331 } {AA AB Aa Ab BA BB Ba Bb aA aB aa} | |
332 do_test collate2-2.2 { | |
333 execsql { | |
334 SELECT b FROM collate2t1 WHERE NOT b > 'aa' ORDER BY 1, oid; | |
335 } | |
336 } {aa aA Aa AA} | |
337 do_test collate2-2.3 { | |
338 execsql { | |
339 SELECT c FROM collate2t1 WHERE NOT c > 'aa' ORDER BY 1; | |
340 } | |
341 } {AA BA aA bA AB BB aB bB Aa Ba aa} | |
342 do_test collate2-2.4 { | |
343 execsql { | |
344 SELECT a FROM collate2t1 WHERE NOT a < 'aa' ORDER BY 1; | |
345 } | |
346 } {aa ab bA bB ba bb} | |
347 do_test collate2-2.5 { | |
348 execsql { | |
349 SELECT b FROM collate2t1 WHERE NOT b < 'aa' ORDER BY 1, oid; | |
350 } | |
351 } {aa aA Aa AA ab aB Ab AB ba bA Ba BA bb bB Bb BB} | |
352 do_test collate2-2.6 { | |
353 execsql { | |
354 SELECT c FROM collate2t1 WHERE NOT c < 'aa' ORDER BY 1; | |
355 } | |
356 } {aa ba Ab Bb ab bb} | |
357 do_test collate2-2.7 { | |
358 execsql { | |
359 SELECT a FROM collate2t1 WHERE NOT a = 'aa'; | |
360 } | |
361 } {ab ba bb aA aB bA bB Aa Ab Ba Bb AA AB BA BB} | |
362 do_test collate2-2.8 { | |
363 execsql { | |
364 SELECT b FROM collate2t1 WHERE NOT b = 'aa'; | |
365 } | |
366 } {ab ba bb aB bA bB Ab Ba Bb AB BA BB} | |
367 do_test collate2-2.9 { | |
368 execsql { | |
369 SELECT c FROM collate2t1 WHERE NOT c = 'aa'; | |
370 } | |
371 } {ab ba bb aA aB bA bB Aa Ab Ba Bb AA AB BA BB} | |
372 do_test collate2-2.10 { | |
373 execsql { | |
374 SELECT a FROM collate2t1 WHERE NOT a >= 'aa' ORDER BY 1; | |
375 } | |
376 } {AA AB Aa Ab BA BB Ba Bb aA aB} | |
377 do_test collate2-2.11 { | |
378 execsql { | |
379 SELECT b FROM collate2t1 WHERE NOT b >= 'aa' ORDER BY 1, oid; | |
380 } | |
381 } {} | |
382 do_test collate2-2.12 { | |
383 execsql { | |
384 SELECT c FROM collate2t1 WHERE NOT c >= 'aa' ORDER BY 1; | |
385 } | |
386 } {AA BA aA bA AB BB aB bB Aa Ba} | |
387 do_test collate2-2.13 { | |
388 execsql { | |
389 SELECT a FROM collate2t1 WHERE NOT a <= 'aa' ORDER BY 1; | |
390 } | |
391 } {ab bA bB ba bb} | |
392 do_test collate2-2.14 { | |
393 execsql { | |
394 SELECT b FROM collate2t1 WHERE NOT b <= 'aa' ORDER BY 1, oid; | |
395 } | |
396 } {ab aB Ab AB ba bA Ba BA bb bB Bb BB} | |
397 do_test collate2-2.15 { | |
398 execsql { | |
399 SELECT c FROM collate2t1 WHERE NOT c <= 'aa' ORDER BY 1; | |
400 } | |
401 } {ba Ab Bb ab bb} | |
402 do_test collate2-2.16 { | |
403 execsql { | |
404 SELECT a FROM collate2t1 WHERE a NOT BETWEEN 'Aa' AND 'Bb' ORDER BY 1; | |
405 } | |
406 } {AA AB aA aB aa ab bA bB ba bb} | |
407 do_test collate2-2.17 { | |
408 execsql { | |
409 SELECT b FROM collate2t1 WHERE b NOT BETWEEN 'Aa' AND 'Bb' ORDER BY 1, oid; | |
410 } | |
411 } {} | |
412 do_test collate2-2.18 { | |
413 execsql { | |
414 SELECT c FROM collate2t1 WHERE c NOT BETWEEN 'Aa' AND 'Bb' ORDER BY 1; | |
415 } | |
416 } {AA BA aA bA AB BB aB bB ab bb} | |
417 do_test collate2-2.19 { | |
418 execsql { | |
419 SELECT a FROM collate2t1 WHERE NOT CASE a WHEN 'aa' THEN 1 ELSE 0 END; | |
420 } | |
421 } {{} ab ba bb aA aB bA bB Aa Ab Ba Bb AA AB BA BB} | |
422 do_test collate2-2.20 { | |
423 execsql { | |
424 SELECT b FROM collate2t1 WHERE NOT CASE b WHEN 'aa' THEN 1 ELSE 0 END; | |
425 } | |
426 } {{} ab ba bb aB bA bB Ab Ba Bb AB BA BB} | |
427 do_test collate2-2.21 { | |
428 execsql { | |
429 SELECT c FROM collate2t1 WHERE NOT CASE c WHEN 'aa' THEN 1 ELSE 0 END; | |
430 } | |
431 } {{} ab ba bb aA aB bA bB Aa Ab Ba Bb AA AB BA BB} | |
432 | |
433 ifcapable subquery { | |
434 do_test collate2-2.22 { | |
435 execsql { | |
436 SELECT a FROM collate2t1 WHERE NOT a IN ('aa', 'bb'); | |
437 } | |
438 } {ab ba aA aB bA bB Aa Ab Ba Bb AA AB BA BB} | |
439 do_test collate2-2.23 { | |
440 execsql { | |
441 SELECT b FROM collate2t1 WHERE NOT b IN ('aa', 'bb'); | |
442 } | |
443 } {ab ba aB bA Ab Ba AB BA} | |
444 do_test collate2-2.24 { | |
445 execsql { | |
446 SELECT c FROM collate2t1 WHERE NOT c IN ('aa', 'bb'); | |
447 } | |
448 } {ab ba aA aB bA bB Aa Ab Ba Bb AA AB BA BB} | |
449 do_test collate2-2.25 { | |
450 execsql { | |
451 SELECT a FROM collate2t1 | |
452 WHERE NOT a IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')); | |
453 } | |
454 } {ab ba aA aB bA bB Aa Ab Ba Bb AA AB BA BB} | |
455 do_test collate2-2.26 { | |
456 execsql { | |
457 SELECT b FROM collate2t1 | |
458 WHERE NOT b IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')); | |
459 } | |
460 } {ab ba aB bA Ab Ba AB BA} | |
461 do_test collate2-2.27 { | |
462 execsql { | |
463 SELECT c FROM collate2t1 | |
464 WHERE NOT c IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')); | |
465 } | |
466 } {ab ba aA aB bA bB Aa Ab Ba Bb AA AB BA BB} | |
467 } | |
468 | |
469 do_test collate2-3.1 { | |
470 execsql { | |
471 SELECT a > 'aa' FROM collate2t1; | |
472 } | |
473 } {{} 0 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0} | |
474 do_test collate2-3.2 { | |
475 execsql { | |
476 SELECT b > 'aa' FROM collate2t1; | |
477 } | |
478 } {{} 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1} | |
479 do_test collate2-3.3 { | |
480 execsql { | |
481 SELECT c > 'aa' FROM collate2t1; | |
482 } | |
483 } {{} 0 1 1 1 0 0 0 0 0 1 0 1 0 0 0 0} | |
484 do_test collate2-3.4 { | |
485 execsql { | |
486 SELECT a < 'aa' FROM collate2t1; | |
487 } | |
488 } {{} 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1} | |
489 do_test collate2-3.5 { | |
490 execsql { | |
491 SELECT b < 'aa' FROM collate2t1; | |
492 } | |
493 } {{} 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} | |
494 do_test collate2-3.6 { | |
495 execsql { | |
496 SELECT c < 'aa' FROM collate2t1; | |
497 } | |
498 } {{} 0 0 0 0 1 1 1 1 1 0 1 0 1 1 1 1} | |
499 do_test collate2-3.7 { | |
500 execsql { | |
501 SELECT a = 'aa' FROM collate2t1; | |
502 } | |
503 } {{} 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} | |
504 do_test collate2-3.8 { | |
505 execsql { | |
506 SELECT b = 'aa' FROM collate2t1; | |
507 } | |
508 } {{} 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0} | |
509 do_test collate2-3.9 { | |
510 execsql { | |
511 SELECT c = 'aa' FROM collate2t1; | |
512 } | |
513 } {{} 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} | |
514 do_test collate2-3.10 { | |
515 execsql { | |
516 SELECT a <= 'aa' FROM collate2t1; | |
517 } | |
518 } {{} 1 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1} | |
519 do_test collate2-3.11 { | |
520 execsql { | |
521 SELECT b <= 'aa' FROM collate2t1; | |
522 } | |
523 } {{} 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0} | |
524 do_test collate2-3.12 { | |
525 execsql { | |
526 SELECT c <= 'aa' FROM collate2t1; | |
527 } | |
528 } {{} 1 0 0 0 1 1 1 1 1 0 1 0 1 1 1 1} | |
529 do_test collate2-3.13 { | |
530 execsql { | |
531 SELECT a >= 'aa' FROM collate2t1; | |
532 } | |
533 } {{} 1 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0} | |
534 do_test collate2-3.14 { | |
535 execsql { | |
536 SELECT b >= 'aa' FROM collate2t1; | |
537 } | |
538 } {{} 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1} | |
539 do_test collate2-3.15 { | |
540 execsql { | |
541 SELECT c >= 'aa' FROM collate2t1; | |
542 } | |
543 } {{} 1 1 1 1 0 0 0 0 0 1 0 1 0 0 0 0} | |
544 do_test collate2-3.16 { | |
545 execsql { | |
546 SELECT a BETWEEN 'Aa' AND 'Bb' FROM collate2t1; | |
547 } | |
548 } {{} 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1} | |
549 do_test collate2-3.17 { | |
550 execsql { | |
551 SELECT b BETWEEN 'Aa' AND 'Bb' FROM collate2t1; | |
552 } | |
553 } {{} 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1} | |
554 do_test collate2-3.18 { | |
555 execsql { | |
556 SELECT c BETWEEN 'Aa' AND 'Bb' FROM collate2t1; | |
557 } | |
558 } {{} 1 0 1 0 0 0 0 0 1 1 1 1 0 0 0 0} | |
559 do_test collate2-3.19 { | |
560 execsql { | |
561 SELECT CASE a WHEN 'aa' THEN 1 ELSE 0 END FROM collate2t1; | |
562 } | |
563 } {0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} | |
564 do_test collate2-3.20 { | |
565 execsql { | |
566 SELECT CASE b WHEN 'aa' THEN 1 ELSE 0 END FROM collate2t1; | |
567 } | |
568 } {0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0} | |
569 do_test collate2-3.21 { | |
570 execsql { | |
571 SELECT CASE c WHEN 'aa' THEN 1 ELSE 0 END FROM collate2t1; | |
572 } | |
573 } {0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0} | |
574 | |
575 ifcapable subquery { | |
576 do_test collate2-3.22 { | |
577 execsql { | |
578 SELECT a IN ('aa', 'bb') FROM collate2t1; | |
579 } | |
580 } {{} 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0} | |
581 do_test collate2-3.23 { | |
582 execsql { | |
583 SELECT b IN ('aa', 'bb') FROM collate2t1; | |
584 } | |
585 } {{} 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1} | |
586 do_test collate2-3.24 { | |
587 execsql { | |
588 SELECT c IN ('aa', 'bb') FROM collate2t1; | |
589 } | |
590 } {{} 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0} | |
591 do_test collate2-3.25 { | |
592 execsql { | |
593 SELECT a IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')) | |
594 FROM collate2t1; | |
595 } | |
596 } {{} 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0} | |
597 do_test collate2-3.26 { | |
598 execsql { | |
599 SELECT b IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')) | |
600 FROM collate2t1; | |
601 } | |
602 } {{} 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1} | |
603 do_test collate2-3.27 { | |
604 execsql { | |
605 SELECT c IN (SELECT a FROM collate2t1 WHERE a IN ('aa', 'bb')) | |
606 FROM collate2t1; | |
607 } | |
608 } {{} 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0} | |
609 } | |
610 | |
611 do_test collate2-4.0 { | |
612 execsql { | |
613 CREATE TABLE collate2t2(b COLLATE binary); | |
614 CREATE TABLE collate2t3(b text); | |
615 INSERT INTO collate2t2 VALUES('aa'); | |
616 INSERT INTO collate2t3 VALUES('aa'); | |
617 } | |
618 } {} | |
619 | |
620 # Test that when both sides of a binary comparison operator have | |
621 # default collation types, the collate type for the leftmost term | |
622 # is used. | |
623 do_test collate2-4.1 { | |
624 execsql { | |
625 SELECT collate2t1.a FROM collate2t1, collate2t2 | |
626 WHERE collate2t1.b = collate2t2.b; | |
627 } | |
628 } {aa aA Aa AA} | |
629 do_test collate2-4.2 { | |
630 execsql { | |
631 SELECT collate2t1.a FROM collate2t1, collate2t2 | |
632 WHERE collate2t2.b = collate2t1.b; | |
633 } | |
634 } {aa} | |
635 | |
636 # Test that when one side has a default collation type and the other | |
637 # does not, the collation type is used. | |
638 do_test collate2-4.3 { | |
639 execsql { | |
640 SELECT collate2t1.a FROM collate2t1, collate2t3 | |
641 WHERE collate2t1.b = collate2t3.b||'' | |
642 ORDER BY +collate2t1.a DESC; | |
643 } | |
644 } {aa aA Aa AA} | |
645 do_test collate2-4.4 { | |
646 execsql { | |
647 SELECT collate2t1.a FROM collate2t1, collate2t3 | |
648 WHERE collate2t3.b||'' = collate2t1.b | |
649 ORDER BY +collate2t1.a DESC; | |
650 } | |
651 } {aa aA Aa AA} | |
652 | |
653 do_test collate2-4.5 { | |
654 execsql { | |
655 DROP TABLE collate2t3; | |
656 } | |
657 } {} | |
658 | |
659 # | |
660 # Test that the default collation types are used when the JOIN syntax | |
661 # is used in place of a WHERE clause. | |
662 # | |
663 # SQLite transforms the JOIN syntax into a WHERE clause internally, so | |
664 # the focus of these tests is to ensure that the table on the left-hand-side | |
665 # of the join determines the collation type used. | |
666 # | |
667 do_test collate2-5.0 { | |
668 execsql { | |
669 SELECT collate2t1.b FROM collate2t1 JOIN collate2t2 USING (b); | |
670 } | |
671 } {aa aA Aa AA} | |
672 do_test collate2-5.1 { | |
673 execsql { | |
674 SELECT collate2t1.b FROM collate2t2 JOIN collate2t1 USING (b); | |
675 } | |
676 } {aa} | |
677 do_test collate2-5.2 { | |
678 execsql { | |
679 SELECT collate2t1.b FROM collate2t1 NATURAL JOIN collate2t2; | |
680 } | |
681 } {aa aA Aa AA} | |
682 do_test collate2-5.3 { | |
683 execsql { | |
684 SELECT collate2t1.b FROM collate2t2 NATURAL JOIN collate2t1; | |
685 } | |
686 } {aa} | |
687 do_test collate2-5.4 { | |
688 execsql { | |
689 SELECT collate2t2.b FROM collate2t1 LEFT OUTER JOIN collate2t2 USING (b) ord
er by collate2t1.oid; | |
690 } | |
691 } {{} aa {} {} {} aa {} {} {} aa {} {} {} aa {} {} {}} | |
692 do_test collate2-5.5 { | |
693 execsql { | |
694 SELECT collate2t1.b, collate2t2.b FROM collate2t2 LEFT OUTER JOIN collate2t1
USING (b); | |
695 } | |
696 } {aa aa} | |
697 | |
698 do_execsql_test 6.1 { | |
699 CREATE TABLE t1(x); | |
700 INSERT INTO t1 VALUES('b'); | |
701 INSERT INTO t1 VALUES('B'); | |
702 } | |
703 do_execsql_test 6.2 { | |
704 SELECT * FROM t1 WHERE x COLLATE nocase BETWEEN 'a' AND 'c'; | |
705 } {b B} | |
706 do_execsql_test 6.3 { | |
707 SELECT * FROM t1 WHERE x BETWEEN 'a' COLLATE nocase AND 'c' COLLATE nocase; | |
708 } {b B} | |
709 do_execsql_test 6.4 { | |
710 SELECT * FROM t1 | |
711 WHERE x COLLATE nocase BETWEEN 'a' COLLATE nocase AND 'c' COLLATE nocase; | |
712 } {b B} | |
713 do_execsql_test 6.5 { | |
714 SELECT * FROM t1 WHERE +x COLLATE nocase BETWEEN 'a' AND 'c'; | |
715 } {b B} | |
716 do_execsql_test 6.6 { | |
717 SELECT * FROM t1 WHERE +x BETWEEN 'a' COLLATE nocase AND 'c' COLLATE nocase; | |
718 } {b B} | |
719 do_execsql_test 6.7 { | |
720 SELECT * FROM t1 | |
721 WHERE +x COLLATE nocase BETWEEN 'a' COLLATE nocase AND 'c' COLLATE nocase; | |
722 } {b B} | |
723 | |
724 finish_test | |
OLD | NEW |