/ Hex Artifact Content
Login

Artifact 04cebe4a033be319d6ddbb3bbc69464e01700b49:


0000: 23 0a 23 20 32 30 30 31 20 53 65 70 74 65 6d 62  #.# 2001 Septemb
0010: 65 72 20 31 35 0a 23 0a 23 20 54 68 65 20 61 75  er 15.#.# The au
0020: 74 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63  thor disclaims c
0030: 6f 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73  opyright to this
0040: 20 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49   source code.  I
0050: 6e 20 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c  n place of.# a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 23 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  .#.#    May you 
0090: 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20  do good and not 
00a0: 65 76 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79  evil..#    May y
00b0: 6f 75 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e  ou find forgiven
00c0: 65 73 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66  ess for yourself
00d0: 20 61 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68   and forgive oth
00e0: 65 72 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f  ers..#    May yo
00f0: 75 20 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20  u share freely, 
0100: 6e 65 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72  never taking mor
0110: 65 20 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e  e than you give.
0120: 0a 23 0a 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .#.#************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54 68  ***********.# Th
0170: 69 73 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e  is file implemen
0180: 74 73 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65  ts regression te
0190: 73 74 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c  sts for SQLite l
01a0: 69 62 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66  ibrary.  The.# f
01b0: 6f 63 75 73 20 6f 66 20 74 68 69 73 20 73 63 72  ocus of this scr
01c0: 69 70 74 20 69 73 20 70 61 67 65 20 63 61 63 68  ipt is page cach
01d0: 65 20 73 75 62 73 79 73 74 65 6d 2e 0a 23 0a 23  e subsystem..#.#
01e0: 20 24 49 64 3a 20 63 6f 6c 6c 61 74 65 32 2e 74   $Id: collate2.t
01f0: 65 73 74 2c 76 20 31 2e 36 20 32 30 30 38 2f 30  est,v 1.6 2008/0
0200: 38 2f 32 30 20 31 36 3a 33 35 3a 31 30 20 64 72  8/20 16:35:10 dr
0210: 68 20 45 78 70 20 24 0a 0a 73 65 74 20 74 65 73  h Exp $..set tes
0220: 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61  tdir [file dirna
0230: 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63  me $argv0].sourc
0240: 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65  e $testdir/teste
0250: 72 2e 74 63 6c 0a 0a 23 0a 23 20 54 65 73 74 73  r.tcl..#.# Tests
0260: 20 61 72 65 20 6f 72 67 61 6e 69 73 65 64 20 61   are organised a
0270: 73 20 66 6f 6c 6c 6f 77 73 3a 0a 23 0a 23 20 63  s follows:.#.# c
0280: 6f 6c 6c 61 74 65 32 2d 31 2e 2a 20 57 48 45 52  ollate2-1.* WHER
0290: 45 20 3c 65 78 70 72 3e 20 65 78 70 72 65 73 73  E <expr> express
02a0: 69 6f 6e 73 20 28 73 71 6c 69 74 65 45 78 70 72  ions (sqliteExpr
02b0: 49 66 54 72 75 65 29 2e 0a 23 20 63 6f 6c 6c 61  IfTrue)..# colla
02c0: 74 65 32 2d 32 2e 2a 20 57 48 45 52 45 20 4e 4f  te2-2.* WHERE NO
02d0: 54 20 3c 65 78 70 72 3e 20 65 78 70 72 65 73 73  T <expr> express
02e0: 69 6f 6e 73 20 28 73 71 6c 69 74 65 45 78 70 72  ions (sqliteExpr
02f0: 49 66 46 61 6c 73 65 29 2e 0a 23 20 63 6f 6c 6c  IfFalse)..# coll
0300: 61 74 65 32 2d 33 2e 2a 20 53 45 4c 45 43 54 20  ate2-3.* SELECT 
0310: 3c 65 78 70 72 3e 20 65 78 70 72 65 73 73 69 6f  <expr> expressio
0320: 6e 73 20 28 73 71 6c 69 74 65 45 78 70 72 43 6f  ns (sqliteExprCo
0330: 64 65 29 2e 0a 23 20 63 6f 6c 6c 61 74 65 32 2d  de)..# collate2-
0340: 34 2e 2a 20 50 72 65 63 65 64 65 6e 63 65 20 6f  4.* Precedence o
0350: 66 20 63 6f 6c 6c 61 74 69 6f 6e 2f 64 61 74 61  f collation/data
0360: 20 74 79 70 65 73 20 69 6e 20 62 69 6e 61 72 79   types in binary
0370: 20 63 6f 6d 70 61 72 69 73 6f 6e 73 0a 23 20 63   comparisons.# c
0380: 6f 6c 6c 61 74 65 32 2d 35 2e 2a 20 4a 4f 49 4e  ollate2-5.* JOIN
0390: 20 73 79 6e 74 61 78 2e 0a 23 0a 0a 23 20 43 72   syntax..#..# Cr
03a0: 65 61 74 65 20 61 20 63 6f 6c 6c 61 74 69 6f 6e  eate a collation
03b0: 20 74 79 70 65 20 42 41 43 4b 57 41 52 44 53 20   type BACKWARDS 
03c0: 66 6f 72 20 75 73 65 20 69 6e 20 74 65 73 74 69  for use in testi
03d0: 6e 67 2e 20 54 68 69 73 20 63 6f 6c 6c 61 74 69  ng. This collati
03e0: 6f 6e 20 74 79 70 65 0a 23 20 69 73 20 73 69 6d  on type.# is sim
03f0: 69 6c 61 72 20 74 6f 20 74 68 65 20 62 75 69 6c  ilar to the buil
0400: 74 2d 69 6e 20 54 45 58 54 20 63 6f 6c 6c 61 74  t-in TEXT collat
0410: 69 6f 6e 20 74 79 70 65 20 65 78 63 65 70 74 20  ion type except 
0420: 74 68 65 20 6f 72 64 65 72 20 6f 66 0a 23 20 63  the order of.# c
0430: 68 61 72 61 63 74 65 72 73 20 69 6e 20 65 61 63  haracters in eac
0440: 68 20 73 74 72 69 6e 67 20 69 73 20 72 65 76 65  h string is reve
0450: 72 73 65 64 20 62 65 66 6f 72 65 20 74 68 65 20  rsed before the 
0460: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 70 65  comparison is pe
0470: 72 66 6f 72 6d 65 64 2e 0a 64 62 20 63 6f 6c 6c  rformed..db coll
0480: 61 74 65 20 42 41 43 4b 57 41 52 44 53 20 62 61  ate BACKWARDS ba
0490: 63 6b 77 61 72 64 73 5f 63 6f 6c 6c 61 74 65 0a  ckwards_collate.
04a0: 70 72 6f 63 20 62 61 63 6b 77 61 72 64 73 5f 63  proc backwards_c
04b0: 6f 6c 6c 61 74 65 20 7b 61 20 62 7d 20 7b 0a 20  ollate {a b} {. 
04c0: 20 73 65 74 20 72 61 20 7b 7d 3b 0a 20 20 73 65   set ra {};.  se
04d0: 74 20 72 62 20 7b 7d 0a 20 20 66 6f 72 65 61 63  t rb {}.  foreac
04e0: 68 20 63 20 5b 73 70 6c 69 74 20 24 61 20 7b 7d  h c [split $a {}
04f0: 5d 20 7b 20 73 65 74 20 72 61 20 24 63 24 72 61  ] { set ra $c$ra
0500: 20 7d 0a 20 20 66 6f 72 65 61 63 68 20 63 20 5b   }.  foreach c [
0510: 73 70 6c 69 74 20 24 62 20 7b 7d 5d 20 7b 20 73  split $b {}] { s
0520: 65 74 20 72 62 20 24 63 24 72 62 20 7d 0a 20 20  et rb $c$rb }.  
0530: 72 65 74 75 72 6e 20 5b 73 74 72 69 6e 67 20 63  return [string c
0540: 6f 6d 70 61 72 65 20 24 72 61 20 24 72 62 5d 0a  ompare $ra $rb].
0550: 7d 0a 0a 23 20 54 68 65 20 66 6f 6c 6c 6f 77 69  }..# The followi
0560: 6e 67 20 76 61 6c 75 65 73 20 61 72 65 20 75 73  ng values are us
0570: 65 64 20 69 6e 20 74 68 65 73 65 20 74 65 73 74  ed in these test
0580: 73 3a 0a 23 20 4e 55 4c 4c 20 20 20 61 61 20 61  s:.# NULL   aa a
0590: 62 20 62 61 20 62 62 20 20 20 61 41 20 61 42 20  b ba bb   aA aB 
05a0: 62 41 20 62 42 20 20 20 41 61 20 41 62 20 42 61  bA bB   Aa Ab Ba
05b0: 20 42 62 20 20 20 41 41 20 41 42 20 42 41 20 42   Bb   AA AB BA B
05c0: 42 20 0a 23 0a 23 20 54 68 65 20 63 6f 6c 6c 61  B .#.# The colla
05d0: 74 69 6f 6e 20 6f 72 64 65 72 73 20 66 6f 72 20  tion orders for 
05e0: 65 61 63 68 20 6f 66 20 74 68 65 20 74 65 73 74  each of the test
05f0: 65 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 74 79 70  ed collation typ
0600: 65 73 20 61 72 65 3a 0a 23 0a 23 20 42 49 4e 41  es are:.#.# BINA
0610: 52 59 3a 20 20 20 20 4e 55 4c 4c 20 20 41 41 20  RY:    NULL  AA 
0620: 41 42 20 41 61 20 41 62 20 20 42 41 20 42 42 20  AB Aa Ab  BA BB 
0630: 42 61 20 42 62 20 20 61 41 20 61 42 20 61 61 20  Ba Bb  aA aB aa 
0640: 61 62 20 20 62 41 20 62 42 20 62 61 20 62 62 20  ab  bA bB ba bb 
0650: 0a 23 20 4e 4f 43 41 53 45 3a 20 20 20 20 4e 55  .# NOCASE:    NU
0660: 4c 4c 20 20 61 61 20 61 41 20 41 61 20 41 41 20  LL  aa aA Aa AA 
0670: 20 61 62 20 61 42 20 41 62 20 41 42 20 20 62 61   ab aB Ab AB  ba
0680: 20 62 41 20 42 61 20 42 41 20 20 62 62 20 62 42   bA Ba BA  bb bB
0690: 20 42 62 20 42 42 20 0a 23 20 42 41 43 4b 57 41   Bb BB .# BACKWA
06a0: 52 44 53 3a 20 4e 55 4c 4c 20 20 41 41 20 42 41  RDS: NULL  AA BA
06b0: 20 61 41 20 62 41 20 20 41 42 20 42 42 20 61 42   aA bA  AB BB aB
06c0: 20 62 42 20 20 41 61 20 42 61 20 61 61 20 62 61   bB  Aa Ba aa ba
06d0: 20 20 41 62 20 42 62 20 61 62 20 62 62 20 0a 23    Ab Bb ab bb .#
06e0: 0a 23 20 54 68 65 73 65 20 74 65 73 74 73 20 76  .# These tests v
06f0: 65 72 69 66 79 20 74 68 61 74 20 74 68 65 20 64  erify that the d
0700: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
0710: 20 74 79 70 65 20 66 6f 72 20 61 20 63 6f 6c 75   type for a colu
0720: 6d 6e 20 69 73 20 75 73 65 64 0a 23 20 66 6f 72  mn is used.# for
0730: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72   comparison oper
0740: 61 74 6f 72 73 20 28 3c 2c 20 3e 2c 20 3c 3d 2c  ators (<, >, <=,
0750: 20 3e 3d 2c 20 3d 29 20 69 6e 76 6f 6c 76 69 6e   >=, =) involvin
0760: 67 20 74 68 61 74 20 63 6f 6c 75 6d 6e 20 61 6e  g that column an
0770: 64 20 0a 23 20 61 6e 20 65 78 70 72 65 73 73 69  d .# an expressi
0780: 6f 6e 20 74 68 61 74 20 69 73 20 6e 6f 74 20 61  on that is not a
0790: 20 63 6f 6c 75 6d 6e 20 77 69 74 68 20 61 20 64   column with a d
07a0: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
07b0: 20 74 79 70 65 2e 0a 23 20 0a 23 20 54 68 65 20   type..# .# The 
07c0: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
07d0: 63 65 73 20 42 49 4e 41 52 59 20 61 6e 64 20 4e  ces BINARY and N
07e0: 4f 43 41 53 45 20 61 72 65 20 62 75 69 6c 74 2d  OCASE are built-
07f0: 69 6e 2c 20 74 68 65 20 42 41 43 4b 57 41 52 44  in, the BACKWARD
0800: 53 0a 23 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65  S.# collation se
0810: 71 75 65 6e 63 65 20 69 73 20 69 6d 70 6c 65 6d  quence is implem
0820: 65 6e 74 65 64 20 62 79 20 74 68 65 20 54 43 4c  ented by the TCL
0830: 20 70 72 6f 63 20 62 61 63 6b 77 61 72 64 73 5f   proc backwards_
0840: 63 6f 6c 6c 61 74 65 0a 23 20 61 62 6f 76 65 2e  collate.# above.
0850: 0a 23 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  .#.do_test colla
0860: 74 65 32 2d 31 2e 30 20 7b 0a 20 20 65 78 65 63  te2-1.0 {.  exec
0870: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
0880: 20 54 41 42 4c 45 20 63 6f 6c 6c 61 74 65 32 74   TABLE collate2t
0890: 31 28 0a 20 20 20 20 20 20 61 20 43 4f 4c 4c 41  1(.      a COLLA
08a0: 54 45 20 42 49 4e 41 52 59 2c 20 0a 20 20 20 20  TE BINARY, .    
08b0: 20 20 62 20 43 4f 4c 4c 41 54 45 20 4e 4f 43 41    b COLLATE NOCA
08c0: 53 45 2c 20 0a 20 20 20 20 20 20 63 20 43 4f 4c  SE, .      c COL
08d0: 4c 41 54 45 20 42 41 43 4b 57 41 52 44 53 0a 20  LATE BACKWARDS. 
08e0: 20 20 20 29 3b 0a 20 20 20 20 49 4e 53 45 52 54     );.    INSERT
08f0: 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 32 74 31   INTO collate2t1
0900: 20 56 41 4c 55 45 53 28 20 4e 55 4c 4c 2c 20 4e   VALUES( NULL, N
0910: 55 4c 4c 2c 20 4e 55 4c 4c 20 29 3b 0a 0a 20 20  ULL, NULL );..  
0920: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f    INSERT INTO co
0930: 6c 6c 61 74 65 32 74 31 20 56 41 4c 55 45 53 28  llate2t1 VALUES(
0940: 20 27 61 61 27 2c 20 27 61 61 27 2c 20 27 61 61   'aa', 'aa', 'aa
0950: 27 20 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  ' );.    INSERT 
0960: 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 32 74 31 20  INTO collate2t1 
0970: 56 41 4c 55 45 53 28 20 27 61 62 27 2c 20 27 61  VALUES( 'ab', 'a
0980: 62 27 2c 20 27 61 62 27 20 29 3b 0a 20 20 20 20  b', 'ab' );.    
0990: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c  INSERT INTO coll
09a0: 61 74 65 32 74 31 20 56 41 4c 55 45 53 28 20 27  ate2t1 VALUES( '
09b0: 62 61 27 2c 20 27 62 61 27 2c 20 27 62 61 27 20  ba', 'ba', 'ba' 
09c0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
09d0: 54 4f 20 63 6f 6c 6c 61 74 65 32 74 31 20 56 41  TO collate2t1 VA
09e0: 4c 55 45 53 28 20 27 62 62 27 2c 20 27 62 62 27  LUES( 'bb', 'bb'
09f0: 2c 20 27 62 62 27 20 29 3b 0a 0a 20 20 20 20 49  , 'bb' );..    I
0a00: 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61  NSERT INTO colla
0a10: 74 65 32 74 31 20 56 41 4c 55 45 53 28 20 27 61  te2t1 VALUES( 'a
0a20: 41 27 2c 20 27 61 41 27 2c 20 27 61 41 27 20 29  A', 'aA', 'aA' )
0a30: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0a40: 4f 20 63 6f 6c 6c 61 74 65 32 74 31 20 56 41 4c  O collate2t1 VAL
0a50: 55 45 53 28 20 27 61 42 27 2c 20 27 61 42 27 2c  UES( 'aB', 'aB',
0a60: 20 27 61 42 27 20 29 3b 0a 20 20 20 20 49 4e 53   'aB' );.    INS
0a70: 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65  ERT INTO collate
0a80: 32 74 31 20 56 41 4c 55 45 53 28 20 27 62 41 27  2t1 VALUES( 'bA'
0a90: 2c 20 27 62 41 27 2c 20 27 62 41 27 20 29 3b 0a  , 'bA', 'bA' );.
0aa0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0ab0: 63 6f 6c 6c 61 74 65 32 74 31 20 56 41 4c 55 45  collate2t1 VALUE
0ac0: 53 28 20 27 62 42 27 2c 20 27 62 42 27 2c 20 27  S( 'bB', 'bB', '
0ad0: 62 42 27 20 29 3b 0a 0a 20 20 20 20 49 4e 53 45  bB' );..    INSE
0ae0: 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 32  RT INTO collate2
0af0: 74 31 20 56 41 4c 55 45 53 28 20 27 41 61 27 2c  t1 VALUES( 'Aa',
0b00: 20 27 41 61 27 2c 20 27 41 61 27 20 29 3b 0a 20   'Aa', 'Aa' );. 
0b10: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63     INSERT INTO c
0b20: 6f 6c 6c 61 74 65 32 74 31 20 56 41 4c 55 45 53  ollate2t1 VALUES
0b30: 28 20 27 41 62 27 2c 20 27 41 62 27 2c 20 27 41  ( 'Ab', 'Ab', 'A
0b40: 62 27 20 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  b' );.    INSERT
0b50: 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 32 74 31   INTO collate2t1
0b60: 20 56 41 4c 55 45 53 28 20 27 42 61 27 2c 20 27   VALUES( 'Ba', '
0b70: 42 61 27 2c 20 27 42 61 27 20 29 3b 0a 20 20 20  Ba', 'Ba' );.   
0b80: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c   INSERT INTO col
0b90: 6c 61 74 65 32 74 31 20 56 41 4c 55 45 53 28 20  late2t1 VALUES( 
0ba0: 27 42 62 27 2c 20 27 42 62 27 2c 20 27 42 62 27  'Bb', 'Bb', 'Bb'
0bb0: 20 29 3b 0a 0a 20 20 20 20 49 4e 53 45 52 54 20   );..    INSERT 
0bc0: 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 32 74 31 20  INTO collate2t1 
0bd0: 56 41 4c 55 45 53 28 20 27 41 41 27 2c 20 27 41  VALUES( 'AA', 'A
0be0: 41 27 2c 20 27 41 41 27 20 29 3b 0a 20 20 20 20  A', 'AA' );.    
0bf0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c  INSERT INTO coll
0c00: 61 74 65 32 74 31 20 56 41 4c 55 45 53 28 20 27  ate2t1 VALUES( '
0c10: 41 42 27 2c 20 27 41 42 27 2c 20 27 41 42 27 20  AB', 'AB', 'AB' 
0c20: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
0c30: 54 4f 20 63 6f 6c 6c 61 74 65 32 74 31 20 56 41  TO collate2t1 VA
0c40: 4c 55 45 53 28 20 27 42 41 27 2c 20 27 42 41 27  LUES( 'BA', 'BA'
0c50: 2c 20 27 42 41 27 20 29 3b 0a 20 20 20 20 49 4e  , 'BA' );.    IN
0c60: 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74  SERT INTO collat
0c70: 65 32 74 31 20 56 41 4c 55 45 53 28 20 27 42 42  e2t1 VALUES( 'BB
0c80: 27 2c 20 27 42 42 27 2c 20 27 42 42 27 20 29 3b  ', 'BB', 'BB' );
0c90: 0a 20 20 7d 0a 20 20 69 66 20 7b 5b 69 6e 66 6f  .  }.  if {[info
0ca0: 20 65 78 69 73 74 73 20 63 6f 6c 6c 61 74 65 5f   exists collate_
0cb0: 74 65 73 74 5f 75 73 65 5f 69 6e 64 65 78 5d 7d  test_use_index]}
0cc0: 20 7b 20 0a 20 20 20 20 65 78 65 63 73 71 6c 20   { .    execsql 
0cd0: 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 49  {.      CREATE I
0ce0: 4e 44 45 58 20 63 6f 6c 6c 61 74 65 32 74 31 5f  NDEX collate2t1_
0cf0: 69 31 20 4f 4e 20 63 6f 6c 6c 61 74 65 32 74 31  i1 ON collate2t1
0d00: 28 61 29 3b 0a 20 20 20 20 20 20 43 52 45 41 54  (a);.      CREAT
0d10: 45 20 49 4e 44 45 58 20 63 6f 6c 6c 61 74 65 32  E INDEX collate2
0d20: 74 31 5f 69 32 20 4f 4e 20 63 6f 6c 6c 61 74 65  t1_i2 ON collate
0d30: 32 74 31 28 62 29 3b 0a 20 20 20 20 20 20 43 52  2t1(b);.      CR
0d40: 45 41 54 45 20 49 4e 44 45 58 20 63 6f 6c 6c 61  EATE INDEX colla
0d50: 74 65 32 74 31 5f 69 33 20 4f 4e 20 63 6f 6c 6c  te2t1_i3 ON coll
0d60: 61 74 65 32 74 31 28 63 29 3b 0a 20 20 20 20 7d  ate2t1(c);.    }
0d70: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
0d80: 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e 31 20 7b  t collate2-1.1 {
0d90: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0da0: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 63   SELECT a FROM c
0db0: 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20  ollate2t1 WHERE 
0dc0: 61 20 3e 20 27 61 61 27 20 4f 52 44 45 52 20 42  a > 'aa' ORDER B
0dd0: 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 61 62 20 62  Y 1;.  }.} {ab b
0de0: 41 20 62 42 20 62 61 20 62 62 7d 0a 64 6f 5f 74  A bB ba bb}.do_t
0df0: 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e 31  est collate2-1.1
0e00: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
0e10: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
0e20: 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48  OM collate2t1 WH
0e30: 45 52 45 20 61 20 43 4f 4c 4c 41 54 45 20 62 69  ERE a COLLATE bi
0e40: 6e 61 72 79 20 3e 20 27 61 61 27 20 4f 52 44 45  nary > 'aa' ORDE
0e50: 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 61  R BY 1;.  }.} {a
0e60: 62 20 62 41 20 62 42 20 62 61 20 62 62 7d 0a 64  b bA bB ba bb}.d
0e70: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d  o_test collate2-
0e80: 31 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  1.1.2 {.  execsq
0e90: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
0ea0: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31   FROM collate2t1
0eb0: 20 57 48 45 52 45 20 62 20 43 4f 4c 4c 41 54 45   WHERE b COLLATE
0ec0: 20 62 69 6e 61 72 79 20 3e 20 27 61 61 27 20 4f   binary > 'aa' O
0ed0: 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d  RDER BY 1;.  }.}
0ee0: 20 7b 61 62 20 62 41 20 62 42 20 62 61 20 62 62   {ab bA bB ba bb
0ef0: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  }.do_test collat
0f00: 65 32 2d 31 2e 31 2e 33 20 7b 0a 20 20 65 78 65  e2-1.1.3 {.  exe
0f10: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
0f20: 54 20 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65  T a FROM collate
0f30: 32 74 31 20 57 48 45 52 45 20 63 20 43 4f 4c 4c  2t1 WHERE c COLL
0f40: 41 54 45 20 62 69 6e 61 72 79 20 3e 20 27 61 61  ATE binary > 'aa
0f50: 27 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20  ' ORDER BY 1;.  
0f60: 7d 0a 7d 20 7b 61 62 20 62 41 20 62 42 20 62 61  }.} {ab bA bB ba
0f70: 20 62 62 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c   bb}.do_test col
0f80: 6c 61 74 65 32 2d 31 2e 32 20 7b 0a 20 20 65 78  late2-1.2 {.  ex
0f90: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
0fa0: 43 54 20 62 20 46 52 4f 4d 20 63 6f 6c 6c 61 74  CT b FROM collat
0fb0: 65 32 74 31 20 57 48 45 52 45 20 62 20 3e 20 27  e2t1 WHERE b > '
0fc0: 61 61 27 20 4f 52 44 45 52 20 42 59 20 31 2c 20  aa' ORDER BY 1, 
0fd0: 6f 69 64 3b 0a 20 20 7d 0a 7d 20 7b 61 62 20 61  oid;.  }.} {ab a
0fe0: 42 20 41 62 20 41 42 20 62 61 20 62 41 20 42 61  B Ab AB ba bA Ba
0ff0: 20 42 41 20 62 62 20 62 42 20 42 62 20 42 42 7d   BA bb bB Bb BB}
1000: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65  .do_test collate
1010: 32 2d 31 2e 32 2e 31 20 7b 0a 20 20 65 78 65 63  2-1.2.1 {.  exec
1020: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1030: 20 62 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32   b FROM collate2
1040: 74 31 20 57 48 45 52 45 20 61 20 43 4f 4c 4c 41  t1 WHERE a COLLA
1050: 54 45 20 6e 6f 63 61 73 65 20 3e 20 27 61 61 27  TE nocase > 'aa'
1060: 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 31  .     ORDER BY 1
1070: 2c 20 6f 69 64 3b 0a 20 20 7d 0a 7d 20 7b 61 62  , oid;.  }.} {ab
1080: 20 61 42 20 41 62 20 41 42 20 62 61 20 62 41 20   aB Ab AB ba bA 
1090: 42 61 20 42 41 20 62 62 20 62 42 20 42 62 20 42  Ba BA bb bB Bb B
10a0: 42 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  B}.do_test colla
10b0: 74 65 32 2d 31 2e 32 2e 32 20 7b 0a 20 20 65 78  te2-1.2.2 {.  ex
10c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
10d0: 43 54 20 62 20 46 52 4f 4d 20 63 6f 6c 6c 61 74  CT b FROM collat
10e0: 65 32 74 31 20 57 48 45 52 45 20 62 20 43 4f 4c  e2t1 WHERE b COL
10f0: 4c 41 54 45 20 6e 6f 63 61 73 65 20 3e 20 27 61  LATE nocase > 'a
1100: 61 27 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59  a'.     ORDER BY
1110: 20 31 2c 20 6f 69 64 3b 0a 20 20 7d 0a 7d 20 7b   1, oid;.  }.} {
1120: 61 62 20 61 42 20 41 62 20 41 42 20 62 61 20 62  ab aB Ab AB ba b
1130: 41 20 42 61 20 42 41 20 62 62 20 62 42 20 42 62  A Ba BA bb bB Bb
1140: 20 42 42 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c   BB}.do_test col
1150: 6c 61 74 65 32 2d 31 2e 32 2e 33 20 7b 0a 20 20  late2-1.2.3 {.  
1160: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
1170: 4c 45 43 54 20 62 20 46 52 4f 4d 20 63 6f 6c 6c  LECT b FROM coll
1180: 61 74 65 32 74 31 20 57 48 45 52 45 20 63 20 43  ate2t1 WHERE c C
1190: 4f 4c 4c 41 54 45 20 6e 6f 63 61 73 65 20 3e 20  OLLATE nocase > 
11a0: 27 61 61 27 0a 20 20 20 20 20 4f 52 44 45 52 20  'aa'.     ORDER 
11b0: 42 59 20 31 2c 20 6f 69 64 3b 0a 20 20 7d 0a 7d  BY 1, oid;.  }.}
11c0: 20 7b 61 62 20 61 42 20 41 62 20 41 42 20 62 61   {ab aB Ab AB ba
11d0: 20 62 41 20 42 61 20 42 41 20 62 62 20 62 42 20   bA Ba BA bb bB 
11e0: 42 62 20 42 42 7d 0a 64 6f 5f 74 65 73 74 20 63  Bb BB}.do_test c
11f0: 6f 6c 6c 61 74 65 32 2d 31 2e 32 2e 34 20 7b 0a  ollate2-1.2.4 {.
1200: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1210: 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 63 6f  SELECT b FROM co
1220: 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 62  llate2t1 WHERE b
1230: 20 3e 20 27 61 61 27 20 4f 52 44 45 52 20 42 59   > 'aa' ORDER BY
1240: 20 2b 62 3b 0a 20 20 7d 0a 7d 20 7b 61 62 20 61   +b;.  }.} {ab a
1250: 42 20 41 62 20 41 42 20 62 61 20 62 41 20 42 61  B Ab AB ba bA Ba
1260: 20 42 41 20 62 62 20 62 42 20 42 62 20 42 42 7d   BA bb bB Bb BB}
1270: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65  .do_test collate
1280: 32 2d 31 2e 32 2e 35 20 7b 0a 20 20 65 78 65 63  2-1.2.5 {.  exec
1290: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
12a0: 20 62 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32   b FROM collate2
12b0: 74 31 20 57 48 45 52 45 20 61 20 43 4f 4c 4c 41  t1 WHERE a COLLA
12c0: 54 45 20 6e 6f 63 61 73 65 20 3e 20 27 61 61 27  TE nocase > 'aa'
12d0: 20 4f 52 44 45 52 20 42 59 20 2b 62 3b 0a 20 20   ORDER BY +b;.  
12e0: 7d 0a 7d 20 7b 61 62 20 61 42 20 41 62 20 41 42  }.} {ab aB Ab AB
12f0: 20 62 61 20 62 41 20 42 61 20 42 41 20 62 62 20   ba bA Ba BA bb 
1300: 62 42 20 42 62 20 42 42 7d 0a 64 6f 5f 74 65 73  bB Bb BB}.do_tes
1310: 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e 32 2e 36  t collate2-1.2.6
1320: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1330: 20 20 20 53 45 4c 45 43 54 20 62 20 46 52 4f 4d     SELECT b FROM
1340: 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52   collate2t1 WHER
1350: 45 20 62 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61  E b COLLATE noca
1360: 73 65 20 3e 20 27 61 61 27 20 4f 52 44 45 52 20  se > 'aa' ORDER 
1370: 42 59 20 2b 62 3b 0a 20 20 7d 0a 7d 20 7b 61 62  BY +b;.  }.} {ab
1380: 20 61 42 20 41 62 20 41 42 20 62 61 20 62 41 20   aB Ab AB ba bA 
1390: 42 61 20 42 41 20 62 62 20 62 42 20 42 62 20 42  Ba BA bb bB Bb B
13a0: 42 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  B}.do_test colla
13b0: 74 65 32 2d 31 2e 32 2e 37 20 7b 0a 20 20 65 78  te2-1.2.7 {.  ex
13c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
13d0: 43 54 20 62 20 46 52 4f 4d 20 63 6f 6c 6c 61 74  CT b FROM collat
13e0: 65 32 74 31 20 57 48 45 52 45 20 63 20 43 4f 4c  e2t1 WHERE c COL
13f0: 4c 41 54 45 20 6e 6f 63 61 73 65 20 3e 20 27 61  LATE nocase > 'a
1400: 61 27 20 4f 52 44 45 52 20 42 59 20 2b 62 3b 0a  a' ORDER BY +b;.
1410: 20 20 7d 0a 7d 20 7b 61 62 20 61 42 20 41 62 20    }.} {ab aB Ab 
1420: 41 42 20 62 61 20 62 41 20 42 61 20 42 41 20 62  AB ba bA Ba BA b
1430: 62 20 62 42 20 42 62 20 42 42 7d 0a 64 6f 5f 74  b bB Bb BB}.do_t
1440: 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e 33  est collate2-1.3
1450: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1460: 20 20 20 53 45 4c 45 43 54 20 63 20 46 52 4f 4d     SELECT c FROM
1470: 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52   collate2t1 WHER
1480: 45 20 63 20 3e 20 27 61 61 27 20 4f 52 44 45 52  E c > 'aa' ORDER
1490: 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 62 61   BY 1;.  }.} {ba
14a0: 20 41 62 20 42 62 20 61 62 20 62 62 7d 0a 64 6f   Ab Bb ab bb}.do
14b0: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 31  _test collate2-1
14c0: 2e 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .3.1 {.  execsql
14d0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 20   {.    SELECT c 
14e0: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20  FROM collate2t1 
14f0: 57 48 45 52 45 20 61 20 43 4f 4c 4c 41 54 45 20  WHERE a COLLATE 
1500: 62 61 63 6b 77 61 72 64 73 20 3e 20 27 61 61 27  backwards > 'aa'
1510: 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 31 3b  .    ORDER BY 1;
1520: 0a 20 20 7d 0a 7d 20 7b 62 61 20 41 62 20 42 62  .  }.} {ba Ab Bb
1530: 20 61 62 20 62 62 7d 0a 64 6f 5f 74 65 73 74 20   ab bb}.do_test 
1540: 63 6f 6c 6c 61 74 65 32 2d 31 2e 33 2e 32 20 7b  collate2-1.3.2 {
1550: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1560: 20 53 45 4c 45 43 54 20 63 20 46 52 4f 4d 20 63   SELECT c FROM c
1570: 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20  ollate2t1 WHERE 
1580: 62 20 43 4f 4c 4c 41 54 45 20 62 61 63 6b 77 61  b COLLATE backwa
1590: 72 64 73 20 3e 20 27 61 61 27 0a 20 20 20 20 4f  rds > 'aa'.    O
15a0: 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d  RDER BY 1;.  }.}
15b0: 20 7b 62 61 20 41 62 20 42 62 20 61 62 20 62 62   {ba Ab Bb ab bb
15c0: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  }.do_test collat
15d0: 65 32 2d 31 2e 33 2e 33 20 7b 0a 20 20 65 78 65  e2-1.3.3 {.  exe
15e0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
15f0: 54 20 63 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65  T c FROM collate
1600: 32 74 31 20 57 48 45 52 45 20 63 20 43 4f 4c 4c  2t1 WHERE c COLL
1610: 41 54 45 20 62 61 63 6b 77 61 72 64 73 20 3e 20  ATE backwards > 
1620: 27 61 61 27 0a 20 20 20 20 4f 52 44 45 52 20 42  'aa'.    ORDER B
1630: 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 62 61 20 41  Y 1;.  }.} {ba A
1640: 62 20 42 62 20 61 62 20 62 62 7d 0a 64 6f 5f 74  b Bb ab bb}.do_t
1650: 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e 34  est collate2-1.4
1660: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1670: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
1680: 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52   collate2t1 WHER
1690: 45 20 61 20 3c 20 27 61 61 27 20 4f 52 44 45 52  E a < 'aa' ORDER
16a0: 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 41 41   BY 1;.  }.} {AA
16b0: 20 41 42 20 41 61 20 41 62 20 42 41 20 42 42 20   AB Aa Ab BA BB 
16c0: 42 61 20 42 62 20 61 41 20 61 42 7d 0a 64 6f 5f  Ba Bb aA aB}.do_
16d0: 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e  test collate2-1.
16e0: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  5 {.  execsql {.
16f0: 20 20 20 20 53 45 4c 45 43 54 20 62 20 46 52 4f      SELECT b FRO
1700: 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45  M collate2t1 WHE
1710: 52 45 20 62 20 3c 20 27 61 61 27 20 4f 52 44 45  RE b < 'aa' ORDE
1720: 52 20 42 59 20 31 2c 20 6f 69 64 3b 0a 20 20 7d  R BY 1, oid;.  }
1730: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 6f  .} {}.do_test co
1740: 6c 6c 61 74 65 32 2d 31 2e 35 2e 31 20 7b 0a 20  llate2-1.5.1 {. 
1750: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
1760: 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 63 6f 6c  ELECT b FROM col
1770: 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 62 20  late2t1 WHERE b 
1780: 3c 20 27 61 61 27 20 4f 52 44 45 52 20 42 59 20  < 'aa' ORDER BY 
1790: 2b 62 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  +b;.  }.} {}.do_
17a0: 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e  test collate2-1.
17b0: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  6 {.  execsql {.
17c0: 20 20 20 20 53 45 4c 45 43 54 20 63 20 46 52 4f      SELECT c FRO
17d0: 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45  M collate2t1 WHE
17e0: 52 45 20 63 20 3c 20 27 61 61 27 20 4f 52 44 45  RE c < 'aa' ORDE
17f0: 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 41  R BY 1;.  }.} {A
1800: 41 20 42 41 20 61 41 20 62 41 20 41 42 20 42 42  A BA aA bA AB BB
1810: 20 61 42 20 62 42 20 41 61 20 42 61 7d 0a 64 6f   aB bB Aa Ba}.do
1820: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 31  _test collate2-1
1830: 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .7 {.  execsql {
1840: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
1850: 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48  OM collate2t1 WH
1860: 45 52 45 20 61 20 3d 20 27 61 61 27 3b 0a 20 20  ERE a = 'aa';.  
1870: 7d 0a 7d 20 7b 61 61 7d 0a 64 6f 5f 74 65 73 74  }.} {aa}.do_test
1880: 20 63 6f 6c 6c 61 74 65 32 2d 31 2e 38 20 7b 0a   collate2-1.8 {.
1890: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
18a0: 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 63 6f  SELECT b FROM co
18b0: 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 62  llate2t1 WHERE b
18c0: 20 3d 20 27 61 61 27 20 4f 52 44 45 52 20 42 59   = 'aa' ORDER BY
18d0: 20 6f 69 64 3b 0a 20 20 7d 0a 7d 20 7b 61 61 20   oid;.  }.} {aa 
18e0: 61 41 20 41 61 20 41 41 7d 0a 64 6f 5f 74 65 73  aA Aa AA}.do_tes
18f0: 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e 39 20 7b  t collate2-1.9 {
1900: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1910: 20 53 45 4c 45 43 54 20 63 20 46 52 4f 4d 20 63   SELECT c FROM c
1920: 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20  ollate2t1 WHERE 
1930: 63 20 3d 20 27 61 61 27 3b 0a 20 20 7d 0a 7d 20  c = 'aa';.  }.} 
1940: 7b 61 61 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c  {aa}.do_test col
1950: 6c 61 74 65 32 2d 31 2e 31 30 20 7b 0a 20 20 65  late2-1.10 {.  e
1960: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
1970: 45 43 54 20 61 20 46 52 4f 4d 20 63 6f 6c 6c 61  ECT a FROM colla
1980: 74 65 32 74 31 20 57 48 45 52 45 20 61 20 3e 3d  te2t1 WHERE a >=
1990: 20 27 61 61 27 20 4f 52 44 45 52 20 42 59 20 31   'aa' ORDER BY 1
19a0: 3b 0a 20 20 7d 0a 7d 20 7b 61 61 20 61 62 20 62  ;.  }.} {aa ab b
19b0: 41 20 62 42 20 62 61 20 62 62 7d 0a 64 6f 5f 74  A bB ba bb}.do_t
19c0: 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e 31  est collate2-1.1
19d0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
19e0: 20 20 20 20 53 45 4c 45 43 54 20 62 20 46 52 4f      SELECT b FRO
19f0: 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45  M collate2t1 WHE
1a00: 52 45 20 62 20 3e 3d 20 27 61 61 27 20 4f 52 44  RE b >= 'aa' ORD
1a10: 45 52 20 42 59 20 31 2c 20 6f 69 64 3b 0a 20 20  ER BY 1, oid;.  
1a20: 7d 0a 7d 20 7b 61 61 20 61 41 20 41 61 20 41 41  }.} {aa aA Aa AA
1a30: 20 61 62 20 61 42 20 41 62 20 41 42 20 62 61 20   ab aB Ab AB ba 
1a40: 62 41 20 42 61 20 42 41 20 62 62 20 62 42 20 42  bA Ba BA bb bB B
1a50: 62 20 42 42 7d 0a 64 6f 5f 74 65 73 74 20 63 6f  b BB}.do_test co
1a60: 6c 6c 61 74 65 32 2d 31 2e 31 32 20 7b 0a 20 20  llate2-1.12 {.  
1a70: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
1a80: 4c 45 43 54 20 63 20 46 52 4f 4d 20 63 6f 6c 6c  LECT c FROM coll
1a90: 61 74 65 32 74 31 20 57 48 45 52 45 20 63 20 3e  ate2t1 WHERE c >
1aa0: 3d 20 27 61 61 27 20 4f 52 44 45 52 20 42 59 20  = 'aa' ORDER BY 
1ab0: 31 3b 0a 20 20 7d 0a 7d 20 7b 61 61 20 62 61 20  1;.  }.} {aa ba 
1ac0: 41 62 20 42 62 20 61 62 20 62 62 7d 0a 64 6f 5f  Ab Bb ab bb}.do_
1ad0: 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e  test collate2-1.
1ae0: 31 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  13 {.  execsql {
1af0: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52  .    SELECT a FR
1b00: 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48  OM collate2t1 WH
1b10: 45 52 45 20 61 20 3c 3d 20 27 61 61 27 20 4f 52  ERE a <= 'aa' OR
1b20: 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20  DER BY 1;.  }.} 
1b30: 7b 41 41 20 41 42 20 41 61 20 41 62 20 42 41 20  {AA AB Aa Ab BA 
1b40: 42 42 20 42 61 20 42 62 20 61 41 20 61 42 20 61  BB Ba Bb aA aB a
1b50: 61 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  a}.do_test colla
1b60: 74 65 32 2d 31 2e 31 34 20 7b 0a 20 20 65 78 65  te2-1.14 {.  exe
1b70: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
1b80: 54 20 62 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65  T b FROM collate
1b90: 32 74 31 20 57 48 45 52 45 20 62 20 3c 3d 20 27  2t1 WHERE b <= '
1ba0: 61 61 27 20 4f 52 44 45 52 20 42 59 20 31 2c 20  aa' ORDER BY 1, 
1bb0: 6f 69 64 3b 0a 20 20 7d 0a 7d 20 7b 61 61 20 61  oid;.  }.} {aa a
1bc0: 41 20 41 61 20 41 41 7d 0a 64 6f 5f 74 65 73 74  A Aa AA}.do_test
1bd0: 20 63 6f 6c 6c 61 74 65 32 2d 31 2e 31 35 20 7b   collate2-1.15 {
1be0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1bf0: 20 53 45 4c 45 43 54 20 63 20 46 52 4f 4d 20 63   SELECT c FROM c
1c00: 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20  ollate2t1 WHERE 
1c10: 63 20 3c 3d 20 27 61 61 27 20 4f 52 44 45 52 20  c <= 'aa' ORDER 
1c20: 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 41 41 20  BY 1;.  }.} {AA 
1c30: 42 41 20 61 41 20 62 41 20 41 42 20 42 42 20 61  BA aA bA AB BB a
1c40: 42 20 62 42 20 41 61 20 42 61 20 61 61 7d 0a 64  B bB Aa Ba aa}.d
1c50: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d  o_test collate2-
1c60: 31 2e 31 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.16 {.  execsql
1c70: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20   {.    SELECT a 
1c80: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20  FROM collate2t1 
1c90: 57 48 45 52 45 20 61 20 42 45 54 57 45 45 4e 20  WHERE a BETWEEN 
1ca0: 27 41 61 27 20 41 4e 44 20 27 42 62 27 20 4f 52  'Aa' AND 'Bb' OR
1cb0: 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20  DER BY 1;.  }.} 
1cc0: 7b 41 61 20 41 62 20 42 41 20 42 42 20 42 61 20  {Aa Ab BA BB Ba 
1cd0: 42 62 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c  Bb}.do_test coll
1ce0: 61 74 65 32 2d 31 2e 31 37 20 7b 0a 20 20 65 78  ate2-1.17 {.  ex
1cf0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
1d00: 43 54 20 62 20 46 52 4f 4d 20 63 6f 6c 6c 61 74  CT b FROM collat
1d10: 65 32 74 31 20 57 48 45 52 45 20 62 20 42 45 54  e2t1 WHERE b BET
1d20: 57 45 45 4e 20 27 41 61 27 20 41 4e 44 20 27 42  WEEN 'Aa' AND 'B
1d30: 62 27 20 4f 52 44 45 52 20 42 59 20 31 2c 20 6f  b' ORDER BY 1, o
1d40: 69 64 3b 0a 20 20 7d 0a 7d 20 7b 61 61 20 61 41  id;.  }.} {aa aA
1d50: 20 41 61 20 41 41 20 61 62 20 61 42 20 41 62 20   Aa AA ab aB Ab 
1d60: 41 42 20 62 61 20 62 41 20 42 61 20 42 41 20 62  AB ba bA Ba BA b
1d70: 62 20 62 42 20 42 62 20 42 42 7d 0a 64 6f 5f 74  b bB Bb BB}.do_t
1d80: 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e 31  est collate2-1.1
1d90: 37 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  7.1 {.  execsql 
1da0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 62 20 46  {.    SELECT b F
1db0: 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57  ROM collate2t1 W
1dc0: 48 45 52 45 20 62 20 42 45 54 57 45 45 4e 20 27  HERE b BETWEEN '
1dd0: 41 61 27 20 41 4e 44 20 27 42 62 27 20 4f 52 44  Aa' AND 'Bb' ORD
1de0: 45 52 20 42 59 20 2b 62 3b 0a 20 20 7d 0a 7d 20  ER BY +b;.  }.} 
1df0: 7b 61 61 20 61 41 20 41 61 20 41 41 20 61 62 20  {aa aA Aa AA ab 
1e00: 61 42 20 41 62 20 41 42 20 62 61 20 62 41 20 42  aB Ab AB ba bA B
1e10: 61 20 42 41 20 62 62 20 62 42 20 42 62 20 42 42  a BA bb bB Bb BB
1e20: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  }.do_test collat
1e30: 65 32 2d 31 2e 31 38 20 7b 0a 20 20 65 78 65 63  e2-1.18 {.  exec
1e40: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1e50: 20 63 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32   c FROM collate2
1e60: 74 31 20 57 48 45 52 45 20 63 20 42 45 54 57 45  t1 WHERE c BETWE
1e70: 45 4e 20 27 41 61 27 20 41 4e 44 20 27 42 62 27  EN 'Aa' AND 'Bb'
1e80: 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d   ORDER BY 1;.  }
1e90: 0a 7d 20 7b 41 61 20 42 61 20 61 61 20 62 61 20  .} {Aa Ba aa ba 
1ea0: 41 62 20 42 62 7d 0a 64 6f 5f 74 65 73 74 20 63  Ab Bb}.do_test c
1eb0: 6f 6c 6c 61 74 65 32 2d 31 2e 31 39 20 7b 0a 20  ollate2-1.19 {. 
1ec0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
1ed0: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 63 6f 6c  ELECT a FROM col
1ee0: 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 0a 20  late2t1 WHERE . 
1ef0: 20 20 20 20 20 43 41 53 45 20 61 20 57 48 45 4e       CASE a WHEN
1f00: 20 27 61 61 27 20 54 48 45 4e 20 31 20 45 4c 53   'aa' THEN 1 ELS
1f10: 45 20 30 20 45 4e 44 0a 20 20 20 20 20 20 20 20  E 0 END.        
1f20: 4f 52 44 45 52 20 42 59 20 31 2c 20 6f 69 64 3b  ORDER BY 1, oid;
1f30: 0a 20 20 7d 0a 7d 20 7b 61 61 7d 0a 64 6f 5f 74  .  }.} {aa}.do_t
1f40: 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e 32  est collate2-1.2
1f50: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  0 {.  execsql {.
1f60: 20 20 20 20 53 45 4c 45 43 54 20 62 20 46 52 4f      SELECT b FRO
1f70: 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45  M collate2t1 WHE
1f80: 52 45 20 0a 20 20 20 20 20 20 43 41 53 45 20 62  RE .      CASE b
1f90: 20 57 48 45 4e 20 27 61 61 27 20 54 48 45 4e 20   WHEN 'aa' THEN 
1fa0: 31 20 45 4c 53 45 20 30 20 45 4e 44 0a 20 20 20  1 ELSE 0 END.   
1fb0: 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 31 2c       ORDER BY 1,
1fc0: 20 6f 69 64 3b 0a 20 20 7d 0a 7d 20 7b 61 61 20   oid;.  }.} {aa 
1fd0: 61 41 20 41 61 20 41 41 7d 0a 64 6f 5f 74 65 73  aA Aa AA}.do_tes
1fe0: 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e 32 31 20  t collate2-1.21 
1ff0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2000: 20 20 53 45 4c 45 43 54 20 63 20 46 52 4f 4d 20    SELECT c FROM 
2010: 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45  collate2t1 WHERE
2020: 20 0a 20 20 20 20 20 20 43 41 53 45 20 63 20 57   .      CASE c W
2030: 48 45 4e 20 27 61 61 27 20 54 48 45 4e 20 31 20  HEN 'aa' THEN 1 
2040: 45 4c 53 45 20 30 20 45 4e 44 0a 20 20 20 20 20  ELSE 0 END.     
2050: 20 20 20 4f 52 44 45 52 20 42 59 20 31 2c 20 6f     ORDER BY 1, o
2060: 69 64 3b 0a 20 20 7d 0a 7d 20 7b 61 61 7d 0a 0a  id;.  }.} {aa}..
2070: 69 66 63 61 70 61 62 6c 65 20 73 75 62 71 75 65  ifcapable subque
2080: 72 79 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63  ry {.  do_test c
2090: 6f 6c 6c 61 74 65 32 2d 31 2e 32 32 20 7b 0a 20  ollate2-1.22 {. 
20a0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
20b0: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
20c0: 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52   collate2t1 WHER
20d0: 45 20 61 20 49 4e 20 28 27 61 61 27 2c 20 27 62  E a IN ('aa', 'b
20e0: 62 27 29 20 4f 52 44 45 52 20 42 59 20 31 2c 20  b') ORDER BY 1, 
20f0: 6f 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  oid;.    }.  } {
2100: 61 61 20 62 62 7d 0a 20 20 64 6f 5f 74 65 73 74  aa bb}.  do_test
2110: 20 63 6f 6c 6c 61 74 65 32 2d 31 2e 32 33 20 7b   collate2-1.23 {
2120: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
2130: 20 20 20 20 20 53 45 4c 45 43 54 20 62 20 46 52       SELECT b FR
2140: 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48  OM collate2t1 WH
2150: 45 52 45 20 62 20 49 4e 20 28 27 61 61 27 2c 20  ERE b IN ('aa', 
2160: 27 62 62 27 29 20 4f 52 44 45 52 20 42 59 20 31  'bb') ORDER BY 1
2170: 2c 20 6f 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d  , oid;.    }.  }
2180: 20 7b 61 61 20 61 41 20 41 61 20 41 41 20 62 62   {aa aA Aa AA bb
2190: 20 62 42 20 42 62 20 42 42 7d 0a 20 20 64 6f 5f   bB Bb BB}.  do_
21a0: 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e  test collate2-1.
21b0: 32 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  24 {.    execsql
21c0: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
21d0: 63 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74  c FROM collate2t
21e0: 31 20 57 48 45 52 45 20 63 20 49 4e 20 28 27 61  1 WHERE c IN ('a
21f0: 61 27 2c 20 27 62 62 27 29 20 4f 52 44 45 52 20  a', 'bb') ORDER 
2200: 42 59 20 31 2c 20 6f 69 64 3b 0a 20 20 20 20 7d  BY 1, oid;.    }
2210: 0a 20 20 7d 20 7b 61 61 20 62 62 7d 0a 20 20 64  .  } {aa bb}.  d
2220: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d  o_test collate2-
2230: 31 2e 32 35 20 7b 0a 20 20 20 20 65 78 65 63 73  1.25 {.    execs
2240: 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43  ql {.      SELEC
2250: 54 20 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65  T a FROM collate
2260: 32 74 31 20 0a 20 20 20 20 20 20 20 20 57 48 45  2t1 .        WHE
2270: 52 45 20 61 20 49 4e 20 28 53 45 4c 45 43 54 20  RE a IN (SELECT 
2280: 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74  a FROM collate2t
2290: 31 20 57 48 45 52 45 20 61 20 49 4e 20 28 27 61  1 WHERE a IN ('a
22a0: 61 27 2c 20 27 62 62 27 29 29 3b 0a 20 20 20 20  a', 'bb'));.    
22b0: 7d 0a 20 20 7d 20 7b 61 61 20 62 62 7d 0a 20 20  }.  } {aa bb}.  
22c0: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32  do_test collate2
22d0: 2d 31 2e 32 36 20 7b 0a 20 20 20 20 65 78 65 63  -1.26 {.    exec
22e0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  sql {.      SELE
22f0: 43 54 20 62 20 46 52 4f 4d 20 63 6f 6c 6c 61 74  CT b FROM collat
2300: 65 32 74 31 20 0a 20 20 20 20 20 20 20 20 57 48  e2t1 .        WH
2310: 45 52 45 20 62 20 49 4e 20 28 53 45 4c 45 43 54  ERE b IN (SELECT
2320: 20 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32   a FROM collate2
2330: 74 31 20 57 48 45 52 45 20 61 20 49 4e 20 28 27  t1 WHERE a IN ('
2340: 61 61 27 2c 20 27 62 62 27 29 29 3b 0a 20 20 20  aa', 'bb'));.   
2350: 20 7d 0a 20 20 7d 20 7b 61 61 20 62 62 20 61 41   }.  } {aa bb aA
2360: 20 62 42 20 41 61 20 42 62 20 41 41 20 42 42 7d   bB Aa Bb AA BB}
2370: 0a 20 20 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  .  do_test colla
2380: 74 65 32 2d 31 2e 32 37 20 7b 0a 20 20 20 20 65  te2-1.27 {.    e
2390: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53  xecsql {.      S
23a0: 45 4c 45 43 54 20 63 20 46 52 4f 4d 20 63 6f 6c  ELECT c FROM col
23b0: 6c 61 74 65 32 74 31 20 0a 20 20 20 20 20 20 20  late2t1 .       
23c0: 20 57 48 45 52 45 20 63 20 49 4e 20 28 53 45 4c   WHERE c IN (SEL
23d0: 45 43 54 20 61 20 46 52 4f 4d 20 63 6f 6c 6c 61  ECT a FROM colla
23e0: 74 65 32 74 31 20 57 48 45 52 45 20 61 20 49 4e  te2t1 WHERE a IN
23f0: 20 28 27 61 61 27 2c 20 27 62 62 27 29 29 3b 0a   ('aa', 'bb'));.
2400: 20 20 20 20 7d 0a 20 20 7d 20 7b 61 61 20 62 62      }.  } {aa bb
2410: 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65  }.} ;# ifcapable
2420: 20 73 75 62 71 75 65 72 79 0a 0a 64 6f 5f 74 65   subquery..do_te
2430: 73 74 20 63 6f 6c 6c 61 74 65 32 2d 32 2e 31 20  st collate2-2.1 
2440: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2450: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
2460: 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45  collate2t1 WHERE
2470: 20 4e 4f 54 20 61 20 3e 20 27 61 61 27 20 4f 52   NOT a > 'aa' OR
2480: 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20  DER BY 1;.  }.} 
2490: 7b 41 41 20 41 42 20 41 61 20 41 62 20 42 41 20  {AA AB Aa Ab BA 
24a0: 42 42 20 42 61 20 42 62 20 61 41 20 61 42 20 61  BB Ba Bb aA aB a
24b0: 61 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  a}.do_test colla
24c0: 74 65 32 2d 32 2e 32 20 7b 0a 20 20 65 78 65 63  te2-2.2 {.  exec
24d0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
24e0: 20 62 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32   b FROM collate2
24f0: 74 31 20 57 48 45 52 45 20 4e 4f 54 20 62 20 3e  t1 WHERE NOT b >
2500: 20 27 61 61 27 20 4f 52 44 45 52 20 42 59 20 31   'aa' ORDER BY 1
2510: 2c 20 6f 69 64 3b 0a 20 20 7d 0a 7d 20 7b 61 61  , oid;.  }.} {aa
2520: 20 61 41 20 41 61 20 41 41 7d 0a 64 6f 5f 74 65   aA Aa AA}.do_te
2530: 73 74 20 63 6f 6c 6c 61 74 65 32 2d 32 2e 33 20  st collate2-2.3 
2540: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2550: 20 20 53 45 4c 45 43 54 20 63 20 46 52 4f 4d 20    SELECT c FROM 
2560: 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45  collate2t1 WHERE
2570: 20 4e 4f 54 20 63 20 3e 20 27 61 61 27 20 4f 52   NOT c > 'aa' OR
2580: 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20  DER BY 1;.  }.} 
2590: 7b 41 41 20 42 41 20 61 41 20 62 41 20 41 42 20  {AA BA aA bA AB 
25a0: 42 42 20 61 42 20 62 42 20 41 61 20 42 61 20 61  BB aB bB Aa Ba a
25b0: 61 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  a}.do_test colla
25c0: 74 65 32 2d 32 2e 34 20 7b 0a 20 20 65 78 65 63  te2-2.4 {.  exec
25d0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
25e0: 20 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32   a FROM collate2
25f0: 74 31 20 57 48 45 52 45 20 4e 4f 54 20 61 20 3c  t1 WHERE NOT a <
2600: 20 27 61 61 27 20 4f 52 44 45 52 20 42 59 20 31   'aa' ORDER BY 1
2610: 3b 0a 20 20 7d 0a 7d 20 7b 61 61 20 61 62 20 62  ;.  }.} {aa ab b
2620: 41 20 62 42 20 62 61 20 62 62 7d 0a 64 6f 5f 74  A bB ba bb}.do_t
2630: 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 32 2e 35  est collate2-2.5
2640: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2650: 20 20 20 53 45 4c 45 43 54 20 62 20 46 52 4f 4d     SELECT b FROM
2660: 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52   collate2t1 WHER
2670: 45 20 4e 4f 54 20 62 20 3c 20 27 61 61 27 20 4f  E NOT b < 'aa' O
2680: 52 44 45 52 20 42 59 20 31 2c 20 6f 69 64 3b 0a  RDER BY 1, oid;.
2690: 20 20 7d 0a 7d 20 7b 61 61 20 61 41 20 41 61 20    }.} {aa aA Aa 
26a0: 41 41 20 61 62 20 61 42 20 41 62 20 41 42 20 62  AA ab aB Ab AB b
26b0: 61 20 62 41 20 42 61 20 42 41 20 62 62 20 62 42  a bA Ba BA bb bB
26c0: 20 42 62 20 42 42 7d 0a 64 6f 5f 74 65 73 74 20   Bb BB}.do_test 
26d0: 63 6f 6c 6c 61 74 65 32 2d 32 2e 36 20 7b 0a 20  collate2-2.6 {. 
26e0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
26f0: 45 4c 45 43 54 20 63 20 46 52 4f 4d 20 63 6f 6c  ELECT c FROM col
2700: 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 4e 4f  late2t1 WHERE NO
2710: 54 20 63 20 3c 20 27 61 61 27 20 4f 52 44 45 52  T c < 'aa' ORDER
2720: 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 61 61   BY 1;.  }.} {aa
2730: 20 62 61 20 41 62 20 42 62 20 61 62 20 62 62 7d   ba Ab Bb ab bb}
2740: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65  .do_test collate
2750: 32 2d 32 2e 37 20 7b 0a 20 20 65 78 65 63 73 71  2-2.7 {.  execsq
2760: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
2770: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31   FROM collate2t1
2780: 20 57 48 45 52 45 20 4e 4f 54 20 61 20 3d 20 27   WHERE NOT a = '
2790: 61 61 27 3b 0a 20 20 7d 0a 7d 20 7b 61 62 20 62  aa';.  }.} {ab b
27a0: 61 20 62 62 20 61 41 20 61 42 20 62 41 20 62 42  a bb aA aB bA bB
27b0: 20 41 61 20 41 62 20 42 61 20 42 62 20 41 41 20   Aa Ab Ba Bb AA 
27c0: 41 42 20 42 41 20 42 42 7d 0a 64 6f 5f 74 65 73  AB BA BB}.do_tes
27d0: 74 20 63 6f 6c 6c 61 74 65 32 2d 32 2e 38 20 7b  t collate2-2.8 {
27e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
27f0: 20 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 63   SELECT b FROM c
2800: 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20  ollate2t1 WHERE 
2810: 4e 4f 54 20 62 20 3d 20 27 61 61 27 3b 0a 20 20  NOT b = 'aa';.  
2820: 7d 0a 7d 20 7b 61 62 20 62 61 20 62 62 20 61 42  }.} {ab ba bb aB
2830: 20 62 41 20 62 42 20 41 62 20 42 61 20 42 62 20   bA bB Ab Ba Bb 
2840: 41 42 20 42 41 20 42 42 7d 0a 64 6f 5f 74 65 73  AB BA BB}.do_tes
2850: 74 20 63 6f 6c 6c 61 74 65 32 2d 32 2e 39 20 7b  t collate2-2.9 {
2860: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2870: 20 53 45 4c 45 43 54 20 63 20 46 52 4f 4d 20 63   SELECT c FROM c
2880: 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20  ollate2t1 WHERE 
2890: 4e 4f 54 20 63 20 3d 20 27 61 61 27 3b 0a 20 20  NOT c = 'aa';.  
28a0: 7d 0a 7d 20 7b 61 62 20 62 61 20 62 62 20 61 41  }.} {ab ba bb aA
28b0: 20 61 42 20 62 41 20 62 42 20 41 61 20 41 62 20   aB bA bB Aa Ab 
28c0: 42 61 20 42 62 20 41 41 20 41 42 20 42 41 20 42  Ba Bb AA AB BA B
28d0: 42 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  B}.do_test colla
28e0: 74 65 32 2d 32 2e 31 30 20 7b 0a 20 20 65 78 65  te2-2.10 {.  exe
28f0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
2900: 54 20 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65  T a FROM collate
2910: 32 74 31 20 57 48 45 52 45 20 4e 4f 54 20 61 20  2t1 WHERE NOT a 
2920: 3e 3d 20 27 61 61 27 20 4f 52 44 45 52 20 42 59  >= 'aa' ORDER BY
2930: 20 31 3b 0a 20 20 7d 0a 7d 20 7b 41 41 20 41 42   1;.  }.} {AA AB
2940: 20 41 61 20 41 62 20 42 41 20 42 42 20 42 61 20   Aa Ab BA BB Ba 
2950: 42 62 20 61 41 20 61 42 7d 0a 64 6f 5f 74 65 73  Bb aA aB}.do_tes
2960: 74 20 63 6f 6c 6c 61 74 65 32 2d 32 2e 31 31 20  t collate2-2.11 
2970: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2980: 20 20 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20    SELECT b FROM 
2990: 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45  collate2t1 WHERE
29a0: 20 4e 4f 54 20 62 20 3e 3d 20 27 61 61 27 20 4f   NOT b >= 'aa' O
29b0: 52 44 45 52 20 42 59 20 31 2c 20 6f 69 64 3b 0a  RDER BY 1, oid;.
29c0: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
29d0: 20 63 6f 6c 6c 61 74 65 32 2d 32 2e 31 32 20 7b   collate2-2.12 {
29e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
29f0: 20 53 45 4c 45 43 54 20 63 20 46 52 4f 4d 20 63   SELECT c FROM c
2a00: 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20  ollate2t1 WHERE 
2a10: 4e 4f 54 20 63 20 3e 3d 20 27 61 61 27 20 4f 52  NOT c >= 'aa' OR
2a20: 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20  DER BY 1;.  }.} 
2a30: 7b 41 41 20 42 41 20 61 41 20 62 41 20 41 42 20  {AA BA aA bA AB 
2a40: 42 42 20 61 42 20 62 42 20 41 61 20 42 61 7d 0a  BB aB bB Aa Ba}.
2a50: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32  do_test collate2
2a60: 2d 32 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71  -2.13 {.  execsq
2a70: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
2a80: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31   FROM collate2t1
2a90: 20 57 48 45 52 45 20 4e 4f 54 20 61 20 3c 3d 20   WHERE NOT a <= 
2aa0: 27 61 61 27 20 4f 52 44 45 52 20 42 59 20 31 3b  'aa' ORDER BY 1;
2ab0: 0a 20 20 7d 0a 7d 20 7b 61 62 20 62 41 20 62 42  .  }.} {ab bA bB
2ac0: 20 62 61 20 62 62 7d 0a 64 6f 5f 74 65 73 74 20   ba bb}.do_test 
2ad0: 63 6f 6c 6c 61 74 65 32 2d 32 2e 31 34 20 7b 0a  collate2-2.14 {.
2ae0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2af0: 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 63 6f  SELECT b FROM co
2b00: 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 4e  llate2t1 WHERE N
2b10: 4f 54 20 62 20 3c 3d 20 27 61 61 27 20 4f 52 44  OT b <= 'aa' ORD
2b20: 45 52 20 42 59 20 31 2c 20 6f 69 64 3b 0a 20 20  ER BY 1, oid;.  
2b30: 7d 0a 7d 20 7b 61 62 20 61 42 20 41 62 20 41 42  }.} {ab aB Ab AB
2b40: 20 62 61 20 62 41 20 42 61 20 42 41 20 62 62 20   ba bA Ba BA bb 
2b50: 62 42 20 42 62 20 42 42 7d 0a 64 6f 5f 74 65 73  bB Bb BB}.do_tes
2b60: 74 20 63 6f 6c 6c 61 74 65 32 2d 32 2e 31 35 20  t collate2-2.15 
2b70: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
2b80: 20 20 53 45 4c 45 43 54 20 63 20 46 52 4f 4d 20    SELECT c FROM 
2b90: 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45  collate2t1 WHERE
2ba0: 20 4e 4f 54 20 63 20 3c 3d 20 27 61 61 27 20 4f   NOT c <= 'aa' O
2bb0: 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d  RDER BY 1;.  }.}
2bc0: 20 7b 62 61 20 41 62 20 42 62 20 61 62 20 62 62   {ba Ab Bb ab bb
2bd0: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  }.do_test collat
2be0: 65 32 2d 32 2e 31 36 20 7b 0a 20 20 65 78 65 63  e2-2.16 {.  exec
2bf0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
2c00: 20 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32   a FROM collate2
2c10: 74 31 20 57 48 45 52 45 20 61 20 4e 4f 54 20 42  t1 WHERE a NOT B
2c20: 45 54 57 45 45 4e 20 27 41 61 27 20 41 4e 44 20  ETWEEN 'Aa' AND 
2c30: 27 42 62 27 20 4f 52 44 45 52 20 42 59 20 31 3b  'Bb' ORDER BY 1;
2c40: 0a 20 20 7d 0a 7d 20 7b 41 41 20 41 42 20 61 41  .  }.} {AA AB aA
2c50: 20 61 42 20 61 61 20 61 62 20 62 41 20 62 42 20   aB aa ab bA bB 
2c60: 62 61 20 62 62 7d 0a 64 6f 5f 74 65 73 74 20 63  ba bb}.do_test c
2c70: 6f 6c 6c 61 74 65 32 2d 32 2e 31 37 20 7b 0a 20  ollate2-2.17 {. 
2c80: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
2c90: 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 63 6f 6c  ELECT b FROM col
2ca0: 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 62 20  late2t1 WHERE b 
2cb0: 4e 4f 54 20 42 45 54 57 45 45 4e 20 27 41 61 27  NOT BETWEEN 'Aa'
2cc0: 20 41 4e 44 20 27 42 62 27 20 4f 52 44 45 52 20   AND 'Bb' ORDER 
2cd0: 42 59 20 31 2c 20 6f 69 64 3b 0a 20 20 7d 0a 7d  BY 1, oid;.  }.}
2ce0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c   {}.do_test coll
2cf0: 61 74 65 32 2d 32 2e 31 38 20 7b 0a 20 20 65 78  ate2-2.18 {.  ex
2d00: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
2d10: 43 54 20 63 20 46 52 4f 4d 20 63 6f 6c 6c 61 74  CT c FROM collat
2d20: 65 32 74 31 20 57 48 45 52 45 20 63 20 4e 4f 54  e2t1 WHERE c NOT
2d30: 20 42 45 54 57 45 45 4e 20 27 41 61 27 20 41 4e   BETWEEN 'Aa' AN
2d40: 44 20 27 42 62 27 20 4f 52 44 45 52 20 42 59 20  D 'Bb' ORDER BY 
2d50: 31 3b 0a 20 20 7d 0a 7d 20 7b 41 41 20 42 41 20  1;.  }.} {AA BA 
2d60: 61 41 20 62 41 20 41 42 20 42 42 20 61 42 20 62  aA bA AB BB aB b
2d70: 42 20 61 62 20 62 62 7d 0a 64 6f 5f 74 65 73 74  B ab bb}.do_test
2d80: 20 63 6f 6c 6c 61 74 65 32 2d 32 2e 31 39 20 7b   collate2-2.19 {
2d90: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2da0: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 63   SELECT a FROM c
2db0: 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20  ollate2t1 WHERE 
2dc0: 4e 4f 54 20 43 41 53 45 20 61 20 57 48 45 4e 20  NOT CASE a WHEN 
2dd0: 27 61 61 27 20 54 48 45 4e 20 31 20 45 4c 53 45  'aa' THEN 1 ELSE
2de0: 20 30 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 7b   0 END;.  }.} {{
2df0: 7d 20 61 62 20 62 61 20 62 62 20 61 41 20 61 42  } ab ba bb aA aB
2e00: 20 62 41 20 62 42 20 41 61 20 41 62 20 42 61 20   bA bB Aa Ab Ba 
2e10: 42 62 20 41 41 20 41 42 20 42 41 20 42 42 7d 0a  Bb AA AB BA BB}.
2e20: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32  do_test collate2
2e30: 2d 32 2e 32 30 20 7b 0a 20 20 65 78 65 63 73 71  -2.20 {.  execsq
2e40: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 62  l {.    SELECT b
2e50: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31   FROM collate2t1
2e60: 20 57 48 45 52 45 20 4e 4f 54 20 43 41 53 45 20   WHERE NOT CASE 
2e70: 62 20 57 48 45 4e 20 27 61 61 27 20 54 48 45 4e  b WHEN 'aa' THEN
2e80: 20 31 20 45 4c 53 45 20 30 20 45 4e 44 3b 0a 20   1 ELSE 0 END;. 
2e90: 20 7d 0a 7d 20 7b 7b 7d 20 61 62 20 62 61 20 62   }.} {{} ab ba b
2ea0: 62 20 61 42 20 62 41 20 62 42 20 41 62 20 42 61  b aB bA bB Ab Ba
2eb0: 20 42 62 20 41 42 20 42 41 20 42 42 7d 0a 64 6f   Bb AB BA BB}.do
2ec0: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 32  _test collate2-2
2ed0: 2e 32 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .21 {.  execsql 
2ee0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 20 46  {.    SELECT c F
2ef0: 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57  ROM collate2t1 W
2f00: 48 45 52 45 20 4e 4f 54 20 43 41 53 45 20 63 20  HERE NOT CASE c 
2f10: 57 48 45 4e 20 27 61 61 27 20 54 48 45 4e 20 31  WHEN 'aa' THEN 1
2f20: 20 45 4c 53 45 20 30 20 45 4e 44 3b 0a 20 20 7d   ELSE 0 END;.  }
2f30: 0a 7d 20 7b 7b 7d 20 61 62 20 62 61 20 62 62 20  .} {{} ab ba bb 
2f40: 61 41 20 61 42 20 62 41 20 62 42 20 41 61 20 41  aA aB bA bB Aa A
2f50: 62 20 42 61 20 42 62 20 41 41 20 41 42 20 42 41  b Ba Bb AA AB BA
2f60: 20 42 42 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20   BB}..ifcapable 
2f70: 73 75 62 71 75 65 72 79 20 7b 0a 20 20 64 6f 5f  subquery {.  do_
2f80: 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 32 2e  test collate2-2.
2f90: 32 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  22 {.    execsql
2fa0: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
2fb0: 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74  a FROM collate2t
2fc0: 31 20 57 48 45 52 45 20 4e 4f 54 20 61 20 49 4e  1 WHERE NOT a IN
2fd0: 20 28 27 61 61 27 2c 20 27 62 62 27 29 3b 0a 20   ('aa', 'bb');. 
2fe0: 20 20 20 7d 0a 20 20 7d 20 7b 61 62 20 62 61 20     }.  } {ab ba 
2ff0: 61 41 20 61 42 20 62 41 20 62 42 20 41 61 20 41  aA aB bA bB Aa A
3000: 62 20 42 61 20 42 62 20 41 41 20 41 42 20 42 41  b Ba Bb AA AB BA
3010: 20 42 42 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63   BB}.  do_test c
3020: 6f 6c 6c 61 74 65 32 2d 32 2e 32 33 20 7b 0a 20  ollate2-2.23 {. 
3030: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
3040: 20 20 20 53 45 4c 45 43 54 20 62 20 46 52 4f 4d     SELECT b FROM
3050: 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52   collate2t1 WHER
3060: 45 20 4e 4f 54 20 62 20 49 4e 20 28 27 61 61 27  E NOT b IN ('aa'
3070: 2c 20 27 62 62 27 29 3b 0a 20 20 20 20 7d 0a 20  , 'bb');.    }. 
3080: 20 7d 20 7b 61 62 20 62 61 20 61 42 20 62 41 20   } {ab ba aB bA 
3090: 41 62 20 42 61 20 41 42 20 42 41 7d 0a 20 20 64  Ab Ba AB BA}.  d
30a0: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d  o_test collate2-
30b0: 32 2e 32 34 20 7b 0a 20 20 20 20 65 78 65 63 73  2.24 {.    execs
30c0: 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43  ql {.      SELEC
30d0: 54 20 63 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65  T c FROM collate
30e0: 32 74 31 20 57 48 45 52 45 20 4e 4f 54 20 63 20  2t1 WHERE NOT c 
30f0: 49 4e 20 28 27 61 61 27 2c 20 27 62 62 27 29 3b  IN ('aa', 'bb');
3100: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 61 62 20 62  .    }.  } {ab b
3110: 61 20 61 41 20 61 42 20 62 41 20 62 42 20 41 61  a aA aB bA bB Aa
3120: 20 41 62 20 42 61 20 42 62 20 41 41 20 41 42 20   Ab Ba Bb AA AB 
3130: 42 41 20 42 42 7d 0a 20 20 64 6f 5f 74 65 73 74  BA BB}.  do_test
3140: 20 63 6f 6c 6c 61 74 65 32 2d 32 2e 32 35 20 7b   collate2-2.25 {
3150: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
3160: 20 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52       SELECT a FR
3170: 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 0a 20  OM collate2t1 . 
3180: 20 20 20 20 20 20 20 57 48 45 52 45 20 4e 4f 54         WHERE NOT
3190: 20 61 20 49 4e 20 28 53 45 4c 45 43 54 20 61 20   a IN (SELECT a 
31a0: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20  FROM collate2t1 
31b0: 57 48 45 52 45 20 61 20 49 4e 20 28 27 61 61 27  WHERE a IN ('aa'
31c0: 2c 20 27 62 62 27 29 29 3b 0a 20 20 20 20 7d 0a  , 'bb'));.    }.
31d0: 20 20 7d 20 7b 61 62 20 62 61 20 61 41 20 61 42    } {ab ba aA aB
31e0: 20 62 41 20 62 42 20 41 61 20 41 62 20 42 61 20   bA bB Aa Ab Ba 
31f0: 42 62 20 41 41 20 41 42 20 42 41 20 42 42 7d 0a  Bb AA AB BA BB}.
3200: 20 20 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74    do_test collat
3210: 65 32 2d 32 2e 32 36 20 7b 0a 20 20 20 20 65 78  e2-2.26 {.    ex
3220: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45  ecsql {.      SE
3230: 4c 45 43 54 20 62 20 46 52 4f 4d 20 63 6f 6c 6c  LECT b FROM coll
3240: 61 74 65 32 74 31 20 0a 20 20 20 20 20 20 20 20  ate2t1 .        
3250: 57 48 45 52 45 20 4e 4f 54 20 62 20 49 4e 20 28  WHERE NOT b IN (
3260: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 63 6f  SELECT a FROM co
3270: 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 61  llate2t1 WHERE a
3280: 20 49 4e 20 28 27 61 61 27 2c 20 27 62 62 27 29   IN ('aa', 'bb')
3290: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 61 62  );.    }.  } {ab
32a0: 20 62 61 20 61 42 20 62 41 20 41 62 20 42 61 20   ba aB bA Ab Ba 
32b0: 41 42 20 42 41 7d 0a 20 20 64 6f 5f 74 65 73 74  AB BA}.  do_test
32c0: 20 63 6f 6c 6c 61 74 65 32 2d 32 2e 32 37 20 7b   collate2-2.27 {
32d0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
32e0: 20 20 20 20 20 53 45 4c 45 43 54 20 63 20 46 52       SELECT c FR
32f0: 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 0a 20  OM collate2t1 . 
3300: 20 20 20 20 20 20 20 57 48 45 52 45 20 4e 4f 54         WHERE NOT
3310: 20 63 20 49 4e 20 28 53 45 4c 45 43 54 20 61 20   c IN (SELECT a 
3320: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20  FROM collate2t1 
3330: 57 48 45 52 45 20 61 20 49 4e 20 28 27 61 61 27  WHERE a IN ('aa'
3340: 2c 20 27 62 62 27 29 29 3b 0a 20 20 20 20 7d 0a  , 'bb'));.    }.
3350: 20 20 7d 20 7b 61 62 20 62 61 20 61 41 20 61 42    } {ab ba aA aB
3360: 20 62 41 20 62 42 20 41 61 20 41 62 20 42 61 20   bA bB Aa Ab Ba 
3370: 42 62 20 41 41 20 41 42 20 42 41 20 42 42 7d 0a  Bb AA AB BA BB}.
3380: 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  }..do_test colla
3390: 74 65 32 2d 33 2e 31 20 7b 0a 20 20 65 78 65 63  te2-3.1 {.  exec
33a0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
33b0: 20 61 20 3e 20 27 61 61 27 20 46 52 4f 4d 20 63   a > 'aa' FROM c
33c0: 6f 6c 6c 61 74 65 32 74 31 3b 0a 20 20 7d 0a 7d  ollate2t1;.  }.}
33d0: 20 7b 7b 7d 20 30 20 31 20 31 20 31 20 30 20 30   {{} 0 1 1 1 0 0
33e0: 20 31 20 31 20 30 20 30 20 30 20 30 20 30 20 30   1 1 0 0 0 0 0 0
33f0: 20 30 20 30 7d 0a 64 6f 5f 74 65 73 74 20 63 6f   0 0}.do_test co
3400: 6c 6c 61 74 65 32 2d 33 2e 32 20 7b 0a 20 20 65  llate2-3.2 {.  e
3410: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
3420: 45 43 54 20 62 20 3e 20 27 61 61 27 20 46 52 4f  ECT b > 'aa' FRO
3430: 4d 20 63 6f 6c 6c 61 74 65 32 74 31 3b 0a 20 20  M collate2t1;.  
3440: 7d 0a 7d 20 7b 7b 7d 20 30 20 31 20 31 20 31 20  }.} {{} 0 1 1 1 
3450: 30 20 31 20 31 20 31 20 30 20 31 20 31 20 31 20  0 1 1 1 0 1 1 1 
3460: 30 20 31 20 31 20 31 7d 0a 64 6f 5f 74 65 73 74  0 1 1 1}.do_test
3470: 20 63 6f 6c 6c 61 74 65 32 2d 33 2e 33 20 7b 0a   collate2-3.3 {.
3480: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
3490: 53 45 4c 45 43 54 20 63 20 3e 20 27 61 61 27 20  SELECT c > 'aa' 
34a0: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 3b  FROM collate2t1;
34b0: 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 30 20 31 20 31  .  }.} {{} 0 1 1
34c0: 20 31 20 30 20 30 20 30 20 30 20 30 20 31 20 30   1 0 0 0 0 0 1 0
34d0: 20 31 20 30 20 30 20 30 20 30 7d 0a 64 6f 5f 74   1 0 0 0 0}.do_t
34e0: 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 33 2e 34  est collate2-3.4
34f0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
3500: 20 20 20 53 45 4c 45 43 54 20 61 20 3c 20 27 61     SELECT a < 'a
3510: 61 27 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32  a' FROM collate2
3520: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 30 20  t1;.  }.} {{} 0 
3530: 30 20 30 20 30 20 31 20 31 20 30 20 30 20 31 20  0 0 0 1 1 0 0 1 
3540: 31 20 31 20 31 20 31 20 31 20 31 20 31 7d 0a 64  1 1 1 1 1 1 1}.d
3550: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d  o_test collate2-
3560: 33 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.5 {.  execsql 
3570: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 62 20 3c  {.    SELECT b <
3580: 20 27 61 61 27 20 46 52 4f 4d 20 63 6f 6c 6c 61   'aa' FROM colla
3590: 74 65 32 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d  te2t1;.  }.} {{}
35a0: 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30   0 0 0 0 0 0 0 0
35b0: 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30   0 0 0 0 0 0 0 0
35c0: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  }.do_test collat
35d0: 65 32 2d 33 2e 36 20 7b 0a 20 20 65 78 65 63 73  e2-3.6 {.  execs
35e0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
35f0: 63 20 3c 20 27 61 61 27 20 46 52 4f 4d 20 63 6f  c < 'aa' FROM co
3600: 6c 6c 61 74 65 32 74 31 3b 0a 20 20 7d 0a 7d 20  llate2t1;.  }.} 
3610: 7b 7b 7d 20 30 20 30 20 30 20 30 20 31 20 31 20  {{} 0 0 0 0 1 1 
3620: 31 20 31 20 31 20 30 20 31 20 30 20 31 20 31 20  1 1 1 0 1 0 1 1 
3630: 31 20 31 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c  1 1}.do_test col
3640: 6c 61 74 65 32 2d 33 2e 37 20 7b 0a 20 20 65 78  late2-3.7 {.  ex
3650: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
3660: 43 54 20 61 20 3d 20 27 61 61 27 20 46 52 4f 4d  CT a = 'aa' FROM
3670: 20 63 6f 6c 6c 61 74 65 32 74 31 3b 0a 20 20 7d   collate2t1;.  }
3680: 0a 7d 20 7b 7b 7d 20 31 20 30 20 30 20 30 20 30  .} {{} 1 0 0 0 0
3690: 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30   0 0 0 0 0 0 0 0
36a0: 20 30 20 30 20 30 7d 0a 64 6f 5f 74 65 73 74 20   0 0 0}.do_test 
36b0: 63 6f 6c 6c 61 74 65 32 2d 33 2e 38 20 7b 0a 20  collate2-3.8 {. 
36c0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
36d0: 45 4c 45 43 54 20 62 20 3d 20 27 61 61 27 20 46  ELECT b = 'aa' F
36e0: 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 3b 0a  ROM collate2t1;.
36f0: 20 20 7d 0a 7d 20 7b 7b 7d 20 31 20 30 20 30 20    }.} {{} 1 0 0 
3700: 30 20 31 20 30 20 30 20 30 20 31 20 30 20 30 20  0 1 0 0 0 1 0 0 
3710: 30 20 31 20 30 20 30 20 30 7d 0a 64 6f 5f 74 65  0 1 0 0 0}.do_te
3720: 73 74 20 63 6f 6c 6c 61 74 65 32 2d 33 2e 39 20  st collate2-3.9 
3730: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3740: 20 20 53 45 4c 45 43 54 20 63 20 3d 20 27 61 61    SELECT c = 'aa
3750: 27 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74  ' FROM collate2t
3760: 31 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 31 20 30  1;.  }.} {{} 1 0
3770: 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30   0 0 0 0 0 0 0 0
3780: 20 30 20 30 20 30 20 30 20 30 20 30 7d 0a 64 6f   0 0 0 0 0 0}.do
3790: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 33  _test collate2-3
37a0: 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .10 {.  execsql 
37b0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 3c  {.    SELECT a <
37c0: 3d 20 27 61 61 27 20 46 52 4f 4d 20 63 6f 6c 6c  = 'aa' FROM coll
37d0: 61 74 65 32 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7b  ate2t1;.  }.} {{
37e0: 7d 20 31 20 30 20 30 20 30 20 31 20 31 20 30 20  } 1 0 0 0 1 1 0 
37f0: 30 20 31 20 31 20 31 20 31 20 31 20 31 20 31 20  0 1 1 1 1 1 1 1 
3800: 31 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  1}.do_test colla
3810: 74 65 32 2d 33 2e 31 31 20 7b 0a 20 20 65 78 65  te2-3.11 {.  exe
3820: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
3830: 54 20 62 20 3c 3d 20 27 61 61 27 20 46 52 4f 4d  T b <= 'aa' FROM
3840: 20 63 6f 6c 6c 61 74 65 32 74 31 3b 0a 20 20 7d   collate2t1;.  }
3850: 0a 7d 20 7b 7b 7d 20 31 20 30 20 30 20 30 20 31  .} {{} 1 0 0 0 1
3860: 20 30 20 30 20 30 20 31 20 30 20 30 20 30 20 31   0 0 0 1 0 0 0 1
3870: 20 30 20 30 20 30 7d 0a 64 6f 5f 74 65 73 74 20   0 0 0}.do_test 
3880: 63 6f 6c 6c 61 74 65 32 2d 33 2e 31 32 20 7b 0a  collate2-3.12 {.
3890: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
38a0: 53 45 4c 45 43 54 20 63 20 3c 3d 20 27 61 61 27  SELECT c <= 'aa'
38b0: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31   FROM collate2t1
38c0: 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 31 20 30 20  ;.  }.} {{} 1 0 
38d0: 30 20 30 20 31 20 31 20 31 20 31 20 31 20 30 20  0 0 1 1 1 1 1 0 
38e0: 31 20 30 20 31 20 31 20 31 20 31 7d 0a 64 6f 5f  1 0 1 1 1 1}.do_
38f0: 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 33 2e  test collate2-3.
3900: 31 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  13 {.  execsql {
3910: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 3e 3d  .    SELECT a >=
3920: 20 27 61 61 27 20 46 52 4f 4d 20 63 6f 6c 6c 61   'aa' FROM colla
3930: 74 65 32 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d  te2t1;.  }.} {{}
3940: 20 31 20 31 20 31 20 31 20 30 20 30 20 31 20 31   1 1 1 1 0 0 1 1
3950: 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30   0 0 0 0 0 0 0 0
3960: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  }.do_test collat
3970: 65 32 2d 33 2e 31 34 20 7b 0a 20 20 65 78 65 63  e2-3.14 {.  exec
3980: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
3990: 20 62 20 3e 3d 20 27 61 61 27 20 46 52 4f 4d 20   b >= 'aa' FROM 
39a0: 63 6f 6c 6c 61 74 65 32 74 31 3b 0a 20 20 7d 0a  collate2t1;.  }.
39b0: 7d 20 7b 7b 7d 20 31 20 31 20 31 20 31 20 31 20  } {{} 1 1 1 1 1 
39c0: 31 20 31 20 31 20 31 20 31 20 31 20 31 20 31 20  1 1 1 1 1 1 1 1 
39d0: 31 20 31 20 31 7d 0a 64 6f 5f 74 65 73 74 20 63  1 1 1}.do_test c
39e0: 6f 6c 6c 61 74 65 32 2d 33 2e 31 35 20 7b 0a 20  ollate2-3.15 {. 
39f0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
3a00: 45 4c 45 43 54 20 63 20 3e 3d 20 27 61 61 27 20  ELECT c >= 'aa' 
3a10: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 3b  FROM collate2t1;
3a20: 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 31 20 31 20 31  .  }.} {{} 1 1 1
3a30: 20 31 20 30 20 30 20 30 20 30 20 30 20 31 20 30   1 0 0 0 0 0 1 0
3a40: 20 31 20 30 20 30 20 30 20 30 7d 0a 64 6f 5f 74   1 0 0 0 0}.do_t
3a50: 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 33 2e 31  est collate2-3.1
3a60: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  6 {.  execsql {.
3a70: 20 20 20 20 53 45 4c 45 43 54 20 61 20 42 45 54      SELECT a BET
3a80: 57 45 45 4e 20 27 41 61 27 20 41 4e 44 20 27 42  WEEN 'Aa' AND 'B
3a90: 62 27 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32  b' FROM collate2
3aa0: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 30 20  t1;.  }.} {{} 0 
3ab0: 30 20 30 20 30 20 30 20 30 20 30 20 30 20 31 20  0 0 0 0 0 0 0 1 
3ac0: 31 20 31 20 31 20 30 20 30 20 31 20 31 7d 0a 64  1 1 1 0 0 1 1}.d
3ad0: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d  o_test collate2-
3ae0: 33 2e 31 37 20 7b 0a 20 20 65 78 65 63 73 71 6c  3.17 {.  execsql
3af0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 62 20   {.    SELECT b 
3b00: 42 45 54 57 45 45 4e 20 27 41 61 27 20 41 4e 44  BETWEEN 'Aa' AND
3b10: 20 27 42 62 27 20 46 52 4f 4d 20 63 6f 6c 6c 61   'Bb' FROM colla
3b20: 74 65 32 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d  te2t1;.  }.} {{}
3b30: 20 31 20 31 20 31 20 31 20 31 20 31 20 31 20 31   1 1 1 1 1 1 1 1
3b40: 20 31 20 31 20 31 20 31 20 31 20 31 20 31 20 31   1 1 1 1 1 1 1 1
3b50: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  }.do_test collat
3b60: 65 32 2d 33 2e 31 38 20 7b 0a 20 20 65 78 65 63  e2-3.18 {.  exec
3b70: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
3b80: 20 63 20 42 45 54 57 45 45 4e 20 27 41 61 27 20   c BETWEEN 'Aa' 
3b90: 41 4e 44 20 27 42 62 27 20 46 52 4f 4d 20 63 6f  AND 'Bb' FROM co
3ba0: 6c 6c 61 74 65 32 74 31 3b 0a 20 20 7d 0a 7d 20  llate2t1;.  }.} 
3bb0: 7b 7b 7d 20 31 20 30 20 31 20 30 20 30 20 30 20  {{} 1 0 1 0 0 0 
3bc0: 30 20 30 20 31 20 31 20 31 20 31 20 30 20 30 20  0 0 1 1 1 1 0 0 
3bd0: 30 20 30 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c  0 0}.do_test col
3be0: 6c 61 74 65 32 2d 33 2e 31 39 20 7b 0a 20 20 65  late2-3.19 {.  e
3bf0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
3c00: 45 43 54 20 43 41 53 45 20 61 20 57 48 45 4e 20  ECT CASE a WHEN 
3c10: 27 61 61 27 20 54 48 45 4e 20 31 20 45 4c 53 45  'aa' THEN 1 ELSE
3c20: 20 30 20 45 4e 44 20 46 52 4f 4d 20 63 6f 6c 6c   0 END FROM coll
3c30: 61 74 65 32 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30  ate2t1;.  }.} {0
3c40: 20 31 20 30 20 30 20 30 20 30 20 30 20 30 20 30   1 0 0 0 0 0 0 0
3c50: 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30   0 0 0 0 0 0 0 0
3c60: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  }.do_test collat
3c70: 65 32 2d 33 2e 32 30 20 7b 0a 20 20 65 78 65 63  e2-3.20 {.  exec
3c80: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
3c90: 20 43 41 53 45 20 62 20 57 48 45 4e 20 27 61 61   CASE b WHEN 'aa
3ca0: 27 20 54 48 45 4e 20 31 20 45 4c 53 45 20 30 20  ' THEN 1 ELSE 0 
3cb0: 45 4e 44 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65  END FROM collate
3cc0: 32 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 31 20  2t1;.  }.} {0 1 
3cd0: 30 20 30 20 30 20 31 20 30 20 30 20 30 20 31 20  0 0 0 1 0 0 0 1 
3ce0: 30 20 30 20 30 20 31 20 30 20 30 20 30 7d 0a 64  0 0 0 1 0 0 0}.d
3cf0: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d  o_test collate2-
3d00: 33 2e 32 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  3.21 {.  execsql
3d10: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 43 41   {.    SELECT CA
3d20: 53 45 20 63 20 57 48 45 4e 20 27 61 61 27 20 54  SE c WHEN 'aa' T
3d30: 48 45 4e 20 31 20 45 4c 53 45 20 30 20 45 4e 44  HEN 1 ELSE 0 END
3d40: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31   FROM collate2t1
3d50: 3b 0a 20 20 7d 0a 7d 20 7b 30 20 31 20 30 20 30  ;.  }.} {0 1 0 0
3d60: 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30   0 0 0 0 0 0 0 0
3d70: 20 30 20 30 20 30 20 30 20 30 7d 0a 0a 69 66 63   0 0 0 0 0}..ifc
3d80: 61 70 61 62 6c 65 20 73 75 62 71 75 65 72 79 20  apable subquery 
3d90: 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 6f 6c 6c  {.  do_test coll
3da0: 61 74 65 32 2d 33 2e 32 32 20 7b 0a 20 20 20 20  ate2-3.22 {.    
3db0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
3dc0: 53 45 4c 45 43 54 20 61 20 49 4e 20 28 27 61 61  SELECT a IN ('aa
3dd0: 27 2c 20 27 62 62 27 29 20 46 52 4f 4d 20 63 6f  ', 'bb') FROM co
3de0: 6c 6c 61 74 65 32 74 31 3b 0a 20 20 20 20 7d 0a  llate2t1;.    }.
3df0: 20 20 7d 20 7b 7b 7d 20 31 20 30 20 30 20 31 20    } {{} 1 0 0 1 
3e00: 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20  0 0 0 0 0 0 0 0 
3e10: 30 20 30 20 30 20 30 7d 0a 20 20 64 6f 5f 74 65  0 0 0 0}.  do_te
3e20: 73 74 20 63 6f 6c 6c 61 74 65 32 2d 33 2e 32 33  st collate2-3.23
3e30: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
3e40: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 62 20  .      SELECT b 
3e50: 49 4e 20 28 27 61 61 27 2c 20 27 62 62 27 29 20  IN ('aa', 'bb') 
3e60: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 3b  FROM collate2t1;
3e70: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7b 7d 20 31  .    }.  } {{} 1
3e80: 20 30 20 30 20 31 20 31 20 30 20 30 20 31 20 31   0 0 1 1 0 0 1 1
3e90: 20 30 20 30 20 31 20 31 20 30 20 30 20 31 7d 0a   0 0 1 1 0 0 1}.
3ea0: 20 20 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74    do_test collat
3eb0: 65 32 2d 33 2e 32 34 20 7b 0a 20 20 20 20 65 78  e2-3.24 {.    ex
3ec0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45  ecsql {.      SE
3ed0: 4c 45 43 54 20 63 20 49 4e 20 28 27 61 61 27 2c  LECT c IN ('aa',
3ee0: 20 27 62 62 27 29 20 46 52 4f 4d 20 63 6f 6c 6c   'bb') FROM coll
3ef0: 61 74 65 32 74 31 3b 0a 20 20 20 20 7d 0a 20 20  ate2t1;.    }.  
3f00: 7d 20 7b 7b 7d 20 31 20 30 20 30 20 31 20 30 20  } {{} 1 0 0 1 0 
3f10: 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20  0 0 0 0 0 0 0 0 
3f20: 30 20 30 20 30 7d 0a 20 20 64 6f 5f 74 65 73 74  0 0 0}.  do_test
3f30: 20 63 6f 6c 6c 61 74 65 32 2d 33 2e 32 35 20 7b   collate2-3.25 {
3f40: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
3f50: 20 20 20 20 20 53 45 4c 45 43 54 20 61 20 49 4e       SELECT a IN
3f60: 20 28 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20   (SELECT a FROM 
3f70: 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45  collate2t1 WHERE
3f80: 20 61 20 49 4e 20 28 27 61 61 27 2c 20 27 62 62   a IN ('aa', 'bb
3f90: 27 29 29 20 0a 20 20 20 20 20 20 20 20 46 52 4f  ')) .        FRO
3fa0: 4d 20 63 6f 6c 6c 61 74 65 32 74 31 3b 0a 20 20  M collate2t1;.  
3fb0: 20 20 7d 0a 20 20 7d 20 7b 7b 7d 20 31 20 30 20    }.  } {{} 1 0 
3fc0: 30 20 31 20 30 20 30 20 30 20 30 20 30 20 30 20  0 1 0 0 0 0 0 0 
3fd0: 30 20 30 20 30 20 30 20 30 20 30 7d 0a 20 20 64  0 0 0 0 0 0}.  d
3fe0: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d  o_test collate2-
3ff0: 33 2e 32 36 20 7b 0a 20 20 20 20 65 78 65 63 73  3.26 {.    execs
4000: 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43  ql {.      SELEC
4010: 54 20 62 20 49 4e 20 28 53 45 4c 45 43 54 20 61  T b IN (SELECT a
4020: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31   FROM collate2t1
4030: 20 57 48 45 52 45 20 61 20 49 4e 20 28 27 61 61   WHERE a IN ('aa
4040: 27 2c 20 27 62 62 27 29 29 20 0a 20 20 20 20 20  ', 'bb')) .     
4050: 20 20 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32     FROM collate2
4060: 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7b  t1;.    }.  } {{
4070: 7d 20 31 20 30 20 30 20 31 20 31 20 30 20 30 20  } 1 0 0 1 1 0 0 
4080: 31 20 31 20 30 20 30 20 31 20 31 20 30 20 30 20  1 1 0 0 1 1 0 0 
4090: 31 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 6f 6c  1}.  do_test col
40a0: 6c 61 74 65 32 2d 33 2e 32 37 20 7b 0a 20 20 20  late2-3.27 {.   
40b0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
40c0: 20 53 45 4c 45 43 54 20 63 20 49 4e 20 28 53 45   SELECT c IN (SE
40d0: 4c 45 43 54 20 61 20 46 52 4f 4d 20 63 6f 6c 6c  LECT a FROM coll
40e0: 61 74 65 32 74 31 20 57 48 45 52 45 20 61 20 49  ate2t1 WHERE a I
40f0: 4e 20 28 27 61 61 27 2c 20 27 62 62 27 29 29 20  N ('aa', 'bb')) 
4100: 0a 20 20 20 20 20 20 20 20 46 52 4f 4d 20 63 6f  .        FROM co
4110: 6c 6c 61 74 65 32 74 31 3b 0a 20 20 20 20 7d 0a  llate2t1;.    }.
4120: 20 20 7d 20 7b 7b 7d 20 31 20 30 20 30 20 31 20    } {{} 1 0 0 1 
4130: 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20  0 0 0 0 0 0 0 0 
4140: 30 20 30 20 30 20 30 7d 0a 7d 0a 0a 64 6f 5f 74  0 0 0 0}.}..do_t
4150: 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 34 2e 30  est collate2-4.0
4160: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
4170: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
4180: 63 6f 6c 6c 61 74 65 32 74 32 28 62 20 43 4f 4c  collate2t2(b COL
4190: 4c 41 54 45 20 62 69 6e 61 72 79 29 3b 0a 20 20  LATE binary);.  
41a0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63    CREATE TABLE c
41b0: 6f 6c 6c 61 74 65 32 74 33 28 62 20 74 65 78 74  ollate2t3(b text
41c0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
41d0: 54 4f 20 63 6f 6c 6c 61 74 65 32 74 32 20 56 41  TO collate2t2 VA
41e0: 4c 55 45 53 28 27 61 61 27 29 3b 0a 20 20 20 20  LUES('aa');.    
41f0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c  INSERT INTO coll
4200: 61 74 65 32 74 33 20 56 41 4c 55 45 53 28 27 61  ate2t3 VALUES('a
4210: 61 27 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23  a');.  }.} {}..#
4220: 20 54 65 73 74 20 74 68 61 74 20 77 68 65 6e 20   Test that when 
4230: 62 6f 74 68 20 73 69 64 65 73 20 6f 66 20 61 20  both sides of a 
4240: 62 69 6e 61 72 79 20 63 6f 6d 70 61 72 69 73 6f  binary compariso
4250: 6e 20 6f 70 65 72 61 74 6f 72 20 68 61 76 65 0a  n operator have.
4260: 23 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74  # default collat
4270: 69 6f 6e 20 74 79 70 65 73 2c 20 74 68 65 20 63  ion types, the c
4280: 6f 6c 6c 61 74 65 20 74 79 70 65 20 66 6f 72 20  ollate type for 
4290: 74 68 65 20 6c 65 66 74 6d 6f 73 74 20 74 65 72  the leftmost ter
42a0: 6d 0a 23 20 69 73 20 75 73 65 64 2e 0a 64 6f 5f  m.# is used..do_
42b0: 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 34 2e  test collate2-4.
42c0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
42d0: 20 20 20 20 53 45 4c 45 43 54 20 63 6f 6c 6c 61      SELECT colla
42e0: 74 65 32 74 31 2e 61 20 46 52 4f 4d 20 63 6f 6c  te2t1.a FROM col
42f0: 6c 61 74 65 32 74 31 2c 20 63 6f 6c 6c 61 74 65  late2t1, collate
4300: 32 74 32 20 0a 20 20 20 20 20 20 57 48 45 52 45  2t2 .      WHERE
4310: 20 63 6f 6c 6c 61 74 65 32 74 31 2e 62 20 3d 20   collate2t1.b = 
4320: 63 6f 6c 6c 61 74 65 32 74 32 2e 62 3b 0a 20 20  collate2t2.b;.  
4330: 7d 0a 7d 20 7b 61 61 20 61 41 20 41 61 20 41 41  }.} {aa aA Aa AA
4340: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  }.do_test collat
4350: 65 32 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63 73  e2-4.2 {.  execs
4360: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
4370: 63 6f 6c 6c 61 74 65 32 74 31 2e 61 20 46 52 4f  collate2t1.a FRO
4380: 4d 20 63 6f 6c 6c 61 74 65 32 74 31 2c 20 63 6f  M collate2t1, co
4390: 6c 6c 61 74 65 32 74 32 20 0a 20 20 20 20 20 20  llate2t2 .      
43a0: 57 48 45 52 45 20 63 6f 6c 6c 61 74 65 32 74 32  WHERE collate2t2
43b0: 2e 62 20 3d 20 63 6f 6c 6c 61 74 65 32 74 31 2e  .b = collate2t1.
43c0: 62 3b 0a 20 20 7d 0a 7d 20 7b 61 61 7d 0a 0a 23  b;.  }.} {aa}..#
43d0: 20 54 65 73 74 20 74 68 61 74 20 77 68 65 6e 20   Test that when 
43e0: 6f 6e 65 20 73 69 64 65 20 68 61 73 20 61 20 64  one side has a d
43f0: 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e  efault collation
4400: 20 74 79 70 65 20 61 6e 64 20 74 68 65 20 6f 74   type and the ot
4410: 68 65 72 0a 23 20 64 6f 65 73 20 6e 6f 74 2c 20  her.# does not, 
4420: 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 74 79  the collation ty
4430: 70 65 20 69 73 20 75 73 65 64 2e 0a 64 6f 5f 74  pe is used..do_t
4440: 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 34 2e 33  est collate2-4.3
4450: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
4460: 20 20 20 53 45 4c 45 43 54 20 63 6f 6c 6c 61 74     SELECT collat
4470: 65 32 74 31 2e 61 20 46 52 4f 4d 20 63 6f 6c 6c  e2t1.a FROM coll
4480: 61 74 65 32 74 31 2c 20 63 6f 6c 6c 61 74 65 32  ate2t1, collate2
4490: 74 33 20 0a 20 20 20 20 20 20 57 48 45 52 45 20  t3 .      WHERE 
44a0: 63 6f 6c 6c 61 74 65 32 74 31 2e 62 20 3d 20 63  collate2t1.b = c
44b0: 6f 6c 6c 61 74 65 32 74 33 2e 62 7c 7c 27 27 3b  ollate2t3.b||'';
44c0: 0a 20 20 7d 0a 7d 20 7b 61 61 20 61 41 20 41 61  .  }.} {aa aA Aa
44d0: 20 41 41 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c   AA}.do_test col
44e0: 6c 61 74 65 32 2d 34 2e 34 20 7b 0a 20 20 65 78  late2-4.4 {.  ex
44f0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
4500: 43 54 20 63 6f 6c 6c 61 74 65 32 74 31 2e 61 20  CT collate2t1.a 
4510: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 2c  FROM collate2t1,
4520: 20 63 6f 6c 6c 61 74 65 32 74 33 20 0a 20 20 20   collate2t3 .   
4530: 20 20 20 57 48 45 52 45 20 63 6f 6c 6c 61 74 65     WHERE collate
4540: 32 74 33 2e 62 7c 7c 27 27 20 3d 20 63 6f 6c 6c  2t3.b||'' = coll
4550: 61 74 65 32 74 31 2e 62 3b 0a 20 20 7d 0a 7d 20  ate2t1.b;.  }.} 
4560: 7b 61 61 20 61 41 20 41 61 20 41 41 7d 0a 0a 64  {aa aA Aa AA}..d
4570: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d  o_test collate2-
4580: 34 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.5 {.  execsql 
4590: 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45  {.    DROP TABLE
45a0: 20 63 6f 6c 6c 61 74 65 32 74 33 3b 0a 20 20 7d   collate2t3;.  }
45b0: 0a 7d 20 7b 7d 0a 0a 23 0a 23 20 54 65 73 74 20  .} {}..#.# Test 
45c0: 74 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74  that the default
45d0: 20 63 6f 6c 6c 61 74 69 6f 6e 20 74 79 70 65 73   collation types
45e0: 20 61 72 65 20 75 73 65 64 20 77 68 65 6e 20 74   are used when t
45f0: 68 65 20 4a 4f 49 4e 20 73 79 6e 74 61 78 0a 23  he JOIN syntax.#
4600: 20 69 73 20 75 73 65 64 20 69 6e 20 70 6c 61 63   is used in plac
4610: 65 20 6f 66 20 61 20 57 48 45 52 45 20 63 6c 61  e of a WHERE cla
4620: 75 73 65 2e 0a 23 0a 23 20 53 51 4c 69 74 65 20  use..#.# SQLite 
4630: 74 72 61 6e 73 66 6f 72 6d 73 20 74 68 65 20 4a  transforms the J
4640: 4f 49 4e 20 73 79 6e 74 61 78 20 69 6e 74 6f 20  OIN syntax into 
4650: 61 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 69  a WHERE clause i
4660: 6e 74 65 72 6e 61 6c 6c 79 2c 20 73 6f 0a 23 20  nternally, so.# 
4670: 74 68 65 20 66 6f 63 75 73 20 6f 66 20 74 68 65  the focus of the
4680: 73 65 20 74 65 73 74 73 20 69 73 20 74 6f 20 65  se tests is to e
4690: 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20 74  nsure that the t
46a0: 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c 65 66 74  able on the left
46b0: 2d 68 61 6e 64 2d 73 69 64 65 0a 23 20 6f 66 20  -hand-side.# of 
46c0: 74 68 65 20 6a 6f 69 6e 20 64 65 74 65 72 6d 69  the join determi
46d0: 6e 65 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f  nes the collatio
46e0: 6e 20 74 79 70 65 20 75 73 65 64 2e 20 0a 23 0a  n type used. .#.
46f0: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32  do_test collate2
4700: 2d 35 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  -5.0 {.  execsql
4710: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 6f   {.    SELECT co
4720: 6c 6c 61 74 65 32 74 31 2e 62 20 46 52 4f 4d 20  llate2t1.b FROM 
4730: 63 6f 6c 6c 61 74 65 32 74 31 20 4a 4f 49 4e 20  collate2t1 JOIN 
4740: 63 6f 6c 6c 61 74 65 32 74 32 20 55 53 49 4e 47  collate2t2 USING
4750: 20 28 62 29 3b 0a 20 20 7d 0a 7d 20 7b 61 61 20   (b);.  }.} {aa 
4760: 61 41 20 41 61 20 41 41 7d 0a 64 6f 5f 74 65 73  aA Aa AA}.do_tes
4770: 74 20 63 6f 6c 6c 61 74 65 32 2d 35 2e 31 20 7b  t collate2-5.1 {
4780: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4790: 20 53 45 4c 45 43 54 20 63 6f 6c 6c 61 74 65 32   SELECT collate2
47a0: 74 31 2e 62 20 46 52 4f 4d 20 63 6f 6c 6c 61 74  t1.b FROM collat
47b0: 65 32 74 32 20 4a 4f 49 4e 20 63 6f 6c 6c 61 74  e2t2 JOIN collat
47c0: 65 32 74 31 20 55 53 49 4e 47 20 28 62 29 3b 0a  e2t1 USING (b);.
47d0: 20 20 7d 0a 7d 20 7b 61 61 7d 0a 64 6f 5f 74 65    }.} {aa}.do_te
47e0: 73 74 20 63 6f 6c 6c 61 74 65 32 2d 35 2e 32 20  st collate2-5.2 
47f0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
4800: 20 20 53 45 4c 45 43 54 20 63 6f 6c 6c 61 74 65    SELECT collate
4810: 32 74 31 2e 62 20 46 52 4f 4d 20 63 6f 6c 6c 61  2t1.b FROM colla
4820: 74 65 32 74 31 20 4e 41 54 55 52 41 4c 20 4a 4f  te2t1 NATURAL JO
4830: 49 4e 20 63 6f 6c 6c 61 74 65 32 74 32 3b 0a 20  IN collate2t2;. 
4840: 20 7d 0a 7d 20 7b 61 61 20 61 41 20 41 61 20 41   }.} {aa aA Aa A
4850: 41 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  A}.do_test colla
4860: 74 65 32 2d 35 2e 33 20 7b 0a 20 20 65 78 65 63  te2-5.3 {.  exec
4870: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
4880: 20 63 6f 6c 6c 61 74 65 32 74 31 2e 62 20 46 52   collate2t1.b FR
4890: 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 32 20 4e 41  OM collate2t2 NA
48a0: 54 55 52 41 4c 20 4a 4f 49 4e 20 63 6f 6c 6c 61  TURAL JOIN colla
48b0: 74 65 32 74 31 3b 0a 20 20 7d 0a 7d 20 7b 61 61  te2t1;.  }.} {aa
48c0: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  }.do_test collat
48d0: 65 32 2d 35 2e 34 20 7b 0a 20 20 65 78 65 63 73  e2-5.4 {.  execs
48e0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
48f0: 63 6f 6c 6c 61 74 65 32 74 32 2e 62 20 46 52 4f  collate2t2.b FRO
4900: 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 4c 45 46  M collate2t1 LEF
4910: 54 20 4f 55 54 45 52 20 4a 4f 49 4e 20 63 6f 6c  T OUTER JOIN col
4920: 6c 61 74 65 32 74 32 20 55 53 49 4e 47 20 28 62  late2t2 USING (b
4930: 29 20 6f 72 64 65 72 20 62 79 20 63 6f 6c 6c 61  ) order by colla
4940: 74 65 32 74 31 2e 6f 69 64 3b 0a 20 20 7d 0a 7d  te2t1.oid;.  }.}
4950: 20 7b 7b 7d 20 61 61 20 7b 7d 20 7b 7d 20 7b 7d   {{} aa {} {} {}
4960: 20 61 61 20 7b 7d 20 7b 7d 20 7b 7d 20 61 61 20   aa {} {} {} aa 
4970: 7b 7d 20 7b 7d 20 7b 7d 20 61 61 20 7b 7d 20 7b  {} {} {} aa {} {
4980: 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 6f  } {}}.do_test co
4990: 6c 6c 61 74 65 32 2d 35 2e 35 20 7b 0a 20 20 65  llate2-5.5 {.  e
49a0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
49b0: 45 43 54 20 63 6f 6c 6c 61 74 65 32 74 31 2e 62  ECT collate2t1.b
49c0: 2c 20 63 6f 6c 6c 61 74 65 32 74 32 2e 62 20 46  , collate2t2.b F
49d0: 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 32 20 4c  ROM collate2t2 L
49e0: 45 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 20 63  EFT OUTER JOIN c
49f0: 6f 6c 6c 61 74 65 32 74 31 20 55 53 49 4e 47 20  ollate2t1 USING 
4a00: 28 62 29 3b 0a 20 20 7d 0a 7d 20 7b 61 61 20 61  (b);.  }.} {aa a
4a10: 61 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a  a}..finish_test.