/ Hex Artifact Content
Login

Artifact 79dc647c4e9b123a64e57b7080b7f9a2df43f87a:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 31 35 2e 0a 23 0a 23 20 54 68 65 20 61 75 74   15..#.# The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65   place of.# a le
0060: 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65  gal notice, here
0070: 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a   is a blessing:.
0080: 23 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64  #.#    May you d
0090: 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65  o good and not e
00a0: 76 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f  vil..#    May yo
00b0: 75 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65  u find forgivene
00c0: 73 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20  ss for yourself 
00d0: 61 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65  and forgive othe
00e0: 72 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  rs..#    May you
00f0: 20 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e   share freely, n
0100: 65 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65  ever taking more
0110: 20 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a   than you give..
0120: 23 0a 23 2a 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 0a 23 20 54 68 69  **********.# Thi
0170: 73 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  s file implement
0180: 73 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  s regression tes
0190: 74 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69  ts for SQLite li
01a0: 62 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f  brary.  The.# fo
01b0: 63 75 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65  cus of this file
01c0: 20 69 73 20 74 65 73 74 69 6e 67 20 74 68 65 20   is testing the 
01d0: 43 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 61  CREATE TABLE sta
01e0: 74 65 6d 65 6e 74 2e 0a 23 0a 23 20 24 49 64 3a  tement..#.# $Id:
01f0: 20 73 6f 72 74 2e 74 65 73 74 2c 76 20 31 2e 32   sort.test,v 1.2
0200: 35 20 32 30 30 35 2f 31 31 2f 31 34 20 32 32 3a  5 2005/11/14 22:
0210: 32 39 3a 30 36 20 64 72 68 20 45 78 70 20 24 0a  29:06 drh Exp $.
0220: 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69  .set testdir [fi
0230: 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76  le dirname $argv
0240: 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64  0].source $testd
0250: 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23  ir/tester.tcl..#
0260: 20 43 72 65 61 74 65 20 61 20 62 75 6e 63 68 20   Create a bunch 
0270: 6f 66 20 64 61 74 61 20 74 6f 20 73 6f 72 74 20  of data to sort 
0280: 61 67 61 69 6e 73 74 0a 23 0a 64 6f 5f 74 65 73  against.#.do_tes
0290: 74 20 73 6f 72 74 2d 31 2e 30 20 7b 0a 20 20 65  t sort-1.0 {.  e
02a0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
02b0: 41 54 45 20 54 41 42 4c 45 20 74 31 28 0a 20 20  ATE TABLE t1(.  
02c0: 20 20 20 20 20 6e 20 69 6e 74 2c 0a 20 20 20 20       n int,.    
02d0: 20 20 20 76 20 76 61 72 63 68 61 72 28 31 30 29     v varchar(10)
02e0: 2c 0a 20 20 20 20 20 20 20 6c 6f 67 20 69 6e 74  ,.       log int
02f0: 2c 0a 20 20 20 20 20 20 20 72 6f 6d 61 6e 20 76  ,.       roman v
0300: 61 72 63 68 61 72 28 31 30 29 2c 0a 20 20 20 20  archar(10),.    
0310: 20 20 20 66 6c 74 20 72 65 61 6c 0a 20 20 20 20     flt real.    
0320: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
0330: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c 27  TO t1 VALUES(1,'
0340: 6f 6e 65 27 2c 30 2c 27 49 27 2c 33 2e 31 34 31  one',0,'I',3.141
0350: 35 39 32 36 35 33 29 3b 0a 20 20 20 20 49 4e 53  592653);.    INS
0360: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
0370: 45 53 28 32 2c 27 74 77 6f 27 2c 31 2c 27 49 49  ES(2,'two',1,'II
0380: 27 2c 32 2e 31 35 29 3b 0a 20 20 20 20 49 4e 53  ',2.15);.    INS
0390: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
03a0: 45 53 28 33 2c 27 74 68 72 65 65 27 2c 31 2c 27  ES(3,'three',1,'
03b0: 49 49 49 27 2c 34 32 32 31 2e 30 29 3b 0a 20 20  III',4221.0);.  
03c0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
03d0: 20 56 41 4c 55 45 53 28 34 2c 27 66 6f 75 72 27   VALUES(4,'four'
03e0: 2c 32 2c 27 49 56 27 2c 2d 30 2e 30 30 31 33 34  ,2,'IV',-0.00134
03f0: 34 32 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  42);.    INSERT 
0400: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 35  INTO t1 VALUES(5
0410: 2c 27 66 69 76 65 27 2c 32 2c 27 56 27 2c 2d 31  ,'five',2,'V',-1
0420: 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  1);.    INSERT I
0430: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 36 2c  NTO t1 VALUES(6,
0440: 27 73 69 78 27 2c 32 2c 27 56 49 27 2c 30 2e 31  'six',2,'VI',0.1
0450: 32 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  23);.    INSERT 
0460: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 37  INTO t1 VALUES(7
0470: 2c 27 73 65 76 65 6e 27 2c 32 2c 27 56 49 49 27  ,'seven',2,'VII'
0480: 2c 31 32 33 2e 30 29 3b 0a 20 20 20 20 49 4e 53  ,123.0);.    INS
0490: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
04a0: 45 53 28 38 2c 27 65 69 67 68 74 27 2c 33 2c 27  ES(8,'eight',3,'
04b0: 56 49 49 49 27 2c 2d 31 2e 36 29 3b 0a 20 20 7d  VIII',-1.6);.  }
04c0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
04d0: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
04e0: 20 74 31 7d 0a 7d 20 7b 38 7d 0a 0a 64 6f 5f 74   t1}.} {8}..do_t
04f0: 65 73 74 20 73 6f 72 74 2d 31 2e 31 20 7b 0a 20  est sort-1.1 {. 
0500: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
0510: 20 6e 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52   n FROM t1 ORDER
0520: 20 42 59 20 6e 7d 0a 7d 20 7b 31 20 32 20 33 20   BY n}.} {1 2 3 
0530: 34 20 35 20 36 20 37 20 38 7d 0a 64 6f 5f 74 65  4 5 6 7 8}.do_te
0540: 73 74 20 73 6f 72 74 2d 31 2e 31 2e 31 20 7b 0a  st sort-1.1.1 {.
0550: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0560: 54 20 6e 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  T n FROM t1 ORDE
0570: 52 20 42 59 20 6e 20 41 53 43 7d 0a 7d 20 7b 31  R BY n ASC}.} {1
0580: 20 32 20 33 20 34 20 35 20 36 20 37 20 38 7d 0a   2 3 4 5 6 7 8}.
0590: 64 6f 5f 74 65 73 74 20 73 6f 72 74 2d 31 2e 31  do_test sort-1.1
05a0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
05b0: 53 45 4c 45 43 54 20 41 4c 4c 20 6e 20 46 52 4f  SELECT ALL n FRO
05c0: 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 6e 20  M t1 ORDER BY n 
05d0: 41 53 43 7d 0a 7d 20 7b 31 20 32 20 33 20 34 20  ASC}.} {1 2 3 4 
05e0: 35 20 36 20 37 20 38 7d 0a 64 6f 5f 74 65 73 74  5 6 7 8}.do_test
05f0: 20 73 6f 72 74 2d 31 2e 32 20 7b 0a 20 20 65 78   sort-1.2 {.  ex
0600: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 20  ecsql {SELECT n 
0610: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
0620: 20 6e 20 44 45 53 43 7d 0a 7d 20 7b 38 20 37 20   n DESC}.} {8 7 
0630: 36 20 35 20 34 20 33 20 32 20 31 7d 0a 64 6f 5f  6 5 4 3 2 1}.do_
0640: 74 65 73 74 20 73 6f 72 74 2d 31 2e 33 61 20 7b  test sort-1.3a {
0650: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
0660: 43 54 20 76 20 46 52 4f 4d 20 74 31 20 4f 52 44  CT v FROM t1 ORD
0670: 45 52 20 42 59 20 76 7d 0a 7d 20 7b 65 69 67 68  ER BY v}.} {eigh
0680: 74 20 66 69 76 65 20 66 6f 75 72 20 6f 6e 65 20  t five four one 
0690: 73 65 76 65 6e 20 73 69 78 20 74 68 72 65 65 20  seven six three 
06a0: 74 77 6f 7d 0a 64 6f 5f 74 65 73 74 20 73 6f 72  two}.do_test sor
06b0: 74 2d 31 2e 33 62 20 7b 0a 20 20 65 78 65 63 73  t-1.3b {.  execs
06c0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 20 46 52 4f  ql {SELECT n FRO
06d0: 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 76 7d  M t1 ORDER BY v}
06e0: 0a 7d 20 7b 38 20 35 20 34 20 31 20 37 20 36 20  .} {8 5 4 1 7 6 
06f0: 33 20 32 7d 0a 64 6f 5f 74 65 73 74 20 73 6f 72  3 2}.do_test sor
0700: 74 2d 31 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  t-1.4 {.  execsq
0710: 6c 20 7b 53 45 4c 45 43 54 20 6e 20 46 52 4f 4d  l {SELECT n FROM
0720: 20 74 31 20 4f 52 44 45 52 20 42 59 20 76 20 44   t1 ORDER BY v D
0730: 45 53 43 7d 0a 7d 20 7b 32 20 33 20 36 20 37 20  ESC}.} {2 3 6 7 
0740: 31 20 34 20 35 20 38 7d 0a 64 6f 5f 74 65 73 74  1 4 5 8}.do_test
0750: 20 73 6f 72 74 2d 31 2e 35 20 7b 0a 20 20 65 78   sort-1.5 {.  ex
0760: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 66 6c  ecsql {SELECT fl
0770: 74 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20  t FROM t1 ORDER 
0780: 42 59 20 66 6c 74 7d 0a 7d 20 7b 2d 31 31 2e 30  BY flt}.} {-11.0
0790: 20 2d 31 2e 36 20 2d 30 2e 30 30 31 33 34 34 32   -1.6 -0.0013442
07a0: 20 30 2e 31 32 33 20 32 2e 31 35 20 33 2e 31 34   0.123 2.15 3.14
07b0: 31 35 39 32 36 35 33 20 31 32 33 2e 30 20 34 32  1592653 123.0 42
07c0: 32 31 2e 30 7d 0a 64 6f 5f 74 65 73 74 20 73 6f  21.0}.do_test so
07d0: 72 74 2d 31 2e 36 20 7b 0a 20 20 65 78 65 63 73  rt-1.6 {.  execs
07e0: 71 6c 20 7b 53 45 4c 45 43 54 20 66 6c 74 20 46  ql {SELECT flt F
07f0: 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
0800: 66 6c 74 20 44 45 53 43 7d 0a 7d 20 7b 34 32 32  flt DESC}.} {422
0810: 31 2e 30 20 31 32 33 2e 30 20 33 2e 31 34 31 35  1.0 123.0 3.1415
0820: 39 32 36 35 33 20 32 2e 31 35 20 30 2e 31 32 33  92653 2.15 0.123
0830: 20 2d 30 2e 30 30 31 33 34 34 32 20 2d 31 2e 36   -0.0013442 -1.6
0840: 20 2d 31 31 2e 30 7d 0a 64 6f 5f 74 65 73 74 20   -11.0}.do_test 
0850: 73 6f 72 74 2d 31 2e 37 20 7b 0a 20 20 65 78 65  sort-1.7 {.  exe
0860: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 6d  csql {SELECT rom
0870: 61 6e 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52  an FROM t1 ORDER
0880: 20 42 59 20 72 6f 6d 61 6e 7d 0a 7d 20 7b 49 20   BY roman}.} {I 
0890: 49 49 20 49 49 49 20 49 56 20 56 20 56 49 20 56  II III IV V VI V
08a0: 49 49 20 56 49 49 49 7d 0a 64 6f 5f 74 65 73 74  II VIII}.do_test
08b0: 20 73 6f 72 74 2d 31 2e 38 20 7b 0a 20 20 65 78   sort-1.8 {.  ex
08c0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 20  ecsql {SELECT n 
08d0: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
08e0: 20 6c 6f 67 2c 20 66 6c 74 7d 0a 7d 20 7b 31 20   log, flt}.} {1 
08f0: 32 20 33 20 35 20 34 20 36 20 37 20 38 7d 0a 64  2 3 5 4 6 7 8}.d
0900: 6f 5f 74 65 73 74 20 73 6f 72 74 2d 31 2e 38 2e  o_test sort-1.8.
0910: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  1 {.  execsql {S
0920: 45 4c 45 43 54 20 6e 20 46 52 4f 4d 20 74 31 20  ELECT n FROM t1 
0930: 4f 52 44 45 52 20 42 59 20 6c 6f 67 20 61 73 63  ORDER BY log asc
0940: 2c 20 66 6c 74 7d 0a 7d 20 7b 31 20 32 20 33 20  , flt}.} {1 2 3 
0950: 35 20 34 20 36 20 37 20 38 7d 0a 64 6f 5f 74 65  5 4 6 7 8}.do_te
0960: 73 74 20 73 6f 72 74 2d 31 2e 38 2e 32 20 7b 0a  st sort-1.8.2 {.
0970: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
0980: 54 20 6e 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  T n FROM t1 ORDE
0990: 52 20 42 59 20 6c 6f 67 2c 20 66 6c 74 20 41 53  R BY log, flt AS
09a0: 43 7d 0a 7d 20 7b 31 20 32 20 33 20 35 20 34 20  C}.} {1 2 3 5 4 
09b0: 36 20 37 20 38 7d 0a 64 6f 5f 74 65 73 74 20 73  6 7 8}.do_test s
09c0: 6f 72 74 2d 31 2e 38 2e 33 20 7b 0a 20 20 65 78  ort-1.8.3 {.  ex
09d0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 20  ecsql {SELECT n 
09e0: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
09f0: 20 6c 6f 67 20 41 53 43 2c 20 66 6c 74 20 61 73   log ASC, flt as
0a00: 63 7d 0a 7d 20 7b 31 20 32 20 33 20 35 20 34 20  c}.} {1 2 3 5 4 
0a10: 36 20 37 20 38 7d 0a 64 6f 5f 74 65 73 74 20 73  6 7 8}.do_test s
0a20: 6f 72 74 2d 31 2e 39 20 7b 0a 20 20 65 78 65 63  ort-1.9 {.  exec
0a30: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 20 46 52  sql {SELECT n FR
0a40: 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 6c  OM t1 ORDER BY l
0a50: 6f 67 2c 20 66 6c 74 20 44 45 53 43 7d 0a 7d 20  og, flt DESC}.} 
0a60: 7b 31 20 33 20 32 20 37 20 36 20 34 20 35 20 38  {1 3 2 7 6 4 5 8
0a70: 7d 0a 64 6f 5f 74 65 73 74 20 73 6f 72 74 2d 31  }.do_test sort-1
0a80: 2e 39 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .9.1 {.  execsql
0a90: 20 7b 53 45 4c 45 43 54 20 6e 20 46 52 4f 4d 20   {SELECT n FROM 
0aa0: 74 31 20 4f 52 44 45 52 20 42 59 20 6c 6f 67 20  t1 ORDER BY log 
0ab0: 41 53 43 2c 20 66 6c 74 20 44 45 53 43 7d 0a 7d  ASC, flt DESC}.}
0ac0: 20 7b 31 20 33 20 32 20 37 20 36 20 34 20 35 20   {1 3 2 7 6 4 5 
0ad0: 38 7d 0a 64 6f 5f 74 65 73 74 20 73 6f 72 74 2d  8}.do_test sort-
0ae0: 31 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  1.10 {.  execsql
0af0: 20 7b 53 45 4c 45 43 54 20 6e 20 46 52 4f 4d 20   {SELECT n FROM 
0b00: 74 31 20 4f 52 44 45 52 20 42 59 20 6c 6f 67 20  t1 ORDER BY log 
0b10: 44 45 53 43 2c 20 66 6c 74 7d 0a 7d 20 7b 38 20  DESC, flt}.} {8 
0b20: 35 20 34 20 36 20 37 20 32 20 33 20 31 7d 0a 64  5 4 6 7 2 3 1}.d
0b30: 6f 5f 74 65 73 74 20 73 6f 72 74 2d 31 2e 31 31  o_test sort-1.11
0b40: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
0b50: 4c 45 43 54 20 6e 20 46 52 4f 4d 20 74 31 20 4f  LECT n FROM t1 O
0b60: 52 44 45 52 20 42 59 20 6c 6f 67 20 44 45 53 43  RDER BY log DESC
0b70: 2c 20 66 6c 74 20 44 45 53 43 7d 0a 7d 20 7b 38  , flt DESC}.} {8
0b80: 20 37 20 36 20 34 20 35 20 33 20 32 20 31 7d 0a   7 6 4 5 3 2 1}.
0b90: 0a 23 20 54 68 65 73 65 20 74 65 73 74 73 20 61  .# These tests a
0ba0: 72 65 20 64 65 73 69 67 6e 65 64 20 74 6f 20 72  re designed to r
0bb0: 65 61 63 68 20 73 6f 6d 65 20 68 61 72 64 2d 74  each some hard-t
0bc0: 6f 2d 72 65 61 63 68 20 70 6c 61 63 65 73 0a 23  o-reach places.#
0bd0: 20 69 6e 73 69 64 65 20 74 68 65 20 73 74 72 69   inside the stri
0be0: 6e 67 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f  ng comparison ro
0bf0: 75 74 69 6e 65 73 2e 0a 23 0a 23 20 28 4c 61 74  utines..#.# (Lat
0c00: 65 72 29 20 54 68 65 20 73 6f 72 74 69 6e 67 20  er) The sorting 
0c10: 62 65 68 61 76 69 6f 72 20 63 68 61 6e 67 65 64  behavior changed
0c20: 20 69 6e 20 32 2e 37 2e 30 2e 20 20 42 75 74 20   in 2.7.0.  But 
0c30: 77 65 20 77 69 6c 6c 0a 23 20 6b 65 65 70 20 74  we will.# keep t
0c40: 68 65 73 65 20 74 65 73 74 73 2e 20 20 59 6f 75  hese tests.  You
0c50: 20 63 61 6e 20 6e 65 76 65 72 20 68 61 76 65 20   can never have 
0c60: 74 6f 6f 20 6d 61 6e 79 20 74 65 73 74 20 63 61  too many test ca
0c70: 73 65 73 21 0a 23 0a 64 6f 5f 74 65 73 74 20 73  ses!.#.do_test s
0c80: 6f 72 74 2d 32 2e 31 2e 31 20 7b 0a 20 20 65 78  ort-2.1.1 {.  ex
0c90: 65 63 73 71 6c 20 7b 0a 20 20 20 20 55 50 44 41  ecsql {.    UPDA
0ca0: 54 45 20 74 31 20 53 45 54 20 76 3d 27 78 27 20  TE t1 SET v='x' 
0cb0: 7c 7c 20 2d 66 6c 74 3b 0a 20 20 20 20 55 50 44  || -flt;.    UPD
0cc0: 41 54 45 20 74 31 20 53 45 54 20 76 3d 27 78 2d  ATE t1 SET v='x-
0cd0: 32 62 27 20 77 68 65 72 65 20 76 3d 3d 27 78 2d  2b' where v=='x-
0ce0: 30 2e 31 32 33 27 3b 0a 20 20 20 20 53 45 4c 45  0.123';.    SELE
0cf0: 43 54 20 76 20 46 52 4f 4d 20 74 31 20 4f 52 44  CT v FROM t1 ORD
0d00: 45 52 20 42 59 20 76 3b 0a 20 20 7d 0a 7d 20 7b  ER BY v;.  }.} {
0d10: 78 2d 31 32 33 2e 30 20 78 2d 32 2e 31 35 20 78  x-123.0 x-2.15 x
0d20: 2d 32 62 20 78 2d 33 2e 31 34 31 35 39 32 36 35  -2b x-3.14159265
0d30: 33 20 78 2d 34 32 32 31 2e 30 20 78 30 2e 30 30  3 x-4221.0 x0.00
0d40: 31 33 34 34 32 20 78 31 2e 36 20 78 31 31 2e 30  13442 x1.6 x11.0
0d50: 7d 0a 64 6f 5f 74 65 73 74 20 73 6f 72 74 2d 32  }.do_test sort-2
0d60: 2e 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.2 {.  execsql
0d70: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 76 20   {.    SELECT v 
0d80: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
0d90: 20 73 75 62 73 74 72 28 76 2c 32 2c 39 39 39 29   substr(v,2,999)
0da0: 3b 0a 20 20 7d 0a 7d 20 7b 78 2d 31 32 33 2e 30  ;.  }.} {x-123.0
0db0: 20 78 2d 32 2e 31 35 20 78 2d 32 62 20 78 2d 33   x-2.15 x-2b x-3
0dc0: 2e 31 34 31 35 39 32 36 35 33 20 78 2d 34 32 32  .141592653 x-422
0dd0: 31 2e 30 20 78 30 2e 30 30 31 33 34 34 32 20 78  1.0 x0.0013442 x
0de0: 31 2e 36 20 78 31 31 2e 30 7d 0a 64 6f 5f 74 65  1.6 x11.0}.do_te
0df0: 73 74 20 73 6f 72 74 2d 32 2e 31 2e 33 20 7b 0a  st sort-2.1.3 {.
0e00: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0e10: 53 45 4c 45 43 54 20 76 20 46 52 4f 4d 20 74 31  SELECT v FROM t1
0e20: 20 4f 52 44 45 52 20 42 59 20 73 75 62 73 74 72   ORDER BY substr
0e30: 28 76 2c 32 2c 39 39 39 29 2b 30 2e 30 3b 0a 20  (v,2,999)+0.0;. 
0e40: 20 7d 0a 7d 20 7b 78 2d 34 32 32 31 2e 30 20 78   }.} {x-4221.0 x
0e50: 2d 31 32 33 2e 30 20 78 2d 33 2e 31 34 31 35 39  -123.0 x-3.14159
0e60: 32 36 35 33 20 78 2d 32 2e 31 35 20 78 2d 32 62  2653 x-2.15 x-2b
0e70: 20 78 30 2e 30 30 31 33 34 34 32 20 78 31 2e 36   x0.0013442 x1.6
0e80: 20 78 31 31 2e 30 7d 0a 64 6f 5f 74 65 73 74 20   x11.0}.do_test 
0e90: 73 6f 72 74 2d 32 2e 31 2e 34 20 7b 0a 20 20 65  sort-2.1.4 {.  e
0ea0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
0eb0: 45 43 54 20 76 20 46 52 4f 4d 20 74 31 20 4f 52  ECT v FROM t1 OR
0ec0: 44 45 52 20 42 59 20 73 75 62 73 74 72 28 76 2c  DER BY substr(v,
0ed0: 32 2c 39 39 39 29 20 44 45 53 43 3b 0a 20 20 7d  2,999) DESC;.  }
0ee0: 0a 7d 20 7b 78 31 31 2e 30 20 78 31 2e 36 20 78  .} {x11.0 x1.6 x
0ef0: 30 2e 30 30 31 33 34 34 32 20 78 2d 34 32 32 31  0.0013442 x-4221
0f00: 2e 30 20 78 2d 33 2e 31 34 31 35 39 32 36 35 33  .0 x-3.141592653
0f10: 20 78 2d 32 62 20 78 2d 32 2e 31 35 20 78 2d 31   x-2b x-2.15 x-1
0f20: 32 33 2e 30 7d 0a 64 6f 5f 74 65 73 74 20 73 6f  23.0}.do_test so
0f30: 72 74 2d 32 2e 31 2e 35 20 7b 0a 20 20 65 78 65  rt-2.1.5 {.  exe
0f40: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
0f50: 54 20 76 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  T v FROM t1 ORDE
0f60: 52 20 42 59 20 73 75 62 73 74 72 28 76 2c 32 2c  R BY substr(v,2,
0f70: 39 39 39 29 2b 30 2e 30 20 44 45 53 43 3b 0a 20  999)+0.0 DESC;. 
0f80: 20 7d 0a 7d 20 7b 78 31 31 2e 30 20 78 31 2e 36   }.} {x11.0 x1.6
0f90: 20 78 30 2e 30 30 31 33 34 34 32 20 78 2d 32 62   x0.0013442 x-2b
0fa0: 20 78 2d 32 2e 31 35 20 78 2d 33 2e 31 34 31 35   x-2.15 x-3.1415
0fb0: 39 32 36 35 33 20 78 2d 31 32 33 2e 30 20 78 2d  92653 x-123.0 x-
0fc0: 34 32 32 31 2e 30 7d 0a 0a 23 20 54 68 69 73 20  4221.0}..# This 
0fd0: 69 73 20 61 20 62 75 67 20 66 69 78 20 66 6f 72  is a bug fix for
0fe0: 20 32 2e 32 2e 34 2e 0a 23 20 53 74 72 69 6e 67   2.2.4..# String
0ff0: 73 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 6d  s are normally m
1000: 61 70 70 65 64 20 74 6f 20 75 70 70 65 72 2d 63  apped to upper-c
1010: 61 73 65 20 66 6f 72 20 61 20 63 61 73 65 6c 65  ase for a casele
1020: 73 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 23  ss comparison..#
1030: 20 42 75 74 20 74 68 69 73 20 63 61 6e 20 63 61   But this can ca
1040: 75 73 65 20 70 72 6f 62 6c 65 6d 73 20 66 6f 72  use problems for
1050: 20 63 68 61 72 61 63 74 65 72 73 20 69 6e 20 62   characters in b
1060: 65 74 77 65 65 6e 20 27 5a 27 20 61 6e 64 20 27  etween 'Z' and '
1070: 61 27 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 73 6f  a'..#.do_test so
1080: 72 74 2d 33 2e 31 20 7b 0a 20 20 65 78 65 63 73  rt-3.1 {.  execs
1090: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
10a0: 54 41 42 4c 45 20 74 32 28 61 2c 62 29 3b 0a 20  TABLE t2(a,b);. 
10b0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
10c0: 32 20 56 41 4c 55 45 53 28 27 41 47 4c 49 45 4e  2 VALUES('AGLIEN
10d0: 54 55 27 2c 31 29 3b 0a 20 20 20 20 49 4e 53 45  TU',1);.    INSE
10e0: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
10f0: 53 28 27 41 47 4c 49 45 60 27 2c 32 29 3b 0a 20  S('AGLIE`',2);. 
1100: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1110: 32 20 56 41 4c 55 45 53 28 27 41 47 4e 41 27 2c  2 VALUES('AGNA',
1120: 33 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  3);.    SELECT a
1130: 2c 20 62 20 46 52 4f 4d 20 74 32 20 4f 52 44 45  , b FROM t2 ORDE
1140: 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b 41  R BY a;.  }.} {A
1150: 47 4c 49 45 4e 54 55 20 31 20 41 47 4c 49 45 60  GLIENTU 1 AGLIE`
1160: 20 32 20 41 47 4e 41 20 33 7d 0a 64 6f 5f 74 65   2 AGNA 3}.do_te
1170: 73 74 20 73 6f 72 74 2d 33 2e 32 20 7b 0a 20 20  st sort-3.2 {.  
1180: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
1190: 4c 45 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 74  LECT a, b FROM t
11a0: 32 20 4f 52 44 45 52 20 42 59 20 61 20 44 45 53  2 ORDER BY a DES
11b0: 43 3b 0a 20 20 7d 0a 7d 20 7b 41 47 4e 41 20 33  C;.  }.} {AGNA 3
11c0: 20 41 47 4c 49 45 60 20 32 20 41 47 4c 49 45 4e   AGLIE` 2 AGLIEN
11d0: 54 55 20 31 7d 0a 64 6f 5f 74 65 73 74 20 73 6f  TU 1}.do_test so
11e0: 72 74 2d 33 2e 33 20 7b 0a 20 20 65 78 65 63 73  rt-3.3 {.  execs
11f0: 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54 45 20  ql {.    DELETE 
1200: 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49 4e 53  FROM t2;.    INS
1210: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
1220: 45 53 28 27 61 67 6c 69 65 6e 74 75 27 2c 31 29  ES('aglientu',1)
1230: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
1240: 4f 20 74 32 20 56 41 4c 55 45 53 28 27 61 67 6c  O t2 VALUES('agl
1250: 69 65 60 27 2c 32 29 3b 0a 20 20 20 20 49 4e 53  ie`',2);.    INS
1260: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
1270: 45 53 28 27 61 67 6e 61 27 2c 33 29 3b 0a 20 20  ES('agna',3);.  
1280: 20 20 53 45 4c 45 43 54 20 61 2c 20 62 20 46 52    SELECT a, b FR
1290: 4f 4d 20 74 32 20 4f 52 44 45 52 20 42 59 20 61  OM t2 ORDER BY a
12a0: 3b 0a 20 20 7d 0a 7d 20 7b 61 67 6c 69 65 60 20  ;.  }.} {aglie` 
12b0: 32 20 61 67 6c 69 65 6e 74 75 20 31 20 61 67 6e  2 aglientu 1 agn
12c0: 61 20 33 7d 0a 64 6f 5f 74 65 73 74 20 73 6f 72  a 3}.do_test sor
12d0: 74 2d 33 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  t-3.4 {.  execsq
12e0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
12f0: 2c 20 62 20 46 52 4f 4d 20 74 32 20 4f 52 44 45  , b FROM t2 ORDE
1300: 52 20 42 59 20 61 20 44 45 53 43 3b 0a 20 20 7d  R BY a DESC;.  }
1310: 0a 7d 20 7b 61 67 6e 61 20 33 20 61 67 6c 69 65  .} {agna 3 aglie
1320: 6e 74 75 20 31 20 61 67 6c 69 65 60 20 32 7d 0a  ntu 1 aglie` 2}.
1330: 0a 23 20 56 65 72 73 69 6f 6e 20 32 2e 37 2e 30  .# Version 2.7.0
1340: 20 74 65 73 74 69 6e 67 2e 0a 23 0a 64 6f 5f 74   testing..#.do_t
1350: 65 73 74 20 73 6f 72 74 2d 34 2e 31 20 7b 0a 20  est sort-4.1 {. 
1360: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49   execsql {.    I
1370: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
1380: 4c 55 45 53 28 39 2c 27 78 32 2e 37 27 2c 33 2c  LUES(9,'x2.7',3,
1390: 27 49 58 27 2c 34 2e 30 65 35 29 3b 0a 20 20 20  'IX',4.0e5);.   
13a0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
13b0: 56 41 4c 55 45 53 28 31 30 2c 27 78 35 2e 30 65  VALUES(10,'x5.0e
13c0: 31 30 27 2c 33 2c 27 58 27 2c 2d 34 2e 30 65 35  10',3,'X',-4.0e5
13d0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
13e0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 31 2c  TO t1 VALUES(11,
13f0: 27 78 2d 34 2e 30 65 39 27 2c 33 2c 27 58 49 27  'x-4.0e9',3,'XI'
1400: 2c 34 2e 31 65 34 29 3b 0a 20 20 20 20 49 4e 53  ,4.1e4);.    INS
1410: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
1420: 45 53 28 31 32 2c 27 78 30 31 32 33 34 35 36 37  ES(12,'x01234567
1430: 38 39 30 31 32 33 34 35 36 37 38 39 27 2c 33 2c  890123456789',3,
1440: 27 58 49 49 27 2c 2d 34 2e 32 65 33 29 3b 0a 20  'XII',-4.2e3);. 
1450: 20 20 20 53 45 4c 45 43 54 20 6e 20 46 52 4f 4d     SELECT n FROM
1460: 20 74 31 20 4f 52 44 45 52 20 42 59 20 6e 3b 0a   t1 ORDER BY n;.
1470: 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20 34 20 35    }.} {1 2 3 4 5
1480: 20 36 20 37 20 38 20 39 20 31 30 20 31 31 20 31   6 7 8 9 10 11 1
1490: 32 7d 0a 64 6f 5f 74 65 73 74 20 73 6f 72 74 2d  2}.do_test sort-
14a0: 34 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.2 {.  execsql 
14b0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6e 7c 7c  {.    SELECT n||
14c0: 27 27 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52  '' FROM t1 ORDER
14d0: 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20   BY 1;.  }.} {1 
14e0: 31 30 20 31 31 20 31 32 20 32 20 33 20 34 20 35  10 11 12 2 3 4 5
14f0: 20 36 20 37 20 38 20 39 7d 0a 64 6f 5f 74 65 73   6 7 8 9}.do_tes
1500: 74 20 73 6f 72 74 2d 34 2e 33 20 7b 0a 20 20 65  t sort-4.3 {.  e
1510: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
1520: 45 43 54 20 6e 2b 30 20 46 52 4f 4d 20 74 31 20  ECT n+0 FROM t1 
1530: 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a  ORDER BY 1;.  }.
1540: 7d 20 7b 31 20 32 20 33 20 34 20 35 20 36 20 37  } {1 2 3 4 5 6 7
1550: 20 38 20 39 20 31 30 20 31 31 20 31 32 7d 0a 64   8 9 10 11 12}.d
1560: 6f 5f 74 65 73 74 20 73 6f 72 74 2d 34 2e 34 20  o_test sort-4.4 
1570: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1580: 20 20 53 45 4c 45 43 54 20 6e 7c 7c 27 27 20 46    SELECT n||'' F
1590: 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
15a0: 31 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 39  1 DESC;.  }.} {9
15b0: 20 38 20 37 20 36 20 35 20 34 20 33 20 32 20 31   8 7 6 5 4 3 2 1
15c0: 32 20 31 31 20 31 30 20 31 7d 0a 64 6f 5f 74 65  2 11 10 1}.do_te
15d0: 73 74 20 73 6f 72 74 2d 34 2e 35 20 7b 0a 20 20  st sort-4.5 {.  
15e0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
15f0: 4c 45 43 54 20 6e 2b 30 20 46 52 4f 4d 20 74 31  LECT n+0 FROM t1
1600: 20 4f 52 44 45 52 20 42 59 20 31 20 44 45 53 43   ORDER BY 1 DESC
1610: 3b 0a 20 20 7d 0a 7d 20 7b 31 32 20 31 31 20 31  ;.  }.} {12 11 1
1620: 30 20 39 20 38 20 37 20 36 20 35 20 34 20 33 20  0 9 8 7 6 5 4 3 
1630: 32 20 31 7d 0a 64 6f 5f 74 65 73 74 20 73 6f 72  2 1}.do_test sor
1640: 74 2d 34 2e 36 20 7b 0a 20 20 65 78 65 63 73 71  t-4.6 {.  execsq
1650: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 76  l {.    SELECT v
1660: 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42   FROM t1 ORDER B
1670: 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 78 2d 31 32  Y 1;.  }.} {x-12
1680: 33 2e 30 20 78 2d 32 2e 31 35 20 78 2d 32 62 20  3.0 x-2.15 x-2b 
1690: 78 2d 33 2e 31 34 31 35 39 32 36 35 33 20 78 2d  x-3.141592653 x-
16a0: 34 2e 30 65 39 20 78 2d 34 32 32 31 2e 30 20 78  4.0e9 x-4221.0 x
16b0: 30 2e 30 30 31 33 34 34 32 20 78 30 31 32 33 34  0.0013442 x01234
16c0: 35 36 37 38 39 30 31 32 33 34 35 36 37 38 39 20  567890123456789 
16d0: 78 31 2e 36 20 78 31 31 2e 30 20 78 32 2e 37 20  x1.6 x11.0 x2.7 
16e0: 78 35 2e 30 65 31 30 7d 0a 64 6f 5f 74 65 73 74  x5.0e10}.do_test
16f0: 20 73 6f 72 74 2d 34 2e 37 20 7b 0a 20 20 65 78   sort-4.7 {.  ex
1700: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
1710: 43 54 20 76 20 46 52 4f 4d 20 74 31 20 4f 52 44  CT v FROM t1 ORD
1720: 45 52 20 42 59 20 31 20 44 45 53 43 3b 0a 20 20  ER BY 1 DESC;.  
1730: 7d 0a 7d 20 7b 78 35 2e 30 65 31 30 20 78 32 2e  }.} {x5.0e10 x2.
1740: 37 20 78 31 31 2e 30 20 78 31 2e 36 20 78 30 31  7 x11.0 x1.6 x01
1750: 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37  2345678901234567
1760: 38 39 20 78 30 2e 30 30 31 33 34 34 32 20 78 2d  89 x0.0013442 x-
1770: 34 32 32 31 2e 30 20 78 2d 34 2e 30 65 39 20 78  4221.0 x-4.0e9 x
1780: 2d 33 2e 31 34 31 35 39 32 36 35 33 20 78 2d 32  -3.141592653 x-2
1790: 62 20 78 2d 32 2e 31 35 20 78 2d 31 32 33 2e 30  b x-2.15 x-123.0
17a0: 7d 0a 64 6f 5f 74 65 73 74 20 73 6f 72 74 2d 34  }.do_test sort-4
17b0: 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .8 {.  execsql {
17c0: 0a 20 20 20 20 53 45 4c 45 43 54 20 73 75 62 73  .    SELECT subs
17d0: 74 72 28 76 2c 32 2c 39 39 29 20 46 52 4f 4d 20  tr(v,2,99) FROM 
17e0: 74 31 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20  t1 ORDER BY 1;. 
17f0: 20 7d 0a 7d 20 7b 2d 31 32 33 2e 30 20 2d 32 2e   }.} {-123.0 -2.
1800: 31 35 20 2d 32 62 20 2d 33 2e 31 34 31 35 39 32  15 -2b -3.141592
1810: 36 35 33 20 2d 34 2e 30 65 39 20 2d 34 32 32 31  653 -4.0e9 -4221
1820: 2e 30 20 30 2e 30 30 31 33 34 34 32 20 30 31 32  .0 0.0013442 012
1830: 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37 38  3456789012345678
1840: 39 20 31 2e 36 20 31 31 2e 30 20 32 2e 37 20 35  9 1.6 11.0 2.7 5
1850: 2e 30 65 31 30 7d 0a 23 64 6f 5f 74 65 73 74 20  .0e10}.#do_test 
1860: 73 6f 72 74 2d 34 2e 39 20 7b 0a 23 20 20 65 78  sort-4.9 {.#  ex
1870: 65 63 73 71 6c 20 7b 0a 23 20 20 20 20 53 45 4c  ecsql {.#    SEL
1880: 45 43 54 20 73 75 62 73 74 72 28 76 2c 32 2c 39  ECT substr(v,2,9
1890: 39 29 2b 30 2e 30 20 46 52 4f 4d 20 74 31 20 4f  9)+0.0 FROM t1 O
18a0: 52 44 45 52 20 42 59 20 31 3b 0a 23 20 20 7d 0a  RDER BY 1;.#  }.
18b0: 23 7d 20 7b 2d 34 30 30 30 30 30 30 30 30 30 20  #} {-4000000000 
18c0: 2d 34 32 32 31 20 2d 31 32 33 20 2d 33 2e 31 34  -4221 -123 -3.14
18d0: 31 35 39 32 36 35 33 20 2d 32 2e 31 35 20 2d 32  1592653 -2.15 -2
18e0: 20 30 2e 30 30 31 33 34 34 32 20 31 2e 36 20 32   0.0013442 1.6 2
18f0: 2e 37 20 31 31 20 35 30 30 30 30 30 30 30 30 30  .7 11 5000000000
1900: 30 20 31 2e 32 33 34 35 36 37 38 39 30 31 32 33  0 1.234567890123
1910: 34 36 65 2b 31 38 7d 0a 0a 64 6f 5f 74 65 73 74  46e+18}..do_test
1920: 20 73 6f 72 74 2d 35 2e 31 20 7b 0a 20 20 65 78   sort-5.1 {.  ex
1930: 65 63 73 71 6c 20 7b 0a 20 20 20 20 63 72 65 61  ecsql {.    crea
1940: 74 65 20 74 61 62 6c 65 20 74 33 28 61 2c 62 29  te table t3(a,b)
1950: 3b 0a 20 20 20 20 69 6e 73 65 72 74 20 69 6e 74  ;.    insert int
1960: 6f 20 74 33 20 76 61 6c 75 65 73 28 35 2c 4e 55  o t3 values(5,NU
1970: 4c 4c 29 3b 0a 20 20 20 20 69 6e 73 65 72 74 20  LL);.    insert 
1980: 69 6e 74 6f 20 74 33 20 76 61 6c 75 65 73 28 36  into t3 values(6
1990: 2c 4e 55 4c 4c 29 3b 0a 20 20 20 20 69 6e 73 65  ,NULL);.    inse
19a0: 72 74 20 69 6e 74 6f 20 74 33 20 76 61 6c 75 65  rt into t3 value
19b0: 73 28 33 2c 4e 55 4c 4c 29 3b 0a 20 20 20 20 69  s(3,NULL);.    i
19c0: 6e 73 65 72 74 20 69 6e 74 6f 20 74 33 20 76 61  nsert into t3 va
19d0: 6c 75 65 73 28 34 2c 27 63 64 27 29 3b 0a 20 20  lues(4,'cd');.  
19e0: 20 20 69 6e 73 65 72 74 20 69 6e 74 6f 20 74 33    insert into t3
19f0: 20 76 61 6c 75 65 73 28 31 2c 27 61 62 27 29 3b   values(1,'ab');
1a00: 0a 20 20 20 20 69 6e 73 65 72 74 20 69 6e 74 6f  .    insert into
1a10: 20 74 33 20 76 61 6c 75 65 73 28 32 2c 4e 55 4c   t3 values(2,NUL
1a20: 4c 29 3b 0a 20 20 20 20 73 65 6c 65 63 74 20 61  L);.    select a
1a30: 20 66 72 6f 6d 20 74 33 20 6f 72 64 65 72 20 62   from t3 order b
1a40: 79 20 62 2c 20 61 3b 0a 20 20 7d 0a 7d 20 7b 32  y b, a;.  }.} {2
1a50: 20 33 20 35 20 36 20 31 20 34 7d 0a 64 6f 5f 74   3 5 6 1 4}.do_t
1a60: 65 73 74 20 73 6f 72 74 2d 35 2e 32 20 7b 0a 20  est sort-5.2 {. 
1a70: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 73   execsql {.    s
1a80: 65 6c 65 63 74 20 61 20 66 72 6f 6d 20 74 33 20  elect a from t3 
1a90: 6f 72 64 65 72 20 62 79 20 62 2c 20 61 20 64 65  order by b, a de
1aa0: 73 63 3b 0a 20 20 7d 0a 7d 20 7b 36 20 35 20 33  sc;.  }.} {6 5 3
1ab0: 20 32 20 31 20 34 7d 0a 64 6f 5f 74 65 73 74 20   2 1 4}.do_test 
1ac0: 73 6f 72 74 2d 35 2e 33 20 7b 0a 20 20 65 78 65  sort-5.3 {.  exe
1ad0: 63 73 71 6c 20 7b 0a 20 20 20 20 73 65 6c 65 63  csql {.    selec
1ae0: 74 20 61 20 66 72 6f 6d 20 74 33 20 6f 72 64 65  t a from t3 orde
1af0: 72 20 62 79 20 62 20 64 65 73 63 2c 20 61 3b 0a  r by b desc, a;.
1b00: 20 20 7d 0a 7d 20 7b 34 20 31 20 32 20 33 20 35    }.} {4 1 2 3 5
1b10: 20 36 7d 0a 64 6f 5f 74 65 73 74 20 73 6f 72 74   6}.do_test sort
1b20: 2d 35 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  -5.4 {.  execsql
1b30: 20 7b 0a 20 20 20 20 73 65 6c 65 63 74 20 61 20   {.    select a 
1b40: 66 72 6f 6d 20 74 33 20 6f 72 64 65 72 20 62 79  from t3 order by
1b50: 20 62 20 64 65 73 63 2c 20 61 20 64 65 73 63 3b   b desc, a desc;
1b60: 0a 20 20 7d 0a 7d 20 7b 34 20 31 20 36 20 35 20  .  }.} {4 1 6 5 
1b70: 33 20 32 7d 0a 0a 64 6f 5f 74 65 73 74 20 73 6f  3 2}..do_test so
1b80: 72 74 2d 36 2e 31 20 7b 0a 20 20 65 78 65 63 73  rt-6.1 {.  execs
1b90: 71 6c 20 7b 0a 20 20 20 20 63 72 65 61 74 65 20  ql {.    create 
1ba0: 69 6e 64 65 78 20 69 33 20 6f 6e 20 74 33 28 62  index i3 on t3(b
1bb0: 2c 61 29 3b 0a 20 20 20 20 73 65 6c 65 63 74 20  ,a);.    select 
1bc0: 61 20 66 72 6f 6d 20 74 33 20 6f 72 64 65 72 20  a from t3 order 
1bd0: 62 79 20 62 2c 20 61 3b 0a 20 20 7d 0a 7d 20 7b  by b, a;.  }.} {
1be0: 32 20 33 20 35 20 36 20 31 20 34 7d 0a 64 6f 5f  2 3 5 6 1 4}.do_
1bf0: 74 65 73 74 20 73 6f 72 74 2d 36 2e 32 20 7b 0a  test sort-6.2 {.
1c00: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1c10: 73 65 6c 65 63 74 20 61 20 66 72 6f 6d 20 74 33  select a from t3
1c20: 20 6f 72 64 65 72 20 62 79 20 62 2c 20 61 20 64   order by b, a d
1c30: 65 73 63 3b 0a 20 20 7d 0a 7d 20 7b 36 20 35 20  esc;.  }.} {6 5 
1c40: 33 20 32 20 31 20 34 7d 0a 64 6f 5f 74 65 73 74  3 2 1 4}.do_test
1c50: 20 73 6f 72 74 2d 36 2e 33 20 7b 0a 20 20 65 78   sort-6.3 {.  ex
1c60: 65 63 73 71 6c 20 7b 0a 20 20 20 20 73 65 6c 65  ecsql {.    sele
1c70: 63 74 20 61 20 66 72 6f 6d 20 74 33 20 6f 72 64  ct a from t3 ord
1c80: 65 72 20 62 79 20 62 20 64 65 73 63 2c 20 61 3b  er by b desc, a;
1c90: 0a 20 20 7d 0a 7d 20 7b 34 20 31 20 32 20 33 20  .  }.} {4 1 2 3 
1ca0: 35 20 36 7d 0a 64 6f 5f 74 65 73 74 20 73 6f 72  5 6}.do_test sor
1cb0: 74 2d 36 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  t-6.4 {.  execsq
1cc0: 6c 20 7b 0a 20 20 20 20 73 65 6c 65 63 74 20 61  l {.    select a
1cd0: 20 66 72 6f 6d 20 74 33 20 6f 72 64 65 72 20 62   from t3 order b
1ce0: 79 20 62 20 64 65 73 63 2c 20 61 20 64 65 73 63  y b desc, a desc
1cf0: 3b 0a 20 20 7d 0a 7d 20 7b 34 20 31 20 36 20 35  ;.  }.} {4 1 6 5
1d00: 20 33 20 32 7d 0a 0a 64 6f 5f 74 65 73 74 20 73   3 2}..do_test s
1d10: 6f 72 74 2d 37 2e 31 20 7b 0a 20 20 65 78 65 63  ort-7.1 {.  exec
1d20: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
1d30: 20 54 41 42 4c 45 20 74 34 28 0a 20 20 20 20 20   TABLE t4(.     
1d40: 20 61 20 49 4e 54 45 47 45 52 2c 0a 20 20 20 20   a INTEGER,.    
1d50: 20 20 62 20 56 41 52 43 48 41 52 28 33 30 29 0a    b VARCHAR(30).
1d60: 20 20 20 20 29 3b 0a 20 20 20 20 49 4e 53 45 52      );.    INSER
1d70: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
1d80: 28 31 2c 31 29 3b 0a 20 20 20 20 49 4e 53 45 52  (1,1);.    INSER
1d90: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
1da0: 28 32 2c 32 29 3b 0a 20 20 20 20 49 4e 53 45 52  (2,2);.    INSER
1db0: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
1dc0: 28 31 31 2c 31 31 29 3b 0a 20 20 20 20 49 4e 53  (11,11);.    INS
1dd0: 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55  ERT INTO t4 VALU
1de0: 45 53 28 31 32 2c 31 32 29 3b 0a 20 20 20 20 53  ES(12,12);.    S
1df0: 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 34 20  ELECT a FROM t4 
1e00: 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a  ORDER BY 1;.  }.
1e10: 7d 20 7b 31 20 32 20 31 31 20 31 32 7d 0a 64 6f  } {1 2 11 12}.do
1e20: 5f 74 65 73 74 20 73 6f 72 74 2d 37 2e 32 20 7b  _test sort-7.2 {
1e30: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1e40: 20 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74   SELECT b FROM t
1e50: 34 20 4f 52 44 45 52 20 42 59 20 31 0a 20 20 7d  4 ORDER BY 1.  }
1e60: 0a 7d 20 7b 31 20 31 31 20 31 32 20 32 7d 0a 0a  .} {1 11 12 2}..
1e70: 23 20 4f 6d 69 74 20 74 65 73 74 73 20 73 6f 72  # Omit tests sor
1e80: 74 2d 37 2e 33 20 74 6f 20 73 6f 72 74 2d 37 2e  t-7.3 to sort-7.
1e90: 38 20 69 66 20 76 69 65 77 20 73 75 70 70 6f 72  8 if view suppor
1ea0: 74 20 77 61 73 20 64 69 73 61 62 6c 65 64 20 61  t was disabled a
1eb0: 74 0a 23 20 63 6f 6d 70 69 6c 61 74 61 74 69 6f  t.# compilatatio
1ec0: 6e 20 74 69 6d 65 2e 0a 69 66 63 61 70 61 62 6c  n time..ifcapabl
1ed0: 65 20 76 69 65 77 20 7b 0a 64 6f 5f 74 65 73 74  e view {.do_test
1ee0: 20 73 6f 72 74 2d 37 2e 33 20 7b 0a 20 20 65 78   sort-7.3 {.  ex
1ef0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
1f00: 54 45 20 56 49 45 57 20 76 34 20 41 53 20 53 45  TE VIEW v4 AS SE
1f10: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 3b 0a  LECT * FROM t4;.
1f20: 20 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f      SELECT a FRO
1f30: 4d 20 76 34 20 4f 52 44 45 52 20 42 59 20 31 3b  M v4 ORDER BY 1;
1f40: 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 31 31 20 31  .  }.} {1 2 11 1
1f50: 32 7d 0a 64 6f 5f 74 65 73 74 20 73 6f 72 74 2d  2}.do_test sort-
1f60: 37 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  7.4 {.  execsql 
1f70: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 62 20 46  {.    SELECT b F
1f80: 52 4f 4d 20 76 34 20 4f 52 44 45 52 20 42 59 20  ROM v4 ORDER BY 
1f90: 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 31 31 20 31  1;.  }.} {1 11 1
1fa0: 32 20 32 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20  2 2}..ifcapable 
1fb0: 63 6f 6d 70 6f 75 6e 64 20 7b 0a 64 6f 5f 74 65  compound {.do_te
1fc0: 73 74 20 73 6f 72 74 2d 37 2e 35 20 7b 0a 20 20  st sort-7.5 {.  
1fd0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
1fe0: 4c 45 43 54 20 61 20 46 52 4f 4d 20 74 34 20 55  LECT a FROM t4 U
1ff0: 4e 49 4f 4e 20 53 45 4c 45 43 54 20 61 20 46 52  NION SELECT a FR
2000: 4f 4d 20 76 34 20 4f 52 44 45 52 20 42 59 20 31  OM v4 ORDER BY 1
2010: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 31 31 20  ;.  }.} {1 2 11 
2020: 31 32 7d 0a 64 6f 5f 74 65 73 74 20 73 6f 72 74  12}.do_test sort
2030: 2d 37 2e 36 20 7b 0a 20 20 65 78 65 63 73 71 6c  -7.6 {.  execsql
2040: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 62 20   {.    SELECT b 
2050: 46 52 4f 4d 20 74 34 20 55 4e 49 4f 4e 20 53 45  FROM t4 UNION SE
2060: 4c 45 43 54 20 61 20 46 52 4f 4d 20 76 34 20 4f  LECT a FROM v4 O
2070: 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d  RDER BY 1;.  }.}
2080: 20 7b 31 20 32 20 31 31 20 31 32 20 31 20 31 31   {1 2 11 12 1 11
2090: 20 31 32 20 32 7d 20 20 3b 23 20 74 65 78 74 20   12 2}  ;# text 
20a0: 66 72 6f 6d 20 74 34 2e 62 20 61 6e 64 20 6e 75  from t4.b and nu
20b0: 6d 65 72 69 63 20 66 72 6f 6d 20 76 34 2e 61 0a  meric from v4.a.
20c0: 64 6f 5f 74 65 73 74 20 73 6f 72 74 2d 37 2e 37  do_test sort-7.7
20d0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
20e0: 20 20 20 53 45 4c 45 43 54 20 61 20 46 52 4f 4d     SELECT a FROM
20f0: 20 74 34 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54   t4 UNION SELECT
2100: 20 62 20 46 52 4f 4d 20 76 34 20 4f 52 44 45 52   b FROM v4 ORDER
2110: 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20   BY 1;.  }.} {1 
2120: 32 20 31 31 20 31 32 20 31 20 31 31 20 31 32 20  2 11 12 1 11 12 
2130: 32 7d 20 3b 23 20 6e 75 6d 65 72 69 63 20 66 72  2} ;# numeric fr
2140: 6f 6d 20 74 34 2e 61 20 61 6e 64 20 74 65 78 74  om t4.a and text
2150: 20 66 72 6f 6d 20 76 34 2e 62 0a 64 6f 5f 74 65   from v4.b.do_te
2160: 73 74 20 73 6f 72 74 2d 37 2e 38 20 7b 0a 20 20  st sort-7.8 {.  
2170: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
2180: 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 34 20 55  LECT b FROM t4 U
2190: 4e 49 4f 4e 20 53 45 4c 45 43 54 20 62 20 46 52  NION SELECT b FR
21a0: 4f 4d 20 76 34 20 4f 52 44 45 52 20 42 59 20 31  OM v4 ORDER BY 1
21b0: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 31 31 20 31 32  ;.  }.} {1 11 12
21c0: 20 32 7d 0a 7d 20 3b 23 20 69 66 63 61 70 61 62   2}.} ;# ifcapab
21d0: 6c 65 20 63 6f 6d 70 6f 75 6e 64 0a 7d 20 3b 23  le compound.} ;#
21e0: 20 69 66 63 61 70 61 62 6c 65 20 76 69 65 77 0a   ifcapable view.
21f0: 0a 23 23 23 23 20 56 65 72 73 69 6f 6e 20 33 20  .#### Version 3 
2200: 77 6f 72 6b 73 20 64 69 66 66 65 72 65 6e 74 6c  works differentl
2210: 79 20 68 65 72 65 3a 0a 23 64 6f 5f 74 65 73 74  y here:.#do_test
2220: 20 73 6f 72 74 2d 37 2e 39 20 7b 0a 23 20 20 65   sort-7.9 {.#  e
2230: 78 65 63 73 71 6c 20 7b 0a 23 20 20 20 20 53 45  xecsql {.#    SE
2240: 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 34 20 55  LECT b FROM t4 U
2250: 4e 49 4f 4e 20 53 45 4c 45 43 54 20 62 20 46 52  NION SELECT b FR
2260: 4f 4d 20 76 34 20 4f 52 44 45 52 20 42 59 20 31  OM v4 ORDER BY 1
2270: 20 43 4f 4c 4c 41 54 45 20 6e 75 6d 65 72 69 63   COLLATE numeric
2280: 3b 0a 23 20 20 7d 0a 23 7d 20 7b 31 20 32 20 31  ;.#  }.#} {1 2 1
2290: 31 20 31 32 7d 0a 23 64 6f 5f 74 65 73 74 20 73  1 12}.#do_test s
22a0: 6f 72 74 2d 37 2e 31 30 20 7b 0a 23 20 20 65 78  ort-7.10 {.#  ex
22b0: 65 63 73 71 6c 20 7b 0a 23 20 20 20 20 53 45 4c  ecsql {.#    SEL
22c0: 45 43 54 20 62 20 46 52 4f 4d 20 74 34 20 55 4e  ECT b FROM t4 UN
22d0: 49 4f 4e 20 53 45 4c 45 43 54 20 62 20 46 52 4f  ION SELECT b FRO
22e0: 4d 20 76 34 20 4f 52 44 45 52 20 42 59 20 31 20  M v4 ORDER BY 1 
22f0: 43 4f 4c 4c 41 54 45 20 69 6e 74 65 67 65 72 3b  COLLATE integer;
2300: 0a 23 20 20 7d 0a 23 7d 20 7b 31 20 32 20 31 31  .#  }.#} {1 2 11
2310: 20 31 32 7d 0a 23 64 6f 5f 74 65 73 74 20 73 6f   12}.#do_test so
2320: 72 74 2d 37 2e 31 31 20 7b 0a 23 20 20 65 78 65  rt-7.11 {.#  exe
2330: 63 73 71 6c 20 7b 0a 23 20 20 20 20 53 45 4c 45  csql {.#    SELE
2340: 43 54 20 62 20 46 52 4f 4d 20 74 34 20 55 4e 49  CT b FROM t4 UNI
2350: 4f 4e 20 53 45 4c 45 43 54 20 62 20 46 52 4f 4d  ON SELECT b FROM
2360: 20 76 34 20 4f 52 44 45 52 20 42 59 20 31 20 43   v4 ORDER BY 1 C
2370: 4f 4c 4c 41 54 45 20 74 65 78 74 3b 0a 23 20 20  OLLATE text;.#  
2380: 7d 0a 23 7d 20 7b 31 20 31 31 20 31 32 20 32 7d  }.#} {1 11 12 2}
2390: 0a 23 64 6f 5f 74 65 73 74 20 73 6f 72 74 2d 37  .#do_test sort-7
23a0: 2e 31 32 20 7b 0a 23 20 20 65 78 65 63 73 71 6c  .12 {.#  execsql
23b0: 20 7b 0a 23 20 20 20 20 53 45 4c 45 43 54 20 62   {.#    SELECT b
23c0: 20 46 52 4f 4d 20 74 34 20 55 4e 49 4f 4e 20 53   FROM t4 UNION S
23d0: 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 76 34 20  ELECT b FROM v4 
23e0: 4f 52 44 45 52 20 42 59 20 31 20 43 4f 4c 4c 41  ORDER BY 1 COLLA
23f0: 54 45 20 62 6c 6f 62 3b 0a 23 20 20 7d 0a 23 7d  TE blob;.#  }.#}
2400: 20 7b 31 20 31 31 20 31 32 20 32 7d 0a 23 64 6f   {1 11 12 2}.#do
2410: 5f 74 65 73 74 20 73 6f 72 74 2d 37 2e 31 33 20  _test sort-7.13 
2420: 7b 0a 23 20 20 65 78 65 63 73 71 6c 20 7b 0a 23  {.#  execsql {.#
2430: 20 20 20 20 53 45 4c 45 43 54 20 62 20 46 52 4f      SELECT b FRO
2440: 4d 20 74 34 20 55 4e 49 4f 4e 20 53 45 4c 45 43  M t4 UNION SELEC
2450: 54 20 62 20 46 52 4f 4d 20 76 34 20 4f 52 44 45  T b FROM v4 ORDE
2460: 52 20 42 59 20 31 20 43 4f 4c 4c 41 54 45 20 63  R BY 1 COLLATE c
2470: 6c 6f 62 3b 0a 23 20 20 7d 0a 23 7d 20 7b 31 20  lob;.#  }.#} {1 
2480: 31 31 20 31 32 20 32 7d 0a 23 64 6f 5f 74 65 73  11 12 2}.#do_tes
2490: 74 20 73 6f 72 74 2d 37 2e 31 34 20 7b 0a 23 20  t sort-7.14 {.# 
24a0: 20 65 78 65 63 73 71 6c 20 7b 0a 23 20 20 20 20   execsql {.#    
24b0: 53 45 4c 45 43 54 20 62 20 46 52 4f 4d 20 74 34  SELECT b FROM t4
24c0: 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 62 20   UNION SELECT b 
24d0: 46 52 4f 4d 20 76 34 20 4f 52 44 45 52 20 42 59  FROM v4 ORDER BY
24e0: 20 31 20 43 4f 4c 4c 41 54 45 20 76 61 72 63 68   1 COLLATE varch
24f0: 61 72 3b 0a 23 20 20 7d 0a 23 7d 20 7b 31 20 31  ar;.#  }.#} {1 1
2500: 31 20 31 32 20 32 7d 0a 0a 23 20 54 69 63 6b 65  1 12 2}..# Ticke
2510: 74 20 23 32 39 37 0a 23 0a 64 6f 5f 74 65 73 74  t #297.#.do_test
2520: 20 73 6f 72 74 2d 38 2e 31 20 7b 0a 20 20 65 78   sort-8.1 {.  ex
2530: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
2540: 54 45 20 54 41 42 4c 45 20 74 35 28 61 20 72 65  TE TABLE t5(a re
2550: 61 6c 2c 20 62 20 74 65 78 74 29 3b 0a 20 20 20  al, b text);.   
2560: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35 20   INSERT INTO t5 
2570: 56 41 4c 55 45 53 28 31 30 30 2c 27 41 31 27 29  VALUES(100,'A1')
2580: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
2590: 4f 20 74 35 20 56 41 4c 55 45 53 28 31 30 30 2e  O t5 VALUES(100.
25a0: 30 2c 27 41 32 27 29 3b 0a 20 20 20 20 53 45 4c  0,'A2');.    SEL
25b0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 35 20 4f 52  ECT * FROM t5 OR
25c0: 44 45 52 20 42 59 20 61 2c 20 62 3b 0a 20 20 7d  DER BY a, b;.  }
25d0: 0a 7d 20 7b 31 30 30 2e 30 20 41 31 20 31 30 30  .} {100.0 A1 100
25e0: 2e 30 20 41 32 7d 0a 0a 0a 69 66 63 61 70 61 62  .0 A2}...ifcapab
25f0: 6c 65 20 7b 62 6c 6f 62 6c 69 74 7d 20 7b 0a 23  le {bloblit} {.#
2600: 20 42 4c 4f 42 73 20 73 68 6f 75 6c 64 20 73 6f   BLOBs should so
2610: 72 74 20 61 66 74 65 72 20 54 45 58 54 0a 23 0a  rt after TEXT.#.
2620: 64 6f 5f 74 65 73 74 20 73 6f 72 74 2d 39 2e 31  do_test sort-9.1
2630: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
2640: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
2650: 74 36 28 78 2c 20 79 29 3b 0a 20 20 20 20 49 4e  t6(x, y);.    IN
2660: 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56 41 4c  SERT INTO t6 VAL
2670: 55 45 53 28 31 2c 31 29 3b 0a 20 20 20 20 49 4e  UES(1,1);.    IN
2680: 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56 41 4c  SERT INTO t6 VAL
2690: 55 45 53 28 32 2c 27 31 27 29 3b 0a 20 20 20 20  UES(2,'1');.    
26a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56  INSERT INTO t6 V
26b0: 41 4c 55 45 53 28 33 2c 78 27 33 31 27 29 3b 0a  ALUES(3,x'31');.
26c0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
26d0: 74 36 20 56 41 4c 55 45 53 28 34 2c 4e 55 4c 4c  t6 VALUES(4,NULL
26e0: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 78 20  );.    SELECT x 
26f0: 46 52 4f 4d 20 74 36 20 4f 52 44 45 52 20 42 59  FROM t6 ORDER BY
2700: 20 79 3b 0a 20 20 7d 0a 7d 20 7b 34 20 31 20 32   y;.  }.} {4 1 2
2710: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 73 6f 72 74   3}.do_test sort
2720: 2d 39 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -9.2 {.  execsql
2730: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78 20   {.    SELECT x 
2740: 46 52 4f 4d 20 74 36 20 4f 52 44 45 52 20 42 59  FROM t6 ORDER BY
2750: 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b   y DESC;.  }.} {
2760: 33 20 32 20 31 20 34 7d 0a 64 6f 5f 74 65 73 74  3 2 1 4}.do_test
2770: 20 73 6f 72 74 2d 39 2e 33 20 7b 0a 20 20 65 78   sort-9.3 {.  ex
2780: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
2790: 43 54 20 78 20 46 52 4f 4d 20 74 36 20 57 48 45  CT x FROM t6 WHE
27a0: 52 45 20 79 3c 31 0a 20 20 7d 0a 7d 20 7b 7d 0a  RE y<1.  }.} {}.
27b0: 64 6f 5f 74 65 73 74 20 73 6f 72 74 2d 39 2e 34  do_test sort-9.4
27c0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
27d0: 20 20 20 53 45 4c 45 43 54 20 78 20 46 52 4f 4d     SELECT x FROM
27e0: 20 74 36 20 57 48 45 52 45 20 79 3c 27 31 27 0a   t6 WHERE y<'1'.
27f0: 20 20 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73    }.} {1}.do_tes
2800: 74 20 73 6f 72 74 2d 39 2e 35 20 7b 0a 20 20 65  t sort-9.5 {.  e
2810: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
2820: 45 43 54 20 78 20 46 52 4f 4d 20 74 36 20 57 48  ECT x FROM t6 WH
2830: 45 52 45 20 79 3c 78 27 33 31 27 0a 20 20 7d 0a  ERE y<x'31'.  }.
2840: 7d 20 7b 31 20 32 7d 0a 64 6f 5f 74 65 73 74 20  } {1 2}.do_test 
2850: 73 6f 72 74 2d 39 2e 36 20 7b 0a 20 20 65 78 65  sort-9.6 {.  exe
2860: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
2870: 54 20 78 20 46 52 4f 4d 20 74 36 20 57 48 45 52  T x FROM t6 WHER
2880: 45 20 79 3e 31 0a 20 20 7d 0a 7d 20 7b 32 20 33  E y>1.  }.} {2 3
2890: 7d 0a 64 6f 5f 74 65 73 74 20 73 6f 72 74 2d 39  }.do_test sort-9
28a0: 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .7 {.  execsql {
28b0: 0a 20 20 20 20 53 45 4c 45 43 54 20 78 20 46 52  .    SELECT x FR
28c0: 4f 4d 20 74 36 20 57 48 45 52 45 20 79 3e 27 31  OM t6 WHERE y>'1
28d0: 27 0a 20 20 7d 0a 7d 20 7b 33 7d 0a 7d 20 3b 23  '.  }.} {3}.} ;#
28e0: 20 65 6e 64 69 66 20 62 6c 6f 62 6c 69 74 0a 0a   endif bloblit..
28f0: 23 20 54 69 63 6b 65 74 20 23 31 30 39 32 20 2d  # Ticket #1092 -
2900: 20 4f 52 44 45 52 20 42 59 20 6f 6e 20 72 6f 77   ORDER BY on row
2910: 69 64 20 66 69 65 6c 64 73 2e 0a 64 6f 5f 74 65  id fields..do_te
2920: 73 74 20 73 6f 72 74 2d 31 30 2e 31 20 7b 0a 20  st sort-10.1 {. 
2930: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
2940: 52 45 41 54 45 20 54 41 42 4c 45 20 74 37 28 63  REATE TABLE t7(c
2950: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
2960: 20 4b 45 59 29 3b 0a 20 20 20 20 49 4e 53 45 52   KEY);.    INSER
2970: 54 20 49 4e 54 4f 20 74 37 20 56 41 4c 55 45 53  T INTO t7 VALUES
2980: 28 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  (1);.    INSERT 
2990: 49 4e 54 4f 20 74 37 20 56 41 4c 55 45 53 28 32  INTO t7 VALUES(2
29a0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
29b0: 54 4f 20 74 37 20 56 41 4c 55 45 53 28 33 29 3b  TO t7 VALUES(3);
29c0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
29d0: 20 74 37 20 56 41 4c 55 45 53 28 34 29 3b 0a 20   t7 VALUES(4);. 
29e0: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
29f0: 73 6f 72 74 2d 31 30 2e 32 20 7b 0a 20 20 65 78  sort-10.2 {.  ex
2a00: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
2a10: 43 54 20 63 20 46 52 4f 4d 20 74 37 20 57 48 45  CT c FROM t7 WHE
2a20: 52 45 20 63 3c 3d 33 20 4f 52 44 45 52 20 42 59  RE c<=3 ORDER BY
2a30: 20 63 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b   c DESC;.  }.} {
2a40: 33 20 32 20 31 7d 0a 64 6f 5f 74 65 73 74 20 73  3 2 1}.do_test s
2a50: 6f 72 74 2d 31 30 2e 33 20 7b 0a 20 20 65 78 65  ort-10.3 {.  exe
2a60: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
2a70: 54 20 63 20 46 52 4f 4d 20 74 37 20 57 48 45 52  T c FROM t7 WHER
2a80: 45 20 63 3c 33 20 4f 52 44 45 52 20 42 59 20 63  E c<3 ORDER BY c
2a90: 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 32 20   DESC;.  }.} {2 
2aa0: 31 7d 0a 0a 23 20 74 69 63 6b 65 74 20 23 31 33  1}..# ticket #13
2ab0: 35 38 2e 20 20 4a 75 73 74 20 62 65 63 61 75 73  58.  Just becaus
2ac0: 65 20 6f 6e 65 20 74 61 62 6c 65 20 69 6e 20 61  e one table in a
2ad0: 20 6a 6f 69 6e 20 67 69 76 65 73 20 61 20 75 6e   join gives a un
2ae0: 69 71 75 65 0a 23 20 72 65 73 75 6c 74 20 64 6f  ique.# result do
2af0: 65 73 20 6e 6f 74 20 6d 65 61 6e 20 74 68 65 79  es not mean they
2b00: 20 61 6c 6c 20 64 6f 2e 20 20 57 65 20 63 61 6e   all do.  We can
2b10: 6e 6f 74 20 64 69 73 61 62 6c 65 20 73 6f 72 74  not disable sort
2b20: 69 6e 67 20 75 6e 6c 65 73 73 0a 23 20 61 6c 6c  ing unless.# all
2b30: 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 6a   tables in the j
2b40: 6f 69 6e 20 67 69 76 65 20 75 6e 69 71 75 65 20  oin give unique 
2b50: 72 65 73 75 6c 74 73 2e 0a 23 0a 64 6f 5f 74 65  results..#.do_te
2b60: 73 74 20 73 6f 72 74 2d 31 31 2e 31 20 7b 0a 20  st sort-11.1 {. 
2b70: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 63   execsql {.    c
2b80: 72 65 61 74 65 20 74 61 62 6c 65 20 74 38 28 61  reate table t8(a
2b90: 20 75 6e 69 71 75 65 2c 20 62 2c 20 63 29 3b 0a   unique, b, c);.
2ba0: 20 20 20 20 69 6e 73 65 72 74 20 69 6e 74 6f 20      insert into 
2bb0: 74 38 20 76 61 6c 75 65 73 28 31 2c 32 2c 33 29  t8 values(1,2,3)
2bc0: 3b 0a 20 20 20 20 69 6e 73 65 72 74 20 69 6e 74  ;.    insert int
2bd0: 6f 20 74 38 20 76 61 6c 75 65 73 28 32 2c 33 2c  o t8 values(2,3,
2be0: 34 29 3b 0a 20 20 20 20 63 72 65 61 74 65 20 74  4);.    create t
2bf0: 61 62 6c 65 20 74 39 28 78 2c 79 29 3b 0a 20 20  able t9(x,y);.  
2c00: 20 20 69 6e 73 65 72 74 20 69 6e 74 6f 20 74 39    insert into t9
2c10: 20 76 61 6c 75 65 73 28 32 2c 34 29 3b 0a 20 20   values(2,4);.  
2c20: 20 20 69 6e 73 65 72 74 20 69 6e 74 6f 20 74 39    insert into t9
2c30: 20 76 61 6c 75 65 73 28 32 2c 33 29 3b 0a 20 20   values(2,3);.  
2c40: 20 20 73 65 6c 65 63 74 20 79 20 66 72 6f 6d 20    select y from 
2c50: 74 38 2c 20 74 39 20 77 68 65 72 65 20 61 3d 31  t8, t9 where a=1
2c60: 20 6f 72 64 65 72 20 62 79 20 61 2c 20 79 3b 0a   order by a, y;.
2c70: 20 20 7d 0a 7d 20 7b 33 20 34 7d 0a 0a 23 20 54    }.} {3 4}..# T
2c80: 72 6f 75 62 6c 65 20 72 65 70 6f 72 74 65 64 20  rouble reported 
2c90: 6f 6e 20 74 68 65 20 6d 61 69 6c 69 6e 67 20 6c  on the mailing l
2ca0: 69 73 74 2e 20 20 43 68 65 63 6b 20 66 6f 72 20  ist.  Check for 
2cb0: 6f 76 65 72 6c 79 20 61 67 67 72 65 73 73 69 76  overly aggressiv
2cc0: 65 0a 23 20 28 77 68 69 63 68 20 69 73 20 74 6f  e.# (which is to
2cd0: 20 73 61 79 2c 20 69 6e 63 6f 72 72 65 63 74 29   say, incorrect)
2ce0: 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 6f 66   optimization of
2cf0: 20 6f 72 64 65 72 2d 62 79 20 77 69 74 68 20 61   order-by with a
2d00: 20 72 6f 77 69 64 0a 23 20 69 6e 20 61 20 6a 6f   rowid.# in a jo
2d10: 69 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 73 6f  in..#.do_test so
2d20: 72 74 2d 31 32 2e 31 20 7b 0a 20 20 65 78 65 63  rt-12.1 {.  exec
2d30: 73 71 6c 20 7b 0a 20 20 20 20 63 72 65 61 74 65  sql {.    create
2d40: 20 74 61 62 6c 65 20 61 20 28 69 64 20 69 6e 74   table a (id int
2d50: 65 67 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79  eger primary key
2d60: 29 3b 0a 20 20 20 20 63 72 65 61 74 65 20 74 61  );.    create ta
2d70: 62 6c 65 20 62 20 28 69 64 20 69 6e 74 65 67 65  ble b (id intege
2d80: 72 20 70 72 69 6d 61 72 79 20 6b 65 79 2c 20 61  r primary key, a
2d90: 49 64 20 69 6e 74 65 67 65 72 2c 20 74 65 78 74  Id integer, text
2da0: 29 3b 0a 20 20 20 20 69 6e 73 65 72 74 20 69 6e  );.    insert in
2db0: 74 6f 20 61 20 76 61 6c 75 65 73 20 28 31 29 3b  to a values (1);
2dc0: 0a 20 20 20 20 69 6e 73 65 72 74 20 69 6e 74 6f  .    insert into
2dd0: 20 62 20 76 61 6c 75 65 73 20 28 32 2c 20 31 2c   b values (2, 1,
2de0: 20 27 78 78 78 27 29 3b 0a 20 20 20 20 69 6e 73   'xxx');.    ins
2df0: 65 72 74 20 69 6e 74 6f 20 62 20 76 61 6c 75 65  ert into b value
2e00: 73 20 28 31 2c 20 31 2c 20 27 7a 7a 7a 27 29 3b  s (1, 1, 'zzz');
2e10: 0a 20 20 20 20 69 6e 73 65 72 74 20 69 6e 74 6f  .    insert into
2e20: 20 62 20 76 61 6c 75 65 73 20 28 33 2c 20 31 2c   b values (3, 1,
2e30: 20 27 79 79 79 27 29 3b 0a 20 20 20 20 73 65 6c   'yyy');.    sel
2e40: 65 63 74 20 61 2e 69 64 2c 20 62 2e 69 64 2c 20  ect a.id, b.id, 
2e50: 62 2e 74 65 78 74 20 66 72 6f 6d 20 61 20 6a 6f  b.text from a jo
2e60: 69 6e 20 62 20 6f 6e 20 28 61 2e 69 64 20 3d 20  in b on (a.id = 
2e70: 62 2e 61 49 64 29 0a 20 20 20 20 20 20 6f 72 64  b.aId).      ord
2e80: 65 72 20 62 79 20 61 2e 69 64 2c 20 62 2e 74 65  er by a.id, b.te
2e90: 78 74 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 78  xt;.  }.} {1 2 x
2ea0: 78 78 20 31 20 33 20 79 79 79 20 31 20 31 20 7a  xx 1 3 yyy 1 1 z
2eb0: 7a 7a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  zz}..#----------
2ec0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ed0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
2f00: 23 20 43 68 65 63 6b 20 74 68 61 74 20 74 68 65  # Check that the
2f10: 20 73 6f 72 74 65 72 20 69 6e 20 76 64 62 65 73   sorter in vdbes
2f20: 6f 72 74 2e 63 20 73 6f 72 74 73 20 69 6e 20 61  ort.c sorts in a
2f30: 20 73 74 61 62 6c 65 20 66 61 73 68 69 6f 6e 2e   stable fashion.
2f40: 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .#.do_execsql_te
2f50: 73 74 20 73 6f 72 74 2d 31 33 2e 30 20 7b 0a 20  st sort-13.0 {. 
2f60: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
2f70: 30 28 61 2c 20 62 29 3b 0a 7d 0a 64 6f 5f 74 65  0(a, b);.}.do_te
2f80: 73 74 20 73 6f 72 74 2d 31 33 2e 31 20 7b 0a 20  st sort-13.1 {. 
2f90: 20 64 62 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   db transaction 
2fa0: 7b 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69  {.    for {set i
2fb0: 20 30 7d 20 7b 24 69 20 3c 20 31 30 30 30 30 30   0} {$i < 100000
2fc0: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20  } {incr i} {.   
2fd0: 20 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53     execsql { INS
2fe0: 45 52 54 20 49 4e 54 4f 20 74 31 30 20 56 41 4c  ERT INTO t10 VAL
2ff0: 55 45 53 28 20 24 69 2f 31 30 2c 20 24 69 25 31  UES( $i/10, $i%1
3000: 30 20 29 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a  0 ) }.    }.  }.
3010: 7d 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  } {}.do_execsql_
3020: 74 65 73 74 20 73 6f 72 74 2d 31 33 2e 32 20 7b  test sort-13.2 {
3030: 0a 20 20 53 45 4c 45 43 54 20 61 2c 20 62 20 46  .  SELECT a, b F
3040: 52 4f 4d 20 74 31 30 20 4f 52 44 45 52 20 42 59  ROM t10 ORDER BY
3050: 20 61 3b 0a 7d 20 5b 64 62 20 65 76 61 6c 20 7b   a;.} [db eval {
3060: 53 45 4c 45 43 54 20 61 2c 20 62 20 46 52 4f 4d  SELECT a, b FROM
3070: 20 74 31 30 20 4f 52 44 45 52 20 42 59 20 61 2c   t10 ORDER BY a,
3080: 20 62 7d 5d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f   b}].do_execsql_
3090: 74 65 73 74 20 73 6f 72 74 2d 31 33 2e 33 20 7b  test sort-13.3 {
30a0: 0a 20 20 50 52 41 47 4d 41 20 63 61 63 68 65 5f  .  PRAGMA cache_
30b0: 73 69 7a 65 20 3d 20 35 3b 0a 20 20 53 45 4c 45  size = 5;.  SELE
30c0: 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 74 31 30  CT a, b FROM t10
30d0: 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 7d 20 5b   ORDER BY a;.} [
30e0: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
30f0: 61 2c 20 62 20 46 52 4f 4d 20 74 31 30 20 4f 52  a, b FROM t10 OR
3100: 44 45 52 20 42 59 20 61 2c 20 62 7d 5d 0a 0a 0a  DER BY a, b}]...
3110: 66 69 6e 69 73 68 5f 74 65 73 74 0a              finish_test.