/ Hex Artifact Content
Login

Artifact 08c18e7512a5a32c97938854263fa15362eeb846:


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 74 65 73 74 69 6e 67 20 63  ipt is testing c
01d0: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
01e0: 65 73 2e 0a 23 0a 0a 73 65 74 20 74 65 73 74 64  es..#..set testd
01f0: 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  ir [file dirname
0200: 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20   $argv0].source 
0210: 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e  $testdir/tester.
0220: 74 63 6c 0a 73 65 74 20 74 65 73 74 70 72 65 66  tcl.set testpref
0230: 69 78 20 63 6f 6c 6c 61 74 65 31 0a 0a 23 0a 23  ix collate1..#.#
0240: 20 54 65 73 74 73 20 61 72 65 20 72 6f 75 67 68   Tests are rough
0250: 6c 79 20 6f 72 67 61 6e 69 73 65 64 20 61 73 20  ly organised as 
0260: 66 6f 6c 6c 6f 77 73 3a 0a 23 0a 23 20 63 6f 6c  follows:.#.# col
0270: 6c 61 74 65 31 2d 31 2e 2a 20 2d 20 53 69 6e 67  late1-1.* - Sing
0280: 6c 65 2d 66 69 65 6c 64 20 4f 52 44 45 52 20 42  le-field ORDER B
0290: 59 20 77 69 74 68 20 61 6e 20 65 78 70 6c 69 63  Y with an explic
02a0: 69 74 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75 73  it COLLATE claus
02b0: 65 2e 0a 23 20 63 6f 6c 6c 61 74 65 31 2d 32 2e  e..# collate1-2.
02c0: 2a 20 2d 20 4d 75 6c 74 69 2d 66 69 65 6c 64 20  * - Multi-field 
02d0: 4f 52 44 45 52 20 42 59 20 77 69 74 68 20 61 6e  ORDER BY with an
02e0: 20 65 78 70 6c 69 63 69 74 20 43 4f 4c 4c 41 54   explicit COLLAT
02f0: 45 20 63 6c 61 75 73 65 2e 0a 23 20 63 6f 6c 6c  E clause..# coll
0300: 61 74 65 31 2d 33 2e 2a 20 2d 20 4f 52 44 45 52  ate1-3.* - ORDER
0310: 20 42 59 20 75 73 69 6e 67 20 61 20 64 65 66 61   BY using a defa
0320: 75 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 74 79  ult collation ty
0330: 70 65 2e 20 41 6c 73 6f 20 74 68 61 74 20 61 6e  pe. Also that an
0340: 20 0a 23 20 20 20 20 20 20 20 20 20 20 20 20 20   .#             
0350: 20 20 20 65 78 70 6c 69 63 74 20 63 6f 6c 6c 61     explict colla
0360: 74 65 20 74 79 70 65 20 6f 76 65 72 72 69 64 65  te type override
0370: 73 20 61 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c  s a default coll
0380: 61 74 65 20 74 79 70 65 2e 0a 23 20 63 6f 6c 6c  ate type..# coll
0390: 61 74 65 31 2d 34 2e 2a 20 2d 20 4f 52 44 45 52  ate1-4.* - ORDER
03a0: 20 42 59 20 75 73 69 6e 67 20 61 20 64 61 74 61   BY using a data
03b0: 20 74 79 70 65 2e 0a 23 0a 0a 23 0a 23 20 43 6f   type..#..#.# Co
03c0: 6c 6c 61 74 69 6f 6e 20 74 79 70 65 20 27 48 45  llation type 'HE
03d0: 58 27 2e 20 49 66 20 61 6e 20 61 72 67 75 6d 65  X'. If an argume
03e0: 6e 74 20 63 61 6e 20 62 65 20 69 6e 74 65 72 70  nt can be interp
03f0: 72 65 74 65 64 20 61 73 20 61 20 68 65 78 61 64  reted as a hexad
0400: 65 63 69 6d 61 6c 0a 23 20 6e 75 6d 62 65 72 2c  ecimal.# number,
0410: 20 74 68 65 6e 20 69 74 20 69 73 20 63 6f 6e 76   then it is conv
0420: 65 72 74 65 64 20 74 6f 20 6f 6e 65 20 62 65 66  erted to one bef
0430: 6f 72 65 20 74 68 65 20 63 6f 6d 70 61 72 69 73  ore the comparis
0440: 6f 6e 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e  on is performed.
0450: 20 0a 23 20 4e 75 6d 62 65 72 73 20 61 72 65 20   .# Numbers are 
0460: 6c 65 73 73 20 74 68 61 6e 20 6f 74 68 65 72 20  less than other 
0470: 73 74 72 69 6e 67 73 2e 20 49 66 20 6e 65 69 74  strings. If neit
0480: 68 65 72 20 61 72 67 75 6d 65 6e 74 20 69 73 20  her argument is 
0490: 61 20 6e 75 6d 62 65 72 2c 20 0a 23 20 5b 73 74  a number, .# [st
04a0: 72 69 6e 67 20 63 6f 6d 70 61 72 65 5d 20 69 73  ring compare] is
04b0: 20 75 73 65 64 2e 0a 23 0a 64 62 20 63 6f 6c 6c   used..#.db coll
04c0: 61 74 65 20 48 45 58 20 68 65 78 5f 63 6f 6c 6c  ate HEX hex_coll
04d0: 61 74 65 0a 70 72 6f 63 20 68 65 78 5f 63 6f 6c  ate.proc hex_col
04e0: 6c 61 74 65 20 7b 6c 68 73 20 72 68 73 7d 20 7b  late {lhs rhs} {
04f0: 0a 20 20 73 65 74 20 6c 68 73 5f 69 73 68 65 78  .  set lhs_ishex
0500: 20 5b 72 65 67 65 78 70 20 7b 5e 28 30 78 7c 29   [regexp {^(0x|)
0510: 5b 31 32 33 34 35 36 37 38 39 30 61 62 63 64 65  [1234567890abcde
0520: 66 41 42 43 44 45 46 5d 2b 24 7d 20 24 6c 68 73  fABCDEF]+$} $lhs
0530: 5d 0a 20 20 73 65 74 20 72 68 73 5f 69 73 68 65  ].  set rhs_ishe
0540: 78 20 5b 72 65 67 65 78 70 20 7b 5e 28 30 78 7c  x [regexp {^(0x|
0550: 29 5b 31 32 33 34 35 36 37 38 39 30 61 62 63 64  )[1234567890abcd
0560: 65 66 41 42 43 44 45 46 5d 2b 24 7d 20 24 72 68  efABCDEF]+$} $rh
0570: 73 5d 0a 20 20 69 66 20 7b 24 6c 68 73 5f 69 73  s].  if {$lhs_is
0580: 68 65 78 20 26 26 20 24 72 68 73 5f 69 73 68 65  hex && $rhs_ishe
0590: 78 7d 20 7b 20 0a 20 20 20 20 73 65 74 20 6c 68  x} { .    set lh
05a0: 73 78 20 5b 73 63 61 6e 20 24 6c 68 73 20 25 78  sx [scan $lhs %x
05b0: 5d 0a 20 20 20 20 73 65 74 20 72 68 73 78 20 5b  ].    set rhsx [
05c0: 73 63 61 6e 20 24 72 68 73 20 25 78 5d 0a 20 20  scan $rhs %x].  
05d0: 20 20 69 66 20 7b 24 6c 68 73 20 3c 20 24 72 68    if {$lhs < $rh
05e0: 73 7d 20 7b 72 65 74 75 72 6e 20 2d 31 7d 0a 20  s} {return -1}. 
05f0: 20 20 20 69 66 20 7b 24 6c 68 73 20 3d 3d 20 24     if {$lhs == $
0600: 72 68 73 7d 20 7b 72 65 74 75 72 6e 20 30 7d 0a  rhs} {return 0}.
0610: 20 20 20 20 69 66 20 7b 24 6c 68 73 20 3e 20 24      if {$lhs > $
0620: 72 68 73 7d 20 7b 72 65 74 75 72 6e 20 31 7d 0a  rhs} {return 1}.
0630: 20 20 7d 0a 20 20 69 66 20 7b 24 6c 68 73 5f 69    }.  if {$lhs_i
0640: 73 68 65 78 7d 20 7b 0a 20 20 20 20 72 65 74 75  shex} {.    retu
0650: 72 6e 20 2d 31 3b 0a 20 20 7d 0a 20 20 69 66 20  rn -1;.  }.  if 
0660: 7b 24 72 68 73 5f 69 73 68 65 78 7d 20 7b 0a 20  {$rhs_ishex} {. 
0670: 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d     return 1;.  }
0680: 0a 20 20 72 65 74 75 72 6e 20 5b 73 74 72 69 6e  .  return [strin
0690: 67 20 63 6f 6d 70 61 72 65 20 24 6c 68 73 20 24  g compare $lhs $
06a0: 72 68 73 5d 0a 7d 0a 64 62 20 66 75 6e 63 74 69  rhs].}.db functi
06b0: 6f 6e 20 68 65 78 20 7b 66 6f 72 6d 61 74 20 30  on hex {format 0
06c0: 78 25 58 7d 0a 0a 23 20 4d 69 6d 69 63 20 74 68  x%X}..# Mimic th
06d0: 65 20 53 51 4c 69 74 65 20 32 20 63 6f 6c 6c 61  e SQLite 2 colla
06e0: 74 69 6f 6e 20 74 79 70 65 20 4e 55 4d 45 52 49  tion type NUMERI
06f0: 43 2e 0a 64 62 20 63 6f 6c 6c 61 74 65 20 6e 75  C..db collate nu
0700: 6d 65 72 69 63 20 6e 75 6d 65 72 69 63 5f 63 6f  meric numeric_co
0710: 6c 6c 61 74 65 0a 70 72 6f 63 20 6e 75 6d 65 72  llate.proc numer
0720: 69 63 5f 63 6f 6c 6c 61 74 65 20 7b 6c 68 73 20  ic_collate {lhs 
0730: 72 68 73 7d 20 7b 0a 20 20 69 66 20 7b 24 6c 68  rhs} {.  if {$lh
0740: 73 20 3d 3d 20 24 72 68 73 7d 20 7b 72 65 74 75  s == $rhs} {retu
0750: 72 6e 20 30 7d 20 0a 20 20 72 65 74 75 72 6e 20  rn 0} .  return 
0760: 5b 65 78 70 72 20 28 24 6c 68 73 3e 24 72 68 73  [expr ($lhs>$rhs
0770: 29 3f 31 3a 2d 31 5d 0a 7d 0a 0a 64 6f 5f 74 65  )?1:-1].}..do_te
0780: 73 74 20 63 6f 6c 6c 61 74 65 31 2d 31 2e 30 20  st collate1-1.0 
0790: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
07a0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63    CREATE TABLE c
07b0: 6f 6c 6c 61 74 65 31 74 31 28 63 31 2c 20 63 32  ollate1t1(c1, c2
07c0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
07d0: 54 4f 20 63 6f 6c 6c 61 74 65 31 74 31 20 56 41  TO collate1t1 VA
07e0: 4c 55 45 53 28 34 35 2c 20 68 65 78 28 34 35 29  LUES(45, hex(45)
07f0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
0800: 54 4f 20 63 6f 6c 6c 61 74 65 31 74 31 20 56 41  TO collate1t1 VA
0810: 4c 55 45 53 28 4e 55 4c 4c 2c 20 4e 55 4c 4c 29  LUES(NULL, NULL)
0820: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0830: 4f 20 63 6f 6c 6c 61 74 65 31 74 31 20 56 41 4c  O collate1t1 VAL
0840: 55 45 53 28 32 38 31 2c 20 68 65 78 28 32 38 31  UES(281, hex(281
0850: 29 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  ));.  }.} {}.do_
0860: 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 31 2e  test collate1-1.
0870: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
0880: 20 20 20 20 53 45 4c 45 43 54 20 63 32 20 46 52      SELECT c2 FR
0890: 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20 4f 52  OM collate1t1 OR
08a0: 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20  DER BY 1;.  }.} 
08b0: 7b 7b 7d 20 30 78 31 31 39 20 30 78 32 44 7d 0a  {{} 0x119 0x2D}.
08c0: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31  do_test collate1
08d0: 2d 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.2 {.  execsql
08e0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 32   {.    SELECT c2
08f0: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31   FROM collate1t1
0900: 20 4f 52 44 45 52 20 42 59 20 31 20 43 4f 4c 4c   ORDER BY 1 COLL
0910: 41 54 45 20 68 65 78 3b 0a 20 20 7d 0a 7d 20 7b  ATE hex;.  }.} {
0920: 7b 7d 20 30 78 32 44 20 30 78 31 31 39 7d 0a 64  {} 0x2D 0x119}.d
0930: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d  o_test collate1-
0940: 31 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.3 {.  execsql 
0950: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 32 20  {.    SELECT c2 
0960: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20  FROM collate1t1 
0970: 4f 52 44 45 52 20 42 59 20 31 20 43 4f 4c 4c 41  ORDER BY 1 COLLA
0980: 54 45 20 68 65 78 20 44 45 53 43 3b 0a 20 20 7d  TE hex DESC;.  }
0990: 0a 7d 20 7b 30 78 31 31 39 20 30 78 32 44 20 7b  .} {0x119 0x2D {
09a0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  }}.do_test colla
09b0: 74 65 31 2d 31 2e 34 20 7b 0a 20 20 65 78 65 63  te1-1.4 {.  exec
09c0: 73 71 6c 20 7b 0a 20 20 20 53 45 4c 45 43 54 20  sql {.   SELECT 
09d0: 63 32 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31  c2 FROM collate1
09e0: 74 31 20 4f 52 44 45 52 20 42 59 20 31 20 43 4f  t1 ORDER BY 1 CO
09f0: 4c 4c 41 54 45 20 68 65 78 20 41 53 43 3b 0a 20  LLATE hex ASC;. 
0a00: 20 7d 0a 7d 20 7b 7b 7d 20 30 78 32 44 20 30 78   }.} {{} 0x2D 0x
0a10: 31 31 39 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c  119}.do_test col
0a20: 6c 61 74 65 31 2d 31 2e 35 20 7b 0a 20 20 65 78  late1-1.5 {.  ex
0a30: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
0a40: 43 54 20 63 32 20 43 4f 4c 4c 41 54 45 20 68 65  CT c2 COLLATE he
0a50: 78 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74  x FROM collate1t
0a60: 31 20 4f 52 44 45 52 20 42 59 20 31 0a 20 20 7d  1 ORDER BY 1.  }
0a70: 0a 7d 20 7b 7b 7d 20 30 78 32 44 20 30 78 31 31  .} {{} 0x2D 0x11
0a80: 39 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  9}.do_test colla
0a90: 74 65 31 2d 31 2e 36 20 7b 0a 20 20 65 78 65 63  te1-1.6 {.  exec
0aa0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
0ab0: 20 63 32 20 43 4f 4c 4c 41 54 45 20 68 65 78 20   c2 COLLATE hex 
0ac0: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20  FROM collate1t1 
0ad0: 4f 52 44 45 52 20 42 59 20 31 20 41 53 43 0a 20  ORDER BY 1 ASC. 
0ae0: 20 7d 0a 7d 20 7b 7b 7d 20 30 78 32 44 20 30 78   }.} {{} 0x2D 0x
0af0: 31 31 39 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c  119}.do_test col
0b00: 6c 61 74 65 31 2d 31 2e 37 20 7b 0a 20 20 65 78  late1-1.7 {.  ex
0b10: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
0b20: 43 54 20 63 32 20 43 4f 4c 4c 41 54 45 20 68 65  CT c2 COLLATE he
0b30: 78 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74  x FROM collate1t
0b40: 31 20 4f 52 44 45 52 20 42 59 20 31 20 44 45 53  1 ORDER BY 1 DES
0b50: 43 0a 20 20 7d 0a 7d 20 7b 30 78 31 31 39 20 30  C.  }.} {0x119 0
0b60: 78 32 44 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20  x2D {}}.do_test 
0b70: 63 6f 6c 6c 61 74 65 31 2d 31 2e 39 39 20 7b 0a  collate1-1.99 {.
0b80: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0b90: 44 52 4f 50 20 54 41 42 4c 45 20 63 6f 6c 6c 61  DROP TABLE colla
0ba0: 74 65 31 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  te1t1;.  }.} {}.
0bb0: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65  .do_test collate
0bc0: 31 2d 32 2e 30 20 7b 0a 20 20 65 78 65 63 73 71  1-2.0 {.  execsq
0bd0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
0be0: 41 42 4c 45 20 63 6f 6c 6c 61 74 65 31 74 31 28  ABLE collate1t1(
0bf0: 63 31 2c 20 63 32 29 3b 0a 20 20 20 20 49 4e 53  c1, c2);.    INS
0c00: 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65  ERT INTO collate
0c10: 31 74 31 20 56 41 4c 55 45 53 28 27 35 27 2c 20  1t1 VALUES('5', 
0c20: 27 30 78 31 31 27 29 3b 0a 20 20 20 20 49 4e 53  '0x11');.    INS
0c30: 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65  ERT INTO collate
0c40: 31 74 31 20 56 41 4c 55 45 53 28 27 35 27 2c 20  1t1 VALUES('5', 
0c50: 27 30 78 41 27 29 3b 0a 20 20 20 20 49 4e 53 45  '0xA');.    INSE
0c60: 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 31  RT INTO collate1
0c70: 74 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20  t1 VALUES(NULL, 
0c80: 4e 55 4c 4c 29 3b 0a 20 20 20 20 49 4e 53 45 52  NULL);.    INSER
0c90: 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 31 74  T INTO collate1t
0ca0: 31 20 56 41 4c 55 45 53 28 27 37 27 2c 20 27 30  1 VALUES('7', '0
0cb0: 78 41 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  xA');.    INSERT
0cc0: 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 31 74 31   INTO collate1t1
0cd0: 20 56 41 4c 55 45 53 28 27 31 31 27 2c 20 27 30   VALUES('11', '0
0ce0: 78 31 31 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  x11');.    INSER
0cf0: 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 31 74  T INTO collate1t
0d00: 31 20 56 41 4c 55 45 53 28 27 31 31 27 2c 20 27  1 VALUES('11', '
0d10: 30 78 31 30 31 27 29 3b 0a 20 20 7d 0a 7d 20 7b  0x101');.  }.} {
0d20: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  }.do_test collat
0d30: 65 31 2d 32 2e 32 20 7b 0a 20 20 65 78 65 63 73  e1-2.2 {.  execs
0d40: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
0d50: 63 31 2c 20 63 32 20 46 52 4f 4d 20 63 6f 6c 6c  c1, c2 FROM coll
0d60: 61 74 65 31 74 31 20 4f 52 44 45 52 20 42 59 20  ate1t1 ORDER BY 
0d70: 31 20 43 4f 4c 4c 41 54 45 20 6e 75 6d 65 72 69  1 COLLATE numeri
0d80: 63 2c 20 32 20 43 4f 4c 4c 41 54 45 20 68 65 78  c, 2 COLLATE hex
0d90: 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 7b 7d 20 35  ;.  }.} {{} {} 5
0da0: 20 30 78 41 20 35 20 30 78 31 31 20 37 20 30 78   0xA 5 0x11 7 0x
0db0: 41 20 31 31 20 30 78 31 31 20 31 31 20 30 78 31  A 11 0x11 11 0x1
0dc0: 30 31 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c  01}.do_test coll
0dd0: 61 74 65 31 2d 32 2e 33 20 7b 0a 20 20 65 78 65  ate1-2.3 {.  exe
0de0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
0df0: 54 20 63 31 2c 20 63 32 20 46 52 4f 4d 20 63 6f  T c1, c2 FROM co
0e00: 6c 6c 61 74 65 31 74 31 20 4f 52 44 45 52 20 42  llate1t1 ORDER B
0e10: 59 20 31 20 43 4f 4c 4c 41 54 45 20 62 69 6e 61  Y 1 COLLATE bina
0e20: 72 79 2c 20 32 20 43 4f 4c 4c 41 54 45 20 68 65  ry, 2 COLLATE he
0e30: 78 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 7b 7d 20  x;.  }.} {{} {} 
0e40: 31 31 20 30 78 31 31 20 31 31 20 30 78 31 30 31  11 0x11 11 0x101
0e50: 20 35 20 30 78 41 20 35 20 30 78 31 31 20 37 20   5 0xA 5 0x11 7 
0e60: 30 78 41 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c  0xA}.do_test col
0e70: 6c 61 74 65 31 2d 32 2e 34 20 7b 0a 20 20 65 78  late1-2.4 {.  ex
0e80: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
0e90: 43 54 20 63 31 2c 20 63 32 20 46 52 4f 4d 20 63  CT c1, c2 FROM c
0ea0: 6f 6c 6c 61 74 65 31 74 31 20 4f 52 44 45 52 20  ollate1t1 ORDER 
0eb0: 42 59 20 31 20 43 4f 4c 4c 41 54 45 20 62 69 6e  BY 1 COLLATE bin
0ec0: 61 72 79 20 44 45 53 43 2c 20 32 20 43 4f 4c 4c  ary DESC, 2 COLL
0ed0: 41 54 45 20 68 65 78 3b 0a 20 20 7d 0a 7d 20 7b  ATE hex;.  }.} {
0ee0: 37 20 30 78 41 20 35 20 30 78 41 20 35 20 30 78  7 0xA 5 0xA 5 0x
0ef0: 31 31 20 31 31 20 30 78 31 31 20 31 31 20 30 78  11 11 0x11 11 0x
0f00: 31 30 31 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65  101 {} {}}.do_te
0f10: 73 74 20 63 6f 6c 6c 61 74 65 31 2d 32 2e 35 20  st collate1-2.5 
0f20: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0f30: 20 20 53 45 4c 45 43 54 20 63 31 2c 20 63 32 20    SELECT c1, c2 
0f40: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20  FROM collate1t1 
0f50: 0a 20 20 20 20 20 20 20 20 4f 52 44 45 52 20 42  .        ORDER B
0f60: 59 20 31 20 43 4f 4c 4c 41 54 45 20 62 69 6e 61  Y 1 COLLATE bina
0f70: 72 79 20 44 45 53 43 2c 20 32 20 43 4f 4c 4c 41  ry DESC, 2 COLLA
0f80: 54 45 20 68 65 78 20 44 45 53 43 3b 0a 20 20 7d  TE hex DESC;.  }
0f90: 0a 7d 20 7b 37 20 30 78 41 20 35 20 30 78 31 31  .} {7 0xA 5 0x11
0fa0: 20 35 20 30 78 41 20 31 31 20 30 78 31 30 31 20   5 0xA 11 0x101 
0fb0: 31 31 20 30 78 31 31 20 7b 7d 20 7b 7d 7d 0a 64  11 0x11 {} {}}.d
0fc0: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d  o_test collate1-
0fd0: 32 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.6 {.  execsql 
0fe0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 31 2c  {.    SELECT c1,
0ff0: 20 63 32 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65   c2 FROM collate
1000: 31 74 31 20 0a 20 20 20 20 20 20 20 20 4f 52 44  1t1 .        ORD
1010: 45 52 20 42 59 20 31 20 43 4f 4c 4c 41 54 45 20  ER BY 1 COLLATE 
1020: 62 69 6e 61 72 79 20 41 53 43 2c 20 32 20 43 4f  binary ASC, 2 CO
1030: 4c 4c 41 54 45 20 68 65 78 20 41 53 43 3b 0a 20  LLATE hex ASC;. 
1040: 20 7d 0a 7d 20 7b 7b 7d 20 7b 7d 20 31 31 20 30   }.} {{} {} 11 0
1050: 78 31 31 20 31 31 20 30 78 31 30 31 20 35 20 30  x11 11 0x101 5 0
1060: 78 41 20 35 20 30 78 31 31 20 37 20 30 78 41 7d  xA 5 0x11 7 0xA}
1070: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65  .do_test collate
1080: 31 2d 32 2e 31 32 2e 31 20 7b 0a 20 20 65 78 65  1-2.12.1 {.  exe
1090: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
10a0: 54 20 63 31 20 43 4f 4c 4c 41 54 45 20 6e 75 6d  T c1 COLLATE num
10b0: 65 72 69 63 2c 20 63 32 20 46 52 4f 4d 20 63 6f  eric, c2 FROM co
10c0: 6c 6c 61 74 65 31 74 31 20 0a 20 20 20 20 20 4f  llate1t1 .     O
10d0: 52 44 45 52 20 42 59 20 31 2c 20 32 20 43 4f 4c  RDER BY 1, 2 COL
10e0: 4c 41 54 45 20 68 65 78 3b 0a 20 20 7d 0a 7d 20  LATE hex;.  }.} 
10f0: 7b 7b 7d 20 7b 7d 20 35 20 30 78 41 20 35 20 30  {{} {} 5 0xA 5 0
1100: 78 31 31 20 37 20 30 78 41 20 31 31 20 30 78 31  x11 7 0xA 11 0x1
1110: 31 20 31 31 20 30 78 31 30 31 7d 0a 64 6f 5f 74  1 11 0x101}.do_t
1120: 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 32 2e 31  est collate1-2.1
1130: 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.2 {.  execsql 
1140: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 31 20  {.    SELECT c1 
1150: 43 4f 4c 4c 41 54 45 20 68 65 78 2c 20 63 32 20  COLLATE hex, c2 
1160: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20  FROM collate1t1 
1170: 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 31  .     ORDER BY 1
1180: 20 43 4f 4c 4c 41 54 45 20 6e 75 6d 65 72 69 63   COLLATE numeric
1190: 2c 20 32 20 43 4f 4c 4c 41 54 45 20 68 65 78 3b  , 2 COLLATE hex;
11a0: 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 7b 7d 20 35 20  .  }.} {{} {} 5 
11b0: 30 78 41 20 35 20 30 78 31 31 20 37 20 30 78 41  0xA 5 0x11 7 0xA
11c0: 20 31 31 20 30 78 31 31 20 31 31 20 30 78 31 30   11 0x11 11 0x10
11d0: 31 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  1}.do_test colla
11e0: 74 65 31 2d 32 2e 31 32 2e 33 20 7b 0a 20 20 65  te1-2.12.3 {.  e
11f0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
1200: 45 43 54 20 63 31 2c 20 63 32 20 43 4f 4c 4c 41  ECT c1, c2 COLLA
1210: 54 45 20 68 65 78 20 46 52 4f 4d 20 63 6f 6c 6c  TE hex FROM coll
1220: 61 74 65 31 74 31 20 0a 20 20 20 20 20 4f 52 44  ate1t1 .     ORD
1230: 45 52 20 42 59 20 31 20 43 4f 4c 4c 41 54 45 20  ER BY 1 COLLATE 
1240: 6e 75 6d 65 72 69 63 2c 20 32 3b 0a 20 20 7d 0a  numeric, 2;.  }.
1250: 7d 20 7b 7b 7d 20 7b 7d 20 35 20 30 78 41 20 35  } {{} {} 5 0xA 5
1260: 20 30 78 31 31 20 37 20 30 78 41 20 31 31 20 30   0x11 7 0xA 11 0
1270: 78 31 31 20 31 31 20 30 78 31 30 31 7d 0a 64 6f  x11 11 0x101}.do
1280: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 32  _test collate1-2
1290: 2e 31 32 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  .12.4 {.  execsq
12a0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63  l {.    SELECT c
12b0: 31 20 43 4f 4c 4c 41 54 45 20 6e 75 6d 65 72 69  1 COLLATE numeri
12c0: 63 2c 20 63 32 20 43 4f 4c 4c 41 54 45 20 68 65  c, c2 COLLATE he
12d0: 78 0a 20 20 20 20 20 20 46 52 4f 4d 20 63 6f 6c  x.      FROM col
12e0: 6c 61 74 65 31 74 31 20 0a 20 20 20 20 20 4f 52  late1t1 .     OR
12f0: 44 45 52 20 42 59 20 31 2c 20 32 3b 0a 20 20 7d  DER BY 1, 2;.  }
1300: 0a 7d 20 7b 7b 7d 20 7b 7d 20 35 20 30 78 41 20  .} {{} {} 5 0xA 
1310: 35 20 30 78 31 31 20 37 20 30 78 41 20 31 31 20  5 0x11 7 0xA 11 
1320: 30 78 31 31 20 31 31 20 30 78 31 30 31 7d 0a 64  0x11 11 0x101}.d
1330: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d  o_test collate1-
1340: 32 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  2.13 {.  execsql
1350: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 31   {.    SELECT c1
1360: 20 43 4f 4c 4c 41 54 45 20 62 69 6e 61 72 79 2c   COLLATE binary,
1370: 20 63 32 20 43 4f 4c 4c 41 54 45 20 68 65 78 0a   c2 COLLATE hex.
1380: 20 20 20 20 20 20 46 52 4f 4d 20 63 6f 6c 6c 61        FROM colla
1390: 74 65 31 74 31 0a 20 20 20 20 20 4f 52 44 45 52  te1t1.     ORDER
13a0: 20 42 59 20 31 2c 20 32 3b 0a 20 20 7d 0a 7d 20   BY 1, 2;.  }.} 
13b0: 7b 7b 7d 20 7b 7d 20 31 31 20 30 78 31 31 20 31  {{} {} 11 0x11 1
13c0: 31 20 30 78 31 30 31 20 35 20 30 78 41 20 35 20  1 0x101 5 0xA 5 
13d0: 30 78 31 31 20 37 20 30 78 41 7d 0a 64 6f 5f 74  0x11 7 0xA}.do_t
13e0: 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 32 2e 31  est collate1-2.1
13f0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
1400: 20 20 20 20 53 45 4c 45 43 54 20 63 31 2c 20 63      SELECT c1, c
1410: 32 0a 20 20 20 20 20 20 46 52 4f 4d 20 63 6f 6c  2.      FROM col
1420: 6c 61 74 65 31 74 31 20 4f 52 44 45 52 20 42 59  late1t1 ORDER BY
1430: 20 31 20 43 4f 4c 4c 41 54 45 20 62 69 6e 61 72   1 COLLATE binar
1440: 79 20 44 45 53 43 2c 20 32 20 43 4f 4c 4c 41 54  y DESC, 2 COLLAT
1450: 45 20 68 65 78 3b 0a 20 20 7d 0a 7d 20 7b 37 20  E hex;.  }.} {7 
1460: 30 78 41 20 35 20 30 78 41 20 35 20 30 78 31 31  0xA 5 0xA 5 0x11
1470: 20 31 31 20 30 78 31 31 20 31 31 20 30 78 31 30   11 0x11 11 0x10
1480: 31 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  1 {} {}}.do_test
1490: 20 63 6f 6c 6c 61 74 65 31 2d 32 2e 31 35 20 7b   collate1-2.15 {
14a0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
14b0: 20 53 45 4c 45 43 54 20 63 31 20 43 4f 4c 4c 41   SELECT c1 COLLA
14c0: 54 45 20 62 69 6e 61 72 79 2c 20 63 32 20 43 4f  TE binary, c2 CO
14d0: 4c 4c 41 54 45 20 68 65 78 0a 20 20 20 20 20 20  LLATE hex.      
14e0: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20  FROM collate1t1 
14f0: 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 31  .     ORDER BY 1
1500: 20 44 45 53 43 2c 20 32 20 44 45 53 43 3b 0a 20   DESC, 2 DESC;. 
1510: 20 7d 0a 7d 20 7b 37 20 30 78 41 20 35 20 30 78   }.} {7 0xA 5 0x
1520: 31 31 20 35 20 30 78 41 20 31 31 20 30 78 31 30  11 5 0xA 11 0x10
1530: 31 20 31 31 20 30 78 31 31 20 7b 7d 20 7b 7d 7d  1 11 0x11 {} {}}
1540: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65  .do_test collate
1550: 31 2d 32 2e 31 36 20 7b 0a 20 20 65 78 65 63 73  1-2.16 {.  execs
1560: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1570: 63 31 20 43 4f 4c 4c 41 54 45 20 68 65 78 2c 20  c1 COLLATE hex, 
1580: 63 32 20 43 4f 4c 4c 41 54 45 20 62 69 6e 61 72  c2 COLLATE binar
1590: 79 0a 20 20 20 20 20 20 46 52 4f 4d 20 63 6f 6c  y.      FROM col
15a0: 6c 61 74 65 31 74 31 20 0a 20 20 20 20 20 4f 52  late1t1 .     OR
15b0: 44 45 52 20 42 59 20 31 20 43 4f 4c 4c 41 54 45  DER BY 1 COLLATE
15c0: 20 62 69 6e 61 72 79 20 41 53 43 2c 20 32 20 43   binary ASC, 2 C
15d0: 4f 4c 4c 41 54 45 20 68 65 78 20 41 53 43 3b 0a  OLLATE hex ASC;.
15e0: 20 20 7d 0a 7d 20 7b 7b 7d 20 7b 7d 20 31 31 20    }.} {{} {} 11 
15f0: 30 78 31 31 20 31 31 20 30 78 31 30 31 20 35 20  0x11 11 0x101 5 
1600: 30 78 41 20 35 20 30 78 31 31 20 37 20 30 78 41  0xA 5 0x11 7 0xA
1610: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  }.do_test collat
1620: 65 31 2d 32 2e 39 39 20 7b 0a 20 20 65 78 65 63  e1-2.99 {.  exec
1630: 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54  sql {.    DROP T
1640: 41 42 4c 45 20 63 6f 6c 6c 61 74 65 31 74 31 3b  ABLE collate1t1;
1650: 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 0a 23 20 54  .  }.} {}..#.# T
1660: 68 65 73 65 20 74 65 73 74 73 20 65 6e 73 75 72  hese tests ensur
1670: 65 20 74 68 61 74 20 74 68 65 20 64 65 66 61 75  e that the defau
1680: 6c 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 74 79 70  lt collation typ
1690: 65 20 66 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 69  e for a column i
16a0: 73 20 75 73 65 64 20 0a 23 20 62 79 20 61 6e 20  s used .# by an 
16b0: 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 20  ORDER BY clause 
16c0: 63 6f 72 72 65 63 74 6c 79 2e 20 54 68 65 20 66  correctly. The f
16d0: 6f 63 75 73 20 69 73 20 61 6c 6c 20 74 68 65 20  ocus is all the 
16e0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 0a 23  different ways.#
16f0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63 61 6e 20   the column can 
1700: 62 65 20 72 65 66 65 72 65 6e 63 65 64 2e 20 69  be referenced. i
1710: 2e 65 2e 20 61 2c 20 63 6f 6c 6c 61 74 65 32 74  .e. a, collate2t
1720: 31 2e 61 2c 20 6d 61 69 6e 2e 63 6f 6c 6c 61 74  1.a, main.collat
1730: 65 32 74 31 2e 61 20 65 74 63 2e 0a 23 0a 64 6f  e2t1.a etc..#.do
1740: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 33  _test collate1-3
1750: 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .0 {.  execsql {
1760: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
1770: 45 20 63 6f 6c 6c 61 74 65 31 74 31 28 61 20 43  E collate1t1(a C
1780: 4f 4c 4c 41 54 45 20 68 65 78 2c 20 62 29 3b 0a  OLLATE hex, b);.
1790: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
17a0: 63 6f 6c 6c 61 74 65 31 74 31 20 56 41 4c 55 45  collate1t1 VALUE
17b0: 53 28 20 27 30 78 35 27 2c 20 35 20 29 3b 0a 20  S( '0x5', 5 );. 
17c0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63     INSERT INTO c
17d0: 6f 6c 6c 61 74 65 31 74 31 20 56 41 4c 55 45 53  ollate1t1 VALUES
17e0: 28 20 27 31 27 2c 20 31 20 29 3b 0a 20 20 20 20  ( '1', 1 );.    
17f0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c  INSERT INTO coll
1800: 61 74 65 31 74 31 20 56 41 4c 55 45 53 28 20 27  ate1t1 VALUES( '
1810: 30 78 34 35 27 2c 20 36 39 20 29 3b 0a 20 20 20  0x45', 69 );.   
1820: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c   INSERT INTO col
1830: 6c 61 74 65 31 74 31 20 56 41 4c 55 45 53 28 20  late1t1 VALUES( 
1840: 4e 55 4c 4c 2c 20 4e 55 4c 4c 20 29 3b 0a 20 20  NULL, NULL );.  
1850: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
1860: 63 6f 6c 6c 61 74 65 31 74 31 20 4f 52 44 45 52  collate1t1 ORDER
1870: 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d   BY a;.  }.} {{}
1880: 20 7b 7d 20 31 20 31 20 30 78 35 20 35 20 30 78   {} 1 1 0x5 5 0x
1890: 34 35 20 36 39 7d 0a 0a 64 6f 5f 74 65 73 74 20  45 69}..do_test 
18a0: 63 6f 6c 6c 61 74 65 31 2d 33 2e 31 20 7b 0a 20  collate1-3.1 {. 
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 2a 20 46 52 4f 4d 20 63 6f 6c  ELECT * FROM col
18d0: 6c 61 74 65 31 74 31 20 4f 52 44 45 52 20 42 59  late1t1 ORDER BY
18e0: 20 31 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 7b 7d   1;.  }.} {{} {}
18f0: 20 31 20 31 20 30 78 35 20 35 20 30 78 34 35 20   1 1 0x5 5 0x45 
1900: 36 39 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c  69}.do_test coll
1910: 61 74 65 31 2d 33 2e 32 20 7b 0a 20 20 65 78 65  ate1-3.2 {.  exe
1920: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
1930: 54 20 2a 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65  T * FROM collate
1940: 31 74 31 20 4f 52 44 45 52 20 42 59 20 63 6f 6c  1t1 ORDER BY col
1950: 6c 61 74 65 31 74 31 2e 61 3b 0a 20 20 7d 0a 7d  late1t1.a;.  }.}
1960: 20 7b 7b 7d 20 7b 7d 20 31 20 31 20 30 78 35 20   {{} {} 1 1 0x5 
1970: 35 20 30 78 34 35 20 36 39 7d 0a 64 6f 5f 74 65  5 0x45 69}.do_te
1980: 73 74 20 63 6f 6c 6c 61 74 65 31 2d 33 2e 33 20  st collate1-3.3 
1990: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
19a0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
19b0: 63 6f 6c 6c 61 74 65 31 74 31 20 4f 52 44 45 52  collate1t1 ORDER
19c0: 20 42 59 20 6d 61 69 6e 2e 63 6f 6c 6c 61 74 65   BY main.collate
19d0: 31 74 31 2e 61 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d  1t1.a;.  }.} {{}
19e0: 20 7b 7d 20 31 20 31 20 30 78 35 20 35 20 30 78   {} 1 1 0x5 5 0x
19f0: 34 35 20 36 39 7d 0a 64 6f 5f 74 65 73 74 20 63  45 69}.do_test c
1a00: 6f 6c 6c 61 74 65 31 2d 33 2e 34 20 7b 0a 20 20  ollate1-3.4 {.  
1a10: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
1a20: 4c 45 43 54 20 61 20 61 73 20 63 31 2c 20 62 20  LECT a as c1, b 
1a30: 61 73 20 63 32 20 46 52 4f 4d 20 63 6f 6c 6c 61  as c2 FROM colla
1a40: 74 65 31 74 31 20 4f 52 44 45 52 20 42 59 20 63  te1t1 ORDER BY c
1a50: 31 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 7b 7d 20  1;.  }.} {{} {} 
1a60: 31 20 31 20 30 78 35 20 35 20 30 78 34 35 20 36  1 1 0x5 5 0x45 6
1a70: 39 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  9}.do_test colla
1a80: 74 65 31 2d 33 2e 35 20 7b 0a 20 20 65 78 65 63  te1-3.5 {.  exec
1a90: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1aa0: 20 61 20 61 73 20 63 31 2c 20 62 20 61 73 20 63   a as c1, b as c
1ab0: 32 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74  2 FROM collate1t
1ac0: 31 20 4f 52 44 45 52 20 42 59 20 63 31 20 43 4f  1 ORDER BY c1 CO
1ad0: 4c 4c 41 54 45 20 62 69 6e 61 72 79 3b 0a 20 20  LLATE binary;.  
1ae0: 7d 0a 7d 20 7b 7b 7d 20 7b 7d 20 30 78 34 35 20  }.} {{} {} 0x45 
1af0: 36 39 20 30 78 35 20 35 20 31 20 31 7d 0a 64 6f  69 0x5 5 1 1}.do
1b00: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 33  _test collate1-3
1b10: 2e 35 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .5.1 {.  execsql
1b20: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20   {.    SELECT a 
1b30: 43 4f 4c 4c 41 54 45 20 62 69 6e 61 72 79 20 61  COLLATE binary a
1b40: 73 20 63 31 2c 20 62 20 61 73 20 63 32 0a 20 20  s c1, b as c2.  
1b50: 20 20 20 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65      FROM collate
1b60: 31 74 31 20 4f 52 44 45 52 20 42 59 20 63 31 3b  1t1 ORDER BY c1;
1b70: 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 7b 7d 20 30 78  .  }.} {{} {} 0x
1b80: 34 35 20 36 39 20 30 78 35 20 35 20 31 20 31 7d  45 69 0x5 5 1 1}
1b90: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65  .do_test collate
1ba0: 31 2d 33 2e 36 20 7b 0a 20 20 65 78 65 63 73 71  1-3.6 {.  execsq
1bb0: 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42  l {.    DROP TAB
1bc0: 4c 45 20 63 6f 6c 6c 61 74 65 31 74 31 3b 0a 20  LE collate1t1;. 
1bd0: 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 55 70 64 61 74   }.} {}..# Updat
1be0: 65 20 66 6f 72 20 53 51 4c 69 74 65 20 76 65 72  e for SQLite ver
1bf0: 73 69 6f 6e 20 33 2e 20 54 68 65 20 63 6f 6c 6c  sion 3. The coll
1c00: 61 74 65 31 2d 34 2e 2a 20 74 65 73 74 20 63 61  ate1-4.* test ca
1c10: 73 65 73 20 77 65 72 65 20 77 72 69 74 74 65 6e  ses were written
1c20: 0a 23 20 62 65 66 6f 72 65 20 6d 61 6e 69 66 65  .# before manife
1c30: 73 74 20 74 79 70 65 73 20 77 65 72 65 20 69 6e  st types were in
1c40: 74 72 6f 64 75 63 65 64 2e 20 54 68 65 20 66 6f  troduced. The fo
1c50: 6c 6c 6f 77 69 6e 67 20 74 65 73 74 20 63 61 73  llowing test cas
1c60: 65 73 20 73 74 69 6c 6c 0a 23 20 77 6f 72 6b 2c  es still.# work,
1c70: 20 64 75 65 20 74 6f 20 74 68 65 20 27 61 66 66   due to the 'aff
1c80: 69 6e 69 74 79 27 20 6d 65 63 68 61 6e 69 73 6d  inity' mechanism
1c90: 2c 20 62 75 74 20 74 68 65 79 20 64 6f 6e 27 74  , but they don't
1ca0: 20 70 72 6f 76 65 20 61 6e 79 74 68 69 6e 67 0a   prove anything.
1cb0: 23 20 61 62 6f 75 74 20 63 6f 6c 6c 61 74 69 6f  # about collatio
1cc0: 6e 20 73 65 71 75 65 6e 63 65 73 2e 0a 23 0a 64  n sequences..#.d
1cd0: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d  o_test collate1-
1ce0: 34 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.0 {.  execsql 
1cf0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
1d00: 4c 45 20 63 6f 6c 6c 61 74 65 31 74 31 28 63 31  LE collate1t1(c1
1d10: 20 6e 75 6d 65 72 69 63 2c 20 63 32 20 74 65 78   numeric, c2 tex
1d20: 74 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  t);.    INSERT I
1d30: 4e 54 4f 20 63 6f 6c 6c 61 74 65 31 74 31 20 56  NTO collate1t1 V
1d40: 41 4c 55 45 53 28 31 2c 20 31 29 3b 0a 20 20 20  ALUES(1, 1);.   
1d50: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c   INSERT INTO col
1d60: 6c 61 74 65 31 74 31 20 56 41 4c 55 45 53 28 31  late1t1 VALUES(1
1d70: 32 2c 20 31 32 29 3b 0a 20 20 20 20 49 4e 53 45  2, 12);.    INSE
1d80: 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 31  RT INTO collate1
1d90: 74 31 20 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20  t1 VALUES(NULL, 
1da0: 4e 55 4c 4c 29 3b 0a 20 20 20 20 49 4e 53 45 52  NULL);.    INSER
1db0: 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 31 74  T INTO collate1t
1dc0: 31 20 56 41 4c 55 45 53 28 31 30 31 2c 20 31 30  1 VALUES(101, 10
1dd0: 31 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  1);.  }.} {}.do_
1de0: 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 34 2e  test collate1-4.
1df0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
1e00: 20 20 20 20 53 45 4c 45 43 54 20 63 31 20 46 52      SELECT c1 FR
1e10: 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20 4f 52  OM collate1t1 OR
1e20: 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20  DER BY 1;.  }.} 
1e30: 7b 7b 7d 20 31 20 31 32 20 31 30 31 7d 0a 64 6f  {{} 1 12 101}.do
1e40: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 34  _test collate1-4
1e50: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
1e60: 0a 20 20 20 20 53 45 4c 45 43 54 20 63 32 20 46  .    SELECT c2 F
1e70: 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20 4f  ROM collate1t1 O
1e80: 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d  RDER BY 1;.  }.}
1e90: 20 7b 7b 7d 20 31 20 31 30 31 20 31 32 7d 0a 64   {{} 1 101 12}.d
1ea0: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d  o_test collate1-
1eb0: 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.3 {.  execsql 
1ec0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 32 2b  {.    SELECT c2+
1ed0: 30 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74  0 FROM collate1t
1ee0: 31 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20  1 ORDER BY 1;.  
1ef0: 7d 0a 7d 20 7b 7b 7d 20 31 20 31 32 20 31 30 31  }.} {{} 1 12 101
1f00: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  }.do_test collat
1f10: 65 31 2d 34 2e 34 20 7b 0a 20 20 65 78 65 63 73  e1-4.4 {.  execs
1f20: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1f30: 63 31 7c 7c 27 27 20 46 52 4f 4d 20 63 6f 6c 6c  c1||'' FROM coll
1f40: 61 74 65 31 74 31 20 4f 52 44 45 52 20 42 59 20  ate1t1 ORDER BY 
1f50: 31 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 31 20 31  1;.  }.} {{} 1 1
1f60: 30 31 20 31 32 7d 0a 64 6f 5f 74 65 73 74 20 63  01 12}.do_test c
1f70: 6f 6c 6c 61 74 65 31 2d 34 2e 34 2e 31 20 7b 0a  ollate1-4.4.1 {.
1f80: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1f90: 53 45 4c 45 43 54 20 28 63 31 7c 7c 27 27 29 20  SELECT (c1||'') 
1fa0: 43 4f 4c 4c 41 54 45 20 6e 75 6d 65 72 69 63 20  COLLATE numeric 
1fb0: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20  FROM collate1t1 
1fc0: 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a  ORDER BY 1;.  }.
1fd0: 7d 20 7b 7b 7d 20 31 20 31 32 20 31 30 31 7d 0a  } {{} 1 12 101}.
1fe0: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31  do_test collate1
1ff0: 2d 34 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.5 {.  execsql
2000: 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c   {.    DROP TABL
2010: 45 20 63 6f 6c 6c 61 74 65 31 74 31 3b 0a 20 20  E collate1t1;.  
2020: 7d 0a 7d 20 7b 7d 0a 0a 23 20 41 20 70 72 6f 62  }.} {}..# A prob
2030: 6c 65 6d 20 72 65 70 6f 72 74 65 64 20 6f 6e 20  lem reported on 
2040: 74 68 65 20 6d 61 69 6c 69 6e 67 20 6c 69 73 74  the mailing list
2050: 3a 20 20 41 20 43 52 45 41 54 45 20 54 41 42 4c  :  A CREATE TABL
2060: 45 20 73 74 61 74 65 6d 65 6e 74 0a 23 20 69 73  E statement.# is
2070: 20 61 6c 6c 6f 77 65 64 20 74 6f 20 68 61 76 65   allowed to have
2080: 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 43 4f 4c   two or more COL
2090: 4c 41 54 45 20 63 6c 61 75 73 65 73 20 6f 6e 20  LATE clauses on 
20a0: 74 68 65 20 73 61 6d 65 20 63 6f 6c 75 6d 6e 2e  the same column.
20b0: 0a 23 20 54 68 61 74 20 70 72 6f 62 61 62 6c 79  .# That probably
20c0: 20 6f 75 67 68 74 20 74 6f 20 62 65 20 61 6e 20   ought to be an 
20d0: 65 72 72 6f 72 2c 20 62 75 74 20 77 65 20 61 6c  error, but we al
20e0: 6c 6f 77 20 69 74 20 66 6f 72 20 62 61 63 6b 77  low it for backw
20f0: 61 72 64 73 0a 23 20 63 6f 6d 70 61 74 69 62 69  ards.# compatibi
2100: 6c 69 74 79 2e 20 20 4a 75 73 74 20 6d 61 6b 65  lity.  Just make
2110: 20 73 75 72 65 20 69 74 20 77 6f 72 6b 73 20 61   sure it works a
2120: 6e 64 20 64 6f 65 73 6e 27 74 20 6c 65 61 6b 20  nd doesn't leak 
2130: 6d 65 6d 6f 72 79 2e 0a 23 0a 64 6f 5f 74 65 73  memory..#.do_tes
2140: 74 20 63 6f 6c 6c 61 74 65 31 2d 35 2e 31 20 7b  t collate1-5.1 {
2150: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2160: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 35   CREATE TABLE c5
2170: 28 0a 20 20 20 20 20 20 69 64 20 49 4e 54 45 47  (.      id INTEG
2180: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a  ER PRIMARY KEY,.
2190: 20 20 20 20 20 20 61 20 54 45 58 54 20 43 4f 4c        a TEXT COL
21a0: 4c 41 54 45 20 62 69 6e 61 72 79 20 43 4f 4c 4c  LATE binary COLL
21b0: 41 54 45 20 6e 6f 63 61 73 65 20 43 4f 4c 4c 41  ATE nocase COLLA
21c0: 54 45 20 72 74 72 69 6d 2c 0a 20 20 20 20 20 20  TE rtrim,.      
21d0: 62 20 54 45 58 54 20 43 4f 4c 4c 41 54 45 20 6e  b TEXT COLLATE n
21e0: 6f 63 61 73 65 20 43 4f 4c 4c 41 54 45 20 62 69  ocase COLLATE bi
21f0: 6e 61 72 79 2c 0a 20 20 20 20 20 20 63 20 54 45  nary,.      c TE
2200: 58 54 20 43 4f 4c 4c 41 54 45 20 72 74 72 69 6d  XT COLLATE rtrim
2210: 20 43 4f 4c 4c 41 54 45 20 62 69 6e 61 72 79 20   COLLATE binary 
2220: 43 4f 4c 4c 41 54 45 20 72 74 72 69 6d 20 43 4f  COLLATE rtrim CO
2230: 4c 4c 41 54 45 20 6e 6f 63 61 73 65 0a 20 20 20  LLATE nocase.   
2240: 20 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49   );.    INSERT I
2250: 4e 54 4f 20 63 35 20 56 41 4c 55 45 53 28 31 2c  NTO c5 VALUES(1,
2260: 20 27 61 62 63 27 2c 27 61 62 63 27 2c 27 61 62   'abc','abc','ab
2270: 63 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  c');.    INSERT 
2280: 49 4e 54 4f 20 63 35 20 56 41 4c 55 45 53 28 32  INTO c5 VALUES(2
2290: 2c 20 27 61 62 63 20 20 20 27 2c 27 41 42 43 27  , 'abc   ','ABC'
22a0: 2c 27 41 42 43 27 29 3b 0a 20 20 20 20 53 45 4c  ,'ABC');.    SEL
22b0: 45 43 54 20 69 64 20 46 52 4f 4d 20 63 35 20 57  ECT id FROM c5 W
22c0: 48 45 52 45 20 61 3d 27 61 62 63 27 20 4f 52 44  HERE a='abc' ORD
22d0: 45 52 20 42 59 20 69 64 3b 0a 20 20 7d 0a 7d 20  ER BY id;.  }.} 
22e0: 7b 31 20 32 7d 0a 64 6f 5f 74 65 73 74 20 63 6f  {1 2}.do_test co
22f0: 6c 6c 61 74 65 31 2d 35 2e 32 20 7b 0a 20 20 65  llate1-5.2 {.  e
2300: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
2310: 45 43 54 20 69 64 20 46 52 4f 4d 20 63 35 20 57  ECT id FROM c5 W
2320: 48 45 52 45 20 62 3d 27 61 62 63 27 20 4f 52 44  HERE b='abc' ORD
2330: 45 52 20 42 59 20 69 64 3b 0a 20 20 7d 0a 7d 20  ER BY id;.  }.} 
2340: 7b 31 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c  {1}.do_test coll
2350: 61 74 65 31 2d 35 2e 33 20 7b 0a 20 20 65 78 65  ate1-5.3 {.  exe
2360: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
2370: 54 20 69 64 20 46 52 4f 4d 20 63 35 20 57 48 45  T id FROM c5 WHE
2380: 52 45 20 63 3d 27 61 62 63 27 20 4f 52 44 45 52  RE c='abc' ORDER
2390: 20 42 59 20 69 64 3b 0a 20 20 7d 0a 7d 20 7b 31   BY id;.  }.} {1
23a0: 20 32 7d 0a 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d   2}....#--------
23b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
23c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
23d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
23e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
23f0: 2d 0a 23 20 46 69 78 20 70 72 6f 62 6c 65 6d 73  -.# Fix problems
2400: 20 77 69 74 68 20 68 61 6e 64 6c 69 6e 67 20 63   with handling c
2410: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
2420: 65 73 20 6e 61 6d 65 64 20 27 22 22 22 27 2e 0a  es named '"""'..
2430: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
2440: 74 20 36 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54  t 6.1 {.  SELECT
2450: 20 22 22 22 22 22 22 22 22 3b 0a 7d 20 7b 5c 22   """""""";.} {\"
2460: 5c 22 5c 22 7d 0a 0a 64 6f 5f 63 61 74 63 68 73  \"\"}..do_catchs
2470: 71 6c 5f 74 65 73 74 20 36 2e 32 20 7b 0a 20 20  ql_test 6.2 {.  
2480: 43 52 45 41 54 45 20 54 41 42 4c 45 20 78 31 28  CREATE TABLE x1(
2490: 61 29 3b 0a 20 20 53 45 4c 45 43 54 20 61 20 46  a);.  SELECT a F
24a0: 52 4f 4d 20 78 31 20 4f 52 44 45 52 20 42 59 20  ROM x1 ORDER BY 
24b0: 61 20 43 4f 4c 4c 41 54 45 20 22 22 22 22 22 22  a COLLATE """"""
24c0: 22 22 3b 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63  "";.} {1 {no suc
24d0: 68 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  h collation sequ
24e0: 65 6e 63 65 3a 20 22 22 22 7d 7d 0a 0a 64 6f 5f  ence: """}}..do_
24f0: 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 36 2e  catchsql_test 6.
2500: 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 61 20 46  3 {.  SELECT a F
2510: 52 4f 4d 20 78 31 20 4f 52 44 45 52 20 42 59 20  ROM x1 ORDER BY 
2520: 31 20 43 4f 4c 4c 41 54 45 20 22 22 22 22 22 22  1 COLLATE """"""
2530: 22 22 3b 0a 7d 20 7b 31 20 7b 6e 6f 20 73 75 63  "";.} {1 {no suc
2540: 68 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  h collation sequ
2550: 65 6e 63 65 3a 20 22 22 22 7d 7d 0a 0a 64 6f 5f  ence: """}}..do_
2560: 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 36 2e  catchsql_test 6.
2570: 34 20 7b 0a 20 20 53 45 4c 45 43 54 20 30 20 55  4 {.  SELECT 0 U
2580: 4e 49 4f 4e 20 53 45 4c 45 43 54 20 30 20 4f 52  NION SELECT 0 OR
2590: 44 45 52 20 42 59 20 31 20 43 4f 4c 4c 41 54 45  DER BY 1 COLLATE
25a0: 20 22 22 22 22 22 22 22 22 3b 0a 7d 20 7b 31 20   """""""";.} {1 
25b0: 7b 6e 6f 20 73 75 63 68 20 63 6f 6c 6c 61 74 69  {no such collati
25c0: 6f 6e 20 73 65 71 75 65 6e 63 65 3a 20 22 22 22  on sequence: """
25d0: 7d 7d 0a 0a 64 62 20 63 6f 6c 6c 61 74 65 20 7b  }}..db collate {
25e0: 22 22 22 7d 20 5b 6c 69 73 74 20 73 74 72 69 6e  """} [list strin
25f0: 67 20 63 6f 6d 70 61 72 65 20 2d 6e 6f 63 61 73  g compare -nocas
2600: 65 5d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  e]..do_execsql_t
2610: 65 73 74 20 36 2e 35 20 7b 0a 20 20 50 52 41 47  est 6.5 {.  PRAG
2620: 4d 41 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 20  MA foreign_keys 
2630: 3d 20 4f 4e 3b 0a 20 20 43 52 45 41 54 45 20 54  = ON;.  CREATE T
2640: 41 42 4c 45 20 70 31 28 61 20 50 52 49 4d 41 52  ABLE p1(a PRIMAR
2650: 59 20 4b 45 59 20 43 4f 4c 4c 41 54 45 20 27 22  Y KEY COLLATE '"
2660: 22 22 27 29 3b 0a 20 20 43 52 45 41 54 45 20 54  ""');.  CREATE T
2670: 41 42 4c 45 20 63 31 28 78 2c 20 79 20 52 45 46  ABLE c1(x, y REF
2680: 45 52 45 4e 43 45 53 20 70 31 29 3b 0a 7d 20 7b  ERENCES p1);.} {
2690: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
26a0: 73 74 20 36 2e 36 20 7b 20 0a 20 20 49 4e 53 45  st 6.6 { .  INSE
26b0: 52 54 20 49 4e 54 4f 20 70 31 20 56 41 4c 55 45  RT INTO p1 VALUE
26c0: 53 28 27 61 62 63 27 29 3b 20 0a 20 20 49 4e 53  S('abc'); .  INS
26d0: 45 52 54 20 49 4e 54 4f 20 63 31 20 56 41 4c 55  ERT INTO c1 VALU
26e0: 45 53 28 31 2c 20 27 41 42 43 27 29 3b 20 0a 7d  ES(1, 'ABC'); .}
26f0: 0a 0a 69 66 63 61 70 61 62 6c 65 20 66 6f 72 65  ..ifcapable fore
2700: 69 67 6e 6b 65 79 20 7b 0a 20 20 64 6f 5f 63 61  ignkey {.  do_ca
2710: 74 63 68 73 71 6c 5f 74 65 73 74 20 36 2e 37 20  tchsql_test 6.7 
2720: 7b 20 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52  { .    DELETE FR
2730: 4f 4d 20 70 31 20 57 48 45 52 45 20 72 6f 77 69  OM p1 WHERE rowi
2740: 64 20 3d 20 31 20 0a 20 20 7d 20 7b 31 20 7b 46  d = 1 .  } {1 {F
2750: 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74  OREIGN KEY const
2760: 72 61 69 6e 74 20 66 61 69 6c 65 64 7d 7d 0a 7d  raint failed}}.}
2770: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
2780: 74 20 36 2e 38 20 7b 20 0a 20 20 49 4e 53 45 52  t 6.8 { .  INSER
2790: 54 20 49 4e 54 4f 20 70 31 20 56 41 4c 55 45 53  T INTO p1 VALUES
27a0: 28 27 61 62 62 27 29 3b 0a 20 20 49 4e 53 45 52  ('abb');.  INSER
27b0: 54 20 49 4e 54 4f 20 70 31 20 56 41 4c 55 45 53  T INTO p1 VALUES
27c0: 28 27 77 78 7a 27 29 3b 0a 20 20 49 4e 53 45 52  ('wxz');.  INSER
27d0: 54 20 49 4e 54 4f 20 70 31 20 56 41 4c 55 45 53  T INTO p1 VALUES
27e0: 28 27 77 78 79 27 29 3b 0a 0a 20 20 49 4e 53 45  ('wxy');..  INSE
27f0: 52 54 20 49 4e 54 4f 20 63 31 20 56 41 4c 55 45  RT INTO c1 VALUE
2800: 53 28 32 2c 20 27 61 62 62 27 29 3b 0a 20 20 49  S(2, 'abb');.  I
2810: 4e 53 45 52 54 20 49 4e 54 4f 20 63 31 20 56 41  NSERT INTO c1 VA
2820: 4c 55 45 53 28 33 2c 20 27 77 78 7a 27 29 3b 0a  LUES(3, 'wxz');.
2830: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 31    INSERT INTO c1
2840: 20 56 41 4c 55 45 53 28 34 2c 20 27 57 58 59 27   VALUES(4, 'WXY'
2850: 29 3b 0a 20 20 53 45 4c 45 43 54 20 78 2c 20 79  );.  SELECT x, y
2860: 20 46 52 4f 4d 20 63 31 20 4f 52 44 45 52 20 42   FROM c1 ORDER B
2870: 59 20 79 20 43 4f 4c 4c 41 54 45 20 22 22 22 22  Y y COLLATE """"
2880: 22 22 22 22 3b 0a 7d 20 7b 32 20 61 62 62 20 31  """";.} {2 abb 1
2890: 20 41 42 43 20 34 20 57 58 59 20 33 20 77 78 7a   ABC 4 WXY 3 wxz
28a0: 7d 0a 0a 23 20 32 30 31 35 2d 30 34 2d 31 35 3a  }..# 2015-04-15:
28b0: 20 20 4e 65 73 74 65 64 20 43 4f 4c 4c 41 54 45    Nested COLLATE
28c0: 20 6f 70 65 72 61 74 6f 72 73 0a 23 0a 64 6f 5f   operators.#.do_
28d0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 37 2e 30  execsql_test 7.0
28e0: 20 7b 0a 20 20 20 53 45 4c 45 43 54 20 27 61 62   {.   SELECT 'ab
28f0: 63 27 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c  c' UNION ALL SEL
2900: 45 43 54 20 27 44 45 46 27 0a 20 20 20 20 4f 52  ECT 'DEF'.    OR
2910: 44 45 52 20 42 59 20 31 20 43 4f 4c 4c 41 54 45  DER BY 1 COLLATE
2920: 20 6e 6f 63 61 73 65 20 43 4f 4c 4c 41 54 45 20   nocase COLLATE 
2930: 6e 6f 63 61 73 65 20 43 4f 4c 4c 41 54 45 20 6e  nocase COLLATE n
2940: 6f 63 61 73 65 20 43 4f 4c 4c 41 54 45 20 6e 6f  ocase COLLATE no
2950: 63 61 73 65 3b 0a 7d 20 7b 61 62 63 20 44 45 46  case;.} {abc DEF
2960: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
2970: 74 20 37 2e 31 20 7b 0a 20 20 20 53 45 4c 45 43  t 7.1 {.   SELEC
2980: 54 20 27 61 62 63 27 20 55 4e 49 4f 4e 20 41 4c  T 'abc' UNION AL
2990: 4c 20 53 45 4c 45 43 54 20 27 44 45 46 27 0a 20  L SELECT 'DEF'. 
29a0: 20 20 20 4f 52 44 45 52 20 42 59 20 31 20 43 4f     ORDER BY 1 CO
29b0: 4c 4c 41 54 45 20 6e 6f 63 61 73 65 20 43 4f 4c  LLATE nocase COL
29c0: 4c 41 54 45 20 6e 6f 63 61 73 65 20 43 4f 4c 4c  LATE nocase COLL
29d0: 41 54 45 20 6e 6f 63 61 73 65 20 43 4f 4c 4c 41  ATE nocase COLLA
29e0: 54 45 20 62 69 6e 61 72 79 3b 0a 7d 20 7b 44 45  TE binary;.} {DE
29f0: 46 20 61 62 63 7d 0a 64 6f 5f 65 78 65 63 73 71  F abc}.do_execsq
2a00: 6c 5f 74 65 73 74 20 37 2e 32 20 7b 0a 20 20 20  l_test 7.2 {.   
2a10: 53 45 4c 45 43 54 20 27 61 62 63 27 20 55 4e 49  SELECT 'abc' UNI
2a20: 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20 27 44  ON ALL SELECT 'D
2a30: 45 46 27 0a 20 20 20 20 4f 52 44 45 52 20 42 59  EF'.    ORDER BY
2a40: 20 31 20 43 4f 4c 4c 41 54 45 20 62 69 6e 61 72   1 COLLATE binar
2a50: 79 20 43 4f 4c 4c 41 54 45 20 62 69 6e 61 72 79  y COLLATE binary
2a60: 20 43 4f 4c 4c 41 54 45 20 62 69 6e 61 72 79 20   COLLATE binary 
2a70: 43 4f 4c 4c 41 54 45 20 6e 6f 63 61 73 65 3b 0a  COLLATE nocase;.
2a80: 7d 20 7b 61 62 63 20 44 45 46 7d 0a 0a 0a 66 69  } {abc DEF}...fi
2a90: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.