/ Hex Artifact Content
Login

Artifact 701d9651c5707024fd86a20649af9ea55e2c0eb8:


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 35 20 32 30 30 37 2f 30  est,v 1.5 2007/0
0200: 32 2f 30 31 20 32 33 3a 30 32 3a 34 36 20 64 72  2/01 23:02:46 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 33 20 7b 0a 20 20  ollate2-1.3 {.  
1200: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
1210: 4c 45 43 54 20 63 20 46 52 4f 4d 20 63 6f 6c 6c  LECT c FROM coll
1220: 61 74 65 32 74 31 20 57 48 45 52 45 20 63 20 3e  ate2t1 WHERE c >
1230: 20 27 61 61 27 20 4f 52 44 45 52 20 42 59 20 31   'aa' ORDER BY 1
1240: 3b 0a 20 20 7d 0a 7d 20 7b 62 61 20 41 62 20 42  ;.  }.} {ba Ab B
1250: 62 20 61 62 20 62 62 7d 0a 64 6f 5f 74 65 73 74  b ab bb}.do_test
1260: 20 63 6f 6c 6c 61 74 65 32 2d 31 2e 33 2e 31 20   collate2-1.3.1 
1270: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1280: 20 20 53 45 4c 45 43 54 20 63 20 46 52 4f 4d 20    SELECT c FROM 
1290: 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45  collate2t1 WHERE
12a0: 20 61 20 43 4f 4c 4c 41 54 45 20 62 61 63 6b 77   a COLLATE backw
12b0: 61 72 64 73 20 3e 20 27 61 61 27 0a 20 20 20 20  ards > 'aa'.    
12c0: 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a  ORDER BY 1;.  }.
12d0: 7d 20 7b 62 61 20 41 62 20 42 62 20 61 62 20 62  } {ba Ab Bb ab b
12e0: 62 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  b}.do_test colla
12f0: 74 65 32 2d 31 2e 33 2e 32 20 7b 0a 20 20 65 78  te2-1.3.2 {.  ex
1300: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
1310: 43 54 20 63 20 46 52 4f 4d 20 63 6f 6c 6c 61 74  CT c FROM collat
1320: 65 32 74 31 20 57 48 45 52 45 20 62 20 43 4f 4c  e2t1 WHERE b COL
1330: 4c 41 54 45 20 62 61 63 6b 77 61 72 64 73 20 3e  LATE backwards >
1340: 20 27 61 61 27 0a 20 20 20 20 4f 52 44 45 52 20   'aa'.    ORDER 
1350: 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 62 61 20  BY 1;.  }.} {ba 
1360: 41 62 20 42 62 20 61 62 20 62 62 7d 0a 64 6f 5f  Ab Bb ab bb}.do_
1370: 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e  test collate2-1.
1380: 33 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.3 {.  execsql 
1390: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 20 46  {.    SELECT c F
13a0: 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57  ROM collate2t1 W
13b0: 48 45 52 45 20 63 20 43 4f 4c 4c 41 54 45 20 62  HERE c COLLATE b
13c0: 61 63 6b 77 61 72 64 73 20 3e 20 27 61 61 27 0a  ackwards > 'aa'.
13d0: 20 20 20 20 4f 52 44 45 52 20 42 59 20 31 3b 0a      ORDER BY 1;.
13e0: 20 20 7d 0a 7d 20 7b 62 61 20 41 62 20 42 62 20    }.} {ba Ab Bb 
13f0: 61 62 20 62 62 7d 0a 64 6f 5f 74 65 73 74 20 63  ab bb}.do_test c
1400: 6f 6c 6c 61 74 65 32 2d 31 2e 34 20 7b 0a 20 20  ollate2-1.4 {.  
1410: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
1420: 4c 45 43 54 20 61 20 46 52 4f 4d 20 63 6f 6c 6c  LECT a FROM coll
1430: 61 74 65 32 74 31 20 57 48 45 52 45 20 61 20 3c  ate2t1 WHERE a <
1440: 20 27 61 61 27 20 4f 52 44 45 52 20 42 59 20 31   'aa' ORDER BY 1
1450: 3b 0a 20 20 7d 0a 7d 20 7b 41 41 20 41 42 20 41  ;.  }.} {AA AB A
1460: 61 20 41 62 20 42 41 20 42 42 20 42 61 20 42 62  a Ab BA BB Ba Bb
1470: 20 61 41 20 61 42 7d 0a 64 6f 5f 74 65 73 74 20   aA aB}.do_test 
1480: 63 6f 6c 6c 61 74 65 32 2d 31 2e 35 20 7b 0a 20  collate2-1.5 {. 
1490: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
14a0: 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 63 6f 6c  ELECT b FROM col
14b0: 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 62 20  late2t1 WHERE b 
14c0: 3c 20 27 61 61 27 20 4f 52 44 45 52 20 42 59 20  < 'aa' ORDER BY 
14d0: 31 2c 20 6f 69 64 3b 0a 20 20 7d 0a 7d 20 7b 7d  1, oid;.  }.} {}
14e0: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65  .do_test collate
14f0: 32 2d 31 2e 36 20 7b 0a 20 20 65 78 65 63 73 71  2-1.6 {.  execsq
1500: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63  l {.    SELECT c
1510: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31   FROM collate2t1
1520: 20 57 48 45 52 45 20 63 20 3c 20 27 61 61 27 20   WHERE c < 'aa' 
1530: 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a  ORDER BY 1;.  }.
1540: 7d 20 7b 41 41 20 42 41 20 61 41 20 62 41 20 41  } {AA BA aA bA A
1550: 42 20 42 42 20 61 42 20 62 42 20 41 61 20 42 61  B BB aB bB Aa Ba
1560: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  }.do_test collat
1570: 65 32 2d 31 2e 37 20 7b 0a 20 20 65 78 65 63 73  e2-1.7 {.  execs
1580: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1590: 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74  a FROM collate2t
15a0: 31 20 57 48 45 52 45 20 61 20 3d 20 27 61 61 27  1 WHERE a = 'aa'
15b0: 3b 0a 20 20 7d 0a 7d 20 7b 61 61 7d 0a 64 6f 5f  ;.  }.} {aa}.do_
15c0: 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e  test collate2-1.
15d0: 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  8 {.  execsql {.
15e0: 20 20 20 20 53 45 4c 45 43 54 20 62 20 46 52 4f      SELECT b FRO
15f0: 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45  M collate2t1 WHE
1600: 52 45 20 62 20 3d 20 27 61 61 27 20 4f 52 44 45  RE b = 'aa' ORDE
1610: 52 20 42 59 20 6f 69 64 3b 0a 20 20 7d 0a 7d 20  R BY oid;.  }.} 
1620: 7b 61 61 20 61 41 20 41 61 20 41 41 7d 0a 64 6f  {aa aA Aa AA}.do
1630: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 31  _test collate2-1
1640: 2e 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .9 {.  execsql {
1650: 0a 20 20 20 20 53 45 4c 45 43 54 20 63 20 46 52  .    SELECT c FR
1660: 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48  OM collate2t1 WH
1670: 45 52 45 20 63 20 3d 20 27 61 61 27 3b 0a 20 20  ERE c = 'aa';.  
1680: 7d 0a 7d 20 7b 61 61 7d 0a 64 6f 5f 74 65 73 74  }.} {aa}.do_test
1690: 20 63 6f 6c 6c 61 74 65 32 2d 31 2e 31 30 20 7b   collate2-1.10 {
16a0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
16b0: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 63   SELECT a FROM c
16c0: 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20  ollate2t1 WHERE 
16d0: 61 20 3e 3d 20 27 61 61 27 20 4f 52 44 45 52 20  a >= 'aa' ORDER 
16e0: 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 61 61 20  BY 1;.  }.} {aa 
16f0: 61 62 20 62 41 20 62 42 20 62 61 20 62 62 7d 0a  ab bA bB ba bb}.
1700: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32  do_test collate2
1710: 2d 31 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71  -1.11 {.  execsq
1720: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 62  l {.    SELECT b
1730: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31   FROM collate2t1
1740: 20 57 48 45 52 45 20 62 20 3e 3d 20 27 61 61 27   WHERE b >= 'aa'
1750: 20 4f 52 44 45 52 20 42 59 20 31 2c 20 6f 69 64   ORDER BY 1, oid
1760: 3b 0a 20 20 7d 0a 7d 20 7b 61 61 20 61 41 20 41  ;.  }.} {aa aA A
1770: 61 20 41 41 20 61 62 20 61 42 20 41 62 20 41 42  a AA ab aB Ab AB
1780: 20 62 61 20 62 41 20 42 61 20 42 41 20 62 62 20   ba bA Ba BA bb 
1790: 62 42 20 42 62 20 42 42 7d 0a 64 6f 5f 74 65 73  bB Bb BB}.do_tes
17a0: 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e 31 32 20  t collate2-1.12 
17b0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
17c0: 20 20 53 45 4c 45 43 54 20 63 20 46 52 4f 4d 20    SELECT c FROM 
17d0: 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45  collate2t1 WHERE
17e0: 20 63 20 3e 3d 20 27 61 61 27 20 4f 52 44 45 52   c >= 'aa' ORDER
17f0: 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 61 61   BY 1;.  }.} {aa
1800: 20 62 61 20 41 62 20 42 62 20 61 62 20 62 62 7d   ba Ab Bb ab bb}
1810: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65  .do_test collate
1820: 32 2d 31 2e 31 33 20 7b 0a 20 20 65 78 65 63 73  2-1.13 {.  execs
1830: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1840: 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74  a FROM collate2t
1850: 31 20 57 48 45 52 45 20 61 20 3c 3d 20 27 61 61  1 WHERE a <= 'aa
1860: 27 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20  ' ORDER BY 1;.  
1870: 7d 0a 7d 20 7b 41 41 20 41 42 20 41 61 20 41 62  }.} {AA AB Aa Ab
1880: 20 42 41 20 42 42 20 42 61 20 42 62 20 61 41 20   BA BB Ba Bb aA 
1890: 61 42 20 61 61 7d 0a 64 6f 5f 74 65 73 74 20 63  aB aa}.do_test c
18a0: 6f 6c 6c 61 74 65 32 2d 31 2e 31 34 20 7b 0a 20  ollate2-1.14 {. 
18b0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
18c0: 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 63 6f 6c  ELECT b FROM col
18d0: 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 62 20  late2t1 WHERE b 
18e0: 3c 3d 20 27 61 61 27 20 4f 52 44 45 52 20 42 59  <= 'aa' ORDER BY
18f0: 20 31 2c 20 6f 69 64 3b 0a 20 20 7d 0a 7d 20 7b   1, oid;.  }.} {
1900: 61 61 20 61 41 20 41 61 20 41 41 7d 0a 64 6f 5f  aa aA Aa AA}.do_
1910: 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e  test collate2-1.
1920: 31 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  15 {.  execsql {
1930: 0a 20 20 20 20 53 45 4c 45 43 54 20 63 20 46 52  .    SELECT c FR
1940: 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48  OM collate2t1 WH
1950: 45 52 45 20 63 20 3c 3d 20 27 61 61 27 20 4f 52  ERE c <= 'aa' OR
1960: 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20  DER BY 1;.  }.} 
1970: 7b 41 41 20 42 41 20 61 41 20 62 41 20 41 42 20  {AA BA aA bA AB 
1980: 42 42 20 61 42 20 62 42 20 41 61 20 42 61 20 61  BB aB bB Aa Ba a
1990: 61 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  a}.do_test colla
19a0: 74 65 32 2d 31 2e 31 36 20 7b 0a 20 20 65 78 65  te2-1.16 {.  exe
19b0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
19c0: 54 20 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65  T a FROM collate
19d0: 32 74 31 20 57 48 45 52 45 20 61 20 42 45 54 57  2t1 WHERE a BETW
19e0: 45 45 4e 20 27 41 61 27 20 41 4e 44 20 27 42 62  EEN 'Aa' AND 'Bb
19f0: 27 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20  ' ORDER BY 1;.  
1a00: 7d 0a 7d 20 7b 41 61 20 41 62 20 42 41 20 42 42  }.} {Aa Ab BA BB
1a10: 20 42 61 20 42 62 7d 0a 64 6f 5f 74 65 73 74 20   Ba Bb}.do_test 
1a20: 63 6f 6c 6c 61 74 65 32 2d 31 2e 31 37 20 7b 0a  collate2-1.17 {.
1a30: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1a40: 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 63 6f  SELECT b FROM co
1a50: 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 62  llate2t1 WHERE b
1a60: 20 42 45 54 57 45 45 4e 20 27 41 61 27 20 41 4e   BETWEEN 'Aa' AN
1a70: 44 20 27 42 62 27 20 4f 52 44 45 52 20 42 59 20  D 'Bb' ORDER BY 
1a80: 31 2c 20 6f 69 64 3b 0a 20 20 7d 0a 7d 20 7b 61  1, oid;.  }.} {a
1a90: 61 20 61 41 20 41 61 20 41 41 20 61 62 20 61 42  a aA Aa AA ab aB
1aa0: 20 41 62 20 41 42 20 62 61 20 62 41 20 42 61 20   Ab AB ba bA Ba 
1ab0: 42 41 20 62 62 20 62 42 20 42 62 20 42 42 7d 0a  BA bb bB Bb BB}.
1ac0: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32  do_test collate2
1ad0: 2d 31 2e 31 38 20 7b 0a 20 20 65 78 65 63 73 71  -1.18 {.  execsq
1ae0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63  l {.    SELECT c
1af0: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31   FROM collate2t1
1b00: 20 57 48 45 52 45 20 63 20 42 45 54 57 45 45 4e   WHERE c BETWEEN
1b10: 20 27 41 61 27 20 41 4e 44 20 27 42 62 27 20 4f   'Aa' AND 'Bb' O
1b20: 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d  RDER BY 1;.  }.}
1b30: 20 7b 41 61 20 42 61 20 61 61 20 62 61 20 41 62   {Aa Ba aa ba Ab
1b40: 20 42 62 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c   Bb}.do_test col
1b50: 6c 61 74 65 32 2d 31 2e 31 39 20 7b 0a 20 20 65  late2-1.19 {.  e
1b60: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
1b70: 45 43 54 20 61 20 46 52 4f 4d 20 63 6f 6c 6c 61  ECT a FROM colla
1b80: 74 65 32 74 31 20 57 48 45 52 45 20 0a 20 20 20  te2t1 WHERE .   
1b90: 20 20 20 43 41 53 45 20 61 20 57 48 45 4e 20 27     CASE a WHEN '
1ba0: 61 61 27 20 54 48 45 4e 20 31 20 45 4c 53 45 20  aa' THEN 1 ELSE 
1bb0: 30 20 45 4e 44 0a 20 20 20 20 20 20 20 20 4f 52  0 END.        OR
1bc0: 44 45 52 20 42 59 20 31 2c 20 6f 69 64 3b 0a 20  DER BY 1, oid;. 
1bd0: 20 7d 0a 7d 20 7b 61 61 7d 0a 64 6f 5f 74 65 73   }.} {aa}.do_tes
1be0: 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e 32 30 20  t collate2-1.20 
1bf0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1c00: 20 20 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20    SELECT b FROM 
1c10: 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45  collate2t1 WHERE
1c20: 20 0a 20 20 20 20 20 20 43 41 53 45 20 62 20 57   .      CASE b W
1c30: 48 45 4e 20 27 61 61 27 20 54 48 45 4e 20 31 20  HEN 'aa' THEN 1 
1c40: 45 4c 53 45 20 30 20 45 4e 44 0a 20 20 20 20 20  ELSE 0 END.     
1c50: 20 20 20 4f 52 44 45 52 20 42 59 20 31 2c 20 6f     ORDER BY 1, o
1c60: 69 64 3b 0a 20 20 7d 0a 7d 20 7b 61 61 20 61 41  id;.  }.} {aa aA
1c70: 20 41 61 20 41 41 7d 0a 64 6f 5f 74 65 73 74 20   Aa AA}.do_test 
1c80: 63 6f 6c 6c 61 74 65 32 2d 31 2e 32 31 20 7b 0a  collate2-1.21 {.
1c90: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1ca0: 53 45 4c 45 43 54 20 63 20 46 52 4f 4d 20 63 6f  SELECT c FROM co
1cb0: 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 0a  llate2t1 WHERE .
1cc0: 20 20 20 20 20 20 43 41 53 45 20 63 20 57 48 45        CASE c WHE
1cd0: 4e 20 27 61 61 27 20 54 48 45 4e 20 31 20 45 4c  N 'aa' THEN 1 EL
1ce0: 53 45 20 30 20 45 4e 44 0a 20 20 20 20 20 20 20  SE 0 END.       
1cf0: 20 4f 52 44 45 52 20 42 59 20 31 2c 20 6f 69 64   ORDER BY 1, oid
1d00: 3b 0a 20 20 7d 0a 7d 20 7b 61 61 7d 0a 0a 69 66  ;.  }.} {aa}..if
1d10: 63 61 70 61 62 6c 65 20 73 75 62 71 75 65 72 79  capable subquery
1d20: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 63 6f 6c   {.  do_test col
1d30: 6c 61 74 65 32 2d 31 2e 32 32 20 7b 0a 20 20 20  late2-1.22 {.   
1d40: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
1d50: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 63   SELECT a FROM c
1d60: 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20  ollate2t1 WHERE 
1d70: 61 20 49 4e 20 28 27 61 61 27 2c 20 27 62 62 27  a IN ('aa', 'bb'
1d80: 29 20 4f 52 44 45 52 20 42 59 20 31 2c 20 6f 69  ) ORDER BY 1, oi
1d90: 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 61 61  d;.    }.  } {aa
1da0: 20 62 62 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63   bb}.  do_test c
1db0: 6f 6c 6c 61 74 65 32 2d 31 2e 32 33 20 7b 0a 20  ollate2-1.23 {. 
1dc0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
1dd0: 20 20 20 53 45 4c 45 43 54 20 62 20 46 52 4f 4d     SELECT b FROM
1de0: 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52   collate2t1 WHER
1df0: 45 20 62 20 49 4e 20 28 27 61 61 27 2c 20 27 62  E b IN ('aa', 'b
1e00: 62 27 29 20 4f 52 44 45 52 20 42 59 20 31 2c 20  b') ORDER BY 1, 
1e10: 6f 69 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  oid;.    }.  } {
1e20: 61 61 20 61 41 20 41 61 20 41 41 20 62 62 20 62  aa aA Aa AA bb b
1e30: 42 20 42 62 20 42 42 7d 0a 20 20 64 6f 5f 74 65  B Bb BB}.  do_te
1e40: 73 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e 32 34  st collate2-1.24
1e50: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
1e60: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 63 20  .      SELECT c 
1e70: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20  FROM collate2t1 
1e80: 57 48 45 52 45 20 63 20 49 4e 20 28 27 61 61 27  WHERE c IN ('aa'
1e90: 2c 20 27 62 62 27 29 20 4f 52 44 45 52 20 42 59  , 'bb') ORDER BY
1ea0: 20 31 2c 20 6f 69 64 3b 0a 20 20 20 20 7d 0a 20   1, oid;.    }. 
1eb0: 20 7d 20 7b 61 61 20 62 62 7d 0a 20 20 64 6f 5f   } {aa bb}.  do_
1ec0: 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 31 2e  test collate2-1.
1ed0: 32 35 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  25 {.    execsql
1ee0: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
1ef0: 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74  a FROM collate2t
1f00: 31 20 0a 20 20 20 20 20 20 20 20 57 48 45 52 45  1 .        WHERE
1f10: 20 61 20 49 4e 20 28 53 45 4c 45 43 54 20 61 20   a IN (SELECT a 
1f20: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20  FROM collate2t1 
1f30: 57 48 45 52 45 20 61 20 49 4e 20 28 27 61 61 27  WHERE a IN ('aa'
1f40: 2c 20 27 62 62 27 29 29 3b 0a 20 20 20 20 7d 0a  , 'bb'));.    }.
1f50: 20 20 7d 20 7b 61 61 20 62 62 7d 0a 20 20 64 6f    } {aa bb}.  do
1f60: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 31  _test collate2-1
1f70: 2e 32 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71  .26 {.    execsq
1f80: 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  l {.      SELECT
1f90: 20 62 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32   b FROM collate2
1fa0: 74 31 20 0a 20 20 20 20 20 20 20 20 57 48 45 52  t1 .        WHER
1fb0: 45 20 62 20 49 4e 20 28 53 45 4c 45 43 54 20 61  E b IN (SELECT a
1fc0: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31   FROM collate2t1
1fd0: 20 57 48 45 52 45 20 61 20 49 4e 20 28 27 61 61   WHERE a IN ('aa
1fe0: 27 2c 20 27 62 62 27 29 29 3b 0a 20 20 20 20 7d  ', 'bb'));.    }
1ff0: 0a 20 20 7d 20 7b 61 61 20 62 62 20 61 41 20 62  .  } {aa bb aA b
2000: 42 20 41 61 20 42 62 20 41 41 20 42 42 7d 0a 20  B Aa Bb AA BB}. 
2010: 20 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65   do_test collate
2020: 32 2d 31 2e 32 37 20 7b 0a 20 20 20 20 65 78 65  2-1.27 {.    exe
2030: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c  csql {.      SEL
2040: 45 43 54 20 63 20 46 52 4f 4d 20 63 6f 6c 6c 61  ECT c FROM colla
2050: 74 65 32 74 31 20 0a 20 20 20 20 20 20 20 20 57  te2t1 .        W
2060: 48 45 52 45 20 63 20 49 4e 20 28 53 45 4c 45 43  HERE c IN (SELEC
2070: 54 20 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65  T a FROM collate
2080: 32 74 31 20 57 48 45 52 45 20 61 20 49 4e 20 28  2t1 WHERE a IN (
2090: 27 61 61 27 2c 20 27 62 62 27 29 29 3b 0a 20 20  'aa', 'bb'));.  
20a0: 20 20 7d 0a 20 20 7d 20 7b 61 61 20 62 62 7d 0a    }.  } {aa bb}.
20b0: 7d 20 3b 23 20 69 66 63 61 70 61 62 6c 65 20 73  } ;# ifcapable s
20c0: 75 62 71 75 65 72 79 0a 0a 64 6f 5f 74 65 73 74  ubquery..do_test
20d0: 20 63 6f 6c 6c 61 74 65 32 2d 32 2e 31 20 7b 0a   collate2-2.1 {.
20e0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
20f0: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 63 6f  SELECT a FROM co
2100: 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 4e  llate2t1 WHERE N
2110: 4f 54 20 61 20 3e 20 27 61 61 27 20 4f 52 44 45  OT a > 'aa' ORDE
2120: 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 41  R BY 1;.  }.} {A
2130: 41 20 41 42 20 41 61 20 41 62 20 42 41 20 42 42  A AB Aa Ab BA BB
2140: 20 42 61 20 42 62 20 61 41 20 61 42 20 61 61 7d   Ba Bb aA aB aa}
2150: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65  .do_test collate
2160: 32 2d 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  2-2.2 {.  execsq
2170: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 62  l {.    SELECT b
2180: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31   FROM collate2t1
2190: 20 57 48 45 52 45 20 4e 4f 54 20 62 20 3e 20 27   WHERE NOT b > '
21a0: 61 61 27 20 4f 52 44 45 52 20 42 59 20 31 2c 20  aa' ORDER BY 1, 
21b0: 6f 69 64 3b 0a 20 20 7d 0a 7d 20 7b 61 61 20 61  oid;.  }.} {aa a
21c0: 41 20 41 61 20 41 41 7d 0a 64 6f 5f 74 65 73 74  A Aa AA}.do_test
21d0: 20 63 6f 6c 6c 61 74 65 32 2d 32 2e 33 20 7b 0a   collate2-2.3 {.
21e0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
21f0: 53 45 4c 45 43 54 20 63 20 46 52 4f 4d 20 63 6f  SELECT c FROM co
2200: 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 4e  llate2t1 WHERE N
2210: 4f 54 20 63 20 3e 20 27 61 61 27 20 4f 52 44 45  OT c > 'aa' ORDE
2220: 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 41  R BY 1;.  }.} {A
2230: 41 20 42 41 20 61 41 20 62 41 20 41 42 20 42 42  A BA aA bA AB BB
2240: 20 61 42 20 62 42 20 41 61 20 42 61 20 61 61 7d   aB bB Aa Ba aa}
2250: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65  .do_test collate
2260: 32 2d 32 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  2-2.4 {.  execsq
2270: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
2280: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31   FROM collate2t1
2290: 20 57 48 45 52 45 20 4e 4f 54 20 61 20 3c 20 27   WHERE NOT a < '
22a0: 61 61 27 20 4f 52 44 45 52 20 42 59 20 31 3b 0a  aa' ORDER BY 1;.
22b0: 20 20 7d 0a 7d 20 7b 61 61 20 61 62 20 62 41 20    }.} {aa ab bA 
22c0: 62 42 20 62 61 20 62 62 7d 0a 64 6f 5f 74 65 73  bB ba bb}.do_tes
22d0: 74 20 63 6f 6c 6c 61 74 65 32 2d 32 2e 35 20 7b  t collate2-2.5 {
22e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
22f0: 20 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 63   SELECT b FROM c
2300: 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20  ollate2t1 WHERE 
2310: 4e 4f 54 20 62 20 3c 20 27 61 61 27 20 4f 52 44  NOT b < 'aa' ORD
2320: 45 52 20 42 59 20 31 2c 20 6f 69 64 3b 0a 20 20  ER BY 1, oid;.  
2330: 7d 0a 7d 20 7b 61 61 20 61 41 20 41 61 20 41 41  }.} {aa aA Aa AA
2340: 20 61 62 20 61 42 20 41 62 20 41 42 20 62 61 20   ab aB Ab AB ba 
2350: 62 41 20 42 61 20 42 41 20 62 62 20 62 42 20 42  bA Ba BA bb bB B
2360: 62 20 42 42 7d 0a 64 6f 5f 74 65 73 74 20 63 6f  b BB}.do_test co
2370: 6c 6c 61 74 65 32 2d 32 2e 36 20 7b 0a 20 20 65  llate2-2.6 {.  e
2380: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
2390: 45 43 54 20 63 20 46 52 4f 4d 20 63 6f 6c 6c 61  ECT c FROM colla
23a0: 74 65 32 74 31 20 57 48 45 52 45 20 4e 4f 54 20  te2t1 WHERE NOT 
23b0: 63 20 3c 20 27 61 61 27 20 4f 52 44 45 52 20 42  c < 'aa' ORDER B
23c0: 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 61 61 20 62  Y 1;.  }.} {aa b
23d0: 61 20 41 62 20 42 62 20 61 62 20 62 62 7d 0a 64  a Ab Bb ab bb}.d
23e0: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d  o_test collate2-
23f0: 32 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.7 {.  execsql 
2400: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  {.    SELECT a F
2410: 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57  ROM collate2t1 W
2420: 48 45 52 45 20 4e 4f 54 20 61 20 3d 20 27 61 61  HERE NOT a = 'aa
2430: 27 3b 0a 20 20 7d 0a 7d 20 7b 61 62 20 62 61 20  ';.  }.} {ab ba 
2440: 62 62 20 61 41 20 61 42 20 62 41 20 62 42 20 41  bb aA aB bA bB A
2450: 61 20 41 62 20 42 61 20 42 62 20 41 41 20 41 42  a Ab Ba Bb AA AB
2460: 20 42 41 20 42 42 7d 0a 64 6f 5f 74 65 73 74 20   BA BB}.do_test 
2470: 63 6f 6c 6c 61 74 65 32 2d 32 2e 38 20 7b 0a 20  collate2-2.8 {. 
2480: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
2490: 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 63 6f 6c  ELECT b FROM col
24a0: 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 4e 4f  late2t1 WHERE NO
24b0: 54 20 62 20 3d 20 27 61 61 27 3b 0a 20 20 7d 0a  T b = 'aa';.  }.
24c0: 7d 20 7b 61 62 20 62 61 20 62 62 20 61 42 20 62  } {ab ba bb aB b
24d0: 41 20 62 42 20 41 62 20 42 61 20 42 62 20 41 42  A bB Ab Ba Bb AB
24e0: 20 42 41 20 42 42 7d 0a 64 6f 5f 74 65 73 74 20   BA BB}.do_test 
24f0: 63 6f 6c 6c 61 74 65 32 2d 32 2e 39 20 7b 0a 20  collate2-2.9 {. 
2500: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
2510: 45 4c 45 43 54 20 63 20 46 52 4f 4d 20 63 6f 6c  ELECT c FROM col
2520: 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 4e 4f  late2t1 WHERE NO
2530: 54 20 63 20 3d 20 27 61 61 27 3b 0a 20 20 7d 0a  T c = 'aa';.  }.
2540: 7d 20 7b 61 62 20 62 61 20 62 62 20 61 41 20 61  } {ab ba bb aA a
2550: 42 20 62 41 20 62 42 20 41 61 20 41 62 20 42 61  B bA bB Aa Ab Ba
2560: 20 42 62 20 41 41 20 41 42 20 42 41 20 42 42 7d   Bb AA AB BA BB}
2570: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65  .do_test collate
2580: 32 2d 32 2e 31 30 20 7b 0a 20 20 65 78 65 63 73  2-2.10 {.  execs
2590: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
25a0: 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74  a FROM collate2t
25b0: 31 20 57 48 45 52 45 20 4e 4f 54 20 61 20 3e 3d  1 WHERE NOT a >=
25c0: 20 27 61 61 27 20 4f 52 44 45 52 20 42 59 20 31   'aa' ORDER BY 1
25d0: 3b 0a 20 20 7d 0a 7d 20 7b 41 41 20 41 42 20 41  ;.  }.} {AA AB A
25e0: 61 20 41 62 20 42 41 20 42 42 20 42 61 20 42 62  a Ab BA BB Ba Bb
25f0: 20 61 41 20 61 42 7d 0a 64 6f 5f 74 65 73 74 20   aA aB}.do_test 
2600: 63 6f 6c 6c 61 74 65 32 2d 32 2e 31 31 20 7b 0a  collate2-2.11 {.
2610: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2620: 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 63 6f  SELECT b FROM co
2630: 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 4e  llate2t1 WHERE N
2640: 4f 54 20 62 20 3e 3d 20 27 61 61 27 20 4f 52 44  OT b >= 'aa' ORD
2650: 45 52 20 42 59 20 31 2c 20 6f 69 64 3b 0a 20 20  ER BY 1, oid;.  
2660: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63  }.} {}.do_test c
2670: 6f 6c 6c 61 74 65 32 2d 32 2e 31 32 20 7b 0a 20  ollate2-2.12 {. 
2680: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
2690: 45 4c 45 43 54 20 63 20 46 52 4f 4d 20 63 6f 6c  ELECT c FROM col
26a0: 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 4e 4f  late2t1 WHERE NO
26b0: 54 20 63 20 3e 3d 20 27 61 61 27 20 4f 52 44 45  T c >= 'aa' ORDE
26c0: 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 41  R BY 1;.  }.} {A
26d0: 41 20 42 41 20 61 41 20 62 41 20 41 42 20 42 42  A BA aA bA AB BB
26e0: 20 61 42 20 62 42 20 41 61 20 42 61 7d 0a 64 6f   aB bB Aa Ba}.do
26f0: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 32  _test collate2-2
2700: 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .13 {.  execsql 
2710: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  {.    SELECT a F
2720: 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57  ROM collate2t1 W
2730: 48 45 52 45 20 4e 4f 54 20 61 20 3c 3d 20 27 61  HERE NOT a <= 'a
2740: 61 27 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20  a' ORDER BY 1;. 
2750: 20 7d 0a 7d 20 7b 61 62 20 62 41 20 62 42 20 62   }.} {ab bA bB b
2760: 61 20 62 62 7d 0a 64 6f 5f 74 65 73 74 20 63 6f  a bb}.do_test co
2770: 6c 6c 61 74 65 32 2d 32 2e 31 34 20 7b 0a 20 20  llate2-2.14 {.  
2780: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
2790: 4c 45 43 54 20 62 20 46 52 4f 4d 20 63 6f 6c 6c  LECT b FROM coll
27a0: 61 74 65 32 74 31 20 57 48 45 52 45 20 4e 4f 54  ate2t1 WHERE NOT
27b0: 20 62 20 3c 3d 20 27 61 61 27 20 4f 52 44 45 52   b <= 'aa' ORDER
27c0: 20 42 59 20 31 2c 20 6f 69 64 3b 0a 20 20 7d 0a   BY 1, oid;.  }.
27d0: 7d 20 7b 61 62 20 61 42 20 41 62 20 41 42 20 62  } {ab aB Ab AB b
27e0: 61 20 62 41 20 42 61 20 42 41 20 62 62 20 62 42  a bA Ba BA bb bB
27f0: 20 42 62 20 42 42 7d 0a 64 6f 5f 74 65 73 74 20   Bb BB}.do_test 
2800: 63 6f 6c 6c 61 74 65 32 2d 32 2e 31 35 20 7b 0a  collate2-2.15 {.
2810: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2820: 53 45 4c 45 43 54 20 63 20 46 52 4f 4d 20 63 6f  SELECT c FROM co
2830: 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 4e  llate2t1 WHERE N
2840: 4f 54 20 63 20 3c 3d 20 27 61 61 27 20 4f 52 44  OT c <= 'aa' ORD
2850: 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b  ER BY 1;.  }.} {
2860: 62 61 20 41 62 20 42 62 20 61 62 20 62 62 7d 0a  ba Ab Bb ab bb}.
2870: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32  do_test collate2
2880: 2d 32 2e 31 36 20 7b 0a 20 20 65 78 65 63 73 71  -2.16 {.  execsq
2890: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
28a0: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31   FROM collate2t1
28b0: 20 57 48 45 52 45 20 61 20 4e 4f 54 20 42 45 54   WHERE a NOT BET
28c0: 57 45 45 4e 20 27 41 61 27 20 41 4e 44 20 27 42  WEEN 'Aa' AND 'B
28d0: 62 27 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20  b' ORDER BY 1;. 
28e0: 20 7d 0a 7d 20 7b 41 41 20 41 42 20 61 41 20 61   }.} {AA AB aA a
28f0: 42 20 61 61 20 61 62 20 62 41 20 62 42 20 62 61  B aa ab bA bB ba
2900: 20 62 62 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c   bb}.do_test col
2910: 6c 61 74 65 32 2d 32 2e 31 37 20 7b 0a 20 20 65  late2-2.17 {.  e
2920: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
2930: 45 43 54 20 62 20 46 52 4f 4d 20 63 6f 6c 6c 61  ECT b FROM colla
2940: 74 65 32 74 31 20 57 48 45 52 45 20 62 20 4e 4f  te2t1 WHERE b NO
2950: 54 20 42 45 54 57 45 45 4e 20 27 41 61 27 20 41  T BETWEEN 'Aa' A
2960: 4e 44 20 27 42 62 27 20 4f 52 44 45 52 20 42 59  ND 'Bb' ORDER BY
2970: 20 31 2c 20 6f 69 64 3b 0a 20 20 7d 0a 7d 20 7b   1, oid;.  }.} {
2980: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  }.do_test collat
2990: 65 32 2d 32 2e 31 38 20 7b 0a 20 20 65 78 65 63  e2-2.18 {.  exec
29a0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
29b0: 20 63 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32   c FROM collate2
29c0: 74 31 20 57 48 45 52 45 20 63 20 4e 4f 54 20 42  t1 WHERE c NOT B
29d0: 45 54 57 45 45 4e 20 27 41 61 27 20 41 4e 44 20  ETWEEN 'Aa' AND 
29e0: 27 42 62 27 20 4f 52 44 45 52 20 42 59 20 31 3b  'Bb' ORDER BY 1;
29f0: 0a 20 20 7d 0a 7d 20 7b 41 41 20 42 41 20 61 41  .  }.} {AA BA aA
2a00: 20 62 41 20 41 42 20 42 42 20 61 42 20 62 42 20   bA AB BB aB bB 
2a10: 61 62 20 62 62 7d 0a 64 6f 5f 74 65 73 74 20 63  ab bb}.do_test c
2a20: 6f 6c 6c 61 74 65 32 2d 32 2e 31 39 20 7b 0a 20  ollate2-2.19 {. 
2a30: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
2a40: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 63 6f 6c  ELECT a FROM col
2a50: 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 4e 4f  late2t1 WHERE NO
2a60: 54 20 43 41 53 45 20 61 20 57 48 45 4e 20 27 61  T CASE a WHEN 'a
2a70: 61 27 20 54 48 45 4e 20 31 20 45 4c 53 45 20 30  a' THEN 1 ELSE 0
2a80: 20 45 4e 44 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20   END;.  }.} {{} 
2a90: 61 62 20 62 61 20 62 62 20 61 41 20 61 42 20 62  ab ba bb aA aB b
2aa0: 41 20 62 42 20 41 61 20 41 62 20 42 61 20 42 62  A bB Aa Ab Ba Bb
2ab0: 20 41 41 20 41 42 20 42 41 20 42 42 7d 0a 64 6f   AA AB BA BB}.do
2ac0: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 32  _test collate2-2
2ad0: 2e 32 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .20 {.  execsql 
2ae0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 62 20 46  {.    SELECT b F
2af0: 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57  ROM collate2t1 W
2b00: 48 45 52 45 20 4e 4f 54 20 43 41 53 45 20 62 20  HERE NOT CASE b 
2b10: 57 48 45 4e 20 27 61 61 27 20 54 48 45 4e 20 31  WHEN 'aa' THEN 1
2b20: 20 45 4c 53 45 20 30 20 45 4e 44 3b 0a 20 20 7d   ELSE 0 END;.  }
2b30: 0a 7d 20 7b 7b 7d 20 61 62 20 62 61 20 62 62 20  .} {{} ab ba bb 
2b40: 61 42 20 62 41 20 62 42 20 41 62 20 42 61 20 42  aB bA bB Ab Ba B
2b50: 62 20 41 42 20 42 41 20 42 42 7d 0a 64 6f 5f 74  b AB BA BB}.do_t
2b60: 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 32 2e 32  est collate2-2.2
2b70: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
2b80: 20 20 20 20 53 45 4c 45 43 54 20 63 20 46 52 4f      SELECT c FRO
2b90: 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48 45  M collate2t1 WHE
2ba0: 52 45 20 4e 4f 54 20 43 41 53 45 20 63 20 57 48  RE NOT CASE c WH
2bb0: 45 4e 20 27 61 61 27 20 54 48 45 4e 20 31 20 45  EN 'aa' THEN 1 E
2bc0: 4c 53 45 20 30 20 45 4e 44 3b 0a 20 20 7d 0a 7d  LSE 0 END;.  }.}
2bd0: 20 7b 7b 7d 20 61 62 20 62 61 20 62 62 20 61 41   {{} ab ba bb aA
2be0: 20 61 42 20 62 41 20 62 42 20 41 61 20 41 62 20   aB bA bB Aa Ab 
2bf0: 42 61 20 42 62 20 41 41 20 41 42 20 42 41 20 42  Ba Bb AA AB BA B
2c00: 42 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 73 75  B}..ifcapable su
2c10: 62 71 75 65 72 79 20 7b 0a 20 20 64 6f 5f 74 65  bquery {.  do_te
2c20: 73 74 20 63 6f 6c 6c 61 74 65 32 2d 32 2e 32 32  st collate2-2.22
2c30: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
2c40: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 61 20  .      SELECT a 
2c50: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20  FROM collate2t1 
2c60: 57 48 45 52 45 20 4e 4f 54 20 61 20 49 4e 20 28  WHERE NOT a IN (
2c70: 27 61 61 27 2c 20 27 62 62 27 29 3b 0a 20 20 20  'aa', 'bb');.   
2c80: 20 7d 0a 20 20 7d 20 7b 61 62 20 62 61 20 61 41   }.  } {ab ba aA
2c90: 20 61 42 20 62 41 20 62 42 20 41 61 20 41 62 20   aB bA bB Aa Ab 
2ca0: 42 61 20 42 62 20 41 41 20 41 42 20 42 41 20 42  Ba Bb AA AB BA B
2cb0: 42 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63 6f 6c  B}.  do_test col
2cc0: 6c 61 74 65 32 2d 32 2e 32 33 20 7b 0a 20 20 20  late2-2.23 {.   
2cd0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
2ce0: 20 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 63   SELECT b FROM c
2cf0: 6f 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20  ollate2t1 WHERE 
2d00: 4e 4f 54 20 62 20 49 4e 20 28 27 61 61 27 2c 20  NOT b IN ('aa', 
2d10: 27 62 62 27 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  'bb');.    }.  }
2d20: 20 7b 61 62 20 62 61 20 61 42 20 62 41 20 41 62   {ab ba aB bA Ab
2d30: 20 42 61 20 41 42 20 42 41 7d 0a 20 20 64 6f 5f   Ba AB BA}.  do_
2d40: 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 32 2e  test collate2-2.
2d50: 32 34 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  24 {.    execsql
2d60: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
2d70: 63 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74  c FROM collate2t
2d80: 31 20 57 48 45 52 45 20 4e 4f 54 20 63 20 49 4e  1 WHERE NOT c IN
2d90: 20 28 27 61 61 27 2c 20 27 62 62 27 29 3b 0a 20   ('aa', 'bb');. 
2da0: 20 20 20 7d 0a 20 20 7d 20 7b 61 62 20 62 61 20     }.  } {ab ba 
2db0: 61 41 20 61 42 20 62 41 20 62 42 20 41 61 20 41  aA aB bA bB Aa A
2dc0: 62 20 42 61 20 42 62 20 41 41 20 41 42 20 42 41  b Ba Bb AA AB BA
2dd0: 20 42 42 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63   BB}.  do_test c
2de0: 6f 6c 6c 61 74 65 32 2d 32 2e 32 35 20 7b 0a 20  ollate2-2.25 {. 
2df0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
2e00: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
2e10: 20 63 6f 6c 6c 61 74 65 32 74 31 20 0a 20 20 20   collate2t1 .   
2e20: 20 20 20 20 20 57 48 45 52 45 20 4e 4f 54 20 61       WHERE NOT a
2e30: 20 49 4e 20 28 53 45 4c 45 43 54 20 61 20 46 52   IN (SELECT a FR
2e40: 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48  OM collate2t1 WH
2e50: 45 52 45 20 61 20 49 4e 20 28 27 61 61 27 2c 20  ERE a IN ('aa', 
2e60: 27 62 62 27 29 29 3b 0a 20 20 20 20 7d 0a 20 20  'bb'));.    }.  
2e70: 7d 20 7b 61 62 20 62 61 20 61 41 20 61 42 20 62  } {ab ba aA aB b
2e80: 41 20 62 42 20 41 61 20 41 62 20 42 61 20 42 62  A bB Aa Ab Ba Bb
2e90: 20 41 41 20 41 42 20 42 41 20 42 42 7d 0a 20 20   AA AB BA BB}.  
2ea0: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32  do_test collate2
2eb0: 2d 32 2e 32 36 20 7b 0a 20 20 20 20 65 78 65 63  -2.26 {.    exec
2ec0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  sql {.      SELE
2ed0: 43 54 20 62 20 46 52 4f 4d 20 63 6f 6c 6c 61 74  CT b FROM collat
2ee0: 65 32 74 31 20 0a 20 20 20 20 20 20 20 20 57 48  e2t1 .        WH
2ef0: 45 52 45 20 4e 4f 54 20 62 20 49 4e 20 28 53 45  ERE NOT b IN (SE
2f00: 4c 45 43 54 20 61 20 46 52 4f 4d 20 63 6f 6c 6c  LECT a FROM coll
2f10: 61 74 65 32 74 31 20 57 48 45 52 45 20 61 20 49  ate2t1 WHERE a I
2f20: 4e 20 28 27 61 61 27 2c 20 27 62 62 27 29 29 3b  N ('aa', 'bb'));
2f30: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 61 62 20 62  .    }.  } {ab b
2f40: 61 20 61 42 20 62 41 20 41 62 20 42 61 20 41 42  a aB bA Ab Ba AB
2f50: 20 42 41 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63   BA}.  do_test c
2f60: 6f 6c 6c 61 74 65 32 2d 32 2e 32 37 20 7b 0a 20  ollate2-2.27 {. 
2f70: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
2f80: 20 20 20 53 45 4c 45 43 54 20 63 20 46 52 4f 4d     SELECT c FROM
2f90: 20 63 6f 6c 6c 61 74 65 32 74 31 20 0a 20 20 20   collate2t1 .   
2fa0: 20 20 20 20 20 57 48 45 52 45 20 4e 4f 54 20 63       WHERE NOT c
2fb0: 20 49 4e 20 28 53 45 4c 45 43 54 20 61 20 46 52   IN (SELECT a FR
2fc0: 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57 48  OM collate2t1 WH
2fd0: 45 52 45 20 61 20 49 4e 20 28 27 61 61 27 2c 20  ERE a IN ('aa', 
2fe0: 27 62 62 27 29 29 3b 0a 20 20 20 20 7d 0a 20 20  'bb'));.    }.  
2ff0: 7d 20 7b 61 62 20 62 61 20 61 41 20 61 42 20 62  } {ab ba aA aB b
3000: 41 20 62 42 20 41 61 20 41 62 20 42 61 20 42 62  A bB Aa Ab Ba Bb
3010: 20 41 41 20 41 42 20 42 41 20 42 42 7d 0a 7d 0a   AA AB BA BB}.}.
3020: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65  .do_test collate
3030: 32 2d 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  2-3.1 {.  execsq
3040: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
3050: 20 3e 20 27 61 61 27 20 46 52 4f 4d 20 63 6f 6c   > 'aa' FROM col
3060: 6c 61 74 65 32 74 31 3b 0a 20 20 7d 0a 7d 20 7b  late2t1;.  }.} {
3070: 7b 7d 20 30 20 31 20 31 20 31 20 30 20 30 20 31  {} 0 1 1 1 0 0 1
3080: 20 31 20 30 20 30 20 30 20 30 20 30 20 30 20 30   1 0 0 0 0 0 0 0
3090: 20 30 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c   0}.do_test coll
30a0: 61 74 65 32 2d 33 2e 32 20 7b 0a 20 20 65 78 65  ate2-3.2 {.  exe
30b0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
30c0: 54 20 62 20 3e 20 27 61 61 27 20 46 52 4f 4d 20  T b > 'aa' FROM 
30d0: 63 6f 6c 6c 61 74 65 32 74 31 3b 0a 20 20 7d 0a  collate2t1;.  }.
30e0: 7d 20 7b 7b 7d 20 30 20 31 20 31 20 31 20 30 20  } {{} 0 1 1 1 0 
30f0: 31 20 31 20 31 20 30 20 31 20 31 20 31 20 30 20  1 1 1 0 1 1 1 0 
3100: 31 20 31 20 31 7d 0a 64 6f 5f 74 65 73 74 20 63  1 1 1}.do_test c
3110: 6f 6c 6c 61 74 65 32 2d 33 2e 33 20 7b 0a 20 20  ollate2-3.3 {.  
3120: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
3130: 4c 45 43 54 20 63 20 3e 20 27 61 61 27 20 46 52  LECT c > 'aa' FR
3140: 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 3b 0a 20  OM collate2t1;. 
3150: 20 7d 0a 7d 20 7b 7b 7d 20 30 20 31 20 31 20 31   }.} {{} 0 1 1 1
3160: 20 30 20 30 20 30 20 30 20 30 20 31 20 30 20 31   0 0 0 0 0 1 0 1
3170: 20 30 20 30 20 30 20 30 7d 0a 64 6f 5f 74 65 73   0 0 0 0}.do_tes
3180: 74 20 63 6f 6c 6c 61 74 65 32 2d 33 2e 34 20 7b  t collate2-3.4 {
3190: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
31a0: 20 53 45 4c 45 43 54 20 61 20 3c 20 27 61 61 27   SELECT a < 'aa'
31b0: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31   FROM collate2t1
31c0: 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 30 20 30 20  ;.  }.} {{} 0 0 
31d0: 30 20 30 20 31 20 31 20 30 20 30 20 31 20 31 20  0 0 1 1 0 0 1 1 
31e0: 31 20 31 20 31 20 31 20 31 20 31 7d 0a 64 6f 5f  1 1 1 1 1 1}.do_
31f0: 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 33 2e  test collate2-3.
3200: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  5 {.  execsql {.
3210: 20 20 20 20 53 45 4c 45 43 54 20 62 20 3c 20 27      SELECT b < '
3220: 61 61 27 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65  aa' FROM collate
3230: 32 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 30  2t1;.  }.} {{} 0
3240: 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30   0 0 0 0 0 0 0 0
3250: 20 30 20 30 20 30 20 30 20 30 20 30 20 30 7d 0a   0 0 0 0 0 0 0}.
3260: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32  do_test collate2
3270: 2d 33 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  -3.6 {.  execsql
3280: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 20   {.    SELECT c 
3290: 3c 20 27 61 61 27 20 46 52 4f 4d 20 63 6f 6c 6c  < 'aa' FROM coll
32a0: 61 74 65 32 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7b  ate2t1;.  }.} {{
32b0: 7d 20 30 20 30 20 30 20 30 20 31 20 31 20 31 20  } 0 0 0 0 1 1 1 
32c0: 31 20 31 20 30 20 31 20 30 20 31 20 31 20 31 20  1 1 0 1 0 1 1 1 
32d0: 31 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  1}.do_test colla
32e0: 74 65 32 2d 33 2e 37 20 7b 0a 20 20 65 78 65 63  te2-3.7 {.  exec
32f0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
3300: 20 61 20 3d 20 27 61 61 27 20 46 52 4f 4d 20 63   a = 'aa' FROM c
3310: 6f 6c 6c 61 74 65 32 74 31 3b 0a 20 20 7d 0a 7d  ollate2t1;.  }.}
3320: 20 7b 7b 7d 20 31 20 30 20 30 20 30 20 30 20 30   {{} 1 0 0 0 0 0
3330: 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30   0 0 0 0 0 0 0 0
3340: 20 30 20 30 7d 0a 64 6f 5f 74 65 73 74 20 63 6f   0 0}.do_test co
3350: 6c 6c 61 74 65 32 2d 33 2e 38 20 7b 0a 20 20 65  llate2-3.8 {.  e
3360: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
3370: 45 43 54 20 62 20 3d 20 27 61 61 27 20 46 52 4f  ECT b = 'aa' FRO
3380: 4d 20 63 6f 6c 6c 61 74 65 32 74 31 3b 0a 20 20  M collate2t1;.  
3390: 7d 0a 7d 20 7b 7b 7d 20 31 20 30 20 30 20 30 20  }.} {{} 1 0 0 0 
33a0: 31 20 30 20 30 20 30 20 31 20 30 20 30 20 30 20  1 0 0 0 1 0 0 0 
33b0: 31 20 30 20 30 20 30 7d 0a 64 6f 5f 74 65 73 74  1 0 0 0}.do_test
33c0: 20 63 6f 6c 6c 61 74 65 32 2d 33 2e 39 20 7b 0a   collate2-3.9 {.
33d0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
33e0: 53 45 4c 45 43 54 20 63 20 3d 20 27 61 61 27 20  SELECT c = 'aa' 
33f0: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 3b  FROM collate2t1;
3400: 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 31 20 30 20 30  .  }.} {{} 1 0 0
3410: 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30   0 0 0 0 0 0 0 0
3420: 20 30 20 30 20 30 20 30 20 30 7d 0a 64 6f 5f 74   0 0 0 0 0}.do_t
3430: 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 33 2e 31  est collate2-3.1
3440: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  0 {.  execsql {.
3450: 20 20 20 20 53 45 4c 45 43 54 20 61 20 3c 3d 20      SELECT a <= 
3460: 27 61 61 27 20 46 52 4f 4d 20 63 6f 6c 6c 61 74  'aa' FROM collat
3470: 65 32 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20  e2t1;.  }.} {{} 
3480: 31 20 30 20 30 20 30 20 31 20 31 20 30 20 30 20  1 0 0 0 1 1 0 0 
3490: 31 20 31 20 31 20 31 20 31 20 31 20 31 20 31 7d  1 1 1 1 1 1 1 1}
34a0: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65  .do_test collate
34b0: 32 2d 33 2e 31 31 20 7b 0a 20 20 65 78 65 63 73  2-3.11 {.  execs
34c0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
34d0: 62 20 3c 3d 20 27 61 61 27 20 46 52 4f 4d 20 63  b <= 'aa' FROM c
34e0: 6f 6c 6c 61 74 65 32 74 31 3b 0a 20 20 7d 0a 7d  ollate2t1;.  }.}
34f0: 20 7b 7b 7d 20 31 20 30 20 30 20 30 20 31 20 30   {{} 1 0 0 0 1 0
3500: 20 30 20 30 20 31 20 30 20 30 20 30 20 31 20 30   0 0 1 0 0 0 1 0
3510: 20 30 20 30 7d 0a 64 6f 5f 74 65 73 74 20 63 6f   0 0}.do_test co
3520: 6c 6c 61 74 65 32 2d 33 2e 31 32 20 7b 0a 20 20  llate2-3.12 {.  
3530: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
3540: 4c 45 43 54 20 63 20 3c 3d 20 27 61 61 27 20 46  LECT c <= 'aa' F
3550: 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 3b 0a  ROM collate2t1;.
3560: 20 20 7d 0a 7d 20 7b 7b 7d 20 31 20 30 20 30 20    }.} {{} 1 0 0 
3570: 30 20 31 20 31 20 31 20 31 20 31 20 30 20 31 20  0 1 1 1 1 1 0 1 
3580: 30 20 31 20 31 20 31 20 31 7d 0a 64 6f 5f 74 65  0 1 1 1 1}.do_te
3590: 73 74 20 63 6f 6c 6c 61 74 65 32 2d 33 2e 31 33  st collate2-3.13
35a0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
35b0: 20 20 20 53 45 4c 45 43 54 20 61 20 3e 3d 20 27     SELECT a >= '
35c0: 61 61 27 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65  aa' FROM collate
35d0: 32 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 31  2t1;.  }.} {{} 1
35e0: 20 31 20 31 20 31 20 30 20 30 20 31 20 31 20 30   1 1 1 0 0 1 1 0
35f0: 20 30 20 30 20 30 20 30 20 30 20 30 20 30 7d 0a   0 0 0 0 0 0 0}.
3600: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32  do_test collate2
3610: 2d 33 2e 31 34 20 7b 0a 20 20 65 78 65 63 73 71  -3.14 {.  execsq
3620: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 62  l {.    SELECT b
3630: 20 3e 3d 20 27 61 61 27 20 46 52 4f 4d 20 63 6f   >= 'aa' FROM co
3640: 6c 6c 61 74 65 32 74 31 3b 0a 20 20 7d 0a 7d 20  llate2t1;.  }.} 
3650: 7b 7b 7d 20 31 20 31 20 31 20 31 20 31 20 31 20  {{} 1 1 1 1 1 1 
3660: 31 20 31 20 31 20 31 20 31 20 31 20 31 20 31 20  1 1 1 1 1 1 1 1 
3670: 31 20 31 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c  1 1}.do_test col
3680: 6c 61 74 65 32 2d 33 2e 31 35 20 7b 0a 20 20 65  late2-3.15 {.  e
3690: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
36a0: 45 43 54 20 63 20 3e 3d 20 27 61 61 27 20 46 52  ECT c >= 'aa' FR
36b0: 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 3b 0a 20  OM collate2t1;. 
36c0: 20 7d 0a 7d 20 7b 7b 7d 20 31 20 31 20 31 20 31   }.} {{} 1 1 1 1
36d0: 20 30 20 30 20 30 20 30 20 30 20 31 20 30 20 31   0 0 0 0 0 1 0 1
36e0: 20 30 20 30 20 30 20 30 7d 0a 64 6f 5f 74 65 73   0 0 0 0}.do_tes
36f0: 74 20 63 6f 6c 6c 61 74 65 32 2d 33 2e 31 36 20  t collate2-3.16 
3700: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3710: 20 20 53 45 4c 45 43 54 20 61 20 42 45 54 57 45    SELECT a BETWE
3720: 45 4e 20 27 41 61 27 20 41 4e 44 20 27 42 62 27  EN 'Aa' AND 'Bb'
3730: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31   FROM collate2t1
3740: 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 30 20 30 20  ;.  }.} {{} 0 0 
3750: 30 20 30 20 30 20 30 20 30 20 30 20 31 20 31 20  0 0 0 0 0 0 1 1 
3760: 31 20 31 20 30 20 30 20 31 20 31 7d 0a 64 6f 5f  1 1 0 0 1 1}.do_
3770: 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 33 2e  test collate2-3.
3780: 31 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  17 {.  execsql {
3790: 0a 20 20 20 20 53 45 4c 45 43 54 20 62 20 42 45  .    SELECT b BE
37a0: 54 57 45 45 4e 20 27 41 61 27 20 41 4e 44 20 27  TWEEN 'Aa' AND '
37b0: 42 62 27 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65  Bb' FROM collate
37c0: 32 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 31  2t1;.  }.} {{} 1
37d0: 20 31 20 31 20 31 20 31 20 31 20 31 20 31 20 31   1 1 1 1 1 1 1 1
37e0: 20 31 20 31 20 31 20 31 20 31 20 31 20 31 7d 0a   1 1 1 1 1 1 1}.
37f0: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32  do_test collate2
3800: 2d 33 2e 31 38 20 7b 0a 20 20 65 78 65 63 73 71  -3.18 {.  execsq
3810: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63  l {.    SELECT c
3820: 20 42 45 54 57 45 45 4e 20 27 41 61 27 20 41 4e   BETWEEN 'Aa' AN
3830: 44 20 27 42 62 27 20 46 52 4f 4d 20 63 6f 6c 6c  D 'Bb' FROM coll
3840: 61 74 65 32 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7b  ate2t1;.  }.} {{
3850: 7d 20 31 20 30 20 31 20 30 20 30 20 30 20 30 20  } 1 0 1 0 0 0 0 
3860: 30 20 31 20 31 20 31 20 31 20 30 20 30 20 30 20  0 1 1 1 1 0 0 0 
3870: 30 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  0}.do_test colla
3880: 74 65 32 2d 33 2e 31 39 20 7b 0a 20 20 65 78 65  te2-3.19 {.  exe
3890: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
38a0: 54 20 43 41 53 45 20 61 20 57 48 45 4e 20 27 61  T CASE a WHEN 'a
38b0: 61 27 20 54 48 45 4e 20 31 20 45 4c 53 45 20 30  a' THEN 1 ELSE 0
38c0: 20 45 4e 44 20 46 52 4f 4d 20 63 6f 6c 6c 61 74   END FROM collat
38d0: 65 32 74 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 31  e2t1;.  }.} {0 1
38e0: 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30   0 0 0 0 0 0 0 0
38f0: 20 30 20 30 20 30 20 30 20 30 20 30 20 30 7d 0a   0 0 0 0 0 0 0}.
3900: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32  do_test collate2
3910: 2d 33 2e 32 30 20 7b 0a 20 20 65 78 65 63 73 71  -3.20 {.  execsq
3920: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 43  l {.    SELECT C
3930: 41 53 45 20 62 20 57 48 45 4e 20 27 61 61 27 20  ASE b WHEN 'aa' 
3940: 54 48 45 4e 20 31 20 45 4c 53 45 20 30 20 45 4e  THEN 1 ELSE 0 EN
3950: 44 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74  D FROM collate2t
3960: 31 3b 0a 20 20 7d 0a 7d 20 7b 30 20 31 20 30 20  1;.  }.} {0 1 0 
3970: 30 20 30 20 31 20 30 20 30 20 30 20 31 20 30 20  0 0 1 0 0 0 1 0 
3980: 30 20 30 20 31 20 30 20 30 20 30 7d 0a 64 6f 5f  0 0 1 0 0 0}.do_
3990: 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 33 2e  test collate2-3.
39a0: 32 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  21 {.  execsql {
39b0: 0a 20 20 20 20 53 45 4c 45 43 54 20 43 41 53 45  .    SELECT CASE
39c0: 20 63 20 57 48 45 4e 20 27 61 61 27 20 54 48 45   c WHEN 'aa' THE
39d0: 4e 20 31 20 45 4c 53 45 20 30 20 45 4e 44 20 46  N 1 ELSE 0 END F
39e0: 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 3b 0a  ROM collate2t1;.
39f0: 20 20 7d 0a 7d 20 7b 30 20 31 20 30 20 30 20 30    }.} {0 1 0 0 0
3a00: 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30   0 0 0 0 0 0 0 0
3a10: 20 30 20 30 20 30 20 30 7d 0a 0a 69 66 63 61 70   0 0 0 0}..ifcap
3a20: 61 62 6c 65 20 73 75 62 71 75 65 72 79 20 7b 0a  able subquery {.
3a30: 20 20 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74    do_test collat
3a40: 65 32 2d 33 2e 32 32 20 7b 0a 20 20 20 20 65 78  e2-3.22 {.    ex
3a50: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45  ecsql {.      SE
3a60: 4c 45 43 54 20 61 20 49 4e 20 28 27 61 61 27 2c  LECT a IN ('aa',
3a70: 20 27 62 62 27 29 20 46 52 4f 4d 20 63 6f 6c 6c   'bb') FROM coll
3a80: 61 74 65 32 74 31 3b 0a 20 20 20 20 7d 0a 20 20  ate2t1;.    }.  
3a90: 7d 20 7b 7b 7d 20 31 20 30 20 30 20 31 20 30 20  } {{} 1 0 0 1 0 
3aa0: 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20  0 0 0 0 0 0 0 0 
3ab0: 30 20 30 20 30 7d 0a 20 20 64 6f 5f 74 65 73 74  0 0 0}.  do_test
3ac0: 20 63 6f 6c 6c 61 74 65 32 2d 33 2e 32 33 20 7b   collate2-3.23 {
3ad0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
3ae0: 20 20 20 20 20 53 45 4c 45 43 54 20 62 20 49 4e       SELECT b IN
3af0: 20 28 27 61 61 27 2c 20 27 62 62 27 29 20 46 52   ('aa', 'bb') FR
3b00: 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 3b 0a 20  OM collate2t1;. 
3b10: 20 20 20 7d 0a 20 20 7d 20 7b 7b 7d 20 31 20 30     }.  } {{} 1 0
3b20: 20 30 20 31 20 31 20 30 20 30 20 31 20 31 20 30   0 1 1 0 0 1 1 0
3b30: 20 30 20 31 20 31 20 30 20 30 20 31 7d 0a 20 20   0 1 1 0 0 1}.  
3b40: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32  do_test collate2
3b50: 2d 33 2e 32 34 20 7b 0a 20 20 20 20 65 78 65 63  -3.24 {.    exec
3b60: 73 71 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  sql {.      SELE
3b70: 43 54 20 63 20 49 4e 20 28 27 61 61 27 2c 20 27  CT c IN ('aa', '
3b80: 62 62 27 29 20 46 52 4f 4d 20 63 6f 6c 6c 61 74  bb') FROM collat
3b90: 65 32 74 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  e2t1;.    }.  } 
3ba0: 7b 7b 7d 20 31 20 30 20 30 20 31 20 30 20 30 20  {{} 1 0 0 1 0 0 
3bb0: 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20  0 0 0 0 0 0 0 0 
3bc0: 30 20 30 7d 0a 20 20 64 6f 5f 74 65 73 74 20 63  0 0}.  do_test c
3bd0: 6f 6c 6c 61 74 65 32 2d 33 2e 32 35 20 7b 0a 20  ollate2-3.25 {. 
3be0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
3bf0: 20 20 20 53 45 4c 45 43 54 20 61 20 49 4e 20 28     SELECT a IN (
3c00: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 63 6f  SELECT a FROM co
3c10: 6c 6c 61 74 65 32 74 31 20 57 48 45 52 45 20 61  llate2t1 WHERE a
3c20: 20 49 4e 20 28 27 61 61 27 2c 20 27 62 62 27 29   IN ('aa', 'bb')
3c30: 29 20 0a 20 20 20 20 20 20 20 20 46 52 4f 4d 20  ) .        FROM 
3c40: 63 6f 6c 6c 61 74 65 32 74 31 3b 0a 20 20 20 20  collate2t1;.    
3c50: 7d 0a 20 20 7d 20 7b 7b 7d 20 31 20 30 20 30 20  }.  } {{} 1 0 0 
3c60: 31 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20  1 0 0 0 0 0 0 0 
3c70: 30 20 30 20 30 20 30 20 30 7d 0a 20 20 64 6f 5f  0 0 0 0 0}.  do_
3c80: 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 33 2e  test collate2-3.
3c90: 32 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  26 {.    execsql
3ca0: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
3cb0: 62 20 49 4e 20 28 53 45 4c 45 43 54 20 61 20 46  b IN (SELECT a F
3cc0: 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 20 57  ROM collate2t1 W
3cd0: 48 45 52 45 20 61 20 49 4e 20 28 27 61 61 27 2c  HERE a IN ('aa',
3ce0: 20 27 62 62 27 29 29 20 0a 20 20 20 20 20 20 20   'bb')) .       
3cf0: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31   FROM collate2t1
3d00: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7b 7d 20  ;.    }.  } {{} 
3d10: 31 20 30 20 30 20 31 20 31 20 30 20 30 20 31 20  1 0 0 1 1 0 0 1 
3d20: 31 20 30 20 30 20 31 20 31 20 30 20 30 20 31 7d  1 0 0 1 1 0 0 1}
3d30: 0a 20 20 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  .  do_test colla
3d40: 74 65 32 2d 33 2e 32 37 20 7b 0a 20 20 20 20 65  te2-3.27 {.    e
3d50: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 53  xecsql {.      S
3d60: 45 4c 45 43 54 20 63 20 49 4e 20 28 53 45 4c 45  ELECT c IN (SELE
3d70: 43 54 20 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74  CT a FROM collat
3d80: 65 32 74 31 20 57 48 45 52 45 20 61 20 49 4e 20  e2t1 WHERE a IN 
3d90: 28 27 61 61 27 2c 20 27 62 62 27 29 29 20 0a 20  ('aa', 'bb')) . 
3da0: 20 20 20 20 20 20 20 46 52 4f 4d 20 63 6f 6c 6c         FROM coll
3db0: 61 74 65 32 74 31 3b 0a 20 20 20 20 7d 0a 20 20  ate2t1;.    }.  
3dc0: 7d 20 7b 7b 7d 20 31 20 30 20 30 20 31 20 30 20  } {{} 1 0 0 1 0 
3dd0: 30 20 30 20 30 20 30 20 30 20 30 20 30 20 30 20  0 0 0 0 0 0 0 0 
3de0: 30 20 30 20 30 7d 0a 7d 0a 0a 64 6f 5f 74 65 73  0 0 0}.}..do_tes
3df0: 74 20 63 6f 6c 6c 61 74 65 32 2d 34 2e 30 20 7b  t collate2-4.0 {
3e00: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3e10: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f   CREATE TABLE co
3e20: 6c 6c 61 74 65 32 74 32 28 62 20 43 4f 4c 4c 41  llate2t2(b COLLA
3e30: 54 45 20 62 69 6e 61 72 79 29 3b 0a 20 20 20 20  TE binary);.    
3e40: 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6c  CREATE TABLE col
3e50: 6c 61 74 65 32 74 33 28 62 20 74 65 78 74 29 3b  late2t3(b text);
3e60: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
3e70: 20 63 6f 6c 6c 61 74 65 32 74 32 20 56 41 4c 55   collate2t2 VALU
3e80: 45 53 28 27 61 61 27 29 3b 0a 20 20 20 20 49 4e  ES('aa');.    IN
3e90: 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74  SERT INTO collat
3ea0: 65 32 74 33 20 56 41 4c 55 45 53 28 27 61 61 27  e2t3 VALUES('aa'
3eb0: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 54  );.  }.} {}..# T
3ec0: 65 73 74 20 74 68 61 74 20 77 68 65 6e 20 62 6f  est that when bo
3ed0: 74 68 20 73 69 64 65 73 20 6f 66 20 61 20 62 69  th sides of a bi
3ee0: 6e 61 72 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20  nary comparison 
3ef0: 6f 70 65 72 61 74 6f 72 20 68 61 76 65 0a 23 20  operator have.# 
3f00: 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f  default collatio
3f10: 6e 20 74 79 70 65 73 2c 20 74 68 65 20 63 6f 6c  n types, the col
3f20: 6c 61 74 65 20 74 79 70 65 20 66 6f 72 20 74 68  late type for th
3f30: 65 20 6c 65 66 74 6d 6f 73 74 20 74 65 72 6d 0a  e leftmost term.
3f40: 23 20 69 73 20 75 73 65 64 2e 0a 64 6f 5f 74 65  # is used..do_te
3f50: 73 74 20 63 6f 6c 6c 61 74 65 32 2d 34 2e 31 20  st collate2-4.1 
3f60: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
3f70: 20 20 53 45 4c 45 43 54 20 63 6f 6c 6c 61 74 65    SELECT collate
3f80: 32 74 31 2e 61 20 46 52 4f 4d 20 63 6f 6c 6c 61  2t1.a FROM colla
3f90: 74 65 32 74 31 2c 20 63 6f 6c 6c 61 74 65 32 74  te2t1, collate2t
3fa0: 32 20 0a 20 20 20 20 20 20 57 48 45 52 45 20 63  2 .      WHERE c
3fb0: 6f 6c 6c 61 74 65 32 74 31 2e 62 20 3d 20 63 6f  ollate2t1.b = co
3fc0: 6c 6c 61 74 65 32 74 32 2e 62 3b 0a 20 20 7d 0a  llate2t2.b;.  }.
3fd0: 7d 20 7b 61 61 20 61 41 20 41 61 20 41 41 7d 0a  } {aa aA Aa AA}.
3fe0: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32  do_test collate2
3ff0: 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.2 {.  execsql
4000: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 6f   {.    SELECT co
4010: 6c 6c 61 74 65 32 74 31 2e 61 20 46 52 4f 4d 20  llate2t1.a FROM 
4020: 63 6f 6c 6c 61 74 65 32 74 31 2c 20 63 6f 6c 6c  collate2t1, coll
4030: 61 74 65 32 74 32 20 0a 20 20 20 20 20 20 57 48  ate2t2 .      WH
4040: 45 52 45 20 63 6f 6c 6c 61 74 65 32 74 32 2e 62  ERE collate2t2.b
4050: 20 3d 20 63 6f 6c 6c 61 74 65 32 74 31 2e 62 3b   = collate2t1.b;
4060: 0a 20 20 7d 0a 7d 20 7b 61 61 7d 0a 0a 23 20 54  .  }.} {aa}..# T
4070: 65 73 74 20 74 68 61 74 20 77 68 65 6e 20 6f 6e  est that when on
4080: 65 20 73 69 64 65 20 68 61 73 20 61 20 64 65 66  e side has a def
4090: 61 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 74  ault collation t
40a0: 79 70 65 20 61 6e 64 20 74 68 65 20 6f 74 68 65  ype and the othe
40b0: 72 0a 23 20 64 6f 65 73 20 6e 6f 74 2c 20 74 68  r.# does not, th
40c0: 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 74 79 70 65  e collation type
40d0: 20 69 73 20 75 73 65 64 2e 0a 64 6f 5f 74 65 73   is used..do_tes
40e0: 74 20 63 6f 6c 6c 61 74 65 32 2d 34 2e 33 20 7b  t collate2-4.3 {
40f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
4100: 20 53 45 4c 45 43 54 20 63 6f 6c 6c 61 74 65 32   SELECT collate2
4110: 74 31 2e 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74  t1.a FROM collat
4120: 65 32 74 31 2c 20 63 6f 6c 6c 61 74 65 32 74 33  e2t1, collate2t3
4130: 20 0a 20 20 20 20 20 20 57 48 45 52 45 20 63 6f   .      WHERE co
4140: 6c 6c 61 74 65 32 74 31 2e 62 20 3d 20 63 6f 6c  llate2t1.b = col
4150: 6c 61 74 65 32 74 33 2e 62 7c 7c 27 27 3b 0a 20  late2t3.b||'';. 
4160: 20 7d 0a 7d 20 7b 61 61 20 61 41 20 41 61 20 41   }.} {aa aA Aa A
4170: 41 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  A}.do_test colla
4180: 74 65 32 2d 34 2e 34 20 7b 0a 20 20 65 78 65 63  te2-4.4 {.  exec
4190: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
41a0: 20 63 6f 6c 6c 61 74 65 32 74 31 2e 61 20 46 52   collate2t1.a FR
41b0: 4f 4d 20 63 6f 6c 6c 61 74 65 32 74 31 2c 20 63  OM collate2t1, c
41c0: 6f 6c 6c 61 74 65 32 74 33 20 0a 20 20 20 20 20  ollate2t3 .     
41d0: 20 57 48 45 52 45 20 63 6f 6c 6c 61 74 65 32 74   WHERE collate2t
41e0: 33 2e 62 7c 7c 27 27 20 3d 20 63 6f 6c 6c 61 74  3.b||'' = collat
41f0: 65 32 74 31 2e 62 3b 0a 20 20 7d 0a 7d 20 7b 61  e2t1.b;.  }.} {a
4200: 61 20 61 41 20 41 61 20 41 41 7d 0a 0a 64 6f 5f  a aA Aa AA}..do_
4210: 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 34 2e  test collate2-4.
4220: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  5 {.  execsql {.
4230: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 63      DROP TABLE c
4240: 6f 6c 6c 61 74 65 32 74 33 3b 0a 20 20 7d 0a 7d  ollate2t3;.  }.}
4250: 20 7b 7d 0a 0a 23 0a 23 20 54 65 73 74 20 74 68   {}..#.# Test th
4260: 61 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 63  at the default c
4270: 6f 6c 6c 61 74 69 6f 6e 20 74 79 70 65 73 20 61  ollation types a
4280: 72 65 20 75 73 65 64 20 77 68 65 6e 20 74 68 65  re used when the
4290: 20 4a 4f 49 4e 20 73 79 6e 74 61 78 0a 23 20 69   JOIN syntax.# i
42a0: 73 20 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20  s used in place 
42b0: 6f 66 20 61 20 57 48 45 52 45 20 63 6c 61 75 73  of a WHERE claus
42c0: 65 2e 0a 23 0a 23 20 53 51 4c 69 74 65 20 74 72  e..#.# SQLite tr
42d0: 61 6e 73 66 6f 72 6d 73 20 74 68 65 20 4a 4f 49  ansforms the JOI
42e0: 4e 20 73 79 6e 74 61 78 20 69 6e 74 6f 20 61 20  N syntax into a 
42f0: 57 48 45 52 45 20 63 6c 61 75 73 65 20 69 6e 74  WHERE clause int
4300: 65 72 6e 61 6c 6c 79 2c 20 73 6f 0a 23 20 74 68  ernally, so.# th
4310: 65 20 66 6f 63 75 73 20 6f 66 20 74 68 65 73 65  e focus of these
4320: 20 74 65 73 74 73 20 69 73 20 74 6f 20 65 6e 73   tests is to ens
4330: 75 72 65 20 74 68 61 74 20 74 68 65 20 74 61 62  ure that the tab
4340: 6c 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 2d 68  le on the left-h
4350: 61 6e 64 2d 73 69 64 65 0a 23 20 6f 66 20 74 68  and-side.# of th
4360: 65 20 6a 6f 69 6e 20 64 65 74 65 72 6d 69 6e 65  e join determine
4370: 73 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  s the collation 
4380: 74 79 70 65 20 75 73 65 64 2e 20 0a 23 0a 64 6f  type used. .#.do
4390: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32 2d 35  _test collate2-5
43a0: 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .0 {.  execsql {
43b0: 0a 20 20 20 20 53 45 4c 45 43 54 20 63 6f 6c 6c  .    SELECT coll
43c0: 61 74 65 32 74 31 2e 62 20 46 52 4f 4d 20 63 6f  ate2t1.b FROM co
43d0: 6c 6c 61 74 65 32 74 31 20 4a 4f 49 4e 20 63 6f  llate2t1 JOIN co
43e0: 6c 6c 61 74 65 32 74 32 20 55 53 49 4e 47 20 28  llate2t2 USING (
43f0: 62 29 3b 0a 20 20 7d 0a 7d 20 7b 61 61 20 61 41  b);.  }.} {aa aA
4400: 20 41 61 20 41 41 7d 0a 64 6f 5f 74 65 73 74 20   Aa AA}.do_test 
4410: 63 6f 6c 6c 61 74 65 32 2d 35 2e 31 20 7b 0a 20  collate2-5.1 {. 
4420: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
4430: 45 4c 45 43 54 20 63 6f 6c 6c 61 74 65 32 74 31  ELECT collate2t1
4440: 2e 62 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 32  .b FROM collate2
4450: 74 32 20 4a 4f 49 4e 20 63 6f 6c 6c 61 74 65 32  t2 JOIN collate2
4460: 74 31 20 55 53 49 4e 47 20 28 62 29 3b 0a 20 20  t1 USING (b);.  
4470: 7d 0a 7d 20 7b 61 61 7d 0a 64 6f 5f 74 65 73 74  }.} {aa}.do_test
4480: 20 63 6f 6c 6c 61 74 65 32 2d 35 2e 32 20 7b 0a   collate2-5.2 {.
4490: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
44a0: 53 45 4c 45 43 54 20 63 6f 6c 6c 61 74 65 32 74  SELECT collate2t
44b0: 31 2e 62 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65  1.b FROM collate
44c0: 32 74 31 20 4e 41 54 55 52 41 4c 20 4a 4f 49 4e  2t1 NATURAL JOIN
44d0: 20 63 6f 6c 6c 61 74 65 32 74 32 3b 0a 20 20 7d   collate2t2;.  }
44e0: 0a 7d 20 7b 61 61 20 61 41 20 41 61 20 41 41 7d  .} {aa aA Aa AA}
44f0: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65  .do_test collate
4500: 32 2d 35 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  2-5.3 {.  execsq
4510: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63  l {.    SELECT c
4520: 6f 6c 6c 61 74 65 32 74 31 2e 62 20 46 52 4f 4d  ollate2t1.b FROM
4530: 20 63 6f 6c 6c 61 74 65 32 74 32 20 4e 41 54 55   collate2t2 NATU
4540: 52 41 4c 20 4a 4f 49 4e 20 63 6f 6c 6c 61 74 65  RAL JOIN collate
4550: 32 74 31 3b 0a 20 20 7d 0a 7d 20 7b 61 61 7d 0a  2t1;.  }.} {aa}.
4560: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 32  do_test collate2
4570: 2d 35 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  -5.4 {.  execsql
4580: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 6f   {.    SELECT co
4590: 6c 6c 61 74 65 32 74 32 2e 62 20 46 52 4f 4d 20  llate2t2.b FROM 
45a0: 63 6f 6c 6c 61 74 65 32 74 31 20 4c 45 46 54 20  collate2t1 LEFT 
45b0: 4f 55 54 45 52 20 4a 4f 49 4e 20 63 6f 6c 6c 61  OUTER JOIN colla
45c0: 74 65 32 74 32 20 55 53 49 4e 47 20 28 62 29 20  te2t2 USING (b) 
45d0: 6f 72 64 65 72 20 62 79 20 63 6f 6c 6c 61 74 65  order by collate
45e0: 32 74 31 2e 6f 69 64 3b 0a 20 20 7d 0a 7d 20 7b  2t1.oid;.  }.} {
45f0: 7b 7d 20 61 61 20 7b 7d 20 7b 7d 20 7b 7d 20 61  {} aa {} {} {} a
4600: 61 20 7b 7d 20 7b 7d 20 7b 7d 20 61 61 20 7b 7d  a {} {} {} aa {}
4610: 20 7b 7d 20 7b 7d 20 61 61 20 7b 7d 20 7b 7d 20   {} {} aa {} {} 
4620: 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c  {}}.do_test coll
4630: 61 74 65 32 2d 35 2e 35 20 7b 0a 20 20 65 78 65  ate2-5.5 {.  exe
4640: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
4650: 54 20 63 6f 6c 6c 61 74 65 32 74 31 2e 62 2c 20  T collate2t1.b, 
4660: 63 6f 6c 6c 61 74 65 32 74 32 2e 62 20 46 52 4f  collate2t2.b FRO
4670: 4d 20 63 6f 6c 6c 61 74 65 32 74 32 20 4c 45 46  M collate2t2 LEF
4680: 54 20 4f 55 54 45 52 20 4a 4f 49 4e 20 63 6f 6c  T OUTER JOIN col
4690: 6c 61 74 65 32 74 31 20 55 53 49 4e 47 20 28 62  late2t1 USING (b
46a0: 29 3b 0a 20 20 7d 0a 7d 20 7b 61 61 20 61 61 7d  );.  }.} {aa aa}
46b0: 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a        ..finish_test.