SQLite4
Hex Artifact Content
Not logged in

Artifact 6c9db560f7d7127cddf941a6b0dc98d5aa149c87:


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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#..#-----------
03e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
03f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0410: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
0420: 20 43 6f 6c 6c 61 74 69 6f 6e 20 74 79 70 65 20   Collation type 
0430: 27 48 45 58 27 2e 20 49 66 20 61 6e 20 61 72 67  'HEX'. If an arg
0440: 75 6d 65 6e 74 20 63 61 6e 20 62 65 20 69 6e 74  ument can be int
0450: 65 72 70 72 65 74 65 64 20 61 73 20 61 20 68 65  erpreted as a he
0460: 78 61 64 65 63 69 6d 61 6c 0a 23 20 6e 75 6d 62  xadecimal.# numb
0470: 65 72 2c 20 74 68 65 6e 20 69 74 20 69 73 20 63  er, then it is c
0480: 6f 6e 76 65 72 74 65 64 20 74 6f 20 6f 6e 65 20  onverted to one 
0490: 62 65 66 6f 72 65 20 74 68 65 20 63 6f 6d 70 61  before the compa
04a0: 72 69 73 6f 6e 20 69 73 20 70 65 72 66 6f 72 6d  rison is perform
04b0: 65 64 2e 20 0a 23 20 48 65 78 20 6e 75 6d 62 65  ed. .# Hex numbe
04c0: 72 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  rs are less than
04d0: 20 6f 74 68 65 72 20 73 74 72 69 6e 67 73 2e 20   other strings. 
04e0: 49 66 20 6e 65 69 74 68 65 72 20 61 72 67 75 6d  If neither argum
04f0: 65 6e 74 20 69 73 20 61 20 0a 23 20 6e 75 6d 62  ent is a .# numb
0500: 65 72 2c 20 5b 73 74 72 69 6e 67 20 63 6f 6d 70  er, [string comp
0510: 61 72 65 5d 20 69 73 20 75 73 65 64 2e 0a 23 0a  are] is used..#.
0520: 64 62 20 63 6f 6c 6c 61 74 65 20 48 45 58 20 68  db collate HEX h
0530: 65 78 5f 63 6f 6c 6c 61 74 65 20 68 65 78 5f 6d  ex_collate hex_m
0540: 6b 6b 65 79 0a 70 72 6f 63 20 68 65 78 5f 63 6f  kkey.proc hex_co
0550: 6c 6c 61 74 65 20 7b 6c 68 73 20 72 68 73 7d 20  llate {lhs rhs} 
0560: 7b 0a 20 20 73 65 74 20 6c 68 73 5f 69 73 68 65  {.  set lhs_ishe
0570: 78 20 5b 72 65 67 65 78 70 20 7b 5e 28 30 78 7c  x [regexp {^(0x|
0580: 29 5b 31 32 33 34 35 36 37 38 39 30 61 62 63 64  )[1234567890abcd
0590: 65 66 41 42 43 44 45 46 5d 2b 24 7d 20 24 6c 68  efABCDEF]+$} $lh
05a0: 73 5d 0a 20 20 73 65 74 20 72 68 73 5f 69 73 68  s].  set rhs_ish
05b0: 65 78 20 5b 72 65 67 65 78 70 20 7b 5e 28 30 78  ex [regexp {^(0x
05c0: 7c 29 5b 31 32 33 34 35 36 37 38 39 30 61 62 63  |)[1234567890abc
05d0: 64 65 66 41 42 43 44 45 46 5d 2b 24 7d 20 24 72  defABCDEF]+$} $r
05e0: 68 73 5d 0a 20 20 69 66 20 7b 24 6c 68 73 5f 69  hs].  if {$lhs_i
05f0: 73 68 65 78 20 26 26 20 24 72 68 73 5f 69 73 68  shex && $rhs_ish
0600: 65 78 7d 20 7b 20 0a 20 20 20 20 73 65 74 20 6c  ex} { .    set l
0610: 68 73 78 20 5b 73 63 61 6e 20 24 6c 68 73 20 25  hsx [scan $lhs %
0620: 78 5d 0a 20 20 20 20 73 65 74 20 72 68 73 78 20  x].    set rhsx 
0630: 5b 73 63 61 6e 20 24 72 68 73 20 25 78 5d 0a 20  [scan $rhs %x]. 
0640: 20 20 20 69 66 20 7b 24 6c 68 73 20 3c 20 24 72     if {$lhs < $r
0650: 68 73 7d 20 7b 72 65 74 75 72 6e 20 2d 31 7d 0a  hs} {return -1}.
0660: 20 20 20 20 69 66 20 7b 24 6c 68 73 20 3d 3d 20      if {$lhs == 
0670: 24 72 68 73 7d 20 7b 72 65 74 75 72 6e 20 30 7d  $rhs} {return 0}
0680: 0a 20 20 20 20 69 66 20 7b 24 6c 68 73 20 3e 20  .    if {$lhs > 
0690: 24 72 68 73 7d 20 7b 72 65 74 75 72 6e 20 31 7d  $rhs} {return 1}
06a0: 0a 20 20 7d 0a 20 20 69 66 20 7b 24 6c 68 73 5f  .  }.  if {$lhs_
06b0: 69 73 68 65 78 7d 20 7b 0a 20 20 20 20 72 65 74  ishex} {.    ret
06c0: 75 72 6e 20 2d 31 3b 0a 20 20 7d 0a 20 20 69 66  urn -1;.  }.  if
06d0: 20 7b 24 72 68 73 5f 69 73 68 65 78 7d 20 7b 0a   {$rhs_ishex} {.
06e0: 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20      return 1;.  
06f0: 7d 0a 20 20 72 65 74 75 72 6e 20 5b 73 74 72 69  }.  return [stri
0700: 6e 67 20 63 6f 6d 70 61 72 65 20 24 6c 68 73 20  ng compare $lhs 
0710: 24 72 68 73 5d 0a 7d 0a 0a 70 72 6f 63 20 68 65  $rhs].}..proc he
0720: 78 5f 6d 6b 6b 65 79 20 7b 7a 49 6e 7d 20 7b 0a  x_mkkey {zIn} {.
0730: 20 20 73 65 74 20 69 73 68 65 78 20 5b 72 65 67    set ishex [reg
0740: 65 78 70 20 7b 5e 28 30 78 7c 29 5b 31 32 33 34  exp {^(0x|)[1234
0750: 35 36 37 38 39 30 61 62 63 64 65 66 41 42 43 44  567890abcdefABCD
0760: 45 46 5d 2b 24 7d 20 24 7a 49 6e 5d 0a 20 20 69  EF]+$} $zIn].  i
0770: 66 20 7b 24 69 73 68 65 78 3d 3d 30 7d 20 7b 0a  f {$ishex==0} {.
0780: 20 20 20 20 73 65 74 20 72 65 73 20 22 62 5f 24      set res "b_$
0790: 7a 49 6e 22 0a 20 20 7d 20 65 6c 73 65 20 7b 0a  zIn".  } else {.
07a0: 20 20 20 20 73 65 74 20 6e 75 6d 20 5b 73 63 61      set num [sca
07b0: 6e 20 24 7a 49 6e 20 25 78 5d 0a 20 20 20 20 73  n $zIn %x].    s
07c0: 65 74 20 72 65 73 20 5b 66 6f 72 6d 61 74 20 22  et res [format "
07d0: 61 5f 25 30 32 34 64 22 20 24 6e 75 6d 5d 0a 20  a_%024d" $num]. 
07e0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 24 72 65 73   }.  return $res
07f0: 0a 7d 0a 0a 64 62 20 66 75 6e 63 74 69 6f 6e 20  .}..db function 
0800: 68 65 78 20 7b 66 6f 72 6d 61 74 20 30 78 25 58  hex {format 0x%X
0810: 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }..#------------
0820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
0860: 4d 69 6d 69 63 20 74 68 65 20 53 51 4c 69 74 65  Mimic the SQLite
0870: 20 32 20 63 6f 6c 6c 61 74 69 6f 6e 20 74 79 70   2 collation typ
0880: 65 20 4e 55 4d 45 52 49 43 2e 20 53 6f 72 74 20  e NUMERIC. Sort 
0890: 6f 66 2e 20 55 73 65 20 74 68 65 20 66 6f 6c 6c  of. Use the foll
08a0: 6f 77 69 6e 67 0a 23 20 72 75 6c 65 73 3a 0a 23  owing.# rules:.#
08b0: 0a 23 20 20 20 2a 20 49 66 20 5b 73 74 72 69 6e  .#   * If [strin
08c0: 67 20 69 73 20 69 6e 74 65 67 65 72 5d 20 73 61  g is integer] sa
08d0: 79 73 20 62 6f 74 68 20 73 69 64 65 73 20 6f 66  ys both sides of
08e0: 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 61 72   a comparison ar
08f0: 65 20 69 6e 74 65 67 65 72 73 2c 0a 23 20 20 20  e integers,.#   
0900: 20 20 64 6f 20 61 6e 20 69 6e 74 65 67 65 72 20    do an integer 
0910: 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 23 0a 23 20  comparison..#.# 
0920: 20 20 2a 20 49 66 20 6f 6e 65 20 73 69 64 65 20    * If one side 
0930: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e  is an integer an
0940: 64 20 74 68 65 20 6f 74 68 65 72 20 6e 6f 74 2c  d the other not,
0950: 20 74 68 65 20 69 6e 74 65 67 65 72 20 69 73 20   the integer is 
0960: 6c 65 73 73 0a 23 20 20 20 20 20 74 68 61 6e 20  less.#     than 
0970: 74 68 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e  the other value.
0980: 0a 23 0a 23 20 20 20 2a 20 4f 74 68 65 72 77 69  .#.#   * Otherwi
0990: 73 65 2c 20 69 66 20 6e 65 69 74 68 65 72 20 73  se, if neither s
09a0: 69 64 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ide is an intege
09b0: 72 2c 20 64 6f 20 61 20 6d 65 6d 63 6d 70 28 29  r, do a memcmp()
09c0: 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 23 0a 64   comparison..#.d
09d0: 62 20 63 6f 6c 6c 61 74 65 20 6e 75 6d 65 72 69  b collate numeri
09e0: 63 20 6e 75 6d 65 72 69 63 5f 63 6f 6c 6c 61 74  c numeric_collat
09f0: 65 20 6e 75 6d 65 72 69 63 5f 6d 6b 6b 65 79 0a  e numeric_mkkey.
0a00: 70 72 6f 63 20 6e 75 6d 65 72 69 63 5f 63 6f 6c  proc numeric_col
0a10: 6c 61 74 65 20 7b 6c 68 73 20 72 68 73 7d 20 7b  late {lhs rhs} {
0a20: 0a 20 20 73 65 74 20 6c 68 73 5f 69 73 69 6e 74  .  set lhs_isint
0a30: 20 5b 73 74 72 69 6e 67 20 69 73 20 69 6e 74 65   [string is inte
0a40: 67 65 72 20 24 6c 68 73 5d 0a 20 20 73 65 74 20  ger $lhs].  set 
0a50: 72 68 73 5f 69 73 69 6e 74 20 5b 73 74 72 69 6e  rhs_isint [strin
0a60: 67 20 69 73 20 69 6e 74 65 67 65 72 20 24 72 68  g is integer $rh
0a70: 73 5d 0a 0a 20 20 69 66 20 7b 24 6c 68 73 5f 69  s]..  if {$lhs_i
0a80: 73 69 6e 74 20 26 26 20 24 72 68 73 5f 69 73 69  sint && $rhs_isi
0a90: 6e 74 7d 20 7b 20 72 65 74 75 72 6e 20 5b 65 78  nt} { return [ex
0aa0: 70 72 20 24 6c 68 73 20 2d 20 24 72 68 73 5d 20  pr $lhs - $rhs] 
0ab0: 7d 0a 20 20 69 66 20 7b 24 6c 68 73 5f 69 73 69  }.  if {$lhs_isi
0ac0: 6e 74 20 21 3d 20 24 72 68 73 5f 69 73 69 6e 74  nt != $rhs_isint
0ad0: 7d 20 7b 20 72 65 74 75 72 6e 20 5b 65 78 70 72  } { return [expr
0ae0: 20 24 72 68 73 5f 69 73 69 6e 74 20 2d 20 24 6c   $rhs_isint - $l
0af0: 68 73 5f 69 73 69 6e 74 5d 20 7d 0a 20 20 72 65  hs_isint] }.  re
0b00: 74 75 72 6e 20 5b 73 74 72 69 6e 67 20 63 6f 6d  turn [string com
0b10: 70 61 72 65 20 24 6c 68 73 20 24 72 68 73 5d 0a  pare $lhs $rhs].
0b20: 7d 0a 70 72 6f 63 20 6e 75 6d 65 72 69 63 5f 6d  }.proc numeric_m
0b30: 6b 6b 65 79 20 7b 7a 49 6e 7d 20 7b 0a 20 20 69  kkey {zIn} {.  i
0b40: 66 20 7b 5b 73 74 72 69 6e 67 20 69 73 20 69 6e  f {[string is in
0b50: 74 65 67 65 72 20 24 7a 49 6e 5d 7d 20 7b 0a 20  teger $zIn]} {. 
0b60: 20 20 20 73 65 74 20 72 65 73 20 5b 66 6f 72 6d     set res [form
0b70: 61 74 20 22 61 5f 25 30 32 34 64 22 20 24 7a 49  at "a_%024d" $zI
0b80: 6e 5d 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20  n].  } else {.  
0b90: 20 20 73 65 74 20 72 65 73 20 22 62 5f 24 7a 49    set res "b_$zI
0ba0: 6e 22 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  n".  }.  return 
0bb0: 24 72 65 73 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20  $res.}..do_test 
0bc0: 63 6f 6c 6c 61 74 65 31 2d 31 2e 30 20 7b 0a 20  collate1-1.0 {. 
0bd0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
0be0: 52 45 41 54 45 20 54 41 42 4c 45 20 63 6f 6c 6c  REATE TABLE coll
0bf0: 61 74 65 31 74 31 28 63 31 2c 20 63 32 29 3b 0a  ate1t1(c1, c2);.
0c00: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0c10: 63 6f 6c 6c 61 74 65 31 74 31 20 56 41 4c 55 45  collate1t1 VALUE
0c20: 53 28 34 35 2c 20 68 65 78 28 34 35 29 29 3b 0a  S(45, hex(45));.
0c30: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
0c40: 63 6f 6c 6c 61 74 65 31 74 31 20 56 41 4c 55 45  collate1t1 VALUE
0c50: 53 28 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0a 20  S(NULL, NULL);. 
0c60: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63     INSERT INTO c
0c70: 6f 6c 6c 61 74 65 31 74 31 20 56 41 4c 55 45 53  ollate1t1 VALUES
0c80: 28 32 38 31 2c 20 68 65 78 28 32 38 31 29 29 3b  (281, hex(281));
0c90: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
0ca0: 74 20 63 6f 6c 6c 61 74 65 31 2d 31 2e 31 20 7b  t collate1-1.1 {
0cb0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0cc0: 20 53 45 4c 45 43 54 20 63 32 20 46 52 4f 4d 20   SELECT c2 FROM 
0cd0: 63 6f 6c 6c 61 74 65 31 74 31 20 4f 52 44 45 52  collate1t1 ORDER
0ce0: 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d   BY 1;.  }.} {{}
0cf0: 20 30 78 31 31 39 20 30 78 32 44 7d 0a 64 6f 5f   0x119 0x2D}.do_
0d00: 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 31 2e  test collate1-1.
0d10: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
0d20: 20 20 20 20 53 45 4c 45 43 54 20 63 32 20 46 52      SELECT c2 FR
0d30: 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20 4f 52  OM collate1t1 OR
0d40: 44 45 52 20 42 59 20 31 20 43 4f 4c 4c 41 54 45  DER BY 1 COLLATE
0d50: 20 68 65 78 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20   hex;.  }.} {{} 
0d60: 30 78 32 44 20 30 78 31 31 39 7d 0a 64 6f 5f 74  0x2D 0x119}.do_t
0d70: 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 31 2e 33  est collate1-1.3
0d80: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0d90: 20 20 20 53 45 4c 45 43 54 20 63 32 20 46 52 4f     SELECT c2 FRO
0da0: 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20 4f 52 44  M collate1t1 ORD
0db0: 45 52 20 42 59 20 31 20 43 4f 4c 4c 41 54 45 20  ER BY 1 COLLATE 
0dc0: 68 65 78 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20  hex DESC;.  }.} 
0dd0: 7b 30 78 31 31 39 20 30 78 32 44 20 7b 7d 7d 0a  {0x119 0x2D {}}.
0de0: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31  do_test collate1
0df0: 2d 31 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.4 {.  execsql
0e00: 20 7b 0a 20 20 20 53 45 4c 45 43 54 20 63 32 20   {.   SELECT c2 
0e10: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20  FROM collate1t1 
0e20: 4f 52 44 45 52 20 42 59 20 31 20 43 4f 4c 4c 41  ORDER BY 1 COLLA
0e30: 54 45 20 68 65 78 20 41 53 43 3b 0a 20 20 7d 0a  TE hex ASC;.  }.
0e40: 7d 20 7b 7b 7d 20 30 78 32 44 20 30 78 31 31 39  } {{} 0x2D 0x119
0e50: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  }.do_test collat
0e60: 65 31 2d 31 2e 35 20 7b 0a 20 20 65 78 65 63 73  e1-1.5 {.  execs
0e70: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
0e80: 63 32 20 43 4f 4c 4c 41 54 45 20 68 65 78 20 46  c2 COLLATE hex F
0e90: 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20 4f  ROM collate1t1 O
0ea0: 52 44 45 52 20 42 59 20 31 0a 20 20 7d 0a 7d 20  RDER BY 1.  }.} 
0eb0: 7b 7b 7d 20 30 78 32 44 20 30 78 31 31 39 7d 0a  {{} 0x2D 0x119}.
0ec0: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31  do_test collate1
0ed0: 2d 31 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.6 {.  execsql
0ee0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 32   {.    SELECT c2
0ef0: 20 43 4f 4c 4c 41 54 45 20 68 65 78 20 46 52 4f   COLLATE hex FRO
0f00: 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20 4f 52 44  M collate1t1 ORD
0f10: 45 52 20 42 59 20 31 20 41 53 43 0a 20 20 7d 0a  ER BY 1 ASC.  }.
0f20: 7d 20 7b 7b 7d 20 30 78 32 44 20 30 78 31 31 39  } {{} 0x2D 0x119
0f30: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  }.do_test collat
0f40: 65 31 2d 31 2e 37 20 7b 0a 20 20 65 78 65 63 73  e1-1.7 {.  execs
0f50: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
0f60: 63 32 20 43 4f 4c 4c 41 54 45 20 68 65 78 20 46  c2 COLLATE hex F
0f70: 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20 4f  ROM collate1t1 O
0f80: 52 44 45 52 20 42 59 20 31 20 44 45 53 43 0a 20  RDER BY 1 DESC. 
0f90: 20 7d 0a 7d 20 7b 30 78 31 31 39 20 30 78 32 44   }.} {0x119 0x2D
0fa0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c   {}}.do_test col
0fb0: 6c 61 74 65 31 2d 31 2e 39 39 20 7b 0a 20 20 65  late1-1.99 {.  e
0fc0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 52 4f  xecsql {.    DRO
0fd0: 50 20 54 41 42 4c 45 20 63 6f 6c 6c 61 74 65 31  P TABLE collate1
0fe0: 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f  t1;.  }.} {}..do
0ff0: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 32  _test collate1-2
1000: 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .0 {.  execsql {
1010: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
1020: 45 20 63 6f 6c 6c 61 74 65 31 74 31 28 63 31 2c  E collate1t1(c1,
1030: 20 63 32 29 3b 0a 20 20 20 20 49 4e 53 45 52 54   c2);.    INSERT
1040: 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 31 74 31   INTO collate1t1
1050: 20 56 41 4c 55 45 53 28 27 35 27 2c 20 27 30 78   VALUES('5', '0x
1060: 31 31 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  11');.    INSERT
1070: 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 31 74 31   INTO collate1t1
1080: 20 56 41 4c 55 45 53 28 27 35 27 2c 20 27 30 78   VALUES('5', '0x
1090: 41 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  A');.    INSERT 
10a0: 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 31 74 31 20  INTO collate1t1 
10b0: 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 4e 55 4c  VALUES(NULL, NUL
10c0: 4c 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  L);.    INSERT I
10d0: 4e 54 4f 20 63 6f 6c 6c 61 74 65 31 74 31 20 56  NTO collate1t1 V
10e0: 41 4c 55 45 53 28 27 37 27 2c 20 27 30 78 41 27  ALUES('7', '0xA'
10f0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
1100: 54 4f 20 63 6f 6c 6c 61 74 65 31 74 31 20 56 41  TO collate1t1 VA
1110: 4c 55 45 53 28 27 31 31 27 2c 20 27 30 78 31 31  LUES('11', '0x11
1120: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
1130: 4e 54 4f 20 63 6f 6c 6c 61 74 65 31 74 31 20 56  NTO collate1t1 V
1140: 41 4c 55 45 53 28 27 31 31 27 2c 20 27 30 78 31  ALUES('11', '0x1
1150: 30 31 27 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  01');.  }.} {}.d
1160: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d  o_test collate1-
1170: 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.2 {.  execsql 
1180: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 31 2c  {.    SELECT c1,
1190: 20 63 32 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65   c2 FROM collate
11a0: 31 74 31 20 4f 52 44 45 52 20 42 59 20 31 20 43  1t1 ORDER BY 1 C
11b0: 4f 4c 4c 41 54 45 20 6e 75 6d 65 72 69 63 2c 20  OLLATE numeric, 
11c0: 32 20 43 4f 4c 4c 41 54 45 20 68 65 78 3b 0a 20  2 COLLATE hex;. 
11d0: 20 7d 0a 7d 20 7b 7b 7d 20 7b 7d 20 35 20 30 78   }.} {{} {} 5 0x
11e0: 41 20 35 20 30 78 31 31 20 37 20 30 78 41 20 31  A 5 0x11 7 0xA 1
11f0: 31 20 30 78 31 31 20 31 31 20 30 78 31 30 31 7d  1 0x11 11 0x101}
1200: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65  .do_test collate
1210: 31 2d 32 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  1-2.3 {.  execsq
1220: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63  l {.    SELECT c
1230: 31 2c 20 63 32 20 46 52 4f 4d 20 63 6f 6c 6c 61  1, c2 FROM colla
1240: 74 65 31 74 31 20 4f 52 44 45 52 20 42 59 20 31  te1t1 ORDER BY 1
1250: 20 43 4f 4c 4c 41 54 45 20 62 69 6e 61 72 79 2c   COLLATE binary,
1260: 20 32 20 43 4f 4c 4c 41 54 45 20 68 65 78 3b 0a   2 COLLATE hex;.
1270: 20 20 7d 0a 7d 20 7b 7b 7d 20 7b 7d 20 31 31 20    }.} {{} {} 11 
1280: 30 78 31 31 20 31 31 20 30 78 31 30 31 20 35 20  0x11 11 0x101 5 
1290: 30 78 41 20 35 20 30 78 31 31 20 37 20 30 78 41  0xA 5 0x11 7 0xA
12a0: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  }.do_test collat
12b0: 65 31 2d 32 2e 34 20 7b 0a 20 20 65 78 65 63 73  e1-2.4 {.  execs
12c0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
12d0: 63 31 2c 20 63 32 20 46 52 4f 4d 20 63 6f 6c 6c  c1, c2 FROM coll
12e0: 61 74 65 31 74 31 20 4f 52 44 45 52 20 42 59 20  ate1t1 ORDER BY 
12f0: 31 20 43 4f 4c 4c 41 54 45 20 62 69 6e 61 72 79  1 COLLATE binary
1300: 20 44 45 53 43 2c 20 32 20 43 4f 4c 4c 41 54 45   DESC, 2 COLLATE
1310: 20 68 65 78 3b 0a 20 20 7d 0a 7d 20 7b 37 20 30   hex;.  }.} {7 0
1320: 78 41 20 35 20 30 78 41 20 35 20 30 78 31 31 20  xA 5 0xA 5 0x11 
1330: 31 31 20 30 78 31 31 20 31 31 20 30 78 31 30 31  11 0x11 11 0x101
1340: 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20   {} {}}.do_test 
1350: 63 6f 6c 6c 61 74 65 31 2d 32 2e 35 20 7b 0a 20  collate1-2.5 {. 
1360: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
1370: 45 4c 45 43 54 20 63 31 2c 20 63 32 20 46 52 4f  ELECT c1, c2 FRO
1380: 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20 0a 20 20  M collate1t1 .  
1390: 20 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 31        ORDER BY 1
13a0: 20 43 4f 4c 4c 41 54 45 20 62 69 6e 61 72 79 20   COLLATE binary 
13b0: 44 45 53 43 2c 20 32 20 43 4f 4c 4c 41 54 45 20  DESC, 2 COLLATE 
13c0: 68 65 78 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20  hex DESC;.  }.} 
13d0: 7b 37 20 30 78 41 20 35 20 30 78 31 31 20 35 20  {7 0xA 5 0x11 5 
13e0: 30 78 41 20 31 31 20 30 78 31 30 31 20 31 31 20  0xA 11 0x101 11 
13f0: 30 78 31 31 20 7b 7d 20 7b 7d 7d 0a 64 6f 5f 74  0x11 {} {}}.do_t
1400: 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 32 2e 36  est collate1-2.6
1410: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1420: 20 20 20 53 45 4c 45 43 54 20 63 31 2c 20 63 32     SELECT c1, c2
1430: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31   FROM collate1t1
1440: 20 0a 20 20 20 20 20 20 20 20 4f 52 44 45 52 20   .        ORDER 
1450: 42 59 20 31 20 43 4f 4c 4c 41 54 45 20 62 69 6e  BY 1 COLLATE bin
1460: 61 72 79 20 41 53 43 2c 20 32 20 43 4f 4c 4c 41  ary ASC, 2 COLLA
1470: 54 45 20 68 65 78 20 41 53 43 3b 0a 20 20 7d 0a  TE hex ASC;.  }.
1480: 7d 20 7b 7b 7d 20 7b 7d 20 31 31 20 30 78 31 31  } {{} {} 11 0x11
1490: 20 31 31 20 30 78 31 30 31 20 35 20 30 78 41 20   11 0x101 5 0xA 
14a0: 35 20 30 78 31 31 20 37 20 30 78 41 7d 0a 64 6f  5 0x11 7 0xA}.do
14b0: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 32  _test collate1-2
14c0: 2e 31 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  .12.1 {.  execsq
14d0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63  l {.    SELECT c
14e0: 31 20 43 4f 4c 4c 41 54 45 20 6e 75 6d 65 72 69  1 COLLATE numeri
14f0: 63 2c 20 63 32 20 46 52 4f 4d 20 63 6f 6c 6c 61  c, c2 FROM colla
1500: 74 65 31 74 31 20 0a 20 20 20 20 20 4f 52 44 45  te1t1 .     ORDE
1510: 52 20 42 59 20 31 2c 20 32 20 43 4f 4c 4c 41 54  R BY 1, 2 COLLAT
1520: 45 20 68 65 78 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d  E hex;.  }.} {{}
1530: 20 7b 7d 20 35 20 30 78 41 20 35 20 30 78 31 31   {} 5 0xA 5 0x11
1540: 20 37 20 30 78 41 20 31 31 20 30 78 31 31 20 31   7 0xA 11 0x11 1
1550: 31 20 30 78 31 30 31 7d 0a 64 6f 5f 74 65 73 74  1 0x101}.do_test
1560: 20 63 6f 6c 6c 61 74 65 31 2d 32 2e 31 32 2e 32   collate1-2.12.2
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 46 52 4f  LATE hex, c2 FRO
15a0: 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20 0a 20 20  M collate1t1 .  
15b0: 20 20 20 4f 52 44 45 52 20 42 59 20 31 20 43 4f     ORDER BY 1 CO
15c0: 4c 4c 41 54 45 20 6e 75 6d 65 72 69 63 2c 20 32  LLATE numeric, 2
15d0: 20 43 4f 4c 4c 41 54 45 20 68 65 78 3b 0a 20 20   COLLATE hex;.  
15e0: 7d 0a 7d 20 7b 7b 7d 20 7b 7d 20 35 20 30 78 41  }.} {{} {} 5 0xA
15f0: 20 35 20 30 78 31 31 20 37 20 30 78 41 20 31 31   5 0x11 7 0xA 11
1600: 20 30 78 31 31 20 31 31 20 30 78 31 30 31 7d 0a   0x11 11 0x101}.
1610: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31  do_test collate1
1620: 2d 32 2e 31 32 2e 33 20 7b 0a 20 20 65 78 65 63  -2.12.3 {.  exec
1630: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1640: 20 63 31 2c 20 63 32 20 43 4f 4c 4c 41 54 45 20   c1, c2 COLLATE 
1650: 68 65 78 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65  hex FROM collate
1660: 31 74 31 20 0a 20 20 20 20 20 4f 52 44 45 52 20  1t1 .     ORDER 
1670: 42 59 20 31 20 43 4f 4c 4c 41 54 45 20 6e 75 6d  BY 1 COLLATE num
1680: 65 72 69 63 2c 20 32 3b 0a 20 20 7d 0a 7d 20 7b  eric, 2;.  }.} {
1690: 7b 7d 20 7b 7d 20 35 20 30 78 41 20 35 20 30 78  {} {} 5 0xA 5 0x
16a0: 31 31 20 37 20 30 78 41 20 31 31 20 30 78 31 31  11 7 0xA 11 0x11
16b0: 20 31 31 20 30 78 31 30 31 7d 0a 64 6f 5f 74 65   11 0x101}.do_te
16c0: 73 74 20 63 6f 6c 6c 61 74 65 31 2d 32 2e 31 32  st collate1-2.12
16d0: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
16e0: 0a 20 20 20 20 53 45 4c 45 43 54 20 63 31 20 43  .    SELECT c1 C
16f0: 4f 4c 4c 41 54 45 20 6e 75 6d 65 72 69 63 2c 20  OLLATE numeric, 
1700: 63 32 20 43 4f 4c 4c 41 54 45 20 68 65 78 0a 20  c2 COLLATE hex. 
1710: 20 20 20 20 20 46 52 4f 4d 20 63 6f 6c 6c 61 74       FROM collat
1720: 65 31 74 31 20 0a 20 20 20 20 20 4f 52 44 45 52  e1t1 .     ORDER
1730: 20 42 59 20 31 2c 20 32 3b 0a 20 20 7d 0a 7d 20   BY 1, 2;.  }.} 
1740: 7b 7b 7d 20 7b 7d 20 35 20 30 78 41 20 35 20 30  {{} {} 5 0xA 5 0
1750: 78 31 31 20 37 20 30 78 41 20 31 31 20 30 78 31  x11 7 0xA 11 0x1
1760: 31 20 31 31 20 30 78 31 30 31 7d 0a 64 6f 5f 74  1 11 0x101}.do_t
1770: 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 32 2e 31  est collate1-2.1
1780: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
1790: 20 20 20 20 53 45 4c 45 43 54 20 63 31 20 43 4f      SELECT c1 CO
17a0: 4c 4c 41 54 45 20 62 69 6e 61 72 79 2c 20 63 32  LLATE binary, c2
17b0: 20 43 4f 4c 4c 41 54 45 20 68 65 78 0a 20 20 20   COLLATE hex.   
17c0: 20 20 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31     FROM collate1
17d0: 74 31 0a 20 20 20 20 20 4f 52 44 45 52 20 42 59  t1.     ORDER BY
17e0: 20 31 2c 20 32 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d   1, 2;.  }.} {{}
17f0: 20 7b 7d 20 31 31 20 30 78 31 31 20 31 31 20 30   {} 11 0x11 11 0
1800: 78 31 30 31 20 35 20 30 78 41 20 35 20 30 78 31  x101 5 0xA 5 0x1
1810: 31 20 37 20 30 78 41 7d 0a 64 6f 5f 74 65 73 74  1 7 0xA}.do_test
1820: 20 63 6f 6c 6c 61 74 65 31 2d 32 2e 31 34 20 7b   collate1-2.14 {
1830: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1840: 20 53 45 4c 45 43 54 20 63 31 2c 20 63 32 0a 20   SELECT c1, c2. 
1850: 20 20 20 20 20 46 52 4f 4d 20 63 6f 6c 6c 61 74       FROM collat
1860: 65 31 74 31 20 4f 52 44 45 52 20 42 59 20 31 20  e1t1 ORDER BY 1 
1870: 43 4f 4c 4c 41 54 45 20 62 69 6e 61 72 79 20 44  COLLATE binary D
1880: 45 53 43 2c 20 32 20 43 4f 4c 4c 41 54 45 20 68  ESC, 2 COLLATE h
1890: 65 78 3b 0a 20 20 7d 0a 7d 20 7b 37 20 30 78 41  ex;.  }.} {7 0xA
18a0: 20 35 20 30 78 41 20 35 20 30 78 31 31 20 31 31   5 0xA 5 0x11 11
18b0: 20 30 78 31 31 20 31 31 20 30 78 31 30 31 20 7b   0x11 11 0x101 {
18c0: 7d 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 6f  } {}}.do_test co
18d0: 6c 6c 61 74 65 31 2d 32 2e 31 35 20 7b 0a 20 20  llate1-2.15 {.  
18e0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
18f0: 4c 45 43 54 20 63 31 20 43 4f 4c 4c 41 54 45 20  LECT c1 COLLATE 
1900: 62 69 6e 61 72 79 2c 20 63 32 20 43 4f 4c 4c 41  binary, c2 COLLA
1910: 54 45 20 68 65 78 0a 20 20 20 20 20 20 46 52 4f  TE hex.      FRO
1920: 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20 0a 20 20  M collate1t1 .  
1930: 20 20 20 4f 52 44 45 52 20 42 59 20 31 20 44 45     ORDER BY 1 DE
1940: 53 43 2c 20 32 20 44 45 53 43 3b 0a 20 20 7d 0a  SC, 2 DESC;.  }.
1950: 7d 20 7b 37 20 30 78 41 20 35 20 30 78 31 31 20  } {7 0xA 5 0x11 
1960: 35 20 30 78 41 20 31 31 20 30 78 31 30 31 20 31  5 0xA 11 0x101 1
1970: 31 20 30 78 31 31 20 7b 7d 20 7b 7d 7d 0a 64 6f  1 0x11 {} {}}.do
1980: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 32  _test collate1-2
1990: 2e 31 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .16 {.  execsql 
19a0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 31 20  {.    SELECT c1 
19b0: 43 4f 4c 4c 41 54 45 20 68 65 78 2c 20 63 32 20  COLLATE hex, c2 
19c0: 43 4f 4c 4c 41 54 45 20 62 69 6e 61 72 79 0a 20  COLLATE binary. 
19d0: 20 20 20 20 20 46 52 4f 4d 20 63 6f 6c 6c 61 74       FROM collat
19e0: 65 31 74 31 20 0a 20 20 20 20 20 4f 52 44 45 52  e1t1 .     ORDER
19f0: 20 42 59 20 31 20 43 4f 4c 4c 41 54 45 20 62 69   BY 1 COLLATE bi
1a00: 6e 61 72 79 20 41 53 43 2c 20 32 20 43 4f 4c 4c  nary ASC, 2 COLL
1a10: 41 54 45 20 68 65 78 20 41 53 43 3b 0a 20 20 7d  ATE hex ASC;.  }
1a20: 0a 7d 20 7b 7b 7d 20 7b 7d 20 31 31 20 30 78 31  .} {{} {} 11 0x1
1a30: 31 20 31 31 20 30 78 31 30 31 20 35 20 30 78 41  1 11 0x101 5 0xA
1a40: 20 35 20 30 78 31 31 20 37 20 30 78 41 7d 0a 64   5 0x11 7 0xA}.d
1a50: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d  o_test collate1-
1a60: 32 2e 39 39 20 7b 0a 20 20 65 78 65 63 73 71 6c  2.99 {.  execsql
1a70: 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c   {.    DROP TABL
1a80: 45 20 63 6f 6c 6c 61 74 65 31 74 31 3b 0a 20 20  E collate1t1;.  
1a90: 7d 0a 7d 20 7b 7d 0a 0a 23 0a 23 20 54 68 65 73  }.} {}..#.# Thes
1aa0: 65 20 74 65 73 74 73 20 65 6e 73 75 72 65 20 74  e tests ensure t
1ab0: 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74 20  hat the default 
1ac0: 63 6f 6c 6c 61 74 69 6f 6e 20 74 79 70 65 20 66  collation type f
1ad0: 6f 72 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 75  or a column is u
1ae0: 73 65 64 20 0a 23 20 62 79 20 61 6e 20 4f 52 44  sed .# by an ORD
1af0: 45 52 20 42 59 20 63 6c 61 75 73 65 20 63 6f 72  ER BY clause cor
1b00: 72 65 63 74 6c 79 2e 20 54 68 65 20 66 6f 63 75  rectly. The focu
1b10: 73 20 69 73 20 61 6c 6c 20 74 68 65 20 64 69 66  s is all the dif
1b20: 66 65 72 65 6e 74 20 77 61 79 73 0a 23 20 74 68  ferent ways.# th
1b30: 65 20 63 6f 6c 75 6d 6e 20 63 61 6e 20 62 65 20  e column can be 
1b40: 72 65 66 65 72 65 6e 63 65 64 2e 20 69 2e 65 2e  referenced. i.e.
1b50: 20 61 2c 20 63 6f 6c 6c 61 74 65 32 74 31 2e 61   a, collate2t1.a
1b60: 2c 20 6d 61 69 6e 2e 63 6f 6c 6c 61 74 65 32 74  , main.collate2t
1b70: 31 2e 61 20 65 74 63 2e 0a 23 0a 64 6f 5f 74 65  1.a etc..#.do_te
1b80: 73 74 20 63 6f 6c 6c 61 74 65 31 2d 33 2e 30 20  st collate1-3.0 
1b90: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1ba0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 63    CREATE TABLE c
1bb0: 6f 6c 6c 61 74 65 31 74 31 28 61 20 43 4f 4c 4c  ollate1t1(a COLL
1bc0: 41 54 45 20 68 65 78 2c 20 62 29 3b 0a 20 20 20  ATE hex, b);.   
1bd0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c   INSERT INTO col
1be0: 6c 61 74 65 31 74 31 20 56 41 4c 55 45 53 28 20  late1t1 VALUES( 
1bf0: 27 30 78 35 27 2c 20 35 20 29 3b 0a 20 20 20 20  '0x5', 5 );.    
1c00: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c  INSERT INTO coll
1c10: 61 74 65 31 74 31 20 56 41 4c 55 45 53 28 20 27  ate1t1 VALUES( '
1c20: 31 27 2c 20 31 20 29 3b 0a 20 20 20 20 49 4e 53  1', 1 );.    INS
1c30: 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65  ERT INTO collate
1c40: 31 74 31 20 56 41 4c 55 45 53 28 20 27 30 78 34  1t1 VALUES( '0x4
1c50: 35 27 2c 20 36 39 20 29 3b 0a 20 20 20 20 49 4e  5', 69 );.    IN
1c60: 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74  SERT INTO collat
1c70: 65 31 74 31 20 56 41 4c 55 45 53 28 20 4e 55 4c  e1t1 VALUES( NUL
1c80: 4c 2c 20 4e 55 4c 4c 20 29 3b 0a 20 20 20 20 53  L, NULL );.    S
1c90: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 63 6f 6c  ELECT * FROM col
1ca0: 6c 61 74 65 31 74 31 20 4f 52 44 45 52 20 42 59  late1t1 ORDER BY
1cb0: 20 61 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 7b 7d   a;.  }.} {{} {}
1cc0: 20 31 20 31 20 30 78 35 20 35 20 30 78 34 35 20   1 1 0x5 5 0x45 
1cd0: 36 39 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 6f 6c  69}..do_test col
1ce0: 6c 61 74 65 31 2d 33 2e 31 20 7b 0a 20 20 65 78  late1-3.1 {.  ex
1cf0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
1d00: 43 54 20 2a 20 46 52 4f 4d 20 63 6f 6c 6c 61 74  CT * FROM collat
1d10: 65 31 74 31 20 4f 52 44 45 52 20 42 59 20 31 3b  e1t1 ORDER BY 1;
1d20: 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 7b 7d 20 31 20  .  }.} {{} {} 1 
1d30: 31 20 30 78 35 20 35 20 30 78 34 35 20 36 39 7d  1 0x5 5 0x45 69}
1d40: 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65  .do_test collate
1d50: 31 2d 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  1-3.2 {.  execsq
1d60: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
1d70: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31   FROM collate1t1
1d80: 20 4f 52 44 45 52 20 42 59 20 63 6f 6c 6c 61 74   ORDER BY collat
1d90: 65 31 74 31 2e 61 3b 0a 20 20 7d 0a 7d 20 7b 7b  e1t1.a;.  }.} {{
1da0: 7d 20 7b 7d 20 31 20 31 20 30 78 35 20 35 20 30  } {} 1 1 0x5 5 0
1db0: 78 34 35 20 36 39 7d 0a 64 6f 5f 74 65 73 74 20  x45 69}.do_test 
1dc0: 63 6f 6c 6c 61 74 65 31 2d 33 2e 33 20 7b 0a 20  collate1-3.3 {. 
1dd0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
1de0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 63 6f 6c  ELECT * FROM col
1df0: 6c 61 74 65 31 74 31 20 4f 52 44 45 52 20 42 59  late1t1 ORDER BY
1e00: 20 6d 61 69 6e 2e 63 6f 6c 6c 61 74 65 31 74 31   main.collate1t1
1e10: 2e 61 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20 7b 7d  .a;.  }.} {{} {}
1e20: 20 31 20 31 20 30 78 35 20 35 20 30 78 34 35 20   1 1 0x5 5 0x45 
1e30: 36 39 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c  69}.do_test coll
1e40: 61 74 65 31 2d 33 2e 34 20 7b 0a 20 20 65 78 65  ate1-3.4 {.  exe
1e50: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
1e60: 54 20 61 20 61 73 20 63 31 2c 20 62 20 61 73 20  T a as c1, b as 
1e70: 63 32 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31  c2 FROM collate1
1e80: 74 31 20 4f 52 44 45 52 20 42 59 20 63 31 3b 0a  t1 ORDER BY c1;.
1e90: 20 20 7d 0a 7d 20 7b 7b 7d 20 7b 7d 20 31 20 31    }.} {{} {} 1 1
1ea0: 20 30 78 35 20 35 20 30 78 34 35 20 36 39 7d 0a   0x5 5 0x45 69}.
1eb0: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31  do_test collate1
1ec0: 2d 33 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c  -3.5 {.  execsql
1ed0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20   {.    SELECT a 
1ee0: 61 73 20 63 31 2c 20 62 20 61 73 20 63 32 20 46  as c1, b as c2 F
1ef0: 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20 4f  ROM collate1t1 O
1f00: 52 44 45 52 20 42 59 20 63 31 20 43 4f 4c 4c 41  RDER BY c1 COLLA
1f10: 54 45 20 62 69 6e 61 72 79 3b 0a 20 20 7d 0a 7d  TE binary;.  }.}
1f20: 20 7b 7b 7d 20 7b 7d 20 30 78 34 35 20 36 39 20   {{} {} 0x45 69 
1f30: 30 78 35 20 35 20 31 20 31 7d 0a 64 6f 5f 74 65  0x5 5 1 1}.do_te
1f40: 73 74 20 63 6f 6c 6c 61 74 65 31 2d 33 2e 35 2e  st collate1-3.5.
1f50: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
1f60: 20 20 20 20 53 45 4c 45 43 54 20 61 20 43 4f 4c      SELECT a COL
1f70: 4c 41 54 45 20 62 69 6e 61 72 79 20 61 73 20 63  LATE binary as c
1f80: 31 2c 20 62 20 61 73 20 63 32 0a 20 20 20 20 20  1, b as c2.     
1f90: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31   FROM collate1t1
1fa0: 20 4f 52 44 45 52 20 42 59 20 63 31 3b 0a 20 20   ORDER BY c1;.  
1fb0: 7d 0a 7d 20 7b 7b 7d 20 7b 7d 20 30 78 34 35 20  }.} {{} {} 0x45 
1fc0: 36 39 20 30 78 35 20 35 20 31 20 31 7d 0a 64 6f  69 0x5 5 1 1}.do
1fd0: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 33  _test collate1-3
1fe0: 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .6 {.  execsql {
1ff0: 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20  .    DROP TABLE 
2000: 63 6f 6c 6c 61 74 65 31 74 31 3b 0a 20 20 7d 0a  collate1t1;.  }.
2010: 7d 20 7b 7d 0a 0a 23 20 55 70 64 61 74 65 20 66  } {}..# Update f
2020: 6f 72 20 53 51 4c 69 74 65 20 76 65 72 73 69 6f  or SQLite versio
2030: 6e 20 33 2e 20 54 68 65 20 63 6f 6c 6c 61 74 65  n 3. The collate
2040: 31 2d 34 2e 2a 20 74 65 73 74 20 63 61 73 65 73  1-4.* test cases
2050: 20 77 65 72 65 20 77 72 69 74 74 65 6e 0a 23 20   were written.# 
2060: 62 65 66 6f 72 65 20 6d 61 6e 69 66 65 73 74 20  before manifest 
2070: 74 79 70 65 73 20 77 65 72 65 20 69 6e 74 72 6f  types were intro
2080: 64 75 63 65 64 2e 20 54 68 65 20 66 6f 6c 6c 6f  duced. The follo
2090: 77 69 6e 67 20 74 65 73 74 20 63 61 73 65 73 20  wing test cases 
20a0: 73 74 69 6c 6c 0a 23 20 77 6f 72 6b 2c 20 64 75  still.# work, du
20b0: 65 20 74 6f 20 74 68 65 20 27 61 66 66 69 6e 69  e to the 'affini
20c0: 74 79 27 20 6d 65 63 68 61 6e 69 73 6d 2c 20 62  ty' mechanism, b
20d0: 75 74 20 74 68 65 79 20 64 6f 6e 27 74 20 70 72  ut they don't pr
20e0: 6f 76 65 20 61 6e 79 74 68 69 6e 67 0a 23 20 61  ove anything.# a
20f0: 62 6f 75 74 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  bout collation s
2100: 65 71 75 65 6e 63 65 73 2e 0a 23 0a 64 6f 5f 74  equences..#.do_t
2110: 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 34 2e 30  est collate1-4.0
2120: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2130: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
2140: 63 6f 6c 6c 61 74 65 31 74 31 28 63 31 20 6e 75  collate1t1(c1 nu
2150: 6d 65 72 69 63 2c 20 63 32 20 74 65 78 74 29 3b  meric, c2 text);
2160: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
2170: 20 63 6f 6c 6c 61 74 65 31 74 31 20 56 41 4c 55   collate1t1 VALU
2180: 45 53 28 31 2c 20 31 29 3b 0a 20 20 20 20 49 4e  ES(1, 1);.    IN
2190: 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74  SERT INTO collat
21a0: 65 31 74 31 20 56 41 4c 55 45 53 28 31 32 2c 20  e1t1 VALUES(12, 
21b0: 31 32 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  12);.    INSERT 
21c0: 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 31 74 31 20  INTO collate1t1 
21d0: 56 41 4c 55 45 53 28 4e 55 4c 4c 2c 20 4e 55 4c  VALUES(NULL, NUL
21e0: 4c 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  L);.    INSERT I
21f0: 4e 54 4f 20 63 6f 6c 6c 61 74 65 31 74 31 20 56  NTO collate1t1 V
2200: 41 4c 55 45 53 28 31 30 31 2c 20 31 30 31 29 3b  ALUES(101, 101);
2210: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
2220: 74 20 63 6f 6c 6c 61 74 65 31 2d 34 2e 31 20 7b  t collate1-4.1 {
2230: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
2240: 20 53 45 4c 45 43 54 20 63 31 20 46 52 4f 4d 20   SELECT c1 FROM 
2250: 63 6f 6c 6c 61 74 65 31 74 31 20 4f 52 44 45 52  collate1t1 ORDER
2260: 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d   BY 1;.  }.} {{}
2270: 20 31 20 31 32 20 31 30 31 7d 0a 64 6f 5f 74 65   1 12 101}.do_te
2280: 73 74 20 63 6f 6c 6c 61 74 65 31 2d 34 2e 32 20  st collate1-4.2 
2290: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
22a0: 20 20 53 45 4c 45 43 54 20 63 32 20 46 52 4f 4d    SELECT c2 FROM
22b0: 20 63 6f 6c 6c 61 74 65 31 74 31 20 4f 52 44 45   collate1t1 ORDE
22c0: 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 7b  R BY 1;.  }.} {{
22d0: 7d 20 31 20 31 30 31 20 31 32 7d 0a 64 6f 5f 74  } 1 101 12}.do_t
22e0: 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 34 2e 33  est collate1-4.3
22f0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2300: 20 20 20 53 45 4c 45 43 54 20 63 32 2b 30 20 46     SELECT c2+0 F
2310: 52 4f 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20 4f  ROM collate1t1 O
2320: 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d  RDER BY 1;.  }.}
2330: 20 7b 7b 7d 20 31 20 31 32 20 31 30 31 7d 0a 64   {{} 1 12 101}.d
2340: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d  o_test collate1-
2350: 34 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.4 {.  execsql 
2360: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63 31 7c  {.    SELECT c1|
2370: 7c 27 27 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65  |'' FROM collate
2380: 31 74 31 20 4f 52 44 45 52 20 42 59 20 31 3b 0a  1t1 ORDER BY 1;.
2390: 20 20 7d 0a 7d 20 7b 7b 7d 20 31 20 31 30 31 20    }.} {{} 1 101 
23a0: 31 32 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c  12}.do_test coll
23b0: 61 74 65 31 2d 34 2e 34 2e 31 20 7b 0a 20 20 65  ate1-4.4.1 {.  e
23c0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
23d0: 45 43 54 20 28 63 31 7c 7c 27 27 29 20 43 4f 4c  ECT (c1||'') COL
23e0: 4c 41 54 45 20 6e 75 6d 65 72 69 63 20 46 52 4f  LATE numeric FRO
23f0: 4d 20 63 6f 6c 6c 61 74 65 31 74 31 20 4f 52 44  M collate1t1 ORD
2400: 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b  ER BY 1;.  }.} {
2410: 7b 7d 20 31 20 31 32 20 31 30 31 7d 0a 64 6f 5f  {} 1 12 101}.do_
2420: 74 65 73 74 20 63 6f 6c 6c 61 74 65 31 2d 34 2e  test collate1-4.
2430: 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  5 {.  execsql {.
2440: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 63      DROP TABLE c
2450: 6f 6c 6c 61 74 65 31 74 31 3b 0a 20 20 7d 0a 7d  ollate1t1;.  }.}
2460: 20 7b 7d 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74   {}..finish_test
2470: 0a                                               .