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