/ Hex Artifact Content
Login

Artifact e54df13eb9e1140273680b3153c6e19b39e59888:


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 2a 2a 0a 23 20  *************.# 
0170: 54 68 69 73 20 66 69 6c 65 20 69 6d 70 6c 65 6d  This file implem
0180: 65 6e 74 73 20 72 65 67 72 65 73 73 69 6f 6e 20  ents regression 
0190: 74 65 73 74 73 20 66 6f 72 20 53 51 4c 69 74 65  tests for SQLite
01a0: 20 6c 69 62 72 61 72 79 2e 20 20 54 68 65 0a 23   library.  The.#
01b0: 20 66 6f 63 75 73 20 6f 66 20 74 68 69 73 20 66   focus of this f
01c0: 69 6c 65 20 69 73 20 74 65 73 74 69 6e 67 20 44  ile is testing D
01d0: 49 53 54 49 4e 43 54 2c 20 55 4e 49 4f 4e 2c 20  ISTINCT, UNION, 
01e0: 49 4e 54 45 52 53 45 43 54 20 61 6e 64 20 45 58  INTERSECT and EX
01f0: 43 45 50 54 0a 23 20 53 45 4c 45 43 54 20 73 74  CEPT.# SELECT st
0200: 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20 75 73  atements that us
0210: 65 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 63  e user-defined c
0220: 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63  ollation sequenc
0230: 65 73 2e 20 41 6c 73 6f 0a 23 20 47 52 4f 55 50  es. Also.# GROUP
0240: 20 42 59 20 63 6c 61 75 73 65 73 20 74 68 61 74   BY clauses that
0250: 20 75 73 65 20 75 73 65 72 2d 64 65 66 69 6e 65   use user-define
0260: 64 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75  d collation sequ
0270: 65 6e 63 65 73 2e 0a 23 0a 23 20 24 49 64 3a 20  ences..#.# $Id: 
0280: 63 6f 6c 6c 61 74 65 35 2e 74 65 73 74 2c 76 20  collate5.test,v 
0290: 31 2e 36 20 32 30 30 37 2f 31 31 2f 31 32 20 31  1.6 2007/11/12 1
02a0: 35 3a 32 39 3a 31 39 20 64 61 6e 69 65 6c 6b 31  5:29:19 danielk1
02b0: 39 37 37 20 45 78 70 20 24 0a 0a 73 65 74 20 74  977 Exp $..set t
02c0: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
02d0: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
02e0: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
02f0: 74 65 72 2e 74 63 6c 0a 0a 0a 23 0a 23 20 54 65  ter.tcl...#.# Te
0300: 73 74 73 20 61 72 65 20 6f 72 67 61 6e 69 73 65  sts are organise
0310: 64 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 23 20  d as follows:.# 
0320: 63 6f 6c 6c 61 74 65 35 2d 31 2e 2a 20 2d 20 44  collate5-1.* - D
0330: 49 53 54 49 4e 43 54 0a 23 20 63 6f 6c 6c 61 74  ISTINCT.# collat
0340: 65 35 2d 32 2e 2a 20 2d 20 43 6f 6d 70 6f 75 6e  e5-2.* - Compoun
0350: 64 20 53 45 4c 45 43 54 0a 23 20 63 6f 6c 6c 61  d SELECT.# colla
0360: 74 65 35 2d 33 2e 2a 20 2d 20 4f 52 44 45 52 20  te5-3.* - ORDER 
0370: 42 59 20 6f 6e 20 63 6f 6d 70 6f 75 6e 64 20 53  BY on compound S
0380: 45 4c 45 43 54 0a 23 20 63 6f 6c 6c 61 74 65 35  ELECT.# collate5
0390: 2d 34 2e 2a 20 2d 20 47 52 4f 55 50 20 42 59 0a  -4.* - GROUP BY.
03a0: 0a 23 20 43 72 65 61 74 65 20 74 68 65 20 63 6f  .# Create the co
03b0: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
03c0: 20 27 54 45 58 54 27 2c 20 70 75 72 65 6c 79 20   'TEXT', purely 
03d0: 66 6f 72 20 61 73 74 68 65 74 69 63 20 72 65 61  for asthetic rea
03e0: 73 6f 6e 73 2e 20 54 68 65 0a 23 20 74 65 73 74  sons. The.# test
03f0: 20 63 61 73 65 73 20 69 6e 20 74 68 69 73 20 73   cases in this s
0400: 63 72 69 70 74 20 63 6f 75 6c 64 20 6a 75 73 74  cript could just
0410: 20 61 73 20 65 61 73 69 6c 79 20 75 73 65 20 42   as easily use B
0420: 49 4e 41 52 59 2e 0a 64 62 20 63 6f 6c 6c 61 74  INARY..db collat
0430: 65 20 54 45 58 54 20 5b 6c 69 73 74 20 73 74 72  e TEXT [list str
0440: 69 6e 67 20 63 6f 6d 70 61 72 65 5d 0a 0a 23 20  ing compare]..# 
0450: 4d 69 6d 69 63 20 74 68 65 20 53 51 4c 69 74 65  Mimic the SQLite
0460: 20 32 20 63 6f 6c 6c 61 74 69 6f 6e 20 74 79 70   2 collation typ
0470: 65 20 4e 55 4d 45 52 49 43 2e 0a 64 62 20 63 6f  e NUMERIC..db co
0480: 6c 6c 61 74 65 20 6e 75 6d 65 72 69 63 20 6e 75  llate numeric nu
0490: 6d 65 72 69 63 5f 63 6f 6c 6c 61 74 65 0a 70 72  meric_collate.pr
04a0: 6f 63 20 6e 75 6d 65 72 69 63 5f 63 6f 6c 6c 61  oc numeric_colla
04b0: 74 65 20 7b 6c 68 73 20 72 68 73 7d 20 7b 0a 20  te {lhs rhs} {. 
04c0: 20 69 66 20 7b 24 6c 68 73 20 3d 3d 20 24 72 68   if {$lhs == $rh
04d0: 73 7d 20 7b 72 65 74 75 72 6e 20 30 7d 20 0a 20  s} {return 0} . 
04e0: 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 28 24   return [expr ($
04f0: 6c 68 73 3e 24 72 68 73 29 3f 31 3a 2d 31 5d 0a  lhs>$rhs)?1:-1].
0500: 7d 0a 0a 23 0a 23 20 54 68 65 73 65 20 74 65 73  }..#.# These tes
0510: 74 73 20 2d 20 63 6f 6c 6c 61 74 65 35 2d 31 2e  ts - collate5-1.
0520: 2a 20 2d 20 66 6f 63 75 73 20 6f 6e 20 74 68 65  * - focus on the
0530: 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
0540: 64 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 63 6f 6c  d..#.do_test col
0550: 6c 61 74 65 35 2d 31 2e 30 20 7b 0a 20 20 65 78  late5-1.0 {.  ex
0560: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
0570: 54 45 20 54 41 42 4c 45 20 63 6f 6c 6c 61 74 65  TE TABLE collate
0580: 35 74 31 28 61 20 43 4f 4c 4c 41 54 45 20 6e 6f  5t1(a COLLATE no
0590: 63 61 73 65 2c 20 62 20 43 4f 4c 4c 41 54 45 20  case, b COLLATE 
05a0: 74 65 78 74 29 3b 0a 0a 20 20 20 20 49 4e 53 45  text);..    INSE
05b0: 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 35  RT INTO collate5
05c0: 74 31 20 56 41 4c 55 45 53 28 27 61 27 2c 20 27  t1 VALUES('a', '
05d0: 61 70 70 6c 65 27 29 3b 0a 20 20 20 20 49 4e 53  apple');.    INS
05e0: 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65  ERT INTO collate
05f0: 35 74 31 20 56 41 4c 55 45 53 28 27 41 27 2c 20  5t1 VALUES('A', 
0600: 27 41 70 70 6c 65 27 29 3b 0a 20 20 20 20 49 4e  'Apple');.    IN
0610: 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74  SERT INTO collat
0620: 65 35 74 31 20 56 41 4c 55 45 53 28 27 62 27 2c  e5t1 VALUES('b',
0630: 20 27 62 61 6e 61 6e 61 27 29 3b 0a 20 20 20 20   'banana');.    
0640: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c  INSERT INTO coll
0650: 61 74 65 35 74 31 20 56 41 4c 55 45 53 28 27 42  ate5t1 VALUES('B
0660: 27 2c 20 27 62 61 6e 61 6e 61 27 29 3b 0a 20 20  ', 'banana');.  
0670: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f    INSERT INTO co
0680: 6c 6c 61 74 65 35 74 31 20 56 41 4c 55 45 53 28  llate5t1 VALUES(
0690: 27 6e 27 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20 20  'n', NULL);.    
06a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c  INSERT INTO coll
06b0: 61 74 65 35 74 31 20 56 41 4c 55 45 53 28 27 4e  ate5t1 VALUES('N
06c0: 27 2c 20 4e 55 4c 4c 29 3b 0a 20 20 7d 20 0a 7d  ', NULL);.  } .}
06d0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c   {}.do_test coll
06e0: 61 74 65 35 2d 31 2e 31 20 7b 0a 20 20 65 78 65  ate5-1.1 {.  exe
06f0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
0700: 54 20 44 49 53 54 49 4e 43 54 20 61 20 46 52 4f  T DISTINCT a FRO
0710: 4d 20 63 6f 6c 6c 61 74 65 35 74 31 3b 0a 20 20  M collate5t1;.  
0720: 7d 0a 7d 20 7b 41 20 42 20 4e 7d 0a 64 6f 5f 74  }.} {A B N}.do_t
0730: 65 73 74 20 63 6f 6c 6c 61 74 65 35 2d 31 2e 32  est collate5-1.2
0740: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
0750: 20 20 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e     SELECT DISTIN
0760: 43 54 20 62 20 46 52 4f 4d 20 63 6f 6c 6c 61 74  CT b FROM collat
0770: 65 35 74 31 3b 0a 20 20 7d 0a 7d 20 7b 7b 7d 20  e5t1;.  }.} {{} 
0780: 41 70 70 6c 65 20 61 70 70 6c 65 20 62 61 6e 61  Apple apple bana
0790: 6e 61 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c  na}.do_test coll
07a0: 61 74 65 35 2d 31 2e 33 20 7b 0a 20 20 65 78 65  ate5-1.3 {.  exe
07b0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
07c0: 54 20 44 49 53 54 49 4e 43 54 20 61 2c 20 62 20  T DISTINCT a, b 
07d0: 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 35 74 31 3b  FROM collate5t1;
07e0: 0a 20 20 7d 0a 7d 20 7b 41 20 41 70 70 6c 65 20  .  }.} {A Apple 
07f0: 61 20 61 70 70 6c 65 20 42 20 62 61 6e 61 6e 61  a apple B banana
0800: 20 4e 20 7b 7d 7d 0a 0a 23 20 54 68 65 20 72 65   N {}}..# The re
0810: 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 69 73 20  mainder of this 
0820: 66 69 6c 65 20 74 65 73 74 73 20 63 6f 6d 70 6f  file tests compo
0830: 75 6e 64 20 53 45 4c 45 43 54 20 73 74 61 74 65  und SELECT state
0840: 6d 65 6e 74 73 2e 0a 23 20 4f 6d 69 74 20 69 74  ments..# Omit it
0850: 20 69 66 20 74 68 65 20 6c 69 62 72 61 72 79 20   if the library 
0860: 69 73 20 63 6f 6d 70 69 6c 65 64 20 73 75 63 68  is compiled such
0870: 20 74 68 61 74 20 74 68 65 79 20 61 72 65 20 6f   that they are o
0880: 6d 69 74 74 65 64 2e 0a 23 0a 69 66 63 61 70 61  mitted..#.ifcapa
0890: 62 6c 65 20 21 63 6f 6d 70 6f 75 6e 64 20 7b 0a  ble !compound {.
08a0: 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20 20    finish_test.  
08b0: 72 65 74 75 72 6e 0a 7d 0a 0a 23 0a 23 20 54 65  return.}..#.# Te
08c0: 73 74 73 20 6e 61 6d 65 64 20 63 6f 6c 6c 61 74  sts named collat
08d0: 65 35 2d 32 2e 2a 20 66 6f 63 75 73 20 6f 6e 20  e5-2.* focus on 
08e0: 55 4e 49 4f 4e 2c 20 45 58 43 45 50 54 20 61 6e  UNION, EXCEPT an
08f0: 64 20 49 4e 54 45 52 53 45 43 54 0a 23 20 71 75  d INTERSECT.# qu
0900: 65 72 69 65 73 20 74 68 61 74 20 75 73 65 20 75  eries that use u
0910: 73 65 72 2d 64 65 66 69 6e 65 64 20 63 6f 6c 6c  ser-defined coll
0920: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 73 2e  ation sequences.
0930: 0a 23 0a 23 20 63 6f 6c 6c 61 74 65 35 2d 32 2e  .#.# collate5-2.
0940: 31 2e 2a 20 2d 20 55 4e 49 4f 4e 0a 23 20 63 6f  1.* - UNION.# co
0950: 6c 6c 61 74 65 35 2d 32 2e 32 2e 2a 20 2d 20 49  llate5-2.2.* - I
0960: 4e 54 45 52 53 45 43 54 0a 23 20 63 6f 6c 6c 61  NTERSECT.# colla
0970: 74 65 35 2d 32 2e 33 2e 2a 20 2d 20 45 58 43 45  te5-2.3.* - EXCE
0980: 50 54 0a 23 0a 64 6f 5f 74 65 73 74 20 63 6f 6c  PT.#.do_test col
0990: 6c 61 74 65 35 2d 32 2e 30 20 7b 0a 20 20 65 78  late5-2.0 {.  ex
09a0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
09b0: 54 45 20 54 41 42 4c 45 20 63 6f 6c 6c 61 74 65  TE TABLE collate
09c0: 35 74 32 28 61 20 43 4f 4c 4c 41 54 45 20 74 65  5t2(a COLLATE te
09d0: 78 74 2c 20 62 20 43 4f 4c 4c 41 54 45 20 6e 6f  xt, b COLLATE no
09e0: 63 61 73 65 29 3b 0a 0a 20 20 20 20 49 4e 53 45  case);..    INSE
09f0: 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 35  RT INTO collate5
0a00: 74 32 20 56 41 4c 55 45 53 28 27 61 27 2c 20 27  t2 VALUES('a', '
0a10: 61 70 70 6c 65 27 29 3b 0a 20 20 20 20 49 4e 53  apple');.    INS
0a20: 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65  ERT INTO collate
0a30: 35 74 32 20 56 41 4c 55 45 53 28 27 41 27 2c 20  5t2 VALUES('A', 
0a40: 27 61 70 70 6c 65 27 29 3b 0a 20 20 20 20 49 4e  'apple');.    IN
0a50: 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74  SERT INTO collat
0a60: 65 35 74 32 20 56 41 4c 55 45 53 28 27 62 27 2c  e5t2 VALUES('b',
0a70: 20 27 62 61 6e 61 6e 61 27 29 3b 0a 20 20 20 20   'banana');.    
0a80: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c  INSERT INTO coll
0a90: 61 74 65 35 74 32 20 56 41 4c 55 45 53 28 27 42  ate5t2 VALUES('B
0aa0: 27 2c 20 27 42 61 6e 61 6e 61 27 29 3b 0a 20 20  ', 'Banana');.  
0ab0: 7d 20 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74  } .} {}..do_test
0ac0: 20 63 6f 6c 6c 61 74 65 35 2d 32 2e 31 2e 31 20   collate5-2.1.1 
0ad0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0ae0: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
0af0: 63 6f 6c 6c 61 74 65 35 74 31 20 55 4e 49 4f 4e  collate5t1 UNION
0b00: 20 73 65 6c 65 63 74 20 61 20 46 52 4f 4d 20 63   select a FROM c
0b10: 6f 6c 6c 61 74 65 35 74 32 3b 0a 20 20 7d 0a 7d  ollate5t2;.  }.}
0b20: 20 7b 41 20 42 20 4e 7d 0a 64 6f 5f 74 65 73 74   {A B N}.do_test
0b30: 20 63 6f 6c 6c 61 74 65 35 2d 32 2e 31 2e 32 20   collate5-2.1.2 
0b40: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0b50: 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20    SELECT a FROM 
0b60: 63 6f 6c 6c 61 74 65 35 74 32 20 55 4e 49 4f 4e  collate5t2 UNION
0b70: 20 73 65 6c 65 63 74 20 61 20 46 52 4f 4d 20 63   select a FROM c
0b80: 6f 6c 6c 61 74 65 35 74 31 3b 0a 20 20 7d 0a 7d  ollate5t1;.  }.}
0b90: 20 7b 41 20 42 20 4e 20 61 20 62 20 6e 7d 0a 64   {A B N a b n}.d
0ba0: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 35 2d  o_test collate5-
0bb0: 32 2e 31 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  2.1.3 {.  execsq
0bc0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
0bd0: 2c 20 62 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65  , b FROM collate
0be0: 35 74 31 20 55 4e 49 4f 4e 20 73 65 6c 65 63 74  5t1 UNION select
0bf0: 20 61 2c 20 62 20 46 52 4f 4d 20 63 6f 6c 6c 61   a, b FROM colla
0c00: 74 65 35 74 32 3b 0a 20 20 7d 0a 7d 20 7b 41 20  te5t2;.  }.} {A 
0c10: 41 70 70 6c 65 20 41 20 61 70 70 6c 65 20 42 20  Apple A apple B 
0c20: 42 61 6e 61 6e 61 20 62 20 62 61 6e 61 6e 61 20  Banana b banana 
0c30: 4e 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 63 6f  N {}}.do_test co
0c40: 6c 6c 61 74 65 35 2d 32 2e 31 2e 34 20 7b 0a 20  llate5-2.1.4 {. 
0c50: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
0c60: 45 4c 45 43 54 20 61 2c 20 62 20 46 52 4f 4d 20  ELECT a, b FROM 
0c70: 63 6f 6c 6c 61 74 65 35 74 32 20 55 4e 49 4f 4e  collate5t2 UNION
0c80: 20 73 65 6c 65 63 74 20 61 2c 20 62 20 46 52 4f   select a, b FRO
0c90: 4d 20 63 6f 6c 6c 61 74 65 35 74 31 3b 0a 20 20  M collate5t1;.  
0ca0: 7d 0a 7d 20 7b 41 20 41 70 70 6c 65 20 42 20 62  }.} {A Apple B b
0cb0: 61 6e 61 6e 61 20 4e 20 7b 7d 20 61 20 61 70 70  anana N {} a app
0cc0: 6c 65 20 62 20 62 61 6e 61 6e 61 20 6e 20 7b 7d  le b banana n {}
0cd0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61  }..do_test colla
0ce0: 74 65 35 2d 32 2e 32 2e 31 20 7b 0a 20 20 65 78  te5-2.2.1 {.  ex
0cf0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
0d00: 43 54 20 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74  CT a FROM collat
0d10: 65 35 74 31 20 45 58 43 45 50 54 20 73 65 6c 65  e5t1 EXCEPT sele
0d20: 63 74 20 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74  ct a FROM collat
0d30: 65 35 74 32 3b 0a 20 20 7d 0a 7d 20 7b 4e 7d 0a  e5t2;.  }.} {N}.
0d40: 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 35  do_test collate5
0d50: 2d 32 2e 32 2e 32 20 7b 0a 20 20 65 78 65 63 73  -2.2.2 {.  execs
0d60: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
0d70: 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 35 74  a FROM collate5t
0d80: 32 20 45 58 43 45 50 54 20 73 65 6c 65 63 74 20  2 EXCEPT select 
0d90: 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 35 74  a FROM collate5t
0da0: 31 20 57 48 45 52 45 20 61 20 21 3d 20 27 61 27  1 WHERE a != 'a'
0db0: 3b 0a 20 20 7d 0a 7d 20 7b 41 20 61 7d 0a 64 6f  ;.  }.} {A a}.do
0dc0: 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 35 2d 32  _test collate5-2
0dd0: 2e 32 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  .2.3 {.  execsql
0de0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 2c   {.    SELECT a,
0df0: 20 62 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 35   b FROM collate5
0e00: 74 31 20 45 58 43 45 50 54 20 73 65 6c 65 63 74  t1 EXCEPT select
0e10: 20 61 2c 20 62 20 46 52 4f 4d 20 63 6f 6c 6c 61   a, b FROM colla
0e20: 74 65 35 74 32 3b 0a 20 20 7d 0a 7d 20 7b 41 20  te5t2;.  }.} {A 
0e30: 41 70 70 6c 65 20 4e 20 7b 7d 7d 0a 64 6f 5f 74  Apple N {}}.do_t
0e40: 65 73 74 20 63 6f 6c 6c 61 74 65 35 2d 32 2e 32  est collate5-2.2
0e50: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
0e60: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 2c 20 62  .    SELECT a, b
0e70: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 35 74 32   FROM collate5t2
0e80: 20 45 58 43 45 50 54 20 73 65 6c 65 63 74 20 61   EXCEPT select a
0e90: 2c 20 62 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65  , b FROM collate
0ea0: 35 74 31 20 0a 20 20 20 20 20 20 77 68 65 72 65  5t1 .      where
0eb0: 20 61 20 21 3d 20 27 61 27 3b 0a 20 20 7d 0a 7d   a != 'a';.  }.}
0ec0: 20 7b 41 20 61 70 70 6c 65 20 61 20 61 70 70 6c   {A apple a appl
0ed0: 65 7d 0a 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c  e}..do_test coll
0ee0: 61 74 65 35 2d 32 2e 33 2e 31 20 7b 0a 20 20 65  ate5-2.3.1 {.  e
0ef0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
0f00: 45 43 54 20 61 20 46 52 4f 4d 20 63 6f 6c 6c 61  ECT a FROM colla
0f10: 74 65 35 74 31 20 49 4e 54 45 52 53 45 43 54 20  te5t1 INTERSECT 
0f20: 73 65 6c 65 63 74 20 61 20 46 52 4f 4d 20 63 6f  select a FROM co
0f30: 6c 6c 61 74 65 35 74 32 3b 0a 20 20 7d 0a 7d 20  llate5t2;.  }.} 
0f40: 7b 41 20 42 7d 0a 64 6f 5f 74 65 73 74 20 63 6f  {A B}.do_test co
0f50: 6c 6c 61 74 65 35 2d 32 2e 33 2e 32 20 7b 0a 20  llate5-2.3.2 {. 
0f60: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
0f70: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 63 6f 6c  ELECT a FROM col
0f80: 6c 61 74 65 35 74 32 20 49 4e 54 45 52 53 45 43  late5t2 INTERSEC
0f90: 54 20 73 65 6c 65 63 74 20 61 20 46 52 4f 4d 20  T select a FROM 
0fa0: 63 6f 6c 6c 61 74 65 35 74 31 20 57 48 45 52 45  collate5t1 WHERE
0fb0: 20 61 20 21 3d 20 27 61 27 3b 0a 20 20 7d 0a 7d   a != 'a';.  }.}
0fc0: 20 7b 42 20 62 7d 0a 64 6f 5f 74 65 73 74 20 63   {B b}.do_test c
0fd0: 6f 6c 6c 61 74 65 35 2d 32 2e 33 2e 33 20 7b 0a  ollate5-2.3.3 {.
0fe0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0ff0: 53 45 4c 45 43 54 20 61 2c 20 62 20 46 52 4f 4d  SELECT a, b FROM
1000: 20 63 6f 6c 6c 61 74 65 35 74 31 20 49 4e 54 45   collate5t1 INTE
1010: 52 53 45 43 54 20 73 65 6c 65 63 74 20 61 2c 20  RSECT select a, 
1020: 62 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 35 74  b FROM collate5t
1030: 32 3b 0a 20 20 7d 0a 7d 20 7b 61 20 61 70 70 6c  2;.  }.} {a appl
1040: 65 20 42 20 62 61 6e 61 6e 61 7d 0a 64 6f 5f 74  e B banana}.do_t
1050: 65 73 74 20 63 6f 6c 6c 61 74 65 35 2d 32 2e 33  est collate5-2.3
1060: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
1070: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 2c 20 62  .    SELECT a, b
1080: 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 35 74 32   FROM collate5t2
1090: 20 49 4e 54 45 52 53 45 43 54 20 73 65 6c 65 63   INTERSECT selec
10a0: 74 20 61 2c 20 62 20 46 52 4f 4d 20 63 6f 6c 6c  t a, b FROM coll
10b0: 61 74 65 35 74 31 3b 0a 20 20 7d 0a 7d 20 7b 41  ate5t1;.  }.} {A
10c0: 20 61 70 70 6c 65 20 42 20 42 61 6e 61 6e 61 20   apple B Banana 
10d0: 61 20 61 70 70 6c 65 20 62 20 62 61 6e 61 6e 61  a apple b banana
10e0: 7d 0a 0a 23 0a 23 20 54 68 69 73 20 74 65 73 74  }..#.# This test
10f0: 20 65 6e 73 75 72 65 73 20 70 65 72 66 6f 72 6d   ensures perform
1100: 73 20 61 20 55 4e 49 4f 4e 20 6f 70 65 72 61 74  s a UNION operat
1110: 69 6f 6e 20 77 69 74 68 20 61 20 62 75 6e 63 68  ion with a bunch
1120: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 0a 23 20   of different.# 
1130: 6c 65 6e 67 74 68 20 72 65 63 6f 72 64 73 2e 20  length records. 
1140: 54 68 65 20 67 6f 61 6c 20 69 73 20 74 6f 20 74  The goal is to t
1150: 65 73 74 20 74 68 61 74 20 74 68 65 20 6c 6f 67  est that the log
1160: 69 63 20 74 68 61 74 20 63 6f 6d 70 61 72 65 73  ic that compares
1170: 20 72 65 63 6f 72 64 73 0a 23 20 66 6f 72 20 74   records.# for t
1180: 68 65 20 63 6f 6d 70 6f 75 6e 64 20 53 45 4c 45  he compound SELE
1190: 43 54 20 6f 70 65 72 61 74 6f 72 73 20 77 6f 72  CT operators wor
11a0: 6b 73 20 77 69 74 68 20 72 65 63 6f 72 64 20 6c  ks with record l
11b0: 65 6e 67 74 68 73 20 74 68 61 74 20 6c 69 65 0a  engths that lie.
11c0: 23 20 65 69 74 68 65 72 20 73 69 64 65 20 6f 66  # either side of
11d0: 20 74 68 65 20 74 72 6f 75 62 6c 65 73 6f 6d 65   the troublesome
11e0: 20 32 35 36 20 61 6e 64 20 36 35 35 33 36 20 62   256 and 65536 b
11f0: 79 74 65 20 6d 61 72 6b 73 2e 0a 23 0a 73 65 74  yte marks..#.set
1200: 20 3a 3a 6c 65 6e 73 20 5b 6c 69 73 74 20 5c 0a   ::lens [list \.
1210: 20 20 30 20 31 20 32 20 33 20 34 20 35 20 36 20    0 1 2 3 4 5 6 
1220: 37 20 38 20 39 20 5c 0a 20 20 32 34 30 20 32 34  7 8 9 \.  240 24
1230: 31 20 32 34 32 20 32 34 33 20 32 34 34 20 32 34  1 242 243 244 24
1240: 35 20 32 34 36 20 32 34 37 20 32 34 38 20 32 34  5 246 247 248 24
1250: 39 20 32 35 30 20 32 35 31 20 32 35 32 20 32 35  9 250 251 252 25
1260: 33 20 32 35 34 20 32 35 35 20 32 35 36 20 5c 0a  3 254 255 256 \.
1270: 20 20 32 35 37 20 32 35 38 20 32 35 39 20 32 36    257 258 259 26
1280: 30 20 32 36 31 20 32 36 32 20 32 36 33 20 32 36  0 261 262 263 26
1290: 34 20 32 36 35 20 32 36 36 20 32 36 37 20 32 36  4 265 266 267 26
12a0: 38 20 32 36 39 20 32 37 30 20 32 37 31 20 32 37  8 269 270 271 27
12b0: 32 20 32 37 33 20 5c 0a 20 20 36 35 35 32 30 20  2 273 \.  65520 
12c0: 36 35 35 32 31 20 36 35 35 32 32 20 36 35 35 32  65521 65522 6552
12d0: 33 20 36 35 35 32 34 20 36 35 35 32 35 20 36 35  3 65524 65525 65
12e0: 35 32 36 20 36 35 35 32 37 20 36 35 35 32 38 20  526 65527 65528 
12f0: 36 35 35 32 39 20 36 35 35 33 30 20 5c 0a 20 20  65529 65530 \.  
1300: 36 35 35 33 31 20 36 35 35 33 32 20 36 35 35 33  65531 65532 6553
1310: 33 20 36 35 35 33 34 20 36 35 35 33 35 20 36 35  3 65534 65535 65
1320: 35 33 36 20 36 35 35 33 37 20 36 35 35 33 38 20  536 65537 65538 
1330: 36 35 35 33 39 20 36 35 35 34 30 20 36 35 35 34  65539 65540 6554
1340: 31 20 5c 0a 20 20 36 35 35 34 32 20 36 35 35 34  1 \.  65542 6554
1350: 33 20 36 35 35 34 34 20 36 35 35 34 35 20 36 35  3 65544 65545 65
1360: 35 34 36 20 36 35 35 34 37 20 36 35 35 34 38 20  546 65547 65548 
1370: 36 35 35 34 39 20 36 35 35 35 30 20 36 35 35 35  65549 65550 6555
1380: 31 20 5d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c  1 ].do_test coll
1390: 61 74 65 35 2d 32 2e 34 2e 30 20 7b 0a 20 20 65  ate5-2.4.0 {.  e
13a0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47  xecsql {.    BEG
13b0: 49 4e 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  IN;.    CREATE T
13c0: 41 42 4c 45 20 63 6f 6c 6c 61 74 65 35 74 33 28  ABLE collate5t3(
13d0: 61 2c 20 62 29 3b 0a 20 20 7d 0a 20 20 66 6f 72  a, b);.  }.  for
13e0: 65 61 63 68 20 69 69 20 24 3a 3a 6c 65 6e 73 20  each ii $::lens 
13f0: 7b 20 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22  { .    execsql "
1400: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c  INSERT INTO coll
1410: 61 74 65 35 74 33 20 56 41 4c 55 45 53 28 24 69  ate5t3 VALUES($i
1420: 69 2c 20 27 5b 73 74 72 69 6e 67 20 72 65 70 65  i, '[string repe
1430: 61 74 20 61 20 24 69 69 5d 27 29 3b 22 0a 20 20  at a $ii]');".  
1440: 7d 0a 20 20 65 78 70 72 20 5b 6c 6c 65 6e 67 74  }.  expr [llengt
1450: 68 20 5b 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  h [execsql {.   
1460: 20 43 4f 4d 4d 49 54 3b 0a 20 20 20 20 53 45 4c   COMMIT;.    SEL
1470: 45 43 54 20 2a 20 46 52 4f 4d 20 63 6f 6c 6c 61  ECT * FROM colla
1480: 74 65 35 74 33 20 55 4e 49 4f 4e 20 53 45 4c 45  te5t3 UNION SELE
1490: 43 54 20 2a 20 46 52 4f 4d 20 63 6f 6c 6c 61 74  CT * FROM collat
14a0: 65 35 74 33 3b 0a 20 20 7d 5d 5d 20 2f 20 32 0a  e5t3;.  }]] / 2.
14b0: 7d 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 6c 65  } [llength $::le
14c0: 6e 73 5d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c  ns].do_test coll
14d0: 61 74 65 35 2d 32 2e 34 2e 31 20 7b 0a 20 20 65  ate5-2.4.1 {.  e
14e0: 78 65 63 73 71 6c 20 7b 44 52 4f 50 20 54 41 42  xecsql {DROP TAB
14f0: 4c 45 20 63 6f 6c 6c 61 74 65 35 74 33 3b 7d 0a  LE collate5t3;}.
1500: 7d 20 7b 7d 0a 75 6e 73 65 74 20 3a 3a 6c 65 6e  } {}.unset ::len
1510: 73 0a 0a 23 0a 23 20 54 68 65 73 65 20 74 65 73  s..#.# These tes
1520: 74 73 20 2d 20 63 6f 6c 6c 61 74 65 35 2d 33 2e  ts - collate5-3.
1530: 2a 20 2d 20 66 6f 63 75 73 20 6f 6e 20 63 6f 6d  * - focus on com
1540: 70 6f 75 6e 64 20 53 45 4c 45 43 54 20 71 75 65  pound SELECT que
1550: 72 69 65 73 20 74 68 61 74 20 0a 23 20 66 65 61  ries that .# fea
1560: 74 75 72 65 20 4f 52 44 45 52 20 42 59 20 63 6c  ture ORDER BY cl
1570: 61 75 73 65 73 2e 0a 23 0a 64 6f 5f 74 65 73 74  auses..#.do_test
1580: 20 63 6f 6c 6c 61 74 65 35 2d 33 2e 30 20 7b 0a   collate5-3.0 {.
1590: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
15a0: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 63 6f  SELECT a FROM co
15b0: 6c 6c 61 74 65 35 74 31 20 55 4e 49 4f 4e 20 41  llate5t1 UNION A
15c0: 4c 4c 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d  LL SELECT a FROM
15d0: 20 63 6f 6c 6c 61 74 65 35 74 32 20 4f 52 44 45   collate5t2 ORDE
15e0: 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 61  R BY 1;.  }.} {a
15f0: 20 41 20 61 20 41 20 62 20 42 20 62 20 42 20 6e   A a A b B b B n
1600: 20 4e 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c   N}.do_test coll
1610: 61 74 65 35 2d 33 2e 31 20 7b 0a 20 20 65 78 65  ate5-3.1 {.  exe
1620: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
1630: 54 20 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65  T a FROM collate
1640: 35 74 32 20 55 4e 49 4f 4e 20 41 4c 4c 20 53 45  5t2 UNION ALL SE
1650: 4c 45 43 54 20 61 20 46 52 4f 4d 20 63 6f 6c 6c  LECT a FROM coll
1660: 61 74 65 35 74 31 20 4f 52 44 45 52 20 42 59 20  ate5t1 ORDER BY 
1670: 31 3b 0a 20 20 7d 0a 7d 20 7b 41 20 41 20 42 20  1;.  }.} {A A B 
1680: 42 20 4e 20 61 20 61 20 62 20 62 20 6e 7d 0a 64  B N a a b b n}.d
1690: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 35 2d  o_test collate5-
16a0: 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.2 {.  execsql 
16b0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 20 46  {.    SELECT a F
16c0: 52 4f 4d 20 63 6f 6c 6c 61 74 65 35 74 31 20 55  ROM collate5t1 U
16d0: 4e 49 4f 4e 20 41 4c 4c 20 53 45 4c 45 43 54 20  NION ALL SELECT 
16e0: 61 20 46 52 4f 4d 20 63 6f 6c 6c 61 74 65 35 74  a FROM collate5t
16f0: 32 20 0a 20 20 20 20 20 20 4f 52 44 45 52 20 42  2 .      ORDER B
1700: 59 20 31 20 43 4f 4c 4c 41 54 45 20 54 45 58 54  Y 1 COLLATE TEXT
1710: 3b 0a 20 20 7d 0a 7d 20 7b 41 20 41 20 42 20 42  ;.  }.} {A A B B
1720: 20 4e 20 61 20 61 20 62 20 62 20 6e 7d 0a 0a 64   N a a b b n}..d
1730: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 35 2d  o_test collate5-
1740: 33 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.3 {.  execsql 
1750: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
1760: 4c 45 20 63 6f 6c 6c 61 74 65 35 74 5f 63 6e 28  LE collate5t_cn(
1770: 61 20 43 4f 4c 4c 41 54 45 20 4e 55 4d 45 52 49  a COLLATE NUMERI
1780: 43 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  C);.    CREATE T
1790: 41 42 4c 45 20 63 6f 6c 6c 61 74 65 35 74 5f 63  ABLE collate5t_c
17a0: 74 28 61 20 43 4f 4c 4c 41 54 45 20 54 45 58 54  t(a COLLATE TEXT
17b0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
17c0: 54 4f 20 63 6f 6c 6c 61 74 65 35 74 5f 63 6e 20  TO collate5t_cn 
17d0: 56 41 4c 55 45 53 28 27 31 27 29 3b 0a 20 20 20  VALUES('1');.   
17e0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c   INSERT INTO col
17f0: 6c 61 74 65 35 74 5f 63 6e 20 56 41 4c 55 45 53  late5t_cn VALUES
1800: 28 27 31 31 27 29 3b 0a 20 20 20 20 49 4e 53 45  ('11');.    INSE
1810: 52 54 20 49 4e 54 4f 20 63 6f 6c 6c 61 74 65 35  RT INTO collate5
1820: 74 5f 63 6e 20 56 41 4c 55 45 53 28 27 31 30 31  t_cn VALUES('101
1830: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
1840: 4e 54 4f 20 63 6f 6c 6c 61 74 65 35 74 5f 63 74  NTO collate5t_ct
1850: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 63   SELECT * FROM c
1860: 6f 6c 6c 61 74 65 35 74 5f 63 6e 3b 0a 20 20 7d  ollate5t_cn;.  }
1870: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 63 6f  .} {}.do_test co
1880: 6c 6c 61 74 65 35 2d 33 2e 34 20 7b 0a 20 20 65  llate5-3.4 {.  e
1890: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
18a0: 45 43 54 20 61 20 46 52 4f 4d 20 63 6f 6c 6c 61  ECT a FROM colla
18b0: 74 65 35 74 5f 63 6e 20 49 4e 54 45 52 53 45 43  te5t_cn INTERSEC
18c0: 54 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20  T SELECT a FROM 
18d0: 63 6f 6c 6c 61 74 65 35 74 5f 63 74 20 4f 52 44  collate5t_ct ORD
18e0: 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b  ER BY 1;.  }.} {
18f0: 31 20 31 31 20 31 30 31 7d 0a 64 6f 5f 74 65 73  1 11 101}.do_tes
1900: 74 20 63 6f 6c 6c 61 74 65 35 2d 33 2e 35 20 7b  t collate5-3.5 {
1910: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1920: 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 63   SELECT a FROM c
1930: 6f 6c 6c 61 74 65 35 74 5f 63 74 20 49 4e 54 45  ollate5t_ct INTE
1940: 52 53 45 43 54 20 53 45 4c 45 43 54 20 61 20 46  RSECT SELECT a F
1950: 52 4f 4d 20 63 6f 6c 6c 61 74 65 35 74 5f 63 6e  ROM collate5t_cn
1960: 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d   ORDER BY 1;.  }
1970: 0a 7d 20 7b 31 20 31 30 31 20 31 31 7d 0a 0a 64  .} {1 101 11}..d
1980: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 35 2d  o_test collate5-
1990: 33 2e 32 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  3.20 {.  execsql
19a0: 20 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c   {.    DROP TABL
19b0: 45 20 63 6f 6c 6c 61 74 65 35 74 5f 63 6e 3b 0a  E collate5t_cn;.
19c0: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 63      DROP TABLE c
19d0: 6f 6c 6c 61 74 65 35 74 5f 63 74 3b 0a 20 20 20  ollate5t_ct;.   
19e0: 20 44 52 4f 50 20 54 41 42 4c 45 20 63 6f 6c 6c   DROP TABLE coll
19f0: 61 74 65 35 74 31 3b 0a 20 20 20 20 44 52 4f 50  ate5t1;.    DROP
1a00: 20 54 41 42 4c 45 20 63 6f 6c 6c 61 74 65 35 74   TABLE collate5t
1a10: 32 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f  2;.  }.} {}..do_
1a20: 74 65 73 74 20 63 6f 6c 6c 61 74 65 35 2d 34 2e  test collate5-4.
1a30: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  0 {.  execsql {.
1a40: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
1a50: 20 63 6f 6c 6c 61 74 65 35 74 31 28 61 20 43 4f   collate5t1(a CO
1a60: 4c 4c 41 54 45 20 4e 4f 43 41 53 45 2c 20 62 20  LLATE NOCASE, b 
1a70: 43 4f 4c 4c 41 54 45 20 4e 55 4d 45 52 49 43 29  COLLATE NUMERIC)
1a80: 3b 20 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ; .    INSERT IN
1a90: 54 4f 20 63 6f 6c 6c 61 74 65 35 74 31 20 56 41  TO collate5t1 VA
1aa0: 4c 55 45 53 28 27 61 27 2c 20 27 31 27 29 3b 0a  LUES('a', '1');.
1ab0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1ac0: 63 6f 6c 6c 61 74 65 35 74 31 20 56 41 4c 55 45  collate5t1 VALUE
1ad0: 53 28 27 41 27 2c 20 27 31 2e 30 27 29 3b 0a 20  S('A', '1.0');. 
1ae0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 63     INSERT INTO c
1af0: 6f 6c 6c 61 74 65 35 74 31 20 56 41 4c 55 45 53  ollate5t1 VALUES
1b00: 28 27 62 27 2c 20 27 32 27 29 3b 0a 20 20 20 20  ('b', '2');.    
1b10: 49 4e 53 45 52 54 20 49 4e 54 4f 20 63 6f 6c 6c  INSERT INTO coll
1b20: 61 74 65 35 74 31 20 56 41 4c 55 45 53 28 27 42  ate5t1 VALUES('B
1b30: 27 2c 20 27 33 27 29 3b 0a 20 20 7d 0a 7d 20 7b  ', '3');.  }.} {
1b40: 7d 0a 64 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74  }.do_test collat
1b50: 65 35 2d 34 2e 31 20 7b 0a 20 20 73 74 72 69 6e  e5-4.1 {.  strin
1b60: 67 20 74 6f 6c 6f 77 65 72 20 5b 65 78 65 63 73  g tolower [execs
1b70: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1b80: 61 2c 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  a, count(*) FROM
1b90: 20 63 6f 6c 6c 61 74 65 35 74 31 20 47 52 4f 55   collate5t1 GROU
1ba0: 50 20 42 59 20 61 3b 0a 20 20 7d 5d 0a 7d 20 7b  P BY a;.  }].} {
1bb0: 61 20 32 20 62 20 32 7d 0a 64 6f 5f 74 65 73 74  a 2 b 2}.do_test
1bc0: 20 63 6f 6c 6c 61 74 65 35 2d 34 2e 32 20 7b 0a   collate5-4.2 {.
1bd0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1be0: 53 45 4c 45 43 54 20 61 2c 20 62 2c 20 63 6f 75  SELECT a, b, cou
1bf0: 6e 74 28 2a 29 20 46 52 4f 4d 20 63 6f 6c 6c 61  nt(*) FROM colla
1c00: 74 65 35 74 31 20 47 52 4f 55 50 20 42 59 20 61  te5t1 GROUP BY a
1c10: 2c 20 62 20 4f 52 44 45 52 20 42 59 20 61 2c 20  , b ORDER BY a, 
1c20: 62 3b 0a 20 20 7d 0a 7d 20 7b 41 20 31 2e 30 20  b;.  }.} {A 1.0 
1c30: 32 20 62 20 32 20 31 20 42 20 33 20 31 7d 0a 64  2 b 2 1 B 3 1}.d
1c40: 6f 5f 74 65 73 74 20 63 6f 6c 6c 61 74 65 35 2d  o_test collate5-
1c50: 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.3 {.  execsql 
1c60: 7b 0a 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45  {.    DROP TABLE
1c70: 20 63 6f 6c 6c 61 74 65 35 74 31 3b 0a 20 20 7d   collate5t1;.  }
1c80: 0a 7d 20 7b 7d 0a 0a 66 69 6e 69 73 68 5f 74 65  .} {}..finish_te
1c90: 73 74 0a                                         st.