/ Hex Artifact Content
Login

Artifact cbb168d446152fcf1dd85be299ad2d6cd507da4e:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 31 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68   15.#.# The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67  place of.# a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23  is a blessing:.#
0080: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f  .#    May you do
0090: 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76   good and not ev
00a0: 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  il..#    May you
00b0: 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73   find forgivenes
00c0: 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61  s for yourself a
00d0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
00e0: 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  s..#    May you 
00f0: 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65  share freely, ne
0100: 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20  ver taking more 
0110: 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23  than you give..#
0120: 0a 23 2a 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 0a 23 20 54 68 69 73  *********.# This
0170: 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73   file implements
0180: 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
0190: 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62  s for SQLite lib
01a0: 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63  rary.  The.# foc
01b0: 75 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20  us of this file 
01c0: 69 73 20 74 65 73 74 69 6e 67 20 74 68 65 20 74  is testing the t
01d0: 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 61 62  he library is ab
01e0: 6c 65 20 74 6f 20 63 6f 72 72 65 63 74 6c 79 0a  le to correctly.
01f0: 23 20 68 61 6e 64 6c 65 20 66 69 6c 65 2d 66 6f  # handle file-fo
0200: 72 6d 61 74 20 33 20 28 76 65 72 73 69 6f 6e 20  rmat 3 (version 
0210: 32 2e 36 2e 78 29 20 64 61 74 61 62 61 73 65 73  2.6.x) databases
0220: 2e 0a 23 0a 23 20 24 49 64 3a 20 66 6f 72 6d 61  ..#.# $Id: forma
0230: 74 33 2e 74 65 73 74 2c 76 20 31 2e 31 20 32 30  t3.test,v 1.1 20
0240: 30 32 2f 30 38 2f 33 31 20 31 36 3a 35 32 3a 34  02/08/31 16:52:4
0250: 35 20 64 72 68 20 45 78 70 20 24 0a 0a 73 65 74  5 drh Exp $..set
0260: 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64   testdir [file d
0270: 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73  irname $argv0].s
0280: 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74  ource $testdir/t
0290: 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20 43 72 65  ester.tcl..# Cre
02a0: 61 74 65 20 61 20 62 75 6e 63 68 20 6f 66 20 64  ate a bunch of d
02b0: 61 74 61 20 74 6f 20 73 6f 72 74 20 61 67 61 69  ata to sort agai
02c0: 6e 73 74 0a 23 0a 64 6f 5f 74 65 73 74 20 66 6f  nst.#.do_test fo
02d0: 72 6d 61 74 33 2d 31 2e 30 20 7b 0a 20 20 73 65  rmat3-1.0 {.  se
02e0: 74 20 66 64 20 5b 6f 70 65 6e 20 64 61 74 61 2e  t fd [open data.
02f0: 74 78 74 20 77 5d 0a 20 20 70 75 74 73 20 24 66  txt w].  puts $f
0300: 64 20 22 31 5c 74 6f 6e 65 5c 74 30 5c 74 49 5c  d "1\tone\t0\tI\
0310: 74 33 2e 31 34 31 35 39 32 36 35 33 22 0a 20 20  t3.141592653".  
0320: 70 75 74 73 20 24 66 64 20 22 32 5c 74 74 77 6f  puts $fd "2\ttwo
0330: 5c 74 31 5c 74 49 49 5c 74 32 2e 31 35 22 0a 20  \t1\tII\t2.15". 
0340: 20 70 75 74 73 20 24 66 64 20 22 33 5c 74 74 68   puts $fd "3\tth
0350: 72 65 65 5c 74 31 5c 74 49 49 49 5c 74 34 32 32  ree\t1\tIII\t422
0360: 31 2e 30 22 0a 20 20 70 75 74 73 20 24 66 64 20  1.0".  puts $fd 
0370: 22 34 5c 74 66 6f 75 72 5c 74 32 5c 74 49 56 5c  "4\tfour\t2\tIV\
0380: 74 2d 30 2e 30 30 31 33 34 34 32 22 0a 20 20 70  t-0.0013442".  p
0390: 75 74 73 20 24 66 64 20 22 35 5c 74 66 69 76 65  uts $fd "5\tfive
03a0: 5c 74 32 5c 74 56 5c 74 2d 31 31 22 0a 20 20 70  \t2\tV\t-11".  p
03b0: 75 74 73 20 24 66 64 20 22 36 5c 74 73 69 78 5c  uts $fd "6\tsix\
03c0: 74 32 5c 74 56 49 5c 74 30 2e 31 32 33 22 0a 20  t2\tVI\t0.123". 
03d0: 20 70 75 74 73 20 24 66 64 20 22 37 5c 74 73 65   puts $fd "7\tse
03e0: 76 65 6e 5c 74 32 5c 74 56 49 49 5c 74 31 32 33  ven\t2\tVII\t123
03f0: 2e 30 22 0a 20 20 70 75 74 73 20 24 66 64 20 22  .0".  puts $fd "
0400: 38 5c 74 65 69 67 68 74 5c 74 33 5c 74 56 49 49  8\teight\t3\tVII
0410: 49 5c 74 2d 31 2e 36 22 0a 20 20 63 6c 6f 73 65  I\t-1.6".  close
0420: 20 24 66 64 0a 20 20 65 78 65 63 73 71 6c 20 7b   $fd.  execsql {
0430: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
0440: 45 20 74 31 28 0a 20 20 20 20 20 20 20 6e 20 69  E t1(.       n i
0450: 6e 74 2c 0a 20 20 20 20 20 20 20 76 20 76 61 72  nt,.       v var
0460: 63 68 61 72 28 31 30 29 2c 0a 20 20 20 20 20 20  char(10),.      
0470: 20 6c 6f 67 20 69 6e 74 2c 0a 20 20 20 20 20 20   log int,.      
0480: 20 72 6f 6d 61 6e 20 76 61 72 63 68 61 72 28 31   roman varchar(1
0490: 30 29 2c 0a 20 20 20 20 20 20 20 66 6c 74 20 72  0),.       flt r
04a0: 65 61 6c 0a 20 20 20 20 29 3b 0a 20 20 20 20 43  eal.    );.    C
04b0: 4f 50 59 20 74 31 20 46 52 4f 4d 20 27 64 61 74  OPY t1 FROM 'dat
04c0: 61 2e 74 78 74 27 0a 20 20 7d 0a 20 20 66 69 6c  a.txt'.  }.  fil
04d0: 65 20 64 65 6c 65 74 65 20 64 61 74 61 2e 74 78  e delete data.tx
04e0: 74 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73  t.  db close.  s
04f0: 65 74 20 3a 3a 62 74 20 5b 62 74 72 65 65 5f 6f  et ::bt [btree_o
0500: 70 65 6e 20 74 65 73 74 2e 64 62 5d 0a 20 20 62  pen test.db].  b
0510: 74 72 65 65 5f 62 65 67 69 6e 5f 74 72 61 6e 73  tree_begin_trans
0520: 61 63 74 69 6f 6e 20 24 3a 3a 62 74 0a 20 20 73  action $::bt.  s
0530: 65 74 20 6d 20 5b 62 74 72 65 65 5f 67 65 74 5f  et m [btree_get_
0540: 6d 65 74 61 20 24 3a 3a 62 74 5d 0a 20 20 73 65  meta $::bt].  se
0550: 74 20 6d 20 5b 6c 72 65 70 6c 61 63 65 20 24 6d  t m [lreplace $m
0560: 20 32 20 32 20 33 5d 0a 20 20 65 76 61 6c 20 62   2 2 3].  eval b
0570: 74 72 65 65 5f 75 70 64 61 74 65 5f 6d 65 74 61  tree_update_meta
0580: 20 24 3a 3a 62 74 20 24 6d 0a 20 20 62 74 72 65   $::bt $m.  btre
0590: 65 5f 63 6f 6d 6d 69 74 20 24 3a 3a 62 74 0a 20  e_commit $::bt. 
05a0: 20 62 74 72 65 65 5f 63 6c 6f 73 65 20 24 3a 3a   btree_close $::
05b0: 62 74 0a 20 20 73 71 6c 69 74 65 20 64 62 20 74  bt.  sqlite db t
05c0: 65 73 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c  est.db.  execsql
05d0: 20 7b 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a   {SELECT count(*
05e0: 29 20 46 52 4f 4d 20 74 31 7d 0a 7d 20 7b 38 7d  ) FROM t1}.} {8}
05f0: 0a 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74  ..do_test format
0600: 33 2d 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  3-1.1 {.  execsq
0610: 6c 20 7b 53 45 4c 45 43 54 20 6e 20 46 52 4f 4d  l {SELECT n FROM
0620: 20 74 31 20 4f 52 44 45 52 20 42 59 20 6e 7d 0a   t1 ORDER BY n}.
0630: 7d 20 7b 31 20 32 20 33 20 34 20 35 20 36 20 37  } {1 2 3 4 5 6 7
0640: 20 38 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d   8}.do_test form
0650: 61 74 33 2d 31 2e 31 2e 31 20 7b 0a 20 20 65 78  at3-1.1.1 {.  ex
0660: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 20  ecsql {SELECT n 
0670: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
0680: 20 6e 20 41 53 43 7d 0a 7d 20 7b 31 20 32 20 33   n ASC}.} {1 2 3
0690: 20 34 20 35 20 36 20 37 20 38 7d 0a 64 6f 5f 74   4 5 6 7 8}.do_t
06a0: 65 73 74 20 66 6f 72 6d 61 74 33 2d 31 2e 31 2e  est format3-1.1.
06b0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  1 {.  execsql {S
06c0: 45 4c 45 43 54 20 41 4c 4c 20 6e 20 46 52 4f 4d  ELECT ALL n FROM
06d0: 20 74 31 20 4f 52 44 45 52 20 42 59 20 6e 20 41   t1 ORDER BY n A
06e0: 53 43 7d 0a 7d 20 7b 31 20 32 20 33 20 34 20 35  SC}.} {1 2 3 4 5
06f0: 20 36 20 37 20 38 7d 0a 64 6f 5f 74 65 73 74 20   6 7 8}.do_test 
0700: 66 6f 72 6d 61 74 33 2d 31 2e 32 20 7b 0a 20 20  format3-1.2 {.  
0710: 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20  execsql {SELECT 
0720: 6e 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20  n FROM t1 ORDER 
0730: 42 59 20 6e 20 44 45 53 43 7d 0a 7d 20 7b 38 20  BY n DESC}.} {8 
0740: 37 20 36 20 35 20 34 20 33 20 32 20 31 7d 0a 64  7 6 5 4 3 2 1}.d
0750: 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 31  o_test format3-1
0760: 2e 33 61 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .3a {.  execsql 
0770: 7b 53 45 4c 45 43 54 20 76 20 46 52 4f 4d 20 74  {SELECT v FROM t
0780: 31 20 4f 52 44 45 52 20 42 59 20 76 7d 0a 7d 20  1 ORDER BY v}.} 
0790: 7b 65 69 67 68 74 20 66 69 76 65 20 66 6f 75 72  {eight five four
07a0: 20 6f 6e 65 20 73 65 76 65 6e 20 73 69 78 20 74   one seven six t
07b0: 68 72 65 65 20 74 77 6f 7d 0a 64 6f 5f 74 65 73  hree two}.do_tes
07c0: 74 20 66 6f 72 6d 61 74 33 2d 31 2e 33 62 20 7b  t format3-1.3b {
07d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45  .  execsql {SELE
07e0: 43 54 20 6e 20 46 52 4f 4d 20 74 31 20 4f 52 44  CT n FROM t1 ORD
07f0: 45 52 20 42 59 20 76 7d 0a 7d 20 7b 38 20 35 20  ER BY v}.} {8 5 
0800: 34 20 31 20 37 20 36 20 33 20 32 7d 0a 64 6f 5f  4 1 7 6 3 2}.do_
0810: 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 31 2e 34  test format3-1.4
0820: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
0830: 4c 45 43 54 20 6e 20 46 52 4f 4d 20 74 31 20 4f  LECT n FROM t1 O
0840: 52 44 45 52 20 42 59 20 76 20 44 45 53 43 7d 0a  RDER BY v DESC}.
0850: 7d 20 7b 32 20 33 20 36 20 37 20 31 20 34 20 35  } {2 3 6 7 1 4 5
0860: 20 38 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d   8}.do_test form
0870: 61 74 33 2d 31 2e 35 20 7b 0a 20 20 65 78 65 63  at3-1.5 {.  exec
0880: 73 71 6c 20 7b 53 45 4c 45 43 54 20 66 6c 74 20  sql {SELECT flt 
0890: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
08a0: 20 66 6c 74 7d 0a 7d 20 7b 2d 31 31 20 2d 31 2e   flt}.} {-11 -1.
08b0: 36 20 2d 30 2e 30 30 31 33 34 34 32 20 30 2e 31  6 -0.0013442 0.1
08c0: 32 33 20 32 2e 31 35 20 33 2e 31 34 31 35 39 32  23 2.15 3.141592
08d0: 36 35 33 20 31 32 33 2e 30 20 34 32 32 31 2e 30  653 123.0 4221.0
08e0: 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74  }.do_test format
08f0: 33 2d 31 2e 36 20 7b 0a 20 20 65 78 65 63 73 71  3-1.6 {.  execsq
0900: 6c 20 7b 53 45 4c 45 43 54 20 66 6c 74 20 46 52  l {SELECT flt FR
0910: 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 66  OM t1 ORDER BY f
0920: 6c 74 20 44 45 53 43 7d 0a 7d 20 7b 34 32 32 31  lt DESC}.} {4221
0930: 2e 30 20 31 32 33 2e 30 20 33 2e 31 34 31 35 39  .0 123.0 3.14159
0940: 32 36 35 33 20 32 2e 31 35 20 30 2e 31 32 33 20  2653 2.15 0.123 
0950: 2d 30 2e 30 30 31 33 34 34 32 20 2d 31 2e 36 20  -0.0013442 -1.6 
0960: 2d 31 31 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72  -11}.do_test for
0970: 6d 61 74 33 2d 31 2e 37 20 7b 0a 20 20 65 78 65  mat3-1.7 {.  exe
0980: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 6d  csql {SELECT rom
0990: 61 6e 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52  an FROM t1 ORDER
09a0: 20 42 59 20 72 6f 6d 61 6e 7d 0a 7d 20 7b 49 20   BY roman}.} {I 
09b0: 49 49 20 49 49 49 20 49 56 20 56 20 56 49 20 56  II III IV V VI V
09c0: 49 49 20 56 49 49 49 7d 0a 64 6f 5f 74 65 73 74  II VIII}.do_test
09d0: 20 66 6f 72 6d 61 74 33 2d 31 2e 38 20 7b 0a 20   format3-1.8 {. 
09e0: 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43 54   execsql {SELECT
09f0: 20 6e 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52   n FROM t1 ORDER
0a00: 20 42 59 20 6c 6f 67 2c 20 66 6c 74 7d 0a 7d 20   BY log, flt}.} 
0a10: 7b 31 20 32 20 33 20 35 20 34 20 36 20 37 20 38  {1 2 3 5 4 6 7 8
0a20: 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74  }.do_test format
0a30: 33 2d 31 2e 38 2e 31 20 7b 0a 20 20 65 78 65 63  3-1.8.1 {.  exec
0a40: 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 20 46 52  sql {SELECT n FR
0a50: 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 6c  OM t1 ORDER BY l
0a60: 6f 67 20 61 73 63 2c 20 66 6c 74 7d 0a 7d 20 7b  og asc, flt}.} {
0a70: 31 20 32 20 33 20 35 20 34 20 36 20 37 20 38 7d  1 2 3 5 4 6 7 8}
0a80: 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33  .do_test format3
0a90: 2d 31 2e 38 2e 32 20 7b 0a 20 20 65 78 65 63 73  -1.8.2 {.  execs
0aa0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 20 46 52 4f  ql {SELECT n FRO
0ab0: 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 6c 6f  M t1 ORDER BY lo
0ac0: 67 2c 20 66 6c 74 20 41 53 43 7d 0a 7d 20 7b 31  g, flt ASC}.} {1
0ad0: 20 32 20 33 20 35 20 34 20 36 20 37 20 38 7d 0a   2 3 5 4 6 7 8}.
0ae0: 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d  do_test format3-
0af0: 31 2e 38 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  1.8.3 {.  execsq
0b00: 6c 20 7b 53 45 4c 45 43 54 20 6e 20 46 52 4f 4d  l {SELECT n FROM
0b10: 20 74 31 20 4f 52 44 45 52 20 42 59 20 6c 6f 67   t1 ORDER BY log
0b20: 20 41 53 43 2c 20 66 6c 74 20 61 73 63 7d 0a 7d   ASC, flt asc}.}
0b30: 20 7b 31 20 32 20 33 20 35 20 34 20 36 20 37 20   {1 2 3 5 4 6 7 
0b40: 38 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61  8}.do_test forma
0b50: 74 33 2d 31 2e 39 20 7b 0a 20 20 65 78 65 63 73  t3-1.9 {.  execs
0b60: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 20 46 52 4f  ql {SELECT n FRO
0b70: 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 6c 6f  M t1 ORDER BY lo
0b80: 67 2c 20 66 6c 74 20 44 45 53 43 7d 0a 7d 20 7b  g, flt DESC}.} {
0b90: 31 20 33 20 32 20 37 20 36 20 34 20 35 20 38 7d  1 3 2 7 6 4 5 8}
0ba0: 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33  .do_test format3
0bb0: 2d 31 2e 39 2e 31 20 7b 0a 20 20 65 78 65 63 73  -1.9.1 {.  execs
0bc0: 71 6c 20 7b 53 45 4c 45 43 54 20 6e 20 46 52 4f  ql {SELECT n FRO
0bd0: 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 6c 6f  M t1 ORDER BY lo
0be0: 67 20 41 53 43 2c 20 66 6c 74 20 44 45 53 43 7d  g ASC, flt DESC}
0bf0: 0a 7d 20 7b 31 20 33 20 32 20 37 20 36 20 34 20  .} {1 3 2 7 6 4 
0c00: 35 20 38 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72  5 8}.do_test for
0c10: 6d 61 74 33 2d 31 2e 31 30 20 7b 0a 20 20 65 78  mat3-1.10 {.  ex
0c20: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 20  ecsql {SELECT n 
0c30: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
0c40: 20 6c 6f 67 20 44 45 53 43 2c 20 66 6c 74 7d 0a   log DESC, flt}.
0c50: 7d 20 7b 38 20 35 20 34 20 36 20 37 20 32 20 33  } {8 5 4 6 7 2 3
0c60: 20 31 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d   1}.do_test form
0c70: 61 74 33 2d 31 2e 31 31 20 7b 0a 20 20 65 78 65  at3-1.11 {.  exe
0c80: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 6e 20 46  csql {SELECT n F
0c90: 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
0ca0: 6c 6f 67 20 44 45 53 43 2c 20 66 6c 74 20 44 45  log DESC, flt DE
0cb0: 53 43 7d 0a 7d 20 7b 38 20 37 20 36 20 34 20 35  SC}.} {8 7 6 4 5
0cc0: 20 33 20 32 20 31 7d 0a 0a 23 20 54 68 65 73 65   3 2 1}..# These
0cd0: 20 74 65 73 74 73 20 61 72 65 20 64 65 73 69 67   tests are desig
0ce0: 6e 65 64 20 74 6f 20 72 65 61 63 68 20 73 6f 6d  ned to reach som
0cf0: 65 20 68 61 72 64 2d 74 6f 2d 72 65 61 63 68 20  e hard-to-reach 
0d00: 70 6c 61 63 65 73 0a 23 20 69 6e 73 69 64 65 20  places.# inside 
0d10: 74 68 65 20 73 74 72 69 6e 67 20 63 6f 6d 70 61  the string compa
0d20: 72 69 73 6f 6e 20 72 6f 75 74 69 6e 65 73 2e 0a  rison routines..
0d30: 23 0a 23 20 28 4c 61 74 65 72 29 20 54 68 65 20  #.# (Later) The 
0d40: 73 6f 72 74 69 6e 67 20 62 65 68 61 76 69 6f 72  sorting behavior
0d50: 20 63 68 61 6e 67 65 64 20 69 6e 20 32 2e 37 2e   changed in 2.7.
0d60: 30 2e 20 20 42 75 74 20 77 65 20 77 69 6c 6c 0a  0.  But we will.
0d70: 23 20 6b 65 65 70 20 74 68 65 73 65 20 74 65 73  # keep these tes
0d80: 74 73 2e 20 20 59 6f 75 20 63 61 6e 20 6e 65 76  ts.  You can nev
0d90: 65 72 20 68 61 76 65 20 74 6f 6f 20 6d 61 6e 79  er have too many
0da0: 20 74 65 73 74 20 63 61 73 65 73 21 0a 23 0a 64   test cases!.#.d
0db0: 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 32  o_test format3-2
0dc0: 2e 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  .1.1 {.  execsql
0dd0: 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74 31   {.    UPDATE t1
0de0: 20 53 45 54 20 76 3d 27 78 27 20 7c 7c 20 2d 66   SET v='x' || -f
0df0: 6c 74 3b 0a 20 20 20 20 55 50 44 41 54 45 20 74  lt;.    UPDATE t
0e00: 31 20 53 45 54 20 76 3d 27 78 2d 32 62 27 20 77  1 SET v='x-2b' w
0e10: 68 65 72 65 20 76 3d 3d 27 78 2d 30 2e 31 32 33  here v=='x-0.123
0e20: 27 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 76 20  ';.    SELECT v 
0e30: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
0e40: 20 76 3b 0a 20 20 7d 0a 7d 20 7b 78 2d 31 32 33   v;.  }.} {x-123
0e50: 20 78 2d 32 2e 31 35 20 78 2d 32 62 20 78 2d 33   x-2.15 x-2b x-3
0e60: 2e 31 34 31 35 39 32 36 35 33 20 78 2d 34 32 32  .141592653 x-422
0e70: 31 20 78 30 2e 30 30 31 33 34 34 32 20 78 31 2e  1 x0.0013442 x1.
0e80: 36 20 78 31 31 7d 0a 64 6f 5f 74 65 73 74 20 66  6 x11}.do_test f
0e90: 6f 72 6d 61 74 33 2d 32 2e 31 2e 32 20 7b 0a 20  ormat3-2.1.2 {. 
0ea0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
0eb0: 45 4c 45 43 54 20 76 20 46 52 4f 4d 20 74 31 20  ELECT v FROM t1 
0ec0: 4f 52 44 45 52 20 42 59 20 73 75 62 73 74 72 28  ORDER BY substr(
0ed0: 76 2c 32 2c 39 39 39 29 3b 0a 20 20 7d 0a 7d 20  v,2,999);.  }.} 
0ee0: 7b 78 2d 34 32 32 31 20 78 2d 31 32 33 20 78 2d  {x-4221 x-123 x-
0ef0: 33 2e 31 34 31 35 39 32 36 35 33 20 78 2d 32 2e  3.141592653 x-2.
0f00: 31 35 20 78 30 2e 30 30 31 33 34 34 32 20 78 31  15 x0.0013442 x1
0f10: 2e 36 20 78 31 31 20 78 2d 32 62 7d 0a 64 6f 5f  .6 x11 x-2b}.do_
0f20: 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 32 2e 31  test format3-2.1
0f30: 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .3 {.  execsql {
0f40: 0a 20 20 20 20 53 45 4c 45 43 54 20 76 20 46 52  .    SELECT v FR
0f50: 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 73  OM t1 ORDER BY s
0f60: 75 62 73 74 72 28 76 2c 32 2c 39 39 39 29 2b 30  ubstr(v,2,999)+0
0f70: 2e 30 3b 0a 20 20 7d 0a 7d 20 7b 78 2d 34 32 32  .0;.  }.} {x-422
0f80: 31 20 78 2d 31 32 33 20 78 2d 33 2e 31 34 31 35  1 x-123 x-3.1415
0f90: 39 32 36 35 33 20 78 2d 32 2e 31 35 20 78 2d 32  92653 x-2.15 x-2
0fa0: 62 20 78 30 2e 30 30 31 33 34 34 32 20 78 31 2e  b x0.0013442 x1.
0fb0: 36 20 78 31 31 7d 0a 64 6f 5f 74 65 73 74 20 66  6 x11}.do_test f
0fc0: 6f 72 6d 61 74 33 2d 32 2e 31 2e 34 20 7b 0a 20  ormat3-2.1.4 {. 
0fd0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
0fe0: 45 4c 45 43 54 20 76 20 46 52 4f 4d 20 74 31 20  ELECT v FROM t1 
0ff0: 4f 52 44 45 52 20 42 59 20 73 75 62 73 74 72 28  ORDER BY substr(
1000: 76 2c 32 2c 39 39 39 29 20 44 45 53 43 3b 0a 20  v,2,999) DESC;. 
1010: 20 7d 0a 7d 20 7b 78 2d 32 62 20 78 31 31 20 78   }.} {x-2b x11 x
1020: 31 2e 36 20 78 30 2e 30 30 31 33 34 34 32 20 78  1.6 x0.0013442 x
1030: 2d 32 2e 31 35 20 78 2d 33 2e 31 34 31 35 39 32  -2.15 x-3.141592
1040: 36 35 33 20 78 2d 31 32 33 20 78 2d 34 32 32 31  653 x-123 x-4221
1050: 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74  }.do_test format
1060: 33 2d 32 2e 31 2e 35 20 7b 0a 20 20 65 78 65 63  3-2.1.5 {.  exec
1070: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
1080: 20 76 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52   v FROM t1 ORDER
1090: 20 42 59 20 73 75 62 73 74 72 28 76 2c 32 2c 39   BY substr(v,2,9
10a0: 39 39 29 2b 30 2e 30 20 44 45 53 43 3b 0a 20 20  99)+0.0 DESC;.  
10b0: 7d 0a 7d 20 7b 78 31 31 20 78 31 2e 36 20 78 30  }.} {x11 x1.6 x0
10c0: 2e 30 30 31 33 34 34 32 20 78 2d 32 62 20 78 2d  .0013442 x-2b x-
10d0: 32 2e 31 35 20 78 2d 33 2e 31 34 31 35 39 32 36  2.15 x-3.1415926
10e0: 35 33 20 78 2d 31 32 33 20 78 2d 34 32 32 31 7d  53 x-123 x-4221}
10f0: 0a 0a 23 20 54 68 69 73 20 69 73 20 61 20 62 75  ..# This is a bu
1100: 67 20 66 69 78 20 66 6f 72 20 32 2e 32 2e 34 2e  g fix for 2.2.4.
1110: 0a 23 20 53 74 72 69 6e 67 73 20 61 72 65 20 6e  .# Strings are n
1120: 6f 72 6d 61 6c 6c 79 20 6d 61 70 70 65 64 20 74  ormally mapped t
1130: 6f 20 75 70 70 65 72 2d 63 61 73 65 20 66 6f 72  o upper-case for
1140: 20 61 20 63 61 73 65 6c 65 73 73 20 63 6f 6d 70   a caseless comp
1150: 61 72 69 73 6f 6e 2e 0a 23 20 42 75 74 20 74 68  arison..# But th
1160: 69 73 20 63 61 6e 20 63 61 75 73 65 20 70 72 6f  is can cause pro
1170: 62 6c 65 6d 73 20 66 6f 72 20 63 68 61 72 61 63  blems for charac
1180: 74 65 72 73 20 69 6e 20 62 65 74 77 65 65 6e 20  ters in between 
1190: 27 5a 27 20 61 6e 64 20 27 61 27 2e 0a 23 0a 64  'Z' and 'a'..#.d
11a0: 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 33  o_test format3-3
11b0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
11c0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
11d0: 45 20 74 32 28 61 2c 62 29 3b 0a 20 20 20 20 49  E t2(a,b);.    I
11e0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
11f0: 4c 55 45 53 28 27 41 47 4c 49 45 4e 54 55 27 2c  LUES('AGLIENTU',
1200: 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  1);.    INSERT I
1210: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27 41  NTO t2 VALUES('A
1220: 47 4c 49 45 60 27 2c 32 29 3b 0a 20 20 20 20 49  GLIE`',2);.    I
1230: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
1240: 4c 55 45 53 28 27 41 47 4e 41 27 2c 33 29 3b 0a  LUES('AGNA',3);.
1250: 20 20 20 20 53 45 4c 45 43 54 20 61 2c 20 62 20      SELECT a, b 
1260: 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42 59  FROM t2 ORDER BY
1270: 20 61 3b 0a 20 20 7d 0a 7d 20 7b 41 47 4c 49 45   a;.  }.} {AGLIE
1280: 4e 54 55 20 31 20 41 47 4c 49 45 60 20 32 20 41  NTU 1 AGLIE` 2 A
1290: 47 4e 41 20 33 7d 0a 64 6f 5f 74 65 73 74 20 66  GNA 3}.do_test f
12a0: 6f 72 6d 61 74 33 2d 33 2e 32 20 7b 0a 20 20 65  ormat3-3.2 {.  e
12b0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
12c0: 45 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 74 32  ECT a, b FROM t2
12d0: 20 4f 52 44 45 52 20 42 59 20 61 20 44 45 53 43   ORDER BY a DESC
12e0: 3b 0a 20 20 7d 0a 7d 20 7b 41 47 4e 41 20 33 20  ;.  }.} {AGNA 3 
12f0: 41 47 4c 49 45 60 20 32 20 41 47 4c 49 45 4e 54  AGLIE` 2 AGLIENT
1300: 55 20 31 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72  U 1}.do_test for
1310: 6d 61 74 33 2d 33 2e 33 20 7b 0a 20 20 65 78 65  mat3-3.3 {.  exe
1320: 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45 54  csql {.    DELET
1330: 45 20 46 52 4f 4d 20 74 32 3b 0a 20 20 20 20 49  E FROM t2;.    I
1340: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
1350: 4c 55 45 53 28 27 61 67 6c 69 65 6e 74 75 27 2c  LUES('aglientu',
1360: 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  1);.    INSERT I
1370: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27 61  NTO t2 VALUES('a
1380: 67 6c 69 65 60 27 2c 32 29 3b 0a 20 20 20 20 49  glie`',2);.    I
1390: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
13a0: 4c 55 45 53 28 27 61 67 6e 61 27 2c 33 29 3b 0a  LUES('agna',3);.
13b0: 20 20 20 20 53 45 4c 45 43 54 20 61 2c 20 62 20      SELECT a, b 
13c0: 46 52 4f 4d 20 74 32 20 4f 52 44 45 52 20 42 59  FROM t2 ORDER BY
13d0: 20 61 3b 0a 20 20 7d 0a 7d 20 7b 61 67 6c 69 65   a;.  }.} {aglie
13e0: 60 20 32 20 61 67 6c 69 65 6e 74 75 20 31 20 61  ` 2 aglientu 1 a
13f0: 67 6e 61 20 33 7d 0a 64 6f 5f 74 65 73 74 20 66  gna 3}.do_test f
1400: 6f 72 6d 61 74 33 2d 33 2e 34 20 7b 0a 20 20 65  ormat3-3.4 {.  e
1410: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
1420: 45 43 54 20 61 2c 20 62 20 46 52 4f 4d 20 74 32  ECT a, b FROM t2
1430: 20 4f 52 44 45 52 20 42 59 20 61 20 44 45 53 43   ORDER BY a DESC
1440: 3b 0a 20 20 7d 0a 7d 20 7b 61 67 6e 61 20 33 20  ;.  }.} {agna 3 
1450: 61 67 6c 69 65 6e 74 75 20 31 20 61 67 6c 69 65  aglientu 1 aglie
1460: 60 20 32 7d 0a 0a 23 20 56 65 72 73 69 6f 6e 20  ` 2}..# Version 
1470: 32 2e 37 2e 30 20 74 65 73 74 69 6e 67 2e 0a 23  2.7.0 testing..#
1480: 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33  .do_test format3
1490: 2d 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.1 {.  execsql
14a0: 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e   {.    INSERT IN
14b0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 39 2c 27  TO t1 VALUES(9,'
14c0: 78 32 2e 37 27 2c 33 2c 27 49 58 27 2c 34 2e 30  x2.7',3,'IX',4.0
14d0: 65 35 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  e5);.    INSERT 
14e0: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31  INTO t1 VALUES(1
14f0: 30 2c 27 78 35 2e 30 65 31 30 27 2c 33 2c 27 58  0,'x5.0e10',3,'X
1500: 27 2c 2d 34 2e 30 65 35 29 3b 0a 20 20 20 20 49  ',-4.0e5);.    I
1510: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
1520: 4c 55 45 53 28 31 31 2c 27 78 2d 34 2e 30 65 39  LUES(11,'x-4.0e9
1530: 27 2c 33 2c 27 58 49 27 2c 34 2e 31 65 34 29 3b  ',3,'XI',4.1e4);
1540: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
1550: 20 74 31 20 56 41 4c 55 45 53 28 31 32 2c 27 78   t1 VALUES(12,'x
1560: 30 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35  0123456789012345
1570: 36 37 38 39 27 2c 33 2c 27 58 49 49 27 2c 2d 34  6789',3,'XII',-4
1580: 2e 32 65 33 29 3b 0a 20 20 20 20 53 45 4c 45 43  .2e3);.    SELEC
1590: 54 20 6e 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  T n FROM t1 ORDE
15a0: 52 20 42 59 20 6e 3b 0a 20 20 7d 0a 7d 20 7b 31  R BY n;.  }.} {1
15b0: 20 32 20 33 20 34 20 35 20 36 20 37 20 38 20 39   2 3 4 5 6 7 8 9
15c0: 20 31 30 20 31 31 20 31 32 7d 0a 64 6f 5f 74 65   10 11 12}.do_te
15d0: 73 74 20 66 6f 72 6d 61 74 33 2d 34 2e 32 20 7b  st format3-4.2 {
15e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
15f0: 20 53 45 4c 45 43 54 20 6e 7c 7c 27 27 20 46 52   SELECT n||'' FR
1600: 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 31  OM t1 ORDER BY 1
1610: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32 20 33 20 34  ;.  }.} {1 2 3 4
1620: 20 35 20 36 20 37 20 38 20 39 20 31 30 20 31 31   5 6 7 8 9 10 11
1630: 20 31 32 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72   12}.do_test for
1640: 6d 61 74 33 2d 34 2e 33 20 7b 0a 20 20 65 78 65  mat3-4.3 {.  exe
1650: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
1660: 54 20 6e 2b 30 20 46 52 4f 4d 20 74 31 20 4f 52  T n+0 FROM t1 OR
1670: 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20  DER BY 1;.  }.} 
1680: 7b 31 20 32 20 33 20 34 20 35 20 36 20 37 20 38  {1 2 3 4 5 6 7 8
1690: 20 39 20 31 30 20 31 31 20 31 32 7d 0a 64 6f 5f   9 10 11 12}.do_
16a0: 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 34 2e 34  test format3-4.4
16b0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
16c0: 20 20 20 53 45 4c 45 43 54 20 6e 7c 7c 27 27 20     SELECT n||'' 
16d0: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
16e0: 20 31 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b   1 DESC;.  }.} {
16f0: 31 32 20 31 31 20 31 30 20 39 20 38 20 37 20 36  12 11 10 9 8 7 6
1700: 20 35 20 34 20 33 20 32 20 31 7d 0a 64 6f 5f 74   5 4 3 2 1}.do_t
1710: 65 73 74 20 66 6f 72 6d 61 74 33 2d 34 2e 35 20  est format3-4.5 
1720: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1730: 20 20 53 45 4c 45 43 54 20 6e 2b 30 20 46 52 4f    SELECT n+0 FRO
1740: 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 31 20  M t1 ORDER BY 1 
1750: 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 32 20  DESC;.  }.} {12 
1760: 31 31 20 31 30 20 39 20 38 20 37 20 36 20 35 20  11 10 9 8 7 6 5 
1770: 34 20 33 20 32 20 31 7d 0a 64 6f 5f 74 65 73 74  4 3 2 1}.do_test
1780: 20 66 6f 72 6d 61 74 33 2d 34 2e 36 20 7b 0a 20   format3-4.6 {. 
1790: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
17a0: 45 4c 45 43 54 20 76 20 46 52 4f 4d 20 74 31 20  ELECT v FROM t1 
17b0: 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a  ORDER BY 1;.  }.
17c0: 7d 20 7b 78 2d 31 32 33 20 78 2d 32 2e 31 35 20  } {x-123 x-2.15 
17d0: 78 2d 32 62 20 78 2d 33 2e 31 34 31 35 39 32 36  x-2b x-3.1415926
17e0: 35 33 20 78 2d 34 2e 30 65 39 20 78 2d 34 32 32  53 x-4.0e9 x-422
17f0: 31 20 78 30 2e 30 30 31 33 34 34 32 20 78 30 31  1 x0.0013442 x01
1800: 32 33 34 35 36 37 38 39 30 31 32 33 34 35 36 37  2345678901234567
1810: 38 39 20 78 31 2e 36 20 78 31 31 20 78 32 2e 37  89 x1.6 x11 x2.7
1820: 20 78 35 2e 30 65 31 30 7d 0a 64 6f 5f 74 65 73   x5.0e10}.do_tes
1830: 74 20 66 6f 72 6d 61 74 33 2d 34 2e 37 20 7b 0a  t format3-4.7 {.
1840: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1850: 53 45 4c 45 43 54 20 76 20 46 52 4f 4d 20 74 31  SELECT v FROM t1
1860: 20 4f 52 44 45 52 20 42 59 20 31 20 44 45 53 43   ORDER BY 1 DESC
1870: 3b 0a 20 20 7d 0a 7d 20 7b 78 35 2e 30 65 31 30  ;.  }.} {x5.0e10
1880: 20 78 32 2e 37 20 78 31 31 20 78 31 2e 36 20 78   x2.7 x11 x1.6 x
1890: 30 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35  0123456789012345
18a0: 36 37 38 39 20 78 30 2e 30 30 31 33 34 34 32 20  6789 x0.0013442 
18b0: 78 2d 34 32 32 31 20 78 2d 34 2e 30 65 39 20 78  x-4221 x-4.0e9 x
18c0: 2d 33 2e 31 34 31 35 39 32 36 35 33 20 78 2d 32  -3.141592653 x-2
18d0: 62 20 78 2d 32 2e 31 35 20 78 2d 31 32 33 7d 0a  b x-2.15 x-123}.
18e0: 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d  do_test format3-
18f0: 34 2e 38 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.8 {.  execsql 
1900: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 73 75 62  {.    SELECT sub
1910: 73 74 72 28 76 2c 32 2c 39 39 29 20 46 52 4f 4d  str(v,2,99) FROM
1920: 20 74 31 20 4f 52 44 45 52 20 42 59 20 31 3b 0a   t1 ORDER BY 1;.
1930: 20 20 7d 0a 7d 20 7b 2d 34 2e 30 65 39 20 2d 34    }.} {-4.0e9 -4
1940: 32 32 31 20 2d 31 32 33 20 2d 33 2e 31 34 31 35  221 -123 -3.1415
1950: 39 32 36 35 33 20 2d 32 2e 31 35 20 30 2e 30 30  92653 -2.15 0.00
1960: 31 33 34 34 32 20 31 2e 36 20 32 2e 37 20 31 31  13442 1.6 2.7 11
1970: 20 35 2e 30 65 31 30 20 30 31 32 33 34 35 36 37   5.0e10 01234567
1980: 38 39 30 31 32 33 34 35 36 37 38 39 20 2d 32 62  890123456789 -2b
1990: 7d 0a 0a 23 20 42 75 69 6c 64 20 73 6f 6d 65 20  }..# Build some 
19a0: 6e 65 77 20 74 65 73 74 20 64 61 74 61 2c 20 74  new test data, t
19b0: 68 69 73 20 74 69 6d 65 20 77 69 74 68 20 69 6e  his time with in
19c0: 64 69 63 65 73 2e 0a 23 0a 64 6f 5f 74 65 73 74  dices..#.do_test
19d0: 20 66 6f 72 6d 61 74 33 2d 35 2e 30 20 7b 0a 20   format3-5.0 {. 
19e0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44   execsql {.    D
19f0: 52 4f 50 20 54 41 42 4c 45 20 74 31 3b 0a 20 20  ROP TABLE t1;.  
1a00: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
1a10: 31 28 77 20 69 6e 74 2c 20 78 20 74 65 78 74 2c  1(w int, x text,
1a20: 20 79 20 62 6c 6f 62 29 3b 0a 20 20 20 20 44 52   y blob);.    DR
1a30: 4f 50 20 54 41 42 4c 45 20 74 32 3b 0a 20 20 20  OP TABLE t2;.   
1a40: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
1a50: 28 70 20 76 61 72 63 68 61 72 28 31 29 2c 20 71  (p varchar(1), q
1a60: 20 63 6c 6f 62 2c 20 72 20 72 65 61 6c 2c 20 73   clob, r real, s
1a70: 20 6e 75 6d 65 72 69 63 28 38 29 29 3b 0a 20 20   numeric(8));.  
1a80: 7d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 31  }.  for {set i 1
1a90: 7d 20 7b 24 69 3c 3d 31 30 30 7d 20 7b 69 6e 63  } {$i<=100} {inc
1aa0: 72 20 69 7d 20 7b 0a 20 20 20 20 73 65 74 20 77  r i} {.    set w
1ab0: 20 24 69 0a 20 20 20 20 73 65 74 20 78 20 5b 65   $i.    set x [e
1ac0: 78 70 72 20 7b 69 6e 74 28 6c 6f 67 28 24 69 29  xpr {int(log($i)
1ad0: 2f 6c 6f 67 28 32 29 29 7d 5d 0a 20 20 20 20 73  /log(2))}].    s
1ae0: 65 74 20 79 20 5b 65 78 70 72 20 7b 24 69 2a 24  et y [expr {$i*$
1af0: 69 20 2b 20 32 2a 24 69 20 2b 20 31 7d 5d 0a 20  i + 2*$i + 1}]. 
1b00: 20 20 20 65 78 65 63 73 71 6c 20 22 49 4e 53 45     execsql "INSE
1b10: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
1b20: 53 28 24 77 2c 24 78 2c 24 79 29 22 0a 20 20 7d  S($w,$x,$y)".  }
1b30: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1b40: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
1b50: 53 45 4c 45 43 54 20 31 30 31 2d 77 2c 20 78 2c  SELECT 101-w, x,
1b60: 20 28 53 45 4c 45 43 54 20 6d 61 78 28 79 29 20   (SELECT max(y) 
1b70: 46 52 4f 4d 20 74 31 29 2b 31 2d 79 2c 20 79 20  FROM t1)+1-y, y 
1b80: 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 43 52 45  FROM t1;.    CRE
1b90: 41 54 45 20 49 4e 44 45 58 20 69 31 77 20 4f 4e  ATE INDEX i1w ON
1ba0: 20 74 31 28 77 29 3b 0a 20 20 20 20 43 52 45 41   t1(w);.    CREA
1bb0: 54 45 20 49 4e 44 45 58 20 69 31 78 79 20 4f 4e  TE INDEX i1xy ON
1bc0: 20 74 31 28 78 2c 79 29 3b 0a 20 20 20 20 43 52   t1(x,y);.    CR
1bd0: 45 41 54 45 20 49 4e 44 45 58 20 69 32 70 20 4f  EATE INDEX i2p O
1be0: 4e 20 74 32 28 70 29 3b 0a 20 20 20 20 43 52 45  N t2(p);.    CRE
1bf0: 41 54 45 20 49 4e 44 45 58 20 69 32 72 20 4f 4e  ATE INDEX i2r ON
1c00: 20 74 32 28 72 29 3b 0a 20 20 20 20 43 52 45 41   t2(r);.    CREA
1c10: 54 45 20 49 4e 44 45 58 20 69 32 71 73 20 4f 4e  TE INDEX i2qs ON
1c20: 20 74 32 28 71 2c 20 73 29 3b 0a 20 20 7d 0a 7d   t2(q, s);.  }.}
1c30: 20 7b 7d 0a 0a 23 20 44 6f 20 61 6e 20 53 51 4c   {}..# Do an SQL
1c40: 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41 70 70   statement.  App
1c50: 65 6e 64 20 74 68 65 20 73 65 61 72 63 68 20 63  end the search c
1c60: 6f 75 6e 74 20 74 6f 20 74 68 65 20 65 6e 64 20  ount to the end 
1c70: 6f 66 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 23  of the result..#
1c80: 0a 70 72 6f 63 20 63 6f 75 6e 74 20 73 71 6c 20  .proc count sql 
1c90: 7b 0a 20 20 73 65 74 20 3a 3a 73 71 6c 69 74 65  {.  set ::sqlite
1ca0: 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 20 30 0a  _search_count 0.
1cb0: 20 20 72 65 74 75 72 6e 20 5b 63 6f 6e 63 61 74    return [concat
1cc0: 20 5b 65 78 65 63 73 71 6c 20 24 73 71 6c 5d 20   [execsql $sql] 
1cd0: 24 3a 3a 73 71 6c 69 74 65 5f 73 65 61 72 63 68  $::sqlite_search
1ce0: 5f 63 6f 75 6e 74 5d 0a 7d 0a 0a 23 20 56 65 72  _count].}..# Ver
1cf0: 69 66 79 20 74 68 61 74 20 71 75 65 72 69 65 73  ify that queries
1d00: 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2e 20 20   use an index.  
1d10: 57 65 20 61 72 65 20 75 73 69 6e 67 20 74 68 65  We are using the
1d20: 20 73 70 65 63 69 61 6c 20 76 61 72 69 61 62 6c   special variabl
1d30: 65 0a 23 20 22 73 71 6c 69 74 65 5f 73 65 61 72  e.# "sqlite_sear
1d40: 63 68 5f 63 6f 75 6e 74 22 20 77 68 69 63 68 20  ch_count" which 
1d50: 74 61 6c 6c 79 73 20 74 68 65 20 6e 75 6d 62 65  tallys the numbe
1d60: 72 20 6f 66 20 65 78 65 63 75 74 69 6f 6e 73 20  r of executions 
1d70: 6f 66 20 4d 6f 76 65 54 6f 0a 23 20 61 6e 64 20  of MoveTo.# and 
1d80: 4e 65 78 74 20 6f 70 65 72 61 74 6f 72 73 20 69  Next operators i
1d90: 6e 20 74 68 65 20 56 44 42 45 2e 20 20 42 79 20  n the VDBE.  By 
1da0: 76 65 72 69 66 69 6e 67 20 74 68 61 74 20 74 68  verifing that th
1db0: 65 20 73 65 61 72 63 68 20 63 6f 75 6e 74 20 69  e search count i
1dc0: 73 0a 23 20 73 6d 61 6c 6c 20 77 65 20 63 61 6e  s.# small we can
1dd0: 20 62 65 20 61 73 73 75 72 65 64 20 74 68 61 74   be assured that
1de0: 20 69 6e 64 69 63 65 73 20 61 72 65 20 62 65 69   indices are bei
1df0: 6e 67 20 75 73 65 64 20 70 72 6f 70 65 72 6c 79  ng used properly
1e00: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d  ..#.do_test form
1e10: 61 74 33 2d 35 2e 31 20 7b 0a 20 20 64 62 20 63  at3-5.1 {.  db c
1e20: 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 20 64 62  lose.  sqlite db
1e30: 20 74 65 73 74 2e 64 62 0a 20 20 63 6f 75 6e 74   test.db.  count
1e40: 20 7b 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52   {SELECT x, y FR
1e50: 4f 4d 20 74 31 20 57 48 45 52 45 20 77 3d 31 30  OM t1 WHERE w=10
1e60: 7d 0a 7d 20 7b 33 20 31 32 31 20 33 7d 0a 64 6f  }.} {3 121 3}.do
1e70: 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 35 2e  _test format3-5.
1e80: 32 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c  2 {.  count {SEL
1e90: 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 74 31  ECT x, y FROM t1
1ea0: 20 57 48 45 52 45 20 77 3d 31 31 7d 0a 7d 20 7b   WHERE w=11}.} {
1eb0: 33 20 31 34 34 20 33 7d 0a 64 6f 5f 74 65 73 74  3 144 3}.do_test
1ec0: 20 66 6f 72 6d 61 74 33 2d 35 2e 33 20 7b 0a 20   format3-5.3 {. 
1ed0: 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 78   count {SELECT x
1ee0: 2c 20 79 20 46 52 4f 4d 20 74 31 20 57 48 45 52  , y FROM t1 WHER
1ef0: 45 20 31 31 3d 77 7d 0a 7d 20 7b 33 20 31 34 34  E 11=w}.} {3 144
1f00: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d   3}.do_test form
1f10: 61 74 33 2d 35 2e 34 20 7b 0a 20 20 63 6f 75 6e  at3-5.4 {.  coun
1f20: 74 20 7b 53 45 4c 45 43 54 20 78 2c 20 79 20 46  t {SELECT x, y F
1f30: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 31 31 3d  ROM t1 WHERE 11=
1f40: 77 20 41 4e 44 20 78 3e 32 7d 0a 7d 20 7b 33 20  w AND x>2}.} {3 
1f50: 31 34 34 20 33 7d 0a 64 6f 5f 74 65 73 74 20 66  144 3}.do_test f
1f60: 6f 72 6d 61 74 33 2d 35 2e 35 20 7b 0a 20 20 63  ormat3-5.5 {.  c
1f70: 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 78 2c 20  ount {SELECT x, 
1f80: 79 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  y FROM t1 WHERE 
1f90: 79 3c 32 30 30 20 41 4e 44 20 77 3d 31 31 20 41  y<200 AND w=11 A
1fa0: 4e 44 20 78 3e 32 7d 0a 7d 20 7b 33 20 31 34 34  ND x>2}.} {3 144
1fb0: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d   3}.do_test form
1fc0: 61 74 33 2d 35 2e 36 20 7b 0a 20 20 63 6f 75 6e  at3-5.6 {.  coun
1fd0: 74 20 7b 53 45 4c 45 43 54 20 78 2c 20 79 20 46  t {SELECT x, y F
1fe0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3c 32  ROM t1 WHERE y<2
1ff0: 30 30 20 41 4e 44 20 78 3e 32 20 41 4e 44 20 77  00 AND x>2 AND w
2000: 3d 31 31 7d 0a 7d 20 7b 33 20 31 34 34 20 33 7d  =11}.} {3 144 3}
2010: 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33  .do_test format3
2020: 2d 35 2e 37 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  -5.7 {.  count {
2030: 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d  SELECT x, y FROM
2040: 20 74 31 20 57 48 45 52 45 20 77 3d 31 31 20 41   t1 WHERE w=11 A
2050: 4e 44 20 79 3c 32 30 30 20 41 4e 44 20 78 3e 32  ND y<200 AND x>2
2060: 7d 0a 7d 20 7b 33 20 31 34 34 20 33 7d 0a 64 6f  }.} {3 144 3}.do
2070: 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 35 2e  _test format3-5.
2080: 38 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c  8 {.  count {SEL
2090: 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 74 31  ECT x, y FROM t1
20a0: 20 57 48 45 52 45 20 77 3e 31 30 20 41 4e 44 20   WHERE w>10 AND 
20b0: 79 3d 31 34 34 20 41 4e 44 20 78 3d 33 7d 0a 7d  y=144 AND x=3}.}
20c0: 20 7b 33 20 31 34 34 20 33 7d 0a 64 6f 5f 74 65   {3 144 3}.do_te
20d0: 73 74 20 66 6f 72 6d 61 74 33 2d 35 2e 39 20 7b  st format3-5.9 {
20e0: 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54  .  count {SELECT
20f0: 20 78 2c 20 79 20 46 52 4f 4d 20 74 31 20 57 48   x, y FROM t1 WH
2100: 45 52 45 20 79 3d 31 34 34 20 41 4e 44 20 77 3e  ERE y=144 AND w>
2110: 31 30 20 41 4e 44 20 78 3d 33 7d 0a 7d 20 7b 33  10 AND x=3}.} {3
2120: 20 31 34 34 20 33 7d 0a 64 6f 5f 74 65 73 74 20   144 3}.do_test 
2130: 66 6f 72 6d 61 74 33 2d 35 2e 31 30 20 7b 0a 20  format3-5.10 {. 
2140: 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 78   count {SELECT x
2150: 2c 20 79 20 46 52 4f 4d 20 74 31 20 57 48 45 52  , y FROM t1 WHER
2160: 45 20 78 3d 33 20 41 4e 44 20 77 3e 3d 31 30 20  E x=3 AND w>=10 
2170: 41 4e 44 20 79 3d 31 32 31 7d 0a 7d 20 7b 33 20  AND y=121}.} {3 
2180: 31 32 31 20 33 7d 0a 64 6f 5f 74 65 73 74 20 66  121 3}.do_test f
2190: 6f 72 6d 61 74 33 2d 35 2e 31 31 20 7b 0a 20 20  ormat3-5.11 {.  
21a0: 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 78 2c  count {SELECT x,
21b0: 20 79 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   y FROM t1 WHERE
21c0: 20 78 3d 33 20 41 4e 44 20 79 3d 31 30 30 20 41   x=3 AND y=100 A
21d0: 4e 44 20 77 3c 31 30 7d 0a 7d 20 7b 33 20 31 30  ND w<10}.} {3 10
21e0: 30 20 33 7d 0a 0a 23 20 4e 65 77 20 66 6f 72 20  0 3}..# New for 
21f0: 53 51 4c 69 74 65 20 76 65 72 73 69 6f 6e 20 32  SQLite version 2
2200: 2e 31 3a 20 56 65 72 69 66 79 20 74 68 61 74 20  .1: Verify that 
2210: 74 68 61 74 20 69 6e 65 71 75 61 6c 69 74 79 20  that inequality 
2220: 63 6f 6e 73 74 72 61 69 6e 74 73 0a 23 20 61 72  constraints.# ar
2230: 65 20 75 73 65 64 20 63 6f 72 72 65 63 74 6c 79  e used correctly
2240: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d  ..#.do_test form
2250: 61 74 33 2d 35 2e 31 32 20 7b 0a 20 20 63 6f 75  at3-5.12 {.  cou
2260: 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f  nt {SELECT w FRO
2270: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41  M t1 WHERE x=3 A
2280: 4e 44 20 79 3c 31 30 30 7d 0a 7d 20 7b 38 20 33  ND y<100}.} {8 3
2290: 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74  }.do_test format
22a0: 33 2d 35 2e 31 33 20 7b 0a 20 20 63 6f 75 6e 74  3-5.13 {.  count
22b0: 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20   {SELECT w FROM 
22c0: 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44  t1 WHERE x=3 AND
22d0: 20 31 30 30 3e 79 7d 0a 7d 20 7b 38 20 33 7d 0a   100>y}.} {8 3}.
22e0: 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d  do_test format3-
22f0: 35 2e 31 34 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  5.14 {.  count {
2300: 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31  SELECT w FROM t1
2310: 20 57 48 45 52 45 20 33 3d 78 20 41 4e 44 20 79   WHERE 3=x AND y
2320: 3c 31 30 30 7d 0a 7d 20 7b 38 20 33 7d 0a 64 6f  <100}.} {8 3}.do
2330: 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 35 2e  _test format3-5.
2340: 31 35 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45  15 {.  count {SE
2350: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
2360: 48 45 52 45 20 33 3d 78 20 41 4e 44 20 31 30 30  HERE 3=x AND 100
2370: 3e 79 7d 0a 7d 20 7b 38 20 33 7d 0a 64 6f 5f 74  >y}.} {8 3}.do_t
2380: 65 73 74 20 66 6f 72 6d 61 74 33 2d 35 2e 31 36  est format3-5.16
2390: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45   {.  count {SELE
23a0: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
23b0: 52 45 20 78 3d 33 20 41 4e 44 20 79 3c 3d 31 30  RE x=3 AND y<=10
23c0: 30 7d 0a 7d 20 7b 38 20 39 20 35 7d 0a 64 6f 5f  0}.} {8 9 5}.do_
23d0: 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 35 2e 31  test format3-5.1
23e0: 37 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c  7 {.  count {SEL
23f0: 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48  ECT w FROM t1 WH
2400: 45 52 45 20 78 3d 33 20 41 4e 44 20 31 30 30 3e  ERE x=3 AND 100>
2410: 3d 79 7d 0a 7d 20 7b 38 20 39 20 35 7d 0a 64 6f  =y}.} {8 9 5}.do
2420: 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 35 2e  _test format3-5.
2430: 31 38 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45  18 {.  count {SE
2440: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
2450: 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e 32  HERE x=3 AND y>2
2460: 32 35 7d 0a 7d 20 7b 31 35 20 33 7d 0a 64 6f 5f  25}.} {15 3}.do_
2470: 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 35 2e 31  test format3-5.1
2480: 39 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c  9 {.  count {SEL
2490: 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48  ECT w FROM t1 WH
24a0: 45 52 45 20 78 3d 33 20 41 4e 44 20 32 32 35 3c  ERE x=3 AND 225<
24b0: 79 7d 0a 7d 20 7b 31 35 20 33 7d 0a 64 6f 5f 74  y}.} {15 3}.do_t
24c0: 65 73 74 20 66 6f 72 6d 61 74 33 2d 35 2e 32 30  est format3-5.20
24d0: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45   {.  count {SELE
24e0: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
24f0: 52 45 20 78 3d 33 20 41 4e 44 20 79 3e 3d 32 32  RE x=3 AND y>=22
2500: 35 7d 0a 7d 20 7b 31 34 20 31 35 20 35 7d 0a 64  5}.} {14 15 5}.d
2510: 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 35  o_test format3-5
2520: 2e 32 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53  .21 {.  count {S
2530: 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20  ELECT w FROM t1 
2540: 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20 32 32  WHERE x=3 AND 22
2550: 35 3c 3d 79 7d 0a 7d 20 7b 31 34 20 31 35 20 35  5<=y}.} {14 15 5
2560: 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74  }.do_test format
2570: 33 2d 35 2e 32 32 20 7b 0a 20 20 63 6f 75 6e 74  3-5.22 {.  count
2580: 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20   {SELECT w FROM 
2590: 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44  t1 WHERE x=3 AND
25a0: 20 79 3e 31 32 31 20 41 4e 44 20 79 3c 31 39 36   y>121 AND y<196
25b0: 7d 0a 7d 20 7b 31 31 20 31 32 20 35 7d 0a 64 6f  }.} {11 12 5}.do
25c0: 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 35 2e  _test format3-5.
25d0: 32 33 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45  23 {.  count {SE
25e0: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
25f0: 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e 3d  HERE x=3 AND y>=
2600: 31 32 31 20 41 4e 44 20 79 3c 3d 31 39 36 7d 0a  121 AND y<=196}.
2610: 7d 20 7b 31 30 20 31 31 20 31 32 20 31 33 20 39  } {10 11 12 13 9
2620: 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74  }.do_test format
2630: 33 2d 35 2e 32 34 20 7b 0a 20 20 63 6f 75 6e 74  3-5.24 {.  count
2640: 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20   {SELECT w FROM 
2650: 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44  t1 WHERE x=3 AND
2660: 20 31 32 31 3c 79 20 41 4e 44 20 31 39 36 3e 79   121<y AND 196>y
2670: 7d 0a 7d 20 7b 31 31 20 31 32 20 35 7d 0a 64 6f  }.} {11 12 5}.do
2680: 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 35 2e  _test format3-5.
2690: 32 35 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45  25 {.  count {SE
26a0: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
26b0: 48 45 52 45 20 78 3d 33 20 41 4e 44 20 31 32 31  HERE x=3 AND 121
26c0: 3c 3d 79 20 41 4e 44 20 31 39 36 3e 3d 79 7d 0a  <=y AND 196>=y}.
26d0: 7d 20 7b 31 30 20 31 31 20 31 32 20 31 33 20 39  } {10 11 12 13 9
26e0: 7d 0a 0a 23 20 4e 65 65 64 20 74 6f 20 77 6f 72  }..# Need to wor
26f0: 6b 20 6f 6e 20 6f 70 74 69 6d 69 7a 69 6e 67 20  k on optimizing 
2700: 74 68 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72  the BETWEEN oper
2710: 61 74 6f 72 2e 20 20 0a 23 0a 23 20 64 6f 5f 74  ator.  .#.# do_t
2720: 65 73 74 20 66 6f 72 6d 61 74 33 2d 35 2e 32 36  est format3-5.26
2730: 20 7b 0a 23 20 20 20 63 6f 75 6e 74 20 7b 53 45   {.#   count {SE
2740: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
2750: 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 20 42  HERE x=3 AND y B
2760: 45 54 57 45 45 4e 20 31 32 31 20 41 4e 44 20 31  ETWEEN 121 AND 1
2770: 39 36 7d 0a 23 20 7d 20 7b 31 30 20 31 31 20 31  96}.# } {10 11 1
2780: 32 20 31 33 20 39 7d 0a 0a 64 6f 5f 74 65 73 74  2 13 9}..do_test
2790: 20 66 6f 72 6d 61 74 33 2d 35 2e 32 37 20 7b 0a   format3-5.27 {.
27a0: 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20    count {SELECT 
27b0: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
27c0: 78 3d 33 20 41 4e 44 20 79 2b 31 3d 3d 31 32 32  x=3 AND y+1==122
27d0: 7d 0a 7d 20 7b 31 30 20 31 37 7d 0a 64 6f 5f 74  }.} {10 17}.do_t
27e0: 65 73 74 20 66 6f 72 6d 61 74 33 2d 35 2e 32 38  est format3-5.28
27f0: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45   {.  count {SELE
2800: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
2810: 52 45 20 78 2b 31 3d 34 20 41 4e 44 20 79 2b 31  RE x+1=4 AND y+1
2820: 3d 3d 31 32 32 7d 0a 7d 20 7b 31 30 20 39 39 7d  ==122}.} {10 99}
2830: 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33  .do_test format3
2840: 2d 35 2e 32 39 20 7b 0a 20 20 63 6f 75 6e 74 20  -5.29 {.  count 
2850: 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74  {SELECT w FROM t
2860: 31 20 57 48 45 52 45 20 79 3d 3d 31 32 31 7d 0a  1 WHERE y==121}.
2870: 7d 20 7b 31 30 20 39 39 7d 0a 0a 0a 64 6f 5f 74  } {10 99}...do_t
2880: 65 73 74 20 66 6f 72 6d 61 74 33 2d 35 2e 33 30  est format3-5.30
2890: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45   {.  count {SELE
28a0: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
28b0: 52 45 20 77 3e 39 37 7d 0a 7d 20 7b 39 38 20 39  RE w>97}.} {98 9
28c0: 39 20 31 30 30 20 36 7d 0a 64 6f 5f 74 65 73 74  9 100 6}.do_test
28d0: 20 66 6f 72 6d 61 74 33 2d 35 2e 33 31 20 7b 0a   format3-5.31 {.
28e0: 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20    count {SELECT 
28f0: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
2900: 77 3e 3d 39 37 7d 0a 7d 20 7b 39 37 20 39 38 20  w>=97}.} {97 98 
2910: 39 39 20 31 30 30 20 38 7d 0a 64 6f 5f 74 65 73  99 100 8}.do_tes
2920: 74 20 66 6f 72 6d 61 74 33 2d 35 2e 33 33 20 7b  t format3-5.33 {
2930: 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54  .  count {SELECT
2940: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
2950: 20 77 3d 3d 39 37 7d 0a 7d 20 7b 39 37 20 33 7d   w==97}.} {97 3}
2960: 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33  .do_test format3
2970: 2d 35 2e 33 34 20 7b 0a 20 20 63 6f 75 6e 74 20  -5.34 {.  count 
2980: 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74  {SELECT w FROM t
2990: 31 20 57 48 45 52 45 20 77 2b 31 3d 3d 39 38 7d  1 WHERE w+1==98}
29a0: 0a 7d 20 7b 39 37 20 39 39 7d 0a 64 6f 5f 74 65  .} {97 99}.do_te
29b0: 73 74 20 66 6f 72 6d 61 74 33 2d 35 2e 33 35 20  st format3-5.35 
29c0: 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43  {.  count {SELEC
29d0: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
29e0: 45 20 77 3c 33 7d 0a 7d 20 7b 31 20 32 20 34 7d  E w<3}.} {1 2 4}
29f0: 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33  .do_test format3
2a00: 2d 35 2e 33 36 20 7b 0a 20 20 63 6f 75 6e 74 20  -5.36 {.  count 
2a10: 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74  {SELECT w FROM t
2a20: 31 20 57 48 45 52 45 20 77 3c 3d 33 7d 0a 7d 20  1 WHERE w<=3}.} 
2a30: 7b 31 20 32 20 33 20 36 7d 0a 64 6f 5f 74 65 73  {1 2 3 6}.do_tes
2a40: 74 20 66 6f 72 6d 61 74 33 2d 35 2e 33 37 20 7b  t format3-5.37 {
2a50: 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54  .  count {SELECT
2a60: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
2a70: 20 77 2b 31 3c 3d 34 20 4f 52 44 45 52 20 42 59   w+1<=4 ORDER BY
2a80: 20 77 7d 0a 7d 20 7b 31 20 32 20 33 20 31 39 39   w}.} {1 2 3 199
2a90: 7d 0a 0a 0a 23 20 44 6f 20 74 68 65 20 73 61 6d  }...# Do the sam
2aa0: 65 20 6b 69 6e 64 20 6f 66 20 74 68 69 6e 67 20  e kind of thing 
2ab0: 65 78 63 65 70 74 20 75 73 65 20 61 20 6a 6f 69  except use a joi
2ac0: 6e 20 61 73 20 74 68 65 20 64 61 74 61 20 73 6f  n as the data so
2ad0: 75 72 63 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  urce..#.do_test 
2ae0: 66 6f 72 6d 61 74 33 2d 36 2e 31 20 7b 0a 20 20  format3-6.1 {.  
2af0: 64 62 20 63 6c 6f 73 65 0a 20 20 73 71 6c 69 74  db close.  sqlit
2b00: 65 20 64 62 20 74 65 73 74 2e 64 62 0a 20 20 63  e db test.db.  c
2b10: 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  ount {.    SELEC
2b20: 54 20 77 2c 20 70 20 46 52 4f 4d 20 74 32 2c 20  T w, p FROM t2, 
2b30: 74 31 0a 20 20 20 20 57 48 45 52 45 20 78 3d 71  t1.    WHERE x=q
2b40: 20 41 4e 44 20 79 3d 73 20 41 4e 44 20 72 3d 38   AND y=s AND r=8
2b50: 39 37 37 0a 20 20 7d 0a 7d 20 7b 33 34 20 36 37  977.  }.} {34 67
2b60: 20 36 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d   6}.do_test form
2b70: 61 74 33 2d 36 2e 32 20 7b 0a 20 20 63 6f 75 6e  at3-6.2 {.  coun
2b80: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77  t {.    SELECT w
2b90: 2c 20 70 20 46 52 4f 4d 20 74 32 2c 20 74 31 0a  , p FROM t2, t1.
2ba0: 20 20 20 20 57 48 45 52 45 20 78 3d 71 20 41 4e      WHERE x=q AN
2bb0: 44 20 73 3d 79 20 41 4e 44 20 72 3d 38 39 37 37  D s=y AND r=8977
2bc0: 0a 20 20 7d 0a 7d 20 7b 33 34 20 36 37 20 36 7d  .  }.} {34 67 6}
2bd0: 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33  .do_test format3
2be0: 2d 36 2e 33 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  -6.3 {.  count {
2bf0: 0a 20 20 20 20 53 45 4c 45 43 54 20 77 2c 20 70  .    SELECT w, p
2c00: 20 46 52 4f 4d 20 74 32 2c 20 74 31 0a 20 20 20   FROM t2, t1.   
2c10: 20 57 48 45 52 45 20 78 3d 71 20 41 4e 44 20 73   WHERE x=q AND s
2c20: 3d 79 20 41 4e 44 20 72 3d 38 39 37 37 20 41 4e  =y AND r=8977 AN
2c30: 44 20 77 3e 31 30 0a 20 20 7d 0a 7d 20 7b 33 34  D w>10.  }.} {34
2c40: 20 36 37 20 36 7d 0a 64 6f 5f 74 65 73 74 20 66   67 6}.do_test f
2c50: 6f 72 6d 61 74 33 2d 36 2e 34 20 7b 0a 20 20 63  ormat3-6.4 {.  c
2c60: 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  ount {.    SELEC
2c70: 54 20 77 2c 20 70 20 46 52 4f 4d 20 74 32 2c 20  T w, p FROM t2, 
2c80: 74 31 0a 20 20 20 20 57 48 45 52 45 20 70 3c 38  t1.    WHERE p<8
2c90: 30 20 41 4e 44 20 78 3d 71 20 41 4e 44 20 73 3d  0 AND x=q AND s=
2ca0: 79 20 41 4e 44 20 72 3d 38 39 37 37 20 41 4e 44  y AND r=8977 AND
2cb0: 20 77 3e 31 30 0a 20 20 7d 0a 7d 20 7b 33 34 20   w>10.  }.} {34 
2cc0: 36 37 20 36 7d 0a 64 6f 5f 74 65 73 74 20 66 6f  67 6}.do_test fo
2cd0: 72 6d 61 74 33 2d 36 2e 35 20 7b 0a 20 20 63 6f  rmat3-6.5 {.  co
2ce0: 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  unt {.    SELECT
2cf0: 20 77 2c 20 70 20 46 52 4f 4d 20 74 32 2c 20 74   w, p FROM t2, t
2d00: 31 0a 20 20 20 20 57 48 45 52 45 20 70 3c 38 30  1.    WHERE p<80
2d10: 20 41 4e 44 20 78 3d 71 20 41 4e 44 20 38 39 37   AND x=q AND 897
2d20: 37 3d 72 20 41 4e 44 20 73 3d 79 20 41 4e 44 20  7=r AND s=y AND 
2d30: 77 3e 31 30 0a 20 20 7d 0a 7d 20 7b 33 34 20 36  w>10.  }.} {34 6
2d40: 37 20 36 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72  7 6}.do_test for
2d50: 6d 61 74 33 2d 36 2e 36 20 7b 0a 20 20 63 6f 75  mat3-6.6 {.  cou
2d60: 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  nt {.    SELECT 
2d70: 77 2c 20 70 20 46 52 4f 4d 20 74 32 2c 20 74 31  w, p FROM t2, t1
2d80: 0a 20 20 20 20 57 48 45 52 45 20 78 3d 71 20 41  .    WHERE x=q A
2d90: 4e 44 20 70 3d 37 37 20 41 4e 44 20 73 3d 79 20  ND p=77 AND s=y 
2da0: 41 4e 44 20 77 3e 35 0a 20 20 7d 0a 7d 20 7b 32  AND w>5.  }.} {2
2db0: 34 20 37 37 20 36 7d 0a 64 6f 5f 74 65 73 74 20  4 77 6}.do_test 
2dc0: 66 6f 72 6d 61 74 33 2d 36 2e 37 20 7b 0a 20 20  format3-6.7 {.  
2dd0: 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45  count {.    SELE
2de0: 43 54 20 77 2c 20 70 20 46 52 4f 4d 20 74 31 2c  CT w, p FROM t1,
2df0: 20 74 32 0a 20 20 20 20 57 48 45 52 45 20 78 3d   t2.    WHERE x=
2e00: 71 20 41 4e 44 20 70 3e 37 37 20 41 4e 44 20 73  q AND p>77 AND s
2e10: 3d 79 20 41 4e 44 20 77 3d 35 0a 20 20 7d 0a 7d  =y AND w=5.  }.}
2e20: 20 7b 35 20 39 36 20 36 7d 0a 0a 23 20 4c 65 74   {5 96 6}..# Let
2e30: 73 20 64 6f 20 61 20 33 2d 77 61 79 20 6a 6f 69  s do a 3-way joi
2e40: 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 66 6f 72  n..#.do_test for
2e50: 6d 61 74 33 2d 37 2e 31 20 7b 0a 20 20 63 6f 75  mat3-7.1 {.  cou
2e60: 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  nt {.    SELECT 
2e70: 41 2e 77 2c 20 42 2e 70 2c 20 43 2e 77 20 46 52  A.w, B.p, C.w FR
2e80: 4f 4d 20 74 31 20 61 73 20 41 2c 20 74 32 20 61  OM t1 as A, t2 a
2e90: 73 20 42 2c 20 74 31 20 61 73 20 43 0a 20 20 20  s B, t1 as C.   
2ea0: 20 57 48 45 52 45 20 43 2e 77 3d 31 30 31 2d 42   WHERE C.w=101-B
2eb0: 2e 70 20 41 4e 44 20 42 2e 72 3d 31 30 32 30 32  .p AND B.r=10202
2ec0: 2d 41 2e 79 20 41 4e 44 20 41 2e 77 3d 31 31 0a  -A.y AND A.w=11.
2ed0: 20 20 7d 0a 7d 20 7b 31 31 20 39 30 20 31 31 20    }.} {11 90 11 
2ee0: 39 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61  9}.do_test forma
2ef0: 74 33 2d 37 2e 32 20 7b 0a 20 20 63 6f 75 6e 74  t3-7.2 {.  count
2f00: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 41 2e   {.    SELECT A.
2f10: 77 2c 20 42 2e 70 2c 20 43 2e 77 20 46 52 4f 4d  w, B.p, C.w FROM
2f20: 20 74 31 20 61 73 20 41 2c 20 74 32 20 61 73 20   t1 as A, t2 as 
2f30: 42 2c 20 74 31 20 61 73 20 43 0a 20 20 20 20 57  B, t1 as C.    W
2f40: 48 45 52 45 20 43 2e 77 3d 31 30 31 2d 42 2e 70  HERE C.w=101-B.p
2f50: 20 41 4e 44 20 42 2e 72 3d 31 30 32 30 32 2d 41   AND B.r=10202-A
2f60: 2e 79 20 41 4e 44 20 41 2e 77 3d 31 32 0a 20 20  .y AND A.w=12.  
2f70: 7d 0a 7d 20 7b 31 32 20 38 39 20 31 32 20 39 7d  }.} {12 89 12 9}
2f80: 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33  .do_test format3
2f90: 2d 37 2e 33 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  -7.3 {.  count {
2fa0: 0a 20 20 20 20 53 45 4c 45 43 54 20 41 2e 77 2c  .    SELECT A.w,
2fb0: 20 42 2e 70 2c 20 43 2e 77 20 46 52 4f 4d 20 74   B.p, C.w FROM t
2fc0: 31 20 61 73 20 41 2c 20 74 32 20 61 73 20 42 2c  1 as A, t2 as B,
2fd0: 20 74 31 20 61 73 20 43 0a 20 20 20 20 57 48 45   t1 as C.    WHE
2fe0: 52 45 20 41 2e 77 3d 31 35 20 41 4e 44 20 42 2e  RE A.w=15 AND B.
2ff0: 70 3d 43 2e 77 20 41 4e 44 20 42 2e 72 3d 31 30  p=C.w AND B.r=10
3000: 32 30 32 2d 41 2e 79 0a 20 20 7d 0a 7d 20 7b 31  202-A.y.  }.} {1
3010: 35 20 38 36 20 38 36 20 39 7d 0a 0a 23 20 54 65  5 86 86 9}..# Te
3020: 73 74 20 74 6f 20 73 65 65 20 74 68 61 74 20 74  st to see that t
3030: 68 65 20 73 70 65 63 69 61 6c 20 63 61 73 65 20  he special case 
3040: 6f 66 20 61 20 63 6f 6e 73 74 61 6e 74 20 57 48  of a constant WH
3050: 45 52 45 20 63 6c 61 75 73 65 20 69 73 0a 23 20  ERE clause is.# 
3060: 68 61 6e 64 6c 65 64 2e 0a 23 0a 64 6f 5f 74 65  handled..#.do_te
3070: 73 74 20 66 6f 72 6d 61 74 33 2d 38 2e 31 20 7b  st format3-8.1 {
3080: 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53  .  count {.    S
3090: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
30a0: 57 48 45 52 45 20 30 0a 20 20 7d 0a 7d 20 7b 30  WHERE 0.  }.} {0
30b0: 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74  }.do_test format
30c0: 33 2d 38 2e 32 20 7b 0a 20 20 63 6f 75 6e 74 20  3-8.2 {.  count 
30d0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
30e0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 31 20 4c  ROM t1 WHERE 1 L
30f0: 49 4d 49 54 20 31 0a 20 20 7d 0a 7d 20 7b 31 20  IMIT 1.  }.} {1 
3100: 30 20 34 20 31 7d 0a 64 6f 5f 74 65 73 74 20 66  0 4 1}.do_test f
3110: 6f 72 6d 61 74 33 2d 38 2e 33 20 7b 0a 20 20 65  ormat3-8.3 {.  e
3120: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
3130: 45 43 54 20 39 39 20 57 48 45 52 45 20 30 0a 20  ECT 99 WHERE 0. 
3140: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
3150: 66 6f 72 6d 61 74 33 2d 38 2e 34 20 7b 0a 20 20  format3-8.4 {.  
3160: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
3170: 4c 45 43 54 20 39 39 20 57 48 45 52 45 20 31 0a  LECT 99 WHERE 1.
3180: 20 20 7d 0a 7d 20 7b 39 39 7d 0a 0a 23 20 56 65    }.} {99}..# Ve
3190: 72 69 66 79 20 74 68 61 74 20 49 4e 20 6f 70 65  rify that IN ope
31a0: 72 61 74 6f 72 73 20 69 6e 20 61 20 57 48 45 52  rators in a WHER
31b0: 45 20 63 6c 61 75 73 65 20 61 72 65 20 68 61 6e  E clause are han
31c0: 64 6c 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a  dled correctly..
31d0: 23 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74  #.do_test format
31e0: 33 2d 39 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 20  3-9.1 {.  count 
31f0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
3200: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 72 6f 77  ROM t1 WHERE row
3210: 69 64 20 49 4e 20 28 31 2c 32 2c 33 2c 31 32 33  id IN (1,2,3,123
3220: 34 29 20 6f 72 64 65 72 20 62 79 20 31 3b 0a 20  4) order by 1;. 
3230: 20 7d 0a 7d 20 7b 31 20 30 20 34 20 32 20 31 20   }.} {1 0 4 2 1 
3240: 39 20 33 20 31 20 31 36 20 30 7d 0a 64 6f 5f 74  9 3 1 16 0}.do_t
3250: 65 73 74 20 66 6f 72 6d 61 74 33 2d 39 2e 32 20  est format3-9.2 
3260: 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20  {.  count {.    
3270: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
3280: 20 57 48 45 52 45 20 72 6f 77 69 64 2b 30 20 49   WHERE rowid+0 I
3290: 4e 20 28 31 2c 32 2c 33 2c 31 32 33 34 29 20 6f  N (1,2,3,1234) o
32a0: 72 64 65 72 20 62 79 20 31 3b 0a 20 20 7d 0a 7d  rder by 1;.  }.}
32b0: 20 7b 31 20 30 20 34 20 32 20 31 20 39 20 33 20   {1 0 4 2 1 9 3 
32c0: 31 20 31 36 20 31 39 39 7d 0a 64 6f 5f 74 65 73  1 16 199}.do_tes
32d0: 74 20 66 6f 72 6d 61 74 33 2d 39 2e 33 20 7b 0a  t format3-9.3 {.
32e0: 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45    count {.    SE
32f0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
3300: 48 45 52 45 20 77 20 49 4e 20 28 2d 31 2c 31 2c  HERE w IN (-1,1,
3310: 32 2c 33 29 20 6f 72 64 65 72 20 62 79 20 31 3b  2,3) order by 1;
3320: 0a 20 20 7d 0a 7d 20 7b 31 20 30 20 34 20 32 20  .  }.} {1 0 4 2 
3330: 31 20 39 20 33 20 31 20 31 36 20 31 30 7d 0a 64  1 9 3 1 16 10}.d
3340: 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 39  o_test format3-9
3350: 2e 34 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20  .4 {.  count {. 
3360: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
3370: 20 74 31 20 57 48 45 52 45 20 77 2b 30 20 49 4e   t1 WHERE w+0 IN
3380: 20 28 2d 31 2c 31 2c 32 2c 33 29 20 6f 72 64 65   (-1,1,2,3) orde
3390: 72 20 62 79 20 31 3b 0a 20 20 7d 0a 7d 20 7b 31  r by 1;.  }.} {1
33a0: 20 30 20 34 20 32 20 31 20 39 20 33 20 31 20 31   0 4 2 1 9 3 1 1
33b0: 36 20 31 39 39 7d 0a 64 6f 5f 74 65 73 74 20 66  6 199}.do_test f
33c0: 6f 72 6d 61 74 33 2d 39 2e 35 20 7b 0a 20 20 63  ormat3-9.5 {.  c
33d0: 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  ount {.    SELEC
33e0: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
33f0: 45 20 72 6f 77 69 64 20 49 4e 20 0a 20 20 20 20  E rowid IN .    
3400: 20 20 20 28 73 65 6c 65 63 74 20 72 6f 77 69 64     (select rowid
3410: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 72   from t1 where r
3420: 6f 77 69 64 20 49 4e 20 28 2d 31 2c 32 2c 34 29  owid IN (-1,2,4)
3430: 29 0a 20 20 20 20 4f 52 44 45 52 20 42 59 20 31  ).    ORDER BY 1
3440: 3b 0a 20 20 7d 0a 7d 20 7b 32 20 31 20 39 20 34  ;.  }.} {2 1 9 4
3450: 20 32 20 32 35 20 31 7d 0a 64 6f 5f 74 65 73 74   2 25 1}.do_test
3460: 20 66 6f 72 6d 61 74 33 2d 39 2e 36 20 7b 0a 20   format3-9.6 {. 
3470: 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c   count {.    SEL
3480: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
3490: 45 52 45 20 72 6f 77 69 64 2b 30 20 49 4e 20 0a  ERE rowid+0 IN .
34a0: 20 20 20 20 20 20 20 28 73 65 6c 65 63 74 20 72         (select r
34b0: 6f 77 69 64 20 66 72 6f 6d 20 74 31 20 77 68 65  owid from t1 whe
34c0: 72 65 20 72 6f 77 69 64 20 49 4e 20 28 2d 31 2c  re rowid IN (-1,
34d0: 32 2c 34 29 29 0a 20 20 20 20 4f 52 44 45 52 20  2,4)).    ORDER 
34e0: 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 32 20 31  BY 1;.  }.} {2 1
34f0: 20 39 20 34 20 32 20 32 35 20 31 39 39 7d 0a 64   9 4 2 25 199}.d
3500: 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 39  o_test format3-9
3510: 2e 37 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20  .7 {.  count {. 
3520: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
3530: 20 74 31 20 57 48 45 52 45 20 77 20 49 4e 20 0a   t1 WHERE w IN .
3540: 20 20 20 20 20 20 20 28 73 65 6c 65 63 74 20 72         (select r
3550: 6f 77 69 64 20 66 72 6f 6d 20 74 31 20 77 68 65  owid from t1 whe
3560: 72 65 20 72 6f 77 69 64 20 49 4e 20 28 2d 31 2c  re rowid IN (-1,
3570: 32 2c 34 29 29 0a 20 20 20 20 4f 52 44 45 52 20  2,4)).    ORDER 
3580: 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 32 20 31  BY 1;.  }.} {2 1
3590: 20 39 20 34 20 32 20 32 35 20 37 7d 0a 64 6f 5f   9 4 2 25 7}.do_
35a0: 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 39 2e 38  test format3-9.8
35b0: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20   {.  count {.   
35c0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
35d0: 31 20 57 48 45 52 45 20 77 2b 30 20 49 4e 20 0a  1 WHERE w+0 IN .
35e0: 20 20 20 20 20 20 20 28 73 65 6c 65 63 74 20 72         (select r
35f0: 6f 77 69 64 20 66 72 6f 6d 20 74 31 20 77 68 65  owid from t1 whe
3600: 72 65 20 72 6f 77 69 64 20 49 4e 20 28 2d 31 2c  re rowid IN (-1,
3610: 32 2c 34 29 29 0a 20 20 20 20 4f 52 44 45 52 20  2,4)).    ORDER 
3620: 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 32 20 31  BY 1;.  }.} {2 1
3630: 20 39 20 34 20 32 20 32 35 20 31 39 39 7d 0a 64   9 4 2 25 199}.d
3640: 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 39  o_test format3-9
3650: 2e 39 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20  .9 {.  count {. 
3660: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
3670: 20 74 31 20 57 48 45 52 45 20 78 20 49 4e 20 28   t1 WHERE x IN (
3680: 31 2c 37 29 20 4f 52 44 45 52 20 42 59 20 31 3b  1,7) ORDER BY 1;
3690: 0a 20 20 7d 0a 7d 20 7b 32 20 31 20 39 20 33 20  .  }.} {2 1 9 3 
36a0: 31 20 31 36 20 36 7d 0a 64 6f 5f 74 65 73 74 20  1 16 6}.do_test 
36b0: 66 6f 72 6d 61 74 33 2d 39 2e 31 30 20 7b 0a 20  format3-9.10 {. 
36c0: 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c   count {.    SEL
36d0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
36e0: 45 52 45 20 78 2b 30 20 49 4e 20 28 31 2c 37 29  ERE x+0 IN (1,7)
36f0: 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d   ORDER BY 1;.  }
3700: 0a 7d 20 7b 32 20 31 20 39 20 33 20 31 20 31 36  .} {2 1 9 3 1 16
3710: 20 31 39 39 7d 0a 64 6f 5f 74 65 73 74 20 66 6f   199}.do_test fo
3720: 72 6d 61 74 33 2d 39 2e 31 31 20 7b 0a 20 20 63  rmat3-9.11 {.  c
3730: 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  ount {.    SELEC
3740: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
3750: 45 20 79 20 49 4e 20 28 36 34 30 30 2c 38 31 30  E y IN (6400,810
3760: 30 29 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20  0) ORDER BY 1;. 
3770: 20 7d 0a 7d 20 7b 37 39 20 36 20 36 34 30 30 20   }.} {79 6 6400 
3780: 38 39 20 36 20 38 31 30 30 20 31 39 39 7d 0a 64  89 6 8100 199}.d
3790: 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 39  o_test format3-9
37a0: 2e 31 32 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a  .12 {.  count {.
37b0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
37c0: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 36 20 41  M t1 WHERE x=6 A
37d0: 4e 44 20 79 20 49 4e 20 28 36 34 30 30 2c 38 31  ND y IN (6400,81
37e0: 30 30 29 20 4f 52 44 45 52 20 42 59 20 31 3b 0a  00) ORDER BY 1;.
37f0: 20 20 7d 0a 7d 20 7b 37 39 20 36 20 36 34 30 30    }.} {79 6 6400
3800: 20 38 39 20 36 20 38 31 30 30 20 37 34 7d 0a 64   89 6 8100 74}.d
3810: 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 39  o_test format3-9
3820: 2e 31 33 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a  .13 {.  count {.
3830: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
3840: 4d 20 74 31 20 57 48 45 52 45 20 78 20 49 4e 20  M t1 WHERE x IN 
3850: 28 31 2c 37 29 20 41 4e 44 20 79 20 4e 4f 54 20  (1,7) AND y NOT 
3860: 49 4e 20 28 36 34 30 30 2c 38 31 30 30 29 20 4f  IN (6400,8100) O
3870: 52 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d  RDER BY 1;.  }.}
3880: 20 7b 32 20 31 20 39 20 33 20 31 20 31 36 20 36   {2 1 9 3 1 16 6
3890: 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74  }.do_test format
38a0: 33 2d 39 2e 31 34 20 7b 0a 20 20 63 6f 75 6e 74  3-9.14 {.  count
38b0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
38c0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20  FROM t1 WHERE x 
38d0: 49 4e 20 28 31 2c 37 29 20 41 4e 44 20 79 20 49  IN (1,7) AND y I
38e0: 4e 20 28 39 2c 31 30 29 20 4f 52 44 45 52 20 42  N (9,10) ORDER B
38f0: 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 32 20 31 20  Y 1;.  }.} {2 1 
3900: 39 20 36 7d 0a 0a 23 20 54 68 69 73 20 70 72 6f  9 6}..# This pro
3910: 63 65 64 75 72 65 20 65 78 65 63 75 74 65 73 20  cedure executes 
3920: 74 68 65 20 53 51 4c 2e 20 20 54 68 65 6e 20 69  the SQL.  Then i
3930: 74 20 63 68 65 63 6b 73 20 74 68 65 20 67 65 6e  t checks the gen
3940: 65 72 61 74 65 64 20 70 72 6f 67 72 61 6d 0a 23  erated program.#
3950: 20 66 6f 72 20 74 68 65 20 53 51 4c 20 61 6e 64   for the SQL and
3960: 20 61 70 70 65 6e 64 73 20 61 20 22 6e 6f 73 6f   appends a "noso
3970: 72 74 22 20 74 6f 20 74 68 65 20 72 65 73 75 6c  rt" to the resul
3980: 74 20 69 66 20 74 68 65 20 70 72 6f 67 72 61 6d  t if the program
3990: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0a 23 20   contains the.# 
39a0: 53 6f 72 74 43 61 6c 6c 62 61 63 6b 20 6f 70 63  SortCallback opc
39b0: 6f 64 65 2e 20 20 49 66 20 74 68 65 20 70 72 6f  ode.  If the pro
39c0: 67 72 61 6d 20 64 6f 65 73 20 6e 6f 74 20 63 6f  gram does not co
39d0: 6e 74 61 69 6e 20 74 68 65 20 53 6f 72 74 43 61  ntain the SortCa
39e0: 6c 6c 62 61 63 6b 0a 23 20 6f 70 63 6f 64 65 20  llback.# opcode 
39f0: 69 74 20 61 70 70 65 6e 64 73 20 22 73 6f 72 74  it appends "sort
3a00: 22 0a 23 0a 70 72 6f 63 20 63 6b 73 6f 72 74 20  ".#.proc cksort 
3a10: 7b 73 71 6c 7d 20 7b 0a 20 20 73 65 74 20 64 61  {sql} {.  set da
3a20: 74 61 20 5b 65 78 65 63 73 71 6c 20 24 73 71 6c  ta [execsql $sql
3a30: 5d 0a 20 20 73 65 74 20 70 72 6f 67 20 5b 65 78  ].  set prog [ex
3a40: 65 63 73 71 6c 20 22 45 58 50 4c 41 49 4e 20 24  ecsql "EXPLAIN $
3a50: 73 71 6c 22 5d 0a 20 20 69 66 20 7b 5b 72 65 67  sql"].  if {[reg
3a60: 65 78 70 20 53 6f 72 74 43 61 6c 6c 62 61 63 6b  exp SortCallback
3a70: 20 24 70 72 6f 67 5d 7d 20 7b 73 65 74 20 78 20   $prog]} {set x 
3a80: 73 6f 72 74 7d 20 7b 73 65 74 20 78 20 6e 6f 73  sort} {set x nos
3a90: 6f 72 74 7d 0a 20 20 6c 61 70 70 65 6e 64 20 64  ort}.  lappend d
3aa0: 61 74 61 20 24 78 0a 20 20 72 65 74 75 72 6e 20  ata $x.  return 
3ab0: 24 64 61 74 61 0a 7d 0a 23 20 43 68 65 63 6b 20  $data.}.# Check 
3ac0: 6f 75 74 20 74 68 65 20 6c 6f 67 69 63 20 74 68  out the logic th
3ad0: 61 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20 69  at attempts to i
3ae0: 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 4f 52 44  mplement the ORD
3af0: 45 52 20 42 59 20 63 6c 61 75 73 65 0a 23 20 75  ER BY clause.# u
3b00: 73 69 6e 67 20 61 6e 20 69 6e 64 65 78 20 72 61  sing an index ra
3b10: 74 68 65 72 20 74 68 61 6e 20 62 79 20 73 6f 72  ther than by sor
3b20: 74 69 6e 67 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  ting..#.do_test 
3b30: 66 6f 72 6d 61 74 33 2d 31 30 2e 31 20 7b 0a 20  format3-10.1 {. 
3b40: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
3b50: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61  REATE TABLE t3(a
3b60: 2c 62 2c 63 29 3b 0a 20 20 20 20 43 52 45 41 54  ,b,c);.    CREAT
3b70: 45 20 49 4e 44 45 58 20 74 33 61 20 4f 4e 20 74  E INDEX t3a ON t
3b80: 33 28 61 29 3b 0a 20 20 20 20 43 52 45 41 54 45  3(a);.    CREATE
3b90: 20 49 4e 44 45 58 20 74 33 62 63 20 4f 4e 20 74   INDEX t3bc ON t
3ba0: 33 28 62 2c 63 29 3b 0a 20 20 20 20 43 52 45 41  3(b,c);.    CREA
3bb0: 54 45 20 49 4e 44 45 58 20 74 33 61 63 62 20 4f  TE INDEX t3acb O
3bc0: 4e 20 74 33 28 61 2c 63 2c 62 29 3b 0a 20 20 20  N t3(a,c,b);.   
3bd0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20   INSERT INTO t3 
3be0: 53 45 4c 45 43 54 20 77 2c 20 31 30 31 2d 77 2c  SELECT w, 101-w,
3bf0: 20 79 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20   y FROM t1;.    
3c00: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 2c  SELECT count(*),
3c10: 20 73 75 6d 28 61 29 2c 20 73 75 6d 28 62 29 2c   sum(a), sum(b),
3c20: 20 73 75 6d 28 63 29 20 46 52 4f 4d 20 74 33 3b   sum(c) FROM t3;
3c30: 0a 20 20 7d 0a 7d 20 7b 31 30 30 20 35 30 35 30  .  }.} {100 5050
3c40: 20 35 30 35 30 20 33 34 38 35 35 30 7d 0a 64 6f   5050 348550}.do
3c50: 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 31 30  _test format3-10
3c60: 2e 32 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .2 {.  cksort {.
3c70: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
3c80: 4d 20 74 33 20 4f 52 44 45 52 20 42 59 20 61 20  M t3 ORDER BY a 
3c90: 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31  LIMIT 3.  }.} {1
3ca0: 20 31 30 30 20 34 20 32 20 39 39 20 39 20 33 20   100 4 2 99 9 3 
3cb0: 39 38 20 31 36 20 6e 6f 73 6f 72 74 7d 0a 64 6f  98 16 nosort}.do
3cc0: 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 31 30  _test format3-10
3cd0: 2e 33 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .3 {.  cksort {.
3ce0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
3cf0: 4d 20 74 33 20 4f 52 44 45 52 20 42 59 20 61 2b  M t3 ORDER BY a+
3d00: 31 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20  1 LIMIT 3.  }.} 
3d10: 7b 31 20 31 30 30 20 34 20 32 20 39 39 20 39 20  {1 100 4 2 99 9 
3d20: 33 20 39 38 20 31 36 20 73 6f 72 74 7d 0a 64 6f  3 98 16 sort}.do
3d30: 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 31 30  _test format3-10
3d40: 2e 34 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .4 {.  cksort {.
3d50: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
3d60: 4d 20 74 33 20 57 48 45 52 45 20 61 3c 31 30 20  M t3 WHERE a<10 
3d70: 4f 52 44 45 52 20 42 59 20 61 20 4c 49 4d 49 54  ORDER BY a LIMIT
3d80: 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20   3.  }.} {1 100 
3d90: 34 20 32 20 39 39 20 39 20 33 20 39 38 20 31 36  4 2 99 9 3 98 16
3da0: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
3db0: 20 66 6f 72 6d 61 74 33 2d 31 30 2e 35 20 7b 0a   format3-10.5 {.
3dc0: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
3dd0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
3de0: 57 48 45 52 45 20 61 3e 30 20 41 4e 44 20 61 3c  WHERE a>0 AND a<
3df0: 31 30 20 4f 52 44 45 52 20 42 59 20 61 20 4c 49  10 ORDER BY a LI
3e00: 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31  MIT 3.  }.} {1 1
3e10: 30 30 20 34 20 32 20 39 39 20 39 20 33 20 39 38  00 4 2 99 9 3 98
3e20: 20 31 36 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74   16 nosort}.do_t
3e30: 65 73 74 20 66 6f 72 6d 61 74 33 2d 31 30 2e 36  est format3-10.6
3e40: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
3e50: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
3e60: 74 33 20 57 48 45 52 45 20 61 3e 30 20 4f 52 44  t3 WHERE a>0 ORD
3e70: 45 52 20 42 59 20 61 20 4c 49 4d 49 54 20 33 0a  ER BY a LIMIT 3.
3e80: 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20 32    }.} {1 100 4 2
3e90: 20 39 39 20 39 20 33 20 39 38 20 31 36 20 6e 6f   99 9 3 98 16 no
3ea0: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 66 6f  sort}.do_test fo
3eb0: 72 6d 61 74 33 2d 31 30 2e 37 20 7b 0a 20 20 63  rmat3-10.7 {.  c
3ec0: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
3ed0: 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45  CT * FROM t3 WHE
3ee0: 52 45 20 62 3e 30 20 4f 52 44 45 52 20 42 59 20  RE b>0 ORDER BY 
3ef0: 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20  a LIMIT 3.  }.} 
3f00: 7b 31 20 31 30 30 20 34 20 32 20 39 39 20 39 20  {1 100 4 2 99 9 
3f10: 33 20 39 38 20 31 36 20 73 6f 72 74 7d 0a 64 6f  3 98 16 sort}.do
3f20: 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 31 30  _test format3-10
3f30: 2e 38 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .8 {.  cksort {.
3f40: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
3f50: 4d 20 74 33 20 57 48 45 52 45 20 61 20 49 4e 20  M t3 WHERE a IN 
3f60: 28 33 2c 35 2c 37 2c 31 2c 39 2c 34 2c 32 29 20  (3,5,7,1,9,4,2) 
3f70: 4f 52 44 45 52 20 42 59 20 61 20 4c 49 4d 49 54  ORDER BY a LIMIT
3f80: 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20   3.  }.} {1 100 
3f90: 34 20 32 20 39 39 20 39 20 33 20 39 38 20 31 36  4 2 99 9 3 98 16
3fa0: 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 66   sort}.do_test f
3fb0: 6f 72 6d 61 74 33 2d 31 30 2e 39 20 7b 0a 20 20  ormat3-10.9 {.  
3fc0: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
3fd0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48  ECT * FROM t3 WH
3fe0: 45 52 45 20 61 3d 31 20 41 4e 44 20 63 3e 30 20  ERE a=1 AND c>0 
3ff0: 4f 52 44 45 52 20 42 59 20 61 20 4c 49 4d 49 54  ORDER BY a LIMIT
4000: 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20   3.  }.} {1 100 
4010: 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  4 nosort}.do_tes
4020: 74 20 66 6f 72 6d 61 74 33 2d 31 30 2e 31 30 20  t format3-10.10 
4030: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
4040: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
4050: 33 20 57 48 45 52 45 20 61 3d 31 20 41 4e 44 20  3 WHERE a=1 AND 
4060: 63 3e 30 20 4f 52 44 45 52 20 42 59 20 61 20 4c  c>0 ORDER BY a L
4070: 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20  IMIT 3.  }.} {1 
4080: 31 30 30 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f  100 4 nosort}.do
4090: 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 31 30  _test format3-10
40a0: 2e 31 31 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  .11 {.  cksort {
40b0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
40c0: 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d 31 20  OM t3 WHERE a=1 
40d0: 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20 42 59  AND c>0 ORDER BY
40e0: 20 61 2c 63 20 4c 49 4d 49 54 20 33 0a 20 20 7d   a,c LIMIT 3.  }
40f0: 0a 7d 20 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f  .} {1 100 4 noso
4100: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d  rt}.do_test form
4110: 61 74 33 2d 31 30 2e 31 32 20 7b 0a 20 20 63 6b  at3-10.12 {.  ck
4120: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
4130: 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52  T * FROM t3 WHER
4140: 45 20 61 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52  E a=1 AND c>0 OR
4150: 44 45 52 20 42 59 20 61 2c 63 2c 62 20 4c 49 4d  DER BY a,c,b LIM
4160: 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30  IT 3.  }.} {1 10
4170: 30 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74  0 4 nosort}.do_t
4180: 65 73 74 20 66 6f 72 6d 61 74 33 2d 31 30 2e 31  est format3-10.1
4190: 33 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  3 {.  cksort {. 
41a0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
41b0: 20 74 33 20 57 48 45 52 45 20 61 3e 30 20 4f 52   t3 WHERE a>0 OR
41c0: 44 45 52 20 42 59 20 61 20 44 45 53 43 20 4c 49  DER BY a DESC LI
41d0: 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 30 30  MIT 3.  }.} {100
41e0: 20 31 20 31 30 32 30 31 20 39 39 20 32 20 31 30   1 10201 99 2 10
41f0: 30 30 30 20 39 38 20 33 20 39 38 30 31 20 73 6f  000 98 3 9801 so
4200: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d  rt}.do_test form
4210: 61 74 33 2d 31 30 2e 31 34 20 7b 0a 20 20 63 6b  at3-10.14 {.  ck
4220: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
4230: 54 20 2a 20 46 52 4f 4d 20 74 33 20 4f 52 44 45  T * FROM t3 ORDE
4240: 52 20 42 59 20 62 20 4c 49 4d 49 54 20 33 0a 20  R BY b LIMIT 3. 
4250: 20 7d 0a 7d 20 7b 31 30 30 20 31 20 31 30 32 30   }.} {100 1 1020
4260: 31 20 39 39 20 32 20 31 30 30 30 30 20 39 38 20  1 99 2 10000 98 
4270: 33 20 39 38 30 31 20 6e 6f 73 6f 72 74 7d 0a 64  3 9801 nosort}.d
4280: 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 31  o_test format3-1
4290: 30 2e 31 35 20 7b 0a 20 20 63 6b 73 6f 72 74 20  0.15 {.  cksort 
42a0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 74 33 2e  {.    SELECT t3.
42b0: 61 2c 20 74 31 2e 78 20 46 52 4f 4d 20 74 33 2c  a, t1.x FROM t3,
42c0: 20 74 31 20 57 48 45 52 45 20 74 33 2e 61 3d 74   t1 WHERE t3.a=t
42d0: 31 2e 77 20 4f 52 44 45 52 20 42 59 20 74 33 2e  1.w ORDER BY t3.
42e0: 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20  a LIMIT 3.  }.} 
42f0: 7b 31 20 30 20 32 20 31 20 33 20 31 20 6e 6f 73  {1 0 2 1 3 1 nos
4300: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 66 6f 72  ort}.do_test for
4310: 6d 61 74 33 2d 31 30 2e 31 36 20 7b 0a 20 20 63  mat3-10.16 {.  c
4320: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
4330: 43 54 20 74 33 2e 61 2c 20 74 31 2e 78 20 46 52  CT t3.a, t1.x FR
4340: 4f 4d 20 74 33 2c 20 74 31 20 57 48 45 52 45 20  OM t3, t1 WHERE 
4350: 74 33 2e 61 3d 74 31 2e 77 20 4f 52 44 45 52 20  t3.a=t1.w ORDER 
4360: 42 59 20 74 31 2e 78 2c 20 74 33 2e 61 20 4c 49  BY t1.x, t3.a LI
4370: 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 30  MIT 3.  }.} {1 0
4380: 20 32 20 31 20 33 20 31 20 73 6f 72 74 7d 0a 64   2 1 3 1 sort}.d
4390: 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 31  o_test format3-1
43a0: 30 2e 31 37 20 7b 0a 20 20 63 6b 73 6f 72 74 20  0.17 {.  cksort 
43b0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 79 20 46  {.    SELECT y F
43c0: 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
43d0: 77 20 43 4f 4c 4c 41 54 45 20 74 65 78 74 20 4c  w COLLATE text L
43e0: 49 4d 49 54 20 33 3b 0a 20 20 7d 0a 7d 20 7b 34  IMIT 3;.  }.} {4
43f0: 20 31 32 31 20 31 30 32 30 31 20 73 6f 72 74 7d   121 10201 sort}
4400: 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33  .do_test format3
4410: 2d 31 30 2e 31 38 20 7b 0a 20 20 63 6b 73 6f 72  -10.18 {.  cksor
4420: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 79  t {.    SELECT y
4430: 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42   FROM t1 ORDER B
4440: 59 20 77 20 43 4f 4c 4c 41 54 45 20 6e 75 6d 65  Y w COLLATE nume
4450: 72 69 63 20 4c 49 4d 49 54 20 33 3b 0a 20 20 7d  ric LIMIT 3;.  }
4460: 0a 7d 20 7b 34 20 39 20 31 36 20 73 6f 72 74 7d  .} {4 9 16 sort}
4470: 0a 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33  .do_test format3
4480: 2d 31 30 2e 31 39 20 7b 0a 20 20 63 6b 73 6f 72  -10.19 {.  cksor
4490: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 79  t {.    SELECT y
44a0: 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42   FROM t1 ORDER B
44b0: 59 20 77 20 4c 49 4d 49 54 20 33 3b 0a 20 20 7d  Y w LIMIT 3;.  }
44c0: 0a 7d 20 7b 34 20 39 20 31 36 20 6e 6f 73 6f 72  .} {4 9 16 nosor
44d0: 74 7d 0a 0a 23 20 43 68 65 63 6b 20 74 68 61 74  t}..# Check that
44e0: 20 61 6c 6c 20 63 6f 6d 70 61 72 69 73 6f 6e 73   all comparisons
44f0: 20 61 72 65 20 6e 75 6d 65 72 69 63 2e 20 20 53   are numeric.  S
4500: 69 6d 69 6c 61 72 20 74 65 73 74 73 20 69 6e 20  imilar tests in 
4510: 6d 69 73 63 31 2e 74 65 73 74 0a 23 20 63 68 65  misc1.test.# che
4520: 63 6b 20 74 68 65 20 73 61 6d 65 20 63 6f 6d 70  ck the same comp
4530: 61 72 69 73 6f 6e 73 20 6f 6e 20 61 20 66 6f 72  arisons on a for
4540: 6d 61 74 34 2b 20 64 61 74 61 62 61 73 65 20 61  mat4+ database a
4550: 6e 64 20 66 69 6e 64 20 74 68 61 74 20 73 6f 6d  nd find that som
4560: 65 0a 23 20 61 72 65 20 6e 75 6d 65 72 69 63 20  e.# are numeric 
4570: 61 6e 64 20 73 6f 6d 65 20 61 72 65 20 74 65 78  and some are tex
4580: 74 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 66 6f 72  t..#.do_test for
4590: 6d 61 74 33 2d 31 31 2e 31 20 7b 0a 20 20 65 78  mat3-11.1 {.  ex
45a0: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 27 30  ecsql {SELECT '0
45b0: 27 3d 3d 27 30 2e 30 27 7d 0a 7d 20 7b 31 7d 0a  '=='0.0'}.} {1}.
45c0: 64 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d  do_test format3-
45d0: 31 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  11.2 {.  execsql
45e0: 20 7b 53 45 4c 45 43 54 20 27 30 27 3d 3d 30 2e   {SELECT '0'==0.
45f0: 30 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74  0}.} {1}.do_test
4600: 20 66 6f 72 6d 61 74 33 2d 31 31 2e 33 20 7b 0a   format3-11.3 {.
4610: 20 20 65 78 65 63 73 71 6c 20 7b 53 45 4c 45 43    execsql {SELEC
4620: 54 20 27 31 32 33 34 35 36 37 38 39 30 31 32 33  T '1234567890123
4630: 34 35 36 37 38 39 30 27 3d 3d 27 31 32 33 34 35  4567890'=='12345
4640: 36 37 38 39 30 31 32 33 34 35 36 37 38 39 31 27  678901234567891'
4650: 7d 0a 7d 20 7b 31 7d 0a 64 6f 5f 74 65 73 74 20  }.} {1}.do_test 
4660: 66 6f 72 6d 61 74 33 2d 31 31 2e 34 20 7b 0a 20  format3-11.4 {. 
4670: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
4680: 52 45 41 54 45 20 54 41 42 4c 45 20 74 36 28 61  REATE TABLE t6(a
4690: 20 49 4e 54 20 55 4e 49 51 55 45 2c 20 62 20 54   INT UNIQUE, b T
46a0: 45 58 54 20 55 4e 49 51 55 45 29 3b 0a 20 20 20  EXT UNIQUE);.   
46b0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20   INSERT INTO t6 
46c0: 56 41 4c 55 45 53 28 27 30 27 2c 27 30 2e 30 27  VALUES('0','0.0'
46d0: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
46e0: 46 52 4f 4d 20 74 36 3b 0a 20 20 7d 0a 7d 20 7b  FROM t6;.  }.} {
46f0: 30 20 30 2e 30 7d 0a 64 6f 5f 74 65 73 74 20 66  0 0.0}.do_test f
4700: 6f 72 6d 61 74 33 2d 31 31 2e 35 20 7b 0a 20 20  ormat3-11.5 {.  
4710: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
4720: 53 45 52 54 20 4f 52 20 49 47 4e 4f 52 45 20 49  SERT OR IGNORE I
4730: 4e 54 4f 20 74 36 20 56 41 4c 55 45 53 28 30 2e  NTO t6 VALUES(0.
4740: 30 2c 27 78 27 29 3b 0a 20 20 20 20 53 45 4c 45  0,'x');.    SELE
4750: 43 54 20 2a 20 46 52 4f 4d 20 74 36 3b 0a 20 20  CT * FROM t6;.  
4760: 7d 0a 7d 20 7b 30 20 30 2e 30 7d 0a 64 6f 5f 74  }.} {0 0.0}.do_t
4770: 65 73 74 20 66 6f 72 6d 61 74 33 2d 31 31 2e 36  est format3-11.6
4780: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
4790: 20 20 20 49 4e 53 45 52 54 20 4f 52 20 49 47 4e     INSERT OR IGN
47a0: 4f 52 45 20 49 4e 54 4f 20 74 36 20 56 41 4c 55  ORE INTO t6 VALU
47b0: 45 53 28 27 79 27 2c 30 29 3b 0a 20 20 20 20 53  ES('y',0);.    S
47c0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 36 3b  ELECT * FROM t6;
47d0: 0a 20 20 7d 0a 7d 20 7b 30 20 30 2e 30 7d 0a 64  .  }.} {0 0.0}.d
47e0: 6f 5f 74 65 73 74 20 66 6f 72 6d 61 74 33 2d 31  o_test format3-1
47f0: 31 2e 37 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.7 {.  execsql 
4800: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
4810: 4c 45 20 74 37 28 78 20 49 4e 54 45 47 45 52 2c  LE t7(x INTEGER,
4820: 20 79 20 54 45 58 54 2c 20 7a 29 3b 0a 20 20 20   y TEXT, z);.   
4830: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37 20   INSERT INTO t7 
4840: 56 41 4c 55 45 53 28 30 2c 30 2c 31 29 3b 0a 20  VALUES(0,0,1);. 
4850: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
4860: 37 20 56 41 4c 55 45 53 28 30 2e 30 2c 30 2c 32  7 VALUES(0.0,0,2
4870: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
4880: 54 4f 20 74 37 20 56 41 4c 55 45 53 28 30 2c 30  TO t7 VALUES(0,0
4890: 2e 30 2c 33 29 3b 0a 20 20 20 20 49 4e 53 45 52  .0,3);.    INSER
48a0: 54 20 49 4e 54 4f 20 74 37 20 56 41 4c 55 45 53  T INTO t7 VALUES
48b0: 28 30 2e 30 2c 30 2e 30 2c 34 29 3b 0a 20 20 20  (0.0,0.0,4);.   
48c0: 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54   SELECT DISTINCT
48d0: 20 78 2c 20 79 20 46 52 4f 4d 20 74 37 20 4f 52   x, y FROM t7 OR
48e0: 44 45 52 20 42 59 20 7a 3b 0a 20 20 7d 0a 7d 20  DER BY z;.  }.} 
48f0: 7b 30 20 30 7d 0a 0a 66 69 6e 69 73 68 5f 74 65  {0 0}..finish_te
4900: 73 74 0a                                         st.