/ Hex Artifact Content
Login

Artifact 73b91005f264b7c403e2d63a6708d150679ac99a:


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 31 2e 74   $Id: collate1.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 72 6f 75 67 68 6c 79 20 6f 72 67   are roughly org
0270: 61 6e 69 73 65 64 20 61 73 20 66 6f 6c 6c 6f 77  anised as follow
0280: 73 3a 0a 23 0a 23 20 63 6f 6c 6c 61 74 65 31 2d  s:.#.# collate1-
0290: 31 2e 2a 20 2d 20 53 69 6e 67 6c 65 2d 66 69 65  1.* - Single-fie
02a0: 6c 64 20 4f 52 44 45 52 20 42 59 20 77 69 74 68  ld ORDER BY with
02b0: 20 61 6e 20 65 78 70 6c 69 63 69 74 20 43 4f 4c   an explicit COL
02c0: 4c 41 54 45 20 63 6c 61 75 73 65 2e 0a 23 20 63  LATE clause..# c
02d0: 6f 6c 6c 61 74 65 31 2d 32 2e 2a 20 2d 20 4d 75  ollate1-2.* - Mu
02e0: 6c 74 69 2d 66 69 65 6c 64 20 4f 52 44 45 52 20  lti-field ORDER 
02f0: 42 59 20 77 69 74 68 20 61 6e 20 65 78 70 6c 69  BY with an expli
0300: 63 69 74 20 43 4f 4c 4c 41 54 45 20 63 6c 61 75  cit COLLATE clau
0310: 73 65 2e 0a 23 20 63 6f 6c 6c 61 74 65 31 2d 33  se..# collate1-3
0320: 2e 2a 20 2d 20 4f 52 44 45 52 20 42 59 20 75 73  .* - ORDER BY us
0330: 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20 63 6f  ing a default co
0340: 6c 6c 61 74 69 6f 6e 20 74 79 70 65 2e 20 41 6c  llation type. Al
0350: 73 6f 20 74 68 61 74 20 61 6e 20 0a 23 20 20 20  so that an .#   
0360: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 78 70               exp
0370: 6c 69 63 74 20 63 6f 6c 6c 61 74 65 20 74 79 70  lict collate typ
0380: 65 20 6f 76 65 72 72 69 64 65 73 20 61 20 64 65  e overrides a de
0390: 66 61 75 6c 74 20 63 6f 6c 6c 61 74 65 20 74 79  fault collate ty
03a0: 70 65 2e 0a 23 20 63 6f 6c 6c 61 74 65 31 2d 34  pe..# collate1-4
03b0: 2e 2a 20 2d 20 4f 52 44 45 52 20 42 59 20 75 73  .* - ORDER BY us
03c0: 69 6e 67 20 61 20 64 61 74 61 20 74 79 70 65 2e  ing a data type.
03d0: 0a 23 0a 0a 23 0a 23 20 43 6f 6c 6c 61 74 69 6f  .#..#.# Collatio
03e0: 6e 20 74 79 70 65 20 27 48 45 58 27 2e 20 49 66  n type 'HEX'. If
03f0: 20 61 6e 20 61 72 67 75 6d 65 6e 74 20 63 61 6e   an argument can
0400: 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64 20   be interpreted 
0410: 61 73 20 61 20 68 65 78 61 64 65 63 69 6d 61 6c  as a hexadecimal
0420: 0a 23 20 6e 75 6d 62 65 72 2c 20 74 68 65 6e 20  .# number, then 
0430: 69 74 20 69 73 20 63 6f 6e 76 65 72 74 65 64 20  it is converted 
0440: 74 6f 20 6f 6e 65 20 62 65 66 6f 72 65 20 74 68  to one before th
0450: 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  e comparison is 
0460: 70 65 72 66 6f 72 6d 65 64 2e 20 0a 23 20 4e 75  performed. .# Nu
0470: 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20 74  mbers are less t
0480: 68 61 6e 20 6f 74 68 65 72 20 73 74 72 69 6e 67  han other string
0490: 73 2e 20 49 66 20 6e 65 69 74 68 65 72 20 61 72  s. If neither ar
04a0: 67 75 6d 65 6e 74 20 69 73 20 61 20 6e 75 6d 62  gument is a numb
04b0: 65 72 2c 20 0a 23 20 5b 73 74 72 69 6e 67 20 63  er, .# [string c
04c0: 6f 6d 70 61 72 65 5d 20 69 73 20 75 73 65 64 2e  ompare] is used.
04d0: 0a 23 0a 64 62 20 63 6f 6c 6c 61 74 65 20 48 45  .#.db collate HE
04e0: 58 20 68 65 78 5f 63 6f 6c 6c 61 74 65 0a 70 72  X hex_collate.pr
04f0: 6f 63 20 68 65 78 5f 63 6f 6c 6c 61 74 65 20 7b  oc hex_collate {
0500: 6c 68 73 20 72 68 73 7d 20 7b 0a 20 20 73 65 74  lhs rhs} {.  set
0510: 20 6c 68 73 5f 69 73 68 65 78 20 5b 72 65 67 65   lhs_ishex [rege
0520: 78 70 20 7b 5e 28 30 78 7c 29 5b 31 32 33 34 35  xp {^(0x|)[12345
0530: 36 37 38 39 30 61 62 63 64 65 66 41 42 43 44 45  67890abcdefABCDE
0540: 46 5d 2b 24 7d 20 24 6c 68 73 5d 0a 20 20 73 65  F]+$} $lhs].  se
0550: 74 20 72 68 73 5f 69 73 68 65 78 20 5b 72 65 67  t rhs_ishex [reg
0560: 65 78 70 20 7b 5e 28 30 78 7c 29 5b 31 32 33 34  exp {^(0x|)[1234
0570: 35 36 37 38 39 30 61 62 63 64 65 66 41 42 43 44  567890abcdefABCD
0580: 45 46 5d 2b 24 7d 20 24 72 68 73 5d 0a 20 20 69  EF]+$} $rhs].  i
0590: 66 20 7b 24 6c 68 73 5f 69 73 68 65 78 20 26 26  f {$lhs_ishex &&
05a0: 20 24 72 68 73 5f 69 73 68 65 78 7d 20 7b 20 0a   $rhs_ishex} { .
05b0: 20 20 20 20 73 65 74 20 6c 68 73 78 20 5b 73 63      set lhsx [sc
05c0: 61 6e 20 24 6c 68 73 20 25 78 5d 0a 20 20 20 20  an $lhs %x].    
05d0: 73 65 74 20 72 68 73 78 20 5b 73 63 61 6e 20 24  set rhsx [scan $
05e0: 72 68 73 20 25 78 5d 0a 20 20 20 20 69 66 20 7b  rhs %x].    if {
05f0: 24 6c 68 73 20 3c 20 24 72 68 73 7d 20 7b 72 65  $lhs < $rhs} {re
0600: 74 75 72 6e 20 2d 31 7d 0a 20 20 20 20 69 66 20  turn -1}.    if 
0610: 7b 24 6c 68 73 20 3d 3d 20 24 72 68 73 7d 20 7b  {$lhs == $rhs} {
0620: 72 65 74 75 72 6e 20 30 7d 0a 20 20 20 20 69 66  return 0}.    if
0630: 20 7b 24 6c 68 73 20 3e 20 24 72 68 73 7d 20 7b   {$lhs > $rhs} {
0640: 72 65 74 75 72 6e 20 31 7d 0a 20 20 7d 0a 20 20  return 1}.  }.  
0650: 69 66 20 7b 24 6c 68 73 5f 69 73 68 65 78 7d 20  if {$lhs_ishex} 
0660: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b  {.    return -1;
0670: 0a 20 20 7d 0a 20 20 69 66 20 7b 24 72 68 73 5f  .  }.  if {$rhs_
0680: 69 73 68 65 78 7d 20 7b 0a 20 20 20 20 72 65 74  ishex} {.    ret
0690: 75 72 6e 20 31 3b 0a 20 20 7d 0a 20 20 72 65 74  urn 1;.  }.  ret
06a0: 75 72 6e 20 5b 73 74 72 69 6e 67 20 63 6f 6d 70  urn [string comp
06b0: 61 72 65 20 24 6c 68 73 20 24 72 68 73 5d 0a 7d  are $lhs $rhs].}
06c0: 0a 64 62 20 66 75 6e 63 74 69 6f 6e 20 68 65 78  .db function hex
06d0: 20 7b 66 6f 72 6d 61 74 20 30 78 25 58 7d 0a 0a   {format 0x%X}..
06e0: 23 20 4d 69 6d 69 63 20 74 68 65 20 53 51 4c 69  # Mimic the SQLi
06f0: 74 65 20 32 20 63 6f 6c 6c 61 74 69 6f 6e 20 74  te 2 collation t
0700: 79 70 65 20 4e 55 4d 45 52 49 43 2e 0a 64 62 20  ype NUMERIC..db 
0710: 63 6f 6c 6c 61 74 65 20 6e 75 6d 65 72 69 63 20  collate numeric 
0720: 6e 75 6d 65 72 69 63 5f 63 6f 6c 6c 61 74 65 0a  numeric_collate.
0730: 70 72 6f 63 20 6e 75 6d 65 72 69 63 5f 63 6f 6c  proc numeric_col
0740: 6c 61 74 65 20 7b 6c 68 73 20 72 68 73 7d 20 7b  late {lhs rhs} {
0750: 0a 20 20 69 66 20 7b 24 6c 68 73 20 3d 3d 20 24  .  if {$lhs == $
0760: 72 68 73 7d 20 7b 72 65 74 75 72 6e 20 30 7d 20  rhs} {return 0} 
0770: 0a 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20  .  return [expr 
0780: 28 24 6c 68 73 3e 24 72 68 73 29 3f 31 3a 2d 31  ($lhs>$rhs)?1:-1
0790: 5d 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 6f 6c  ].}..do_test col
07a0: 6c 61 74 65 31 2d 31 2e 30 20 7b 0a 20 20 65 78  late1-1.0 {.  ex
07b0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
07c0: 54 45 20 54 41 42 4c 45 20 63 6f 6c 6c 61 74 65  TE TABLE collate
07d0: 31 74 31 28 63 31 2c 20 63 32 29 3b 0a 20 20 20  1t1(c1, c2);.   
07e0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c   INSERT INTO col
07f0: 6c 61 74 65 31 74 31 20 56 41 4c 55 45 53 28 34  late1t1 VALUES(4
0800: 35 2c 20 68 65 78 28 34 35 29 29 3b 0a 20 20 20  5, hex(45));.   
0810: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c   INSERT INTO col
0820: 6c 61 74 65 31 74 31 20 56 41 4c 55 45 53 28 4e  late1t1 VALUES(N
0830: 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20 20  ULL, NULL);.    
0840: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c  INSERT INTO coll
0850: 61 74 65 31 74 31 20 56 41 4c 55 45 53 28 32 38  ate1t1 VALUES(28
0860: 31 2c 20 68 65 78 28 32 38 31 29 29 3b 0a 20 20  1, hex(281));.  
0870: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63  }.} {}.do_test c
0880: 6f 6c 6c 61 74 65 31 2d 31 2e 31 20 7b 0a 20 20  ollate1-1.1 {.  
0890: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
08a0: 4c 45 43 54 20 63 32 20 46 52 4f 4d 20 63 6f 6c  LECT c2 FROM col
08b0: 6c 61 74 65 31 74 31 20 4f 52 44 45 52 20 42 59  late1t1 ORDER BY
08c0: 20 31 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 30 78   1;.  }.} {{} 0x
08d0: 31 31 39 20 30 78 32 44 7d 0a 64 6f 5f 74 65 73  119 0x2D}.do_tes
08e0: 74 20 63 6f 6c 6c 61 74 65 31 2d 31 2e 32 20 7b  t collate1-1.2 {
08f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0900: 20 53 45 4c 45 43 54 20 63 32 20 46 52 4f 4d 20   SELECT c2 FROM 
0910: 63 6f 6c 6c 61 74 65 31 74 31 20 4f 52 44 45 52  collate1t1 ORDER
0920: 20 42 59 20 31 20 43 4f 4c 4c 41 54 45 20 68 65   BY 1 COLLATE he
0930: 78 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 30 78 32  x;.  }.} {{} 0x2
0940: 44 20 30 78 31 31 39 7d 0a 64 6f 5f 74 65 73 74  D 0x119}.do_test
0950: 20 63 6f 6c 6c 61 74 65 31 2d 31 2e 33 20 7b 0a   collate1-1.3 {.
0960: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0970: 53 45 4c 45 43 54 20 63 32 20 46 52 4f 4d 20 63  SELECT c2 FROM c
0980: 6f 6c 6c 61 74 65 31 74 31 20 4f 52 44 45 52 20  ollate1t1 ORDER 
0990: 42 59 20 31 20 43 4f 4c 4c 41 54 45 20 68 65 78  BY 1 COLLATE hex
09a0: 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 30 78   DESC;.  }.} {0x
09b0: 31 31 39 20 30 78 32 44 20 7b 7d 7d 0a 64 6f 5f  119 0x2D {}}.do_
09c0: 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 31 2e  test collate1-1.
09d0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  4 {.  execsql {.
09e0: 20 20 20 53 45 4c 45 43 54 20 63 32 20 46 52 4f     SELECT c2 FRO
09f0: 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20 4f 52 44  M collate1t1 ORD
0a00: 45 52 20 42 59 20 31 20 43 4f 4c 4c 41 54 45 20  ER BY 1 COLLATE 
0a10: 68 65 78 20 41 53 43 3b 0a 20 20 7d 0a 7d 20 7b  hex ASC;.  }.} {
0a20: 7b 7d 20 30 78 32 44 20 30 78 31 31 39 7d 0a 64  {} 0x2D 0x119}.d
0a30: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d  o_test collate1-
0a40: 31 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.5 {.  execsql 
0a50: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 32 20  {.    SELECT c2 
0a60: 43 4f 4c 4c 41 54 45 20 68 65 78 20 46 52 4f 4d  COLLATE hex FROM
0a70: 20 63 6f 6c 6c 61 74 65 31 74 31 20 4f 52 44 45   collate1t1 ORDE
0a80: 52 20 42 59 20 31 0a 20 20 7d 0a 7d 20 7b 7b 7d  R BY 1.  }.} {{}
0a90: 20 30 78 32 44 20 30 78 31 31 39 7d 0a 64 6f 5f   0x2D 0x119}.do_
0aa0: 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 31 2e  test collate1-1.
0ab0: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  6 {.  execsql {.
0ac0: 20 20 20 20 53 45 4c 45 43 54 20 63 32 20 43 4f      SELECT c2 CO
0ad0: 4c 4c 41 54 45 20 68 65 78 20 46 52 4f 4d 20 63  LLATE hex FROM c
0ae0: 6f 6c 6c 61 74 65 31 74 31 20 4f 52 44 45 52 20  ollate1t1 ORDER 
0af0: 42 59 20 31 20 41 53 43 0a 20 20 7d 0a 7d 20 7b  BY 1 ASC.  }.} {
0b00: 7b 7d 20 30 78 32 44 20 30 78 31 31 39 7d 0a 64  {} 0x2D 0x119}.d
0b10: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d  o_test collate1-
0b20: 31 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.7 {.  execsql 
0b30: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 32 20  {.    SELECT c2 
0b40: 43 4f 4c 4c 41 54 45 20 68 65 78 20 46 52 4f 4d  COLLATE hex FROM
0b50: 20 63 6f 6c 6c 61 74 65 31 74 31 20 4f 52 44 45   collate1t1 ORDE
0b60: 52 20 42 59 20 31 20 44 45 53 43 0a 20 20 7d 0a  R BY 1 DESC.  }.
0b70: 7d 20 7b 30 78 31 31 39 20 30 78 32 44 20 7b 7d  } {0x119 0x2D {}
0b80: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  }.do_test collat
0b90: 65 31 2d 31 2e 39 39 20 7b 0a 20 20 65 78 65 63  e1-1.99 {.  exec
0ba0: 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f 50 20 54  sql {.    DROP T
0bb0: 41 42 4c 45 20 63 6f 6c 6c 61 74 65 31 74 31 3b  ABLE collate1t1;
0bc0: 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65  .  }.} {}..do_te
0bd0: 73 74 20 63 6f 6c 6c 61 74 65 31 2d 32 2e 30 20  st collate1-2.0 
0be0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0bf0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63    CREATE TABLE c
0c00: 6f 6c 6c 61 74 65 31 74 31 28 63 31 2c 20 63 32  ollate1t1(c1, c2
0c10: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
0c20: 54 4f 20 63 6f 6c 6c 61 74 65 31 74 31 20 56 41  TO collate1t1 VA
0c30: 4c 55 45 53 28 27 35 27 2c 20 27 30 78 31 31 27  LUES('5', '0x11'
0c40: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
0c50: 54 4f 20 63 6f 6c 6c 61 74 65 31 74 31 20 56 41  TO collate1t1 VA
0c60: 4c 55 45 53 28 27 35 27 2c 20 27 30 78 41 27 29  LUES('5', '0xA')
0c70: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0c80: 4f 20 63 6f 6c 6c 61 74 65 31 74 31 20 56 41 4c  O collate1t1 VAL
0c90: 55 45 53 28 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b  UES(NULL, NULL);
0ca0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0cb0: 20 63 6f 6c 6c 61 74 65 31 74 31 20 56 41 4c 55   collate1t1 VALU
0cc0: 45 53 28 27 37 27 2c 20 27 30 78 41 27 29 3b 0a  ES('7', '0xA');.
0cd0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0ce0: 63 6f 6c 6c 61 74 65 31 74 31 20 56 41 4c 55 45  collate1t1 VALUE
0cf0: 53 28 27 31 31 27 2c 20 27 30 78 31 31 27 29 3b  S('11', '0x11');
0d00: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
0d10: 20 63 6f 6c 6c 61 74 65 31 74 31 20 56 41 4c 55   collate1t1 VALU
0d20: 45 53 28 27 31 31 27 2c 20 27 30 78 31 30 31 27  ES('11', '0x101'
0d30: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  );.  }.} {}.do_t
0d40: 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 32 2e 32  est collate1-2.2
0d50: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0d60: 20 20 20 53 45 4c 45 43 54 20 63 31 2c 20 63 32     SELECT c1, c2
0d70: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31   FROM collate1t1
0d80: 20 4f 52 44 45 52 20 42 59 20 31 20 43 4f 4c 4c   ORDER BY 1 COLL
0d90: 41 54 45 20 6e 75 6d 65 72 69 63 2c 20 32 20 43  ATE numeric, 2 C
0da0: 4f 4c 4c 41 54 45 20 68 65 78 3b 0a 20 20 7d 0a  OLLATE hex;.  }.
0db0: 7d 20 7b 7b 7d 20 7b 7d 20 35 20 30 78 41 20 35  } {{} {} 5 0xA 5
0dc0: 20 30 78 31 31 20 37 20 30 78 41 20 31 31 20 30   0x11 7 0xA 11 0
0dd0: 78 31 31 20 31 31 20 30 78 31 30 31 7d 0a 64 6f  x11 11 0x101}.do
0de0: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 32  _test collate1-2
0df0: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
0e00: 0a 20 20 20 20 53 45 4c 45 43 54 20 63 31 2c 20  .    SELECT c1, 
0e10: 63 32 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31  c2 FROM collate1
0e20: 74 31 20 4f 52 44 45 52 20 42 59 20 31 20 43 4f  t1 ORDER BY 1 CO
0e30: 4c 4c 41 54 45 20 62 69 6e 61 72 79 2c 20 32 20  LLATE binary, 2 
0e40: 43 4f 4c 4c 41 54 45 20 68 65 78 3b 0a 20 20 7d  COLLATE hex;.  }
0e50: 0a 7d 20 7b 7b 7d 20 7b 7d 20 31 31 20 30 78 31  .} {{} {} 11 0x1
0e60: 31 20 31 31 20 30 78 31 30 31 20 35 20 30 78 41  1 11 0x101 5 0xA
0e70: 20 35 20 30 78 31 31 20 37 20 30 78 41 7d 0a 64   5 0x11 7 0xA}.d
0e80: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d  o_test collate1-
0e90: 32 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.4 {.  execsql 
0ea0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 31 2c  {.    SELECT c1,
0eb0: 20 63 32 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65   c2 FROM collate
0ec0: 31 74 31 20 4f 52 44 45 52 20 42 59 20 31 20 43  1t1 ORDER BY 1 C
0ed0: 4f 4c 4c 41 54 45 20 62 69 6e 61 72 79 20 44 45  OLLATE binary DE
0ee0: 53 43 2c 20 32 20 43 4f 4c 4c 41 54 45 20 68 65  SC, 2 COLLATE he
0ef0: 78 3b 0a 20 20 7d 0a 7d 20 7b 37 20 30 78 41 20  x;.  }.} {7 0xA 
0f00: 35 20 30 78 41 20 35 20 30 78 31 31 20 31 31 20  5 0xA 5 0x11 11 
0f10: 30 78 31 31 20 31 31 20 30 78 31 30 31 20 7b 7d  0x11 11 0x101 {}
0f20: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c   {}}.do_test col
0f30: 6c 61 74 65 31 2d 32 2e 35 20 7b 0a 20 20 65 78  late1-2.5 {.  ex
0f40: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
0f50: 43 54 20 63 31 2c 20 63 32 20 46 52 4f 4d 20 63  CT c1, c2 FROM c
0f60: 6f 6c 6c 61 74 65 31 74 31 20 0a 20 20 20 20 20  ollate1t1 .     
0f70: 20 20 20 4f 52 44 45 52 20 42 59 20 31 20 43 4f     ORDER BY 1 CO
0f80: 4c 4c 41 54 45 20 62 69 6e 61 72 79 20 44 45 53  LLATE binary DES
0f90: 43 2c 20 32 20 43 4f 4c 4c 41 54 45 20 68 65 78  C, 2 COLLATE hex
0fa0: 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 37 20   DESC;.  }.} {7 
0fb0: 30 78 41 20 35 20 30 78 31 31 20 35 20 30 78 41  0xA 5 0x11 5 0xA
0fc0: 20 31 31 20 30 78 31 30 31 20 31 31 20 30 78 31   11 0x101 11 0x1
0fd0: 31 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74  1 {} {}}.do_test
0fe0: 20 63 6f 6c 6c 61 74 65 31 2d 32 2e 36 20 7b 0a   collate1-2.6 {.
0ff0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1000: 53 45 4c 45 43 54 20 63 31 2c 20 63 32 20 46 52  SELECT c1, c2 FR
1010: 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20 0a 20  OM collate1t1 . 
1020: 20 20 20 20 20 20 20 4f 52 44 45 52 20 42 59 20         ORDER BY 
1030: 31 20 43 4f 4c 4c 41 54 45 20 62 69 6e 61 72 79  1 COLLATE binary
1040: 20 41 53 43 2c 20 32 20 43 4f 4c 4c 41 54 45 20   ASC, 2 COLLATE 
1050: 68 65 78 20 41 53 43 3b 0a 20 20 7d 0a 7d 20 7b  hex ASC;.  }.} {
1060: 7b 7d 20 7b 7d 20 31 31 20 30 78 31 31 20 31 31  {} {} 11 0x11 11
1070: 20 30 78 31 30 31 20 35 20 30 78 41 20 35 20 30   0x101 5 0xA 5 0
1080: 78 31 31 20 37 20 30 78 41 7d 0a 64 6f 5f 74 65  x11 7 0xA}.do_te
1090: 73 74 20 63 6f 6c 6c 61 74 65 31 2d 32 2e 31 32  st collate1-2.12
10a0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
10b0: 0a 20 20 20 20 53 45 4c 45 43 54 20 63 31 20 43  .    SELECT c1 C
10c0: 4f 4c 4c 41 54 45 20 6e 75 6d 65 72 69 63 2c 20  OLLATE numeric, 
10d0: 63 32 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31  c2 FROM collate1
10e0: 74 31 20 0a 20 20 20 20 20 4f 52 44 45 52 20 42  t1 .     ORDER B
10f0: 59 20 31 2c 20 32 20 43 4f 4c 4c 41 54 45 20 68  Y 1, 2 COLLATE h
1100: 65 78 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 7b 7d  ex;.  }.} {{} {}
1110: 20 35 20 30 78 41 20 35 20 30 78 31 31 20 37 20   5 0xA 5 0x11 7 
1120: 30 78 41 20 31 31 20 30 78 31 31 20 31 31 20 30  0xA 11 0x11 11 0
1130: 78 31 30 31 7d 0a 64 6f 5f 74 65 73 74 20 63 6f  x101}.do_test co
1140: 6c 6c 61 74 65 31 2d 32 2e 31 32 2e 32 20 7b 0a  llate1-2.12.2 {.
1150: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1160: 53 45 4c 45 43 54 20 63 31 20 43 4f 4c 4c 41 54  SELECT c1 COLLAT
1170: 45 20 68 65 78 2c 20 63 32 20 46 52 4f 4d 20 63  E hex, c2 FROM c
1180: 6f 6c 6c 61 74 65 31 74 31 20 0a 20 20 20 20 20  ollate1t1 .     
1190: 4f 52 44 45 52 20 42 59 20 31 20 43 4f 4c 4c 41  ORDER BY 1 COLLA
11a0: 54 45 20 6e 75 6d 65 72 69 63 2c 20 32 20 43 4f  TE numeric, 2 CO
11b0: 4c 4c 41 54 45 20 68 65 78 3b 0a 20 20 7d 0a 7d  LLATE hex;.  }.}
11c0: 20 7b 7b 7d 20 7b 7d 20 35 20 30 78 41 20 35 20   {{} {} 5 0xA 5 
11d0: 30 78 31 31 20 37 20 30 78 41 20 31 31 20 30 78  0x11 7 0xA 11 0x
11e0: 31 31 20 31 31 20 30 78 31 30 31 7d 0a 64 6f 5f  11 11 0x101}.do_
11f0: 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 32 2e  test collate1-2.
1200: 31 32 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  12.3 {.  execsql
1210: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 31   {.    SELECT c1
1220: 2c 20 63 32 20 43 4f 4c 4c 41 54 45 20 68 65 78  , c2 COLLATE hex
1230: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31   FROM collate1t1
1240: 20 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59 20   .     ORDER BY 
1250: 31 20 43 4f 4c 4c 41 54 45 20 6e 75 6d 65 72 69  1 COLLATE numeri
1260: 63 2c 20 32 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20  c, 2;.  }.} {{} 
1270: 7b 7d 20 35 20 30 78 41 20 35 20 30 78 31 31 20  {} 5 0xA 5 0x11 
1280: 37 20 30 78 41 20 31 31 20 30 78 31 31 20 31 31  7 0xA 11 0x11 11
1290: 20 30 78 31 30 31 7d 0a 64 6f 5f 74 65 73 74 20   0x101}.do_test 
12a0: 63 6f 6c 6c 61 74 65 31 2d 32 2e 31 32 2e 34 20  collate1-2.12.4 
12b0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
12c0: 20 20 53 45 4c 45 43 54 20 63 31 20 43 4f 4c 4c    SELECT c1 COLL
12d0: 41 54 45 20 6e 75 6d 65 72 69 63 2c 20 63 32 20  ATE numeric, c2 
12e0: 43 4f 4c 4c 41 54 45 20 68 65 78 0a 20 20 20 20  COLLATE hex.    
12f0: 20 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74    FROM collate1t
1300: 31 20 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59  1 .     ORDER BY
1310: 20 31 2c 20 32 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d   1, 2;.  }.} {{}
1320: 20 7b 7d 20 35 20 30 78 41 20 35 20 30 78 31 31   {} 5 0xA 5 0x11
1330: 20 37 20 30 78 41 20 31 31 20 30 78 31 31 20 31   7 0xA 11 0x11 1
1340: 31 20 30 78 31 30 31 7d 0a 64 6f 5f 74 65 73 74  1 0x101}.do_test
1350: 20 63 6f 6c 6c 61 74 65 31 2d 32 2e 31 33 20 7b   collate1-2.13 {
1360: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1370: 20 53 45 4c 45 43 54 20 63 31 20 43 4f 4c 4c 41   SELECT c1 COLLA
1380: 54 45 20 62 69 6e 61 72 79 2c 20 63 32 20 43 4f  TE binary, c2 CO
1390: 4c 4c 41 54 45 20 68 65 78 0a 20 20 20 20 20 20  LLATE hex.      
13a0: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31 0a  FROM collate1t1.
13b0: 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 31 2c       ORDER BY 1,
13c0: 20 32 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 7b 7d   2;.  }.} {{} {}
13d0: 20 31 31 20 30 78 31 31 20 31 31 20 30 78 31 30   11 0x11 11 0x10
13e0: 31 20 35 20 30 78 41 20 35 20 30 78 31 31 20 37  1 5 0xA 5 0x11 7
13f0: 20 30 78 41 7d 0a 64 6f 5f 74 65 73 74 20 63 6f   0xA}.do_test co
1400: 6c 6c 61 74 65 31 2d 32 2e 31 34 20 7b 0a 20 20  llate1-2.14 {.  
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 63 31 2c 20 63 32 0a 20 20 20 20  LECT c1, c2.    
1430: 20 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74    FROM collate1t
1440: 31 20 4f 52 44 45 52 20 42 59 20 31 20 43 4f 4c  1 ORDER BY 1 COL
1450: 4c 41 54 45 20 62 69 6e 61 72 79 20 44 45 53 43  LATE binary DESC
1460: 2c 20 32 20 43 4f 4c 4c 41 54 45 20 68 65 78 3b  , 2 COLLATE hex;
1470: 0a 20 20 7d 0a 7d 20 7b 37 20 30 78 41 20 35 20  .  }.} {7 0xA 5 
1480: 30 78 41 20 35 20 30 78 31 31 20 31 31 20 30 78  0xA 5 0x11 11 0x
1490: 31 31 20 31 31 20 30 78 31 30 31 20 7b 7d 20 7b  11 11 0x101 {} {
14a0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  }}.do_test colla
14b0: 74 65 31 2d 32 2e 31 35 20 7b 0a 20 20 65 78 65  te1-2.15 {.  exe
14c0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
14d0: 54 20 63 31 20 43 4f 4c 4c 41 54 45 20 62 69 6e  T c1 COLLATE bin
14e0: 61 72 79 2c 20 63 32 20 43 4f 4c 4c 41 54 45 20  ary, c2 COLLATE 
14f0: 68 65 78 0a 20 20 20 20 20 20 46 52 4f 4d 20 63  hex.      FROM c
1500: 6f 6c 6c 61 74 65 31 74 31 20 0a 20 20 20 20 20  ollate1t1 .     
1510: 4f 52 44 45 52 20 42 59 20 31 20 44 45 53 43 2c  ORDER BY 1 DESC,
1520: 20 32 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b   2 DESC;.  }.} {
1530: 37 20 30 78 41 20 35 20 30 78 31 31 20 35 20 30  7 0xA 5 0x11 5 0
1540: 78 41 20 31 31 20 30 78 31 30 31 20 31 31 20 30  xA 11 0x101 11 0
1550: 78 31 31 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65  x11 {} {}}.do_te
1560: 73 74 20 63 6f 6c 6c 61 74 65 31 2d 32 2e 31 36  st collate1-2.16
1570: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1580: 20 20 20 53 45 4c 45 43 54 20 63 31 20 43 4f 4c     SELECT c1 COL
1590: 4c 41 54 45 20 68 65 78 2c 20 63 32 20 43 4f 4c  LATE hex, c2 COL
15a0: 4c 41 54 45 20 62 69 6e 61 72 79 0a 20 20 20 20  LATE binary.    
15b0: 20 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74    FROM collate1t
15c0: 31 20 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59  1 .     ORDER BY
15d0: 20 31 20 43 4f 4c 4c 41 54 45 20 62 69 6e 61 72   1 COLLATE binar
15e0: 79 20 41 53 43 2c 20 32 20 43 4f 4c 4c 41 54 45  y ASC, 2 COLLATE
15f0: 20 68 65 78 20 41 53 43 3b 0a 20 20 7d 0a 7d 20   hex ASC;.  }.} 
1600: 7b 7b 7d 20 7b 7d 20 31 31 20 30 78 31 31 20 31  {{} {} 11 0x11 1
1610: 31 20 30 78 31 30 31 20 35 20 30 78 41 20 35 20  1 0x101 5 0xA 5 
1620: 30 78 31 31 20 37 20 30 78 41 7d 0a 64 6f 5f 74  0x11 7 0xA}.do_t
1630: 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 32 2e 39  est collate1-2.9
1640: 39 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  9 {.  execsql {.
1650: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 63      DROP TABLE c
1660: 6f 6c 6c 61 74 65 31 74 31 3b 0a 20 20 7d 0a 7d  ollate1t1;.  }.}
1670: 20 7b 7d 0a 0a 23 0a 23 20 54 68 65 73 65 20 74   {}..#.# These t
1680: 65 73 74 73 20 65 6e 73 75 72 65 20 74 68 61 74  ests ensure that
1690: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6c   the default col
16a0: 6c 61 74 69 6f 6e 20 74 79 70 65 20 66 6f 72 20  lation type for 
16b0: 61 20 63 6f 6c 75 6d 6e 20 69 73 20 75 73 65 64  a column is used
16c0: 20 0a 23 20 62 79 20 61 6e 20 4f 52 44 45 52 20   .# by an ORDER 
16d0: 42 59 20 63 6c 61 75 73 65 20 63 6f 72 72 65 63  BY clause correc
16e0: 74 6c 79 2e 20 54 68 65 20 66 6f 63 75 73 20 69  tly. The focus i
16f0: 73 20 61 6c 6c 20 74 68 65 20 64 69 66 66 65 72  s all the differ
1700: 65 6e 74 20 77 61 79 73 0a 23 20 74 68 65 20 63  ent ways.# the c
1710: 6f 6c 75 6d 6e 20 63 61 6e 20 62 65 20 72 65 66  olumn can be ref
1720: 65 72 65 6e 63 65 64 2e 20 69 2e 65 2e 20 61 2c  erenced. i.e. a,
1730: 20 63 6f 6c 6c 61 74 65 32 74 31 2e 61 2c 20 6d   collate2t1.a, m
1740: 61 69 6e 2e 63 6f 6c 6c 61 74 65 32 74 31 2e 61  ain.collate2t1.a
1750: 20 65 74 63 2e 0a 23 0a 64 6f 5f 74 65 73 74 20   etc..#.do_test 
1760: 63 6f 6c 6c 61 74 65 31 2d 33 2e 30 20 7b 0a 20  collate1-3.0 {. 
1770: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
1780: 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6c 6c  REATE TABLE coll
1790: 61 74 65 31 74 31 28 61 20 43 4f 4c 4c 41 54 45  ate1t1(a COLLATE
17a0: 20 68 65 78 2c 20 62 29 3b 0a 20 20 20 20 49 4e   hex, b);.    IN
17b0: 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74  SERT INTO collat
17c0: 65 31 74 31 20 56 41 4c 55 45 53 28 20 27 30 78  e1t1 VALUES( '0x
17d0: 35 27 2c 20 35 20 29 3b 0a 20 20 20 20 49 4e 53  5', 5 );.    INS
17e0: 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65  ERT INTO collate
17f0: 31 74 31 20 56 41 4c 55 45 53 28 20 27 31 27 2c  1t1 VALUES( '1',
1800: 20 31 20 29 3b 0a 20 20 20 20 49 4e 53 45 52 54   1 );.    INSERT
1810: 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 31 74 31   INTO collate1t1
1820: 20 56 41 4c 55 45 53 28 20 27 30 78 34 35 27 2c   VALUES( '0x45',
1830: 20 36 39 20 29 3b 0a 20 20 20 20 49 4e 53 45 52   69 );.    INSER
1840: 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 31 74  T INTO collate1t
1850: 31 20 56 41 4c 55 45 53 28 20 4e 55 4c 4c 2c 20  1 VALUES( NULL, 
1860: 4e 55 4c 4c 20 29 3b 0a 20 20 20 20 53 45 4c 45  NULL );.    SELE
1870: 43 54 20 2a 20 46 52 4f 4d 20 63 6f 6c 6c 61 74  CT * FROM collat
1880: 65 31 74 31 20 4f 52 44 45 52 20 42 59 20 61 3b  e1t1 ORDER BY a;
1890: 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 7b 7d 20 31 20  .  }.} {{} {} 1 
18a0: 31 20 30 78 35 20 35 20 30 78 34 35 20 36 39 7d  1 0x5 5 0x45 69}
18b0: 0a 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  ..do_test collat
18c0: 65 31 2d 33 2e 31 20 7b 0a 20 20 65 78 65 63 73  e1-3.1 {.  execs
18d0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
18e0: 2a 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74  * FROM collate1t
18f0: 31 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20  1 ORDER BY 1;.  
1900: 7d 0a 7d 20 7b 7b 7d 20 7b 7d 20 31 20 31 20 30  }.} {{} {} 1 1 0
1910: 78 35 20 35 20 30 78 34 35 20 36 39 7d 0a 64 6f  x5 5 0x45 69}.do
1920: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 33  _test collate1-3
1930: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
1940: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
1950: 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20 4f 52  OM collate1t1 OR
1960: 44 45 52 20 42 59 20 63 6f 6c 6c 61 74 65 31 74  DER BY collate1t
1970: 31 2e 61 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 7b  1.a;.  }.} {{} {
1980: 7d 20 31 20 31 20 30 78 35 20 35 20 30 78 34 35  } 1 1 0x5 5 0x45
1990: 20 36 39 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c   69}.do_test col
19a0: 6c 61 74 65 31 2d 33 2e 33 20 7b 0a 20 20 65 78  late1-3.3 {.  ex
19b0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
19c0: 43 54 20 2a 20 46 52 4f 4d 20 63 6f 6c 6c 61 74  CT * FROM collat
19d0: 65 31 74 31 20 4f 52 44 45 52 20 42 59 20 6d 61  e1t1 ORDER BY ma
19e0: 69 6e 2e 63 6f 6c 6c 61 74 65 31 74 31 2e 61 3b  in.collate1t1.a;
19f0: 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 7b 7d 20 31 20  .  }.} {{} {} 1 
1a00: 31 20 30 78 35 20 35 20 30 78 34 35 20 36 39 7d  1 0x5 5 0x45 69}
1a10: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65  .do_test collate
1a20: 31 2d 33 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  1-3.4 {.  execsq
1a30: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
1a40: 20 61 73 20 63 31 2c 20 62 20 61 73 20 63 32 20   as c1, b as c2 
1a50: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20  FROM collate1t1 
1a60: 4f 52 44 45 52 20 42 59 20 63 31 3b 0a 20 20 7d  ORDER BY c1;.  }
1a70: 0a 7d 20 7b 7b 7d 20 7b 7d 20 31 20 31 20 30 78  .} {{} {} 1 1 0x
1a80: 35 20 35 20 30 78 34 35 20 36 39 7d 0a 64 6f 5f  5 5 0x45 69}.do_
1a90: 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 33 2e  test collate1-3.
1aa0: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  5 {.  execsql {.
1ab0: 20 20 20 20 53 45 4c 45 43 54 20 61 20 61 73 20      SELECT a as 
1ac0: 63 31 2c 20 62 20 61 73 20 63 32 20 46 52 4f 4d  c1, b as c2 FROM
1ad0: 20 63 6f 6c 6c 61 74 65 31 74 31 20 4f 52 44 45   collate1t1 ORDE
1ae0: 52 20 42 59 20 63 31 20 43 4f 4c 4c 41 54 45 20  R BY c1 COLLATE 
1af0: 62 69 6e 61 72 79 3b 0a 20 20 7d 0a 7d 20 7b 7b  binary;.  }.} {{
1b00: 7d 20 7b 7d 20 30 78 34 35 20 36 39 20 30 78 35  } {} 0x45 69 0x5
1b10: 20 35 20 31 20 31 7d 0a 64 6f 5f 74 65 73 74 20   5 1 1}.do_test 
1b20: 63 6f 6c 6c 61 74 65 31 2d 33 2e 35 2e 31 20 7b  collate1-3.5.1 {
1b30: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1b40: 20 53 45 4c 45 43 54 20 61 20 43 4f 4c 4c 41 54   SELECT a COLLAT
1b50: 45 20 62 69 6e 61 72 79 20 61 73 20 63 31 2c 20  E binary as c1, 
1b60: 62 20 61 73 20 63 32 0a 20 20 20 20 20 20 46 52  b as c2.      FR
1b70: 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20 4f 52  OM collate1t1 OR
1b80: 44 45 52 20 42 59 20 63 31 3b 0a 20 20 7d 0a 7d  DER BY c1;.  }.}
1b90: 20 7b 7b 7d 20 7b 7d 20 30 78 34 35 20 36 39 20   {{} {} 0x45 69 
1ba0: 30 78 35 20 35 20 31 20 31 7d 0a 64 6f 5f 74 65  0x5 5 1 1}.do_te
1bb0: 73 74 20 63 6f 6c 6c 61 74 65 31 2d 33 2e 36 20  st collate1-3.6 
1bc0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1bd0: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f 6c    DROP TABLE col
1be0: 6c 61 74 65 31 74 31 3b 0a 20 20 7d 0a 7d 20 7b  late1t1;.  }.} {
1bf0: 7d 0a 0a 23 20 55 70 64 61 74 65 20 66 6f 72 20  }..# Update for 
1c00: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 33  SQLite version 3
1c10: 2e 20 54 68 65 20 63 6f 6c 6c 61 74 65 31 2d 34  . The collate1-4
1c20: 2e 2a 20 74 65 73 74 20 63 61 73 65 73 20 77 65  .* test cases we
1c30: 72 65 20 77 72 69 74 74 65 6e 0a 23 20 62 65 66  re written.# bef
1c40: 6f 72 65 20 6d 61 6e 69 66 65 73 74 20 74 79 70  ore manifest typ
1c50: 65 73 20 77 65 72 65 20 69 6e 74 72 6f 64 75 63  es were introduc
1c60: 65 64 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  ed. The followin
1c70: 67 20 74 65 73 74 20 63 61 73 65 73 20 73 74 69  g test cases sti
1c80: 6c 6c 0a 23 20 77 6f 72 6b 2c 20 64 75 65 20 74  ll.# work, due t
1c90: 6f 20 74 68 65 20 27 61 66 66 69 6e 69 74 79 27  o the 'affinity'
1ca0: 20 6d 65 63 68 61 6e 69 73 6d 2c 20 62 75 74 20   mechanism, but 
1cb0: 74 68 65 79 20 64 6f 6e 27 74 20 70 72 6f 76 65  they don't prove
1cc0: 20 61 6e 79 74 68 69 6e 67 0a 23 20 61 62 6f 75   anything.# abou
1cd0: 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  t collation sequ
1ce0: 65 6e 63 65 73 2e 0a 23 0a 64 6f 5f 74 65 73 74  ences..#.do_test
1cf0: 20 63 6f 6c 6c 61 74 65 31 2d 34 2e 30 20 7b 0a   collate1-4.0 {.
1d00: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1d10: 43 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6c  CREATE TABLE col
1d20: 6c 61 74 65 31 74 31 28 63 31 20 6e 75 6d 65 72  late1t1(c1 numer
1d30: 69 63 2c 20 63 32 20 74 65 78 74 29 3b 0a 20 20  ic, c2 text);.  
1d40: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f    INSERT INTO co
1d50: 6c 6c 61 74 65 31 74 31 20 56 41 4c 55 45 53 28  llate1t1 VALUES(
1d60: 31 2c 20 31 29 3b 0a 20 20 20 20 49 4e 53 45 52  1, 1);.    INSER
1d70: 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 31 74  T INTO collate1t
1d80: 31 20 56 41 4c 55 45 53 28 31 32 2c 20 31 32 29  1 VALUES(12, 12)
1d90: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
1da0: 4f 20 63 6f 6c 6c 61 74 65 31 74 31 20 56 41 4c  O collate1t1 VAL
1db0: 55 45 53 28 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b  UES(NULL, NULL);
1dc0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
1dd0: 20 63 6f 6c 6c 61 74 65 31 74 31 20 56 41 4c 55   collate1t1 VALU
1de0: 45 53 28 31 30 31 2c 20 31 30 31 29 3b 0a 20 20  ES(101, 101);.  
1df0: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63  }.} {}.do_test c
1e00: 6f 6c 6c 61 74 65 31 2d 34 2e 31 20 7b 0a 20 20  ollate1-4.1 {.  
1e10: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
1e20: 4c 45 43 54 20 63 31 20 46 52 4f 4d 20 63 6f 6c  LECT c1 FROM col
1e30: 6c 61 74 65 31 74 31 20 4f 52 44 45 52 20 42 59  late1t1 ORDER BY
1e40: 20 31 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 31 20   1;.  }.} {{} 1 
1e50: 31 32 20 31 30 31 7d 0a 64 6f 5f 74 65 73 74 20  12 101}.do_test 
1e60: 63 6f 6c 6c 61 74 65 31 2d 34 2e 32 20 7b 0a 20  collate1-4.2 {. 
1e70: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
1e80: 45 4c 45 43 54 20 63 32 20 46 52 4f 4d 20 63 6f  ELECT c2 FROM co
1e90: 6c 6c 61 74 65 31 74 31 20 4f 52 44 45 52 20 42  llate1t1 ORDER B
1ea0: 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 31  Y 1;.  }.} {{} 1
1eb0: 20 31 30 31 20 31 32 7d 0a 64 6f 5f 74 65 73 74   101 12}.do_test
1ec0: 20 63 6f 6c 6c 61 74 65 31 2d 34 2e 33 20 7b 0a   collate1-4.3 {.
1ed0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1ee0: 53 45 4c 45 43 54 20 63 32 2b 30 20 46 52 4f 4d  SELECT c2+0 FROM
1ef0: 20 63 6f 6c 6c 61 74 65 31 74 31 20 4f 52 44 45   collate1t1 ORDE
1f00: 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 7b  R BY 1;.  }.} {{
1f10: 7d 20 31 20 31 32 20 31 30 31 7d 0a 64 6f 5f 74  } 1 12 101}.do_t
1f20: 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 34 2e 34  est collate1-4.4
1f30: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1f40: 20 20 20 53 45 4c 45 43 54 20 63 31 7c 7c 27 27     SELECT c1||''
1f50: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31   FROM collate1t1
1f60: 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d   ORDER BY 1;.  }
1f70: 0a 7d 20 7b 7b 7d 20 31 20 31 30 31 20 31 32 7d  .} {{} 1 101 12}
1f80: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65  .do_test collate
1f90: 31 2d 34 2e 34 2e 31 20 7b 0a 20 20 65 78 65 63  1-4.4.1 {.  exec
1fa0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1fb0: 20 28 63 31 7c 7c 27 27 29 20 43 4f 4c 4c 41 54   (c1||'') COLLAT
1fc0: 45 20 6e 75 6d 65 72 69 63 20 46 52 4f 4d 20 63  E numeric FROM c
1fd0: 6f 6c 6c 61 74 65 31 74 31 20 4f 52 44 45 52 20  ollate1t1 ORDER 
1fe0: 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20  BY 1;.  }.} {{} 
1ff0: 31 20 31 32 20 31 30 31 7d 0a 64 6f 5f 74 65 73  1 12 101}.do_tes
2000: 74 20 63 6f 6c 6c 61 74 65 31 2d 34 2e 35 20 7b  t collate1-4.5 {
2010: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2020: 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f 6c 6c   DROP TABLE coll
2030: 61 74 65 31 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7d  ate1t1;.  }.} {}
2040: 0a 0a 23 20 41 20 70 72 6f 62 6c 65 6d 20 72 65  ..# A problem re
2050: 70 6f 72 74 65 64 20 6f 6e 20 74 68 65 20 6d 61  ported on the ma
2060: 69 6c 69 6e 67 20 6c 69 73 74 3a 20 20 41 20 43  iling list:  A C
2070: 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61 74  REATE TABLE stat
2080: 65 6d 65 6e 74 0a 23 20 69 73 20 61 6c 6c 6f 77  ement.# is allow
2090: 65 64 20 74 6f 20 68 61 76 65 20 74 77 6f 20 6f  ed to have two o
20a0: 72 20 6d 6f 72 65 20 43 4f 4c 4c 41 54 45 20 63  r more COLLATE c
20b0: 6c 61 75 73 65 73 20 6f 6e 20 74 68 65 20 73 61  lauses on the sa
20c0: 6d 65 20 63 6f 6c 75 6d 6e 2e 0a 23 20 54 68 61  me column..# Tha
20d0: 74 20 70 72 6f 62 61 62 6c 79 20 6f 75 67 68 74  t probably ought
20e0: 20 74 6f 20 62 65 20 61 6e 20 65 72 72 6f 72 2c   to be an error,
20f0: 20 62 75 74 20 77 65 20 61 6c 6c 6f 77 20 69 74   but we allow it
2100: 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73 0a 23   for backwards.#
2110: 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e 20   compatibility. 
2120: 20 4a 75 73 74 20 6d 61 6b 65 20 73 75 72 65 20   Just make sure 
2130: 69 74 20 77 6f 72 6b 73 20 61 6e 64 20 64 6f 65  it works and doe
2140: 73 6e 27 74 20 6c 65 61 6b 20 6d 65 6d 6f 72 79  sn't leak memory
2150: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c  ..#.do_test coll
2160: 61 74 65 31 2d 35 2e 31 20 7b 0a 20 20 65 78 65  ate1-5.1 {.  exe
2170: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
2180: 45 20 54 41 42 4c 45 20 63 35 28 0a 20 20 20 20  E TABLE c5(.    
2190: 20 20 69 64 20 49 4e 54 45 47 45 52 20 50 52 49    id INTEGER PRI
21a0: 4d 41 52 59 20 4b 45 59 2c 0a 20 20 20 20 20 20  MARY KEY,.      
21b0: 61 20 54 45 58 54 20 43 4f 4c 4c 41 54 45 20 62  a TEXT COLLATE b
21c0: 69 6e 61 72 79 20 43 4f 4c 4c 41 54 45 20 6e 6f  inary COLLATE no
21d0: 63 61 73 65 20 43 4f 4c 4c 41 54 45 20 72 74 72  case COLLATE rtr
21e0: 69 6d 2c 0a 20 20 20 20 20 20 62 20 54 45 58 54  im,.      b TEXT
21f0: 20 43 4f 4c 4c 41 54 45 20 6e 6f 63 61 73 65 20   COLLATE nocase 
2200: 43 4f 4c 4c 41 54 45 20 62 69 6e 61 72 79 2c 0a  COLLATE binary,.
2210: 20 20 20 20 20 20 63 20 54 45 58 54 20 43 4f 4c        c TEXT COL
2220: 4c 41 54 45 20 72 74 72 69 6d 20 43 4f 4c 4c 41  LATE rtrim COLLA
2230: 54 45 20 62 69 6e 61 72 79 20 43 4f 4c 4c 41 54  TE binary COLLAT
2240: 45 20 72 74 72 69 6d 20 43 4f 4c 4c 41 54 45 20  E rtrim COLLATE 
2250: 6e 6f 63 61 73 65 0a 20 20 20 20 29 3b 0a 20 20  nocase.    );.  
2260: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 35    INSERT INTO c5
2270: 20 56 41 4c 55 45 53 28 31 2c 20 27 61 62 63 27   VALUES(1, 'abc'
2280: 2c 27 61 62 63 27 2c 27 61 62 63 27 29 3b 0a 20  ,'abc','abc');. 
2290: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63     INSERT INTO c
22a0: 35 20 56 41 4c 55 45 53 28 32 2c 20 27 61 62 63  5 VALUES(2, 'abc
22b0: 20 20 20 27 2c 27 41 42 43 27 2c 27 41 42 43 27     ','ABC','ABC'
22c0: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 69 64  );.    SELECT id
22d0: 20 46 52 4f 4d 20 63 35 20 57 48 45 52 45 20 61   FROM c5 WHERE a
22e0: 3d 27 61 62 63 27 20 4f 52 44 45 52 20 42 59 20  ='abc' ORDER BY 
22f0: 69 64 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d 0a  id;.  }.} {1 2}.
2300: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31  do_test collate1
2310: 2d 35 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -5.2 {.  execsql
2320: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 69 64   {.    SELECT id
2330: 20 46 52 4f 4d 20 63 35 20 57 48 45 52 45 20 62   FROM c5 WHERE b
2340: 3d 27 61 62 63 27 20 4f 52 44 45 52 20 42 59 20  ='abc' ORDER BY 
2350: 69 64 3b 0a 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f  id;.  }.} {1}.do
2360: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 35  _test collate1-5
2370: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
2380: 0a 20 20 20 20 53 45 4c 45 43 54 20 69 64 20 46  .    SELECT id F
2390: 52 4f 4d 20 63 35 20 57 48 45 52 45 20 63 3d 27  ROM c5 WHERE c='
23a0: 61 62 63 27 20 4f 52 44 45 52 20 42 59 20 69 64  abc' ORDER BY id
23b0: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 7d 0a 0a 66  ;.  }.} {1 2}..f
23c0: 69 6e 69 73 68 5f 74 65 73 74 0a                 inish_test.