/ Hex Artifact Content
Login

Artifact 8d66dfbfd4d12816f74f854dbf67dee492c06267:


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 75  is testing the u
01d0: 73 65 20 6f 66 20 69 6e 64 69 63 65 73 20 69 6e  se of indices in
01e0: 20 57 48 45 52 45 20 63 6c 61 73 65 73 2e 0a 23   WHERE clases..#
01f0: 0a 23 20 24 49 64 3a 20 77 68 65 72 65 2e 74 65  .# $Id: where.te
0200: 73 74 2c 76 20 31 2e 35 30 20 32 30 30 38 2f 31  st,v 1.50 2008/1
0210: 31 2f 30 33 20 30 39 3a 30 36 3a 30 36 20 64 61  1/03 09:06:06 da
0220: 6e 69 65 6c 6b 31 39 37 37 20 45 78 70 20 24 0a  nielk1977 Exp $.
0230: 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69  .set testdir [fi
0240: 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76  le dirname $argv
0250: 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64  0].source $testd
0260: 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23  ir/tester.tcl..#
0270: 20 42 75 69 6c 64 20 73 6f 6d 65 20 74 65 73 74   Build some test
0280: 20 64 61 74 61 0a 23 0a 64 6f 5f 74 65 73 74 20   data.#.do_test 
0290: 77 68 65 72 65 2d 31 2e 30 20 7b 0a 20 20 65 78  where-1.0 {.  ex
02a0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
02b0: 54 45 20 54 41 42 4c 45 20 74 31 28 77 20 69 6e  TE TABLE t1(w in
02c0: 74 2c 20 78 20 69 6e 74 2c 20 79 20 69 6e 74 29  t, x int, y int)
02d0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
02e0: 4c 45 20 74 32 28 70 20 69 6e 74 2c 20 71 20 69  LE t2(p int, q i
02f0: 6e 74 2c 20 72 20 69 6e 74 2c 20 73 20 69 6e 74  nt, r int, s int
0300: 29 3b 0a 20 20 7d 0a 20 20 66 6f 72 20 7b 73 65  );.  }.  for {se
0310: 74 20 69 20 31 7d 20 7b 24 69 3c 3d 31 30 30 7d  t i 1} {$i<=100}
0320: 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20   {incr i} {.    
0330: 73 65 74 20 77 20 24 69 0a 20 20 20 20 73 65 74  set w $i.    set
0340: 20 78 20 5b 65 78 70 72 20 7b 69 6e 74 28 6c 6f   x [expr {int(lo
0350: 67 28 24 69 29 2f 6c 6f 67 28 32 29 29 7d 5d 0a  g($i)/log(2))}].
0360: 20 20 20 20 73 65 74 20 79 20 5b 65 78 70 72 20      set y [expr 
0370: 7b 24 69 2a 24 69 20 2b 20 32 2a 24 69 20 2b 20  {$i*$i + 2*$i + 
0380: 31 7d 5d 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1}].    execsql 
0390: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
03a0: 56 41 4c 55 45 53 28 24 77 2c 24 78 2c 24 79 29  VALUES($w,$x,$y)
03b0: 22 0a 20 20 7d 0a 0a 20 20 69 66 63 61 70 61 62  ".  }..  ifcapab
03c0: 6c 65 20 73 75 62 71 75 65 72 79 20 7b 0a 20 20  le subquery {.  
03d0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
03e0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
03f0: 20 53 45 4c 45 43 54 20 31 30 31 2d 77 2c 20 78   SELECT 101-w, x
0400: 2c 20 28 53 45 4c 45 43 54 20 6d 61 78 28 79 29  , (SELECT max(y)
0410: 20 46 52 4f 4d 20 74 31 29 2b 31 2d 79 2c 20 79   FROM t1)+1-y, y
0420: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 7d 0a   FROM t1;.    }.
0430: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73    } else {.    s
0440: 65 74 20 6d 61 78 79 20 5b 65 78 65 63 73 71 6c  et maxy [execsql
0450: 20 7b 73 65 6c 65 63 74 20 6d 61 78 28 79 29 20   {select max(y) 
0460: 66 72 6f 6d 20 74 31 7d 5d 0a 20 20 20 20 65 78  from t1}].    ex
0470: 65 63 73 71 6c 20 22 0a 20 20 20 20 20 20 49 4e  ecsql ".      IN
0480: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c  SERT INTO t2 SEL
0490: 45 43 54 20 31 30 31 2d 77 2c 20 78 2c 20 24 6d  ECT 101-w, x, $m
04a0: 61 78 79 2b 31 2d 79 2c 20 79 20 46 52 4f 4d 20  axy+1-y, y FROM 
04b0: 74 31 3b 0a 20 20 20 20 22 0a 20 20 7d 0a 0a 20  t1;.    ".  }.. 
04c0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
04d0: 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 77 20  REATE INDEX i1w 
04e0: 4f 4e 20 74 31 28 77 29 3b 0a 20 20 20 20 43 52  ON t1(w);.    CR
04f0: 45 41 54 45 20 49 4e 44 45 58 20 69 31 78 79 20  EATE INDEX i1xy 
0500: 4f 4e 20 74 31 28 78 2c 79 29 3b 0a 20 20 20 20  ON t1(x,y);.    
0510: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 70  CREATE INDEX i2p
0520: 20 4f 4e 20 74 32 28 70 29 3b 0a 20 20 20 20 43   ON t2(p);.    C
0530: 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 72 20  REATE INDEX i2r 
0540: 4f 4e 20 74 32 28 72 29 3b 0a 20 20 20 20 43 52  ON t2(r);.    CR
0550: 45 41 54 45 20 49 4e 44 45 58 20 69 32 71 73 20  EATE INDEX i2qs 
0560: 4f 4e 20 74 32 28 71 2c 20 73 29 3b 0a 20 20 7d  ON t2(q, s);.  }
0570: 0a 7d 20 7b 7d 0a 0a 23 20 44 6f 20 61 6e 20 53  .} {}..# Do an S
0580: 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41  QL statement.  A
0590: 70 70 65 6e 64 20 74 68 65 20 73 65 61 72 63 68  ppend the search
05a0: 20 63 6f 75 6e 74 20 74 6f 20 74 68 65 20 65 6e   count to the en
05b0: 64 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 2e  d of the result.
05c0: 0a 23 0a 70 72 6f 63 20 63 6f 75 6e 74 20 73 71  .#.proc count sq
05d0: 6c 20 7b 0a 20 20 73 65 74 20 3a 3a 73 71 6c 69  l {.  set ::sqli
05e0: 74 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 20  te_search_count 
05f0: 30 0a 20 20 72 65 74 75 72 6e 20 5b 63 6f 6e 63  0.  return [conc
0600: 61 74 20 5b 65 78 65 63 73 71 6c 20 24 73 71 6c  at [execsql $sql
0610: 5d 20 24 3a 3a 73 71 6c 69 74 65 5f 73 65 61 72  ] $::sqlite_sear
0620: 63 68 5f 63 6f 75 6e 74 5d 0a 7d 0a 0a 23 20 56  ch_count].}..# V
0630: 65 72 69 66 79 20 74 68 61 74 20 71 75 65 72 69  erify that queri
0640: 65 73 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2e  es use an index.
0650: 20 20 57 65 20 61 72 65 20 75 73 69 6e 67 20 74    We are using t
0660: 68 65 20 73 70 65 63 69 61 6c 20 76 61 72 69 61  he special varia
0670: 62 6c 65 0a 23 20 22 73 71 6c 69 74 65 5f 73 65  ble.# "sqlite_se
0680: 61 72 63 68 5f 63 6f 75 6e 74 22 20 77 68 69 63  arch_count" whic
0690: 68 20 74 61 6c 6c 79 73 20 74 68 65 20 6e 75 6d  h tallys the num
06a0: 62 65 72 20 6f 66 20 65 78 65 63 75 74 69 6f 6e  ber of execution
06b0: 73 20 6f 66 20 4d 6f 76 65 54 6f 0a 23 20 61 6e  s of MoveTo.# an
06c0: 64 20 4e 65 78 74 20 6f 70 65 72 61 74 6f 72 73  d Next operators
06d0: 20 69 6e 20 74 68 65 20 56 44 42 45 2e 20 20 42   in the VDBE.  B
06e0: 79 20 76 65 72 69 66 69 6e 67 20 74 68 61 74 20  y verifing that 
06f0: 74 68 65 20 73 65 61 72 63 68 20 63 6f 75 6e 74  the search count
0700: 20 69 73 0a 23 20 73 6d 61 6c 6c 20 77 65 20 63   is.# small we c
0710: 61 6e 20 62 65 20 61 73 73 75 72 65 64 20 74 68  an be assured th
0720: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 20 62  at indices are b
0730: 65 69 6e 67 20 75 73 65 64 20 70 72 6f 70 65 72  eing used proper
0740: 6c 79 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68  ly..#.do_test wh
0750: 65 72 65 2d 31 2e 31 2e 31 20 7b 0a 20 20 63 6f  ere-1.1.1 {.  co
0760: 75 6e 74 20 7b 53 45 4c 45 43 54 20 78 2c 20 79  unt {SELECT x, y
0770: 2c 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  , w FROM t1 WHER
0780: 45 20 77 3d 31 30 7d 0a 7d 20 7b 33 20 31 32 31  E w=10}.} {3 121
0790: 20 31 30 20 33 7d 0a 64 6f 5f 65 71 70 5f 74 65   10 3}.do_eqp_te
07a0: 73 74 20 77 68 65 72 65 2d 31 2e 31 2e 32 20 7b  st where-1.1.2 {
07b0: 0a 20 20 53 45 4c 45 43 54 20 78 2c 20 79 2c 20  .  SELECT x, y, 
07c0: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
07d0: 77 3d 31 30 0a 7d 20 7b 2a 53 45 41 52 43 48 20  w=10.} {*SEARCH 
07e0: 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49  TABLE t1 USING I
07f0: 4e 44 45 58 20 69 31 77 20 28 77 3d 3f 29 2a 7d  NDEX i1w (w=?)*}
0800: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31  .do_test where-1
0810: 2e 31 2e 33 20 7b 0a 20 20 64 62 20 73 74 61 74  .1.3 {.  db stat
0820: 75 73 20 73 74 65 70 0a 7d 20 7b 30 7d 0a 64 6f  us step.} {0}.do
0830: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 31 2e  _test where-1.1.
0840: 34 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53  4 {.  db eval {S
0850: 45 4c 45 43 54 20 78 2c 20 79 2c 20 77 20 46 52  ELECT x, y, w FR
0860: 4f 4d 20 74 31 20 57 48 45 52 45 20 2b 77 3d 31  OM t1 WHERE +w=1
0870: 30 7d 0a 7d 20 7b 33 20 31 32 31 20 31 30 7d 0a  0}.} {3 121 10}.
0880: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e  do_test where-1.
0890: 31 2e 35 20 7b 0a 20 20 64 62 20 73 74 61 74 75  1.5 {.  db statu
08a0: 73 20 73 74 65 70 0a 7d 20 7b 39 39 7d 0a 64 6f  s step.} {99}.do
08b0: 5f 65 71 70 5f 74 65 73 74 20 77 68 65 72 65 2d  _eqp_test where-
08c0: 31 2e 31 2e 36 20 7b 0a 20 20 53 45 4c 45 43 54  1.1.6 {.  SELECT
08d0: 20 78 2c 20 79 2c 20 77 20 46 52 4f 4d 20 74 31   x, y, w FROM t1
08e0: 20 57 48 45 52 45 20 2b 77 3d 31 30 0a 7d 20 7b   WHERE +w=10.} {
08f0: 2a 53 43 41 4e 20 54 41 42 4c 45 20 74 31 2a 7d  *SCAN TABLE t1*}
0900: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31  .do_test where-1
0910: 2e 31 2e 37 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  .1.7 {.  count {
0920: 53 45 4c 45 43 54 20 78 2c 20 79 2c 20 77 20 41  SELECT x, y, w A
0930: 53 20 61 62 63 20 46 52 4f 4d 20 74 31 20 57 48  S abc FROM t1 WH
0940: 45 52 45 20 61 62 63 3d 31 30 7d 0a 7d 20 7b 33  ERE abc=10}.} {3
0950: 20 31 32 31 20 31 30 20 33 7d 0a 64 6f 5f 65 71   121 10 3}.do_eq
0960: 70 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 31  p_test where-1.1
0970: 2e 38 20 7b 0a 20 20 53 45 4c 45 43 54 20 78 2c  .8 {.  SELECT x,
0980: 20 79 2c 20 77 20 41 53 20 61 62 63 20 46 52 4f   y, w AS abc FRO
0990: 4d 20 74 31 20 57 48 45 52 45 20 61 62 63 3d 31  M t1 WHERE abc=1
09a0: 30 0a 7d 20 7b 2a 53 45 41 52 43 48 20 54 41 42  0.} {*SEARCH TAB
09b0: 4c 45 20 74 31 20 55 53 49 4e 47 20 49 4e 44 45  LE t1 USING INDE
09c0: 58 20 69 31 77 20 28 77 3d 3f 29 2a 7d 0a 64 6f  X i1w (w=?)*}.do
09d0: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 31 2e  _test where-1.1.
09e0: 39 20 7b 0a 20 20 64 62 20 73 74 61 74 75 73 20  9 {.  db status 
09f0: 73 74 65 70 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65  step.} {0}.do_te
0a00: 73 74 20 77 68 65 72 65 2d 31 2e 32 2e 31 20 7b  st where-1.2.1 {
0a10: 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54  .  count {SELECT
0a20: 20 78 2c 20 79 2c 20 77 20 46 52 4f 4d 20 74 31   x, y, w FROM t1
0a30: 20 57 48 45 52 45 20 77 3d 31 31 7d 0a 7d 20 7b   WHERE w=11}.} {
0a40: 33 20 31 34 34 20 31 31 20 33 7d 0a 64 6f 5f 74  3 144 11 3}.do_t
0a50: 65 73 74 20 77 68 65 72 65 2d 31 2e 32 2e 32 20  est where-1.2.2 
0a60: 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43  {.  count {SELEC
0a70: 54 20 78 2c 20 79 2c 20 77 20 41 53 20 61 62 63  T x, y, w AS abc
0a80: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
0a90: 62 63 3d 31 31 7d 0a 7d 20 7b 33 20 31 34 34 20  bc=11}.} {3 144 
0aa0: 31 31 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68  11 3}.do_test wh
0ab0: 65 72 65 2d 31 2e 33 2e 31 20 7b 0a 20 20 63 6f  ere-1.3.1 {.  co
0ac0: 75 6e 74 20 7b 53 45 4c 45 43 54 20 78 2c 20 79  unt {SELECT x, y
0ad0: 2c 20 77 20 41 53 20 61 62 63 20 46 52 4f 4d 20  , w AS abc FROM 
0ae0: 74 31 20 57 48 45 52 45 20 31 31 3d 77 7d 0a 7d  t1 WHERE 11=w}.}
0af0: 20 7b 33 20 31 34 34 20 31 31 20 33 7d 0a 64 6f   {3 144 11 3}.do
0b00: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 33 2e  _test where-1.3.
0b10: 32 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c  2 {.  count {SEL
0b20: 45 43 54 20 78 2c 20 79 2c 20 77 20 41 53 20 61  ECT x, y, w AS a
0b30: 62 63 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  bc FROM t1 WHERE
0b40: 20 31 31 3d 61 62 63 7d 0a 7d 20 7b 33 20 31 34   11=abc}.} {3 14
0b50: 34 20 31 31 20 33 7d 0a 64 6f 5f 74 65 73 74 20  4 11 3}.do_test 
0b60: 77 68 65 72 65 2d 31 2e 34 2e 31 20 7b 0a 20 20  where-1.4.1 {.  
0b70: 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 2c  count {SELECT w,
0b80: 20 78 2c 20 79 20 46 52 4f 4d 20 74 31 20 57 48   x, y FROM t1 WH
0b90: 45 52 45 20 31 31 3d 77 20 41 4e 44 20 78 3e 32  ERE 11=w AND x>2
0ba0: 7d 0a 7d 20 7b 31 31 20 33 20 31 34 34 20 33 7d  }.} {11 3 144 3}
0bb0: 0a 64 6f 5f 65 71 70 5f 74 65 73 74 20 77 68 65  .do_eqp_test whe
0bc0: 72 65 2d 31 2e 34 2e 32 20 7b 0a 20 20 53 45 4c  re-1.4.2 {.  SEL
0bd0: 45 43 54 20 77 2c 20 78 2c 20 79 20 46 52 4f 4d  ECT w, x, y FROM
0be0: 20 74 31 20 57 48 45 52 45 20 31 31 3d 77 20 41   t1 WHERE 11=w A
0bf0: 4e 44 20 78 3e 32 0a 7d 20 7b 2a 53 45 41 52 43  ND x>2.} {*SEARC
0c00: 48 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47  H TABLE t1 USING
0c10: 20 49 4e 44 45 58 20 69 31 77 20 28 77 3d 3f 29   INDEX i1w (w=?)
0c20: 2a 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  *}.do_test where
0c30: 2d 31 2e 34 2e 33 20 7b 0a 20 20 63 6f 75 6e 74  -1.4.3 {.  count
0c40: 20 7b 53 45 4c 45 43 54 20 77 20 41 53 20 61 2c   {SELECT w AS a,
0c50: 20 78 20 41 53 20 62 2c 20 79 20 46 52 4f 4d 20   x AS b, y FROM 
0c60: 74 31 20 57 48 45 52 45 20 31 31 3d 61 20 41 4e  t1 WHERE 11=a AN
0c70: 44 20 62 3e 32 7d 0a 7d 20 7b 31 31 20 33 20 31  D b>2}.} {11 3 1
0c80: 34 34 20 33 7d 0a 64 6f 5f 65 71 70 5f 74 65 73  44 3}.do_eqp_tes
0c90: 74 20 77 68 65 72 65 2d 31 2e 34 2e 34 20 7b 0a  t where-1.4.4 {.
0ca0: 20 20 53 45 4c 45 43 54 20 77 20 41 53 20 61 2c    SELECT w AS a,
0cb0: 20 78 20 41 53 20 62 2c 20 79 20 46 52 4f 4d 20   x AS b, y FROM 
0cc0: 74 31 20 57 48 45 52 45 20 31 31 3d 61 20 41 4e  t1 WHERE 11=a AN
0cd0: 44 20 62 3e 32 0a 7d 20 7b 2a 53 45 41 52 43 48  D b>2.} {*SEARCH
0ce0: 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20   TABLE t1 USING 
0cf0: 49 4e 44 45 58 20 69 31 77 20 28 77 3d 3f 29 2a  INDEX i1w (w=?)*
0d00: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
0d10: 31 2e 35 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53  1.5 {.  count {S
0d20: 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20  ELECT x, y FROM 
0d30: 74 31 20 57 48 45 52 45 20 79 3c 32 30 30 20 41  t1 WHERE y<200 A
0d40: 4e 44 20 77 3d 31 31 20 41 4e 44 20 78 3e 32 7d  ND w=11 AND x>2}
0d50: 0a 7d 20 7b 33 20 31 34 34 20 33 7d 0a 64 6f 5f  .} {3 144 3}.do_
0d60: 65 71 70 5f 74 65 73 74 20 77 68 65 72 65 2d 31  eqp_test where-1
0d70: 2e 35 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20  .5.2 {.  SELECT 
0d80: 78 2c 20 79 20 46 52 4f 4d 20 74 31 20 57 48 45  x, y FROM t1 WHE
0d90: 52 45 20 79 3c 32 30 30 20 41 4e 44 20 77 3d 31  RE y<200 AND w=1
0da0: 31 20 41 4e 44 20 78 3e 32 0a 7d 20 7b 2a 53 45  1 AND x>2.} {*SE
0db0: 41 52 43 48 20 54 41 42 4c 45 20 74 31 20 55 53  ARCH TABLE t1 US
0dc0: 49 4e 47 20 49 4e 44 45 58 20 69 31 77 20 28 77  ING INDEX i1w (w
0dd0: 3d 3f 29 2a 7d 0a 64 6f 5f 74 65 73 74 20 77 68  =?)*}.do_test wh
0de0: 65 72 65 2d 31 2e 36 20 7b 0a 20 20 63 6f 75 6e  ere-1.6 {.  coun
0df0: 74 20 7b 53 45 4c 45 43 54 20 78 2c 20 79 20 46  t {SELECT x, y F
0e00: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3c 32  ROM t1 WHERE y<2
0e10: 30 30 20 41 4e 44 20 78 3e 32 20 41 4e 44 20 77  00 AND x>2 AND w
0e20: 3d 31 31 7d 0a 7d 20 7b 33 20 31 34 34 20 33 7d  =11}.} {3 144 3}
0e30: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31  .do_test where-1
0e40: 2e 37 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45  .7 {.  count {SE
0e50: 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 74  LECT x, y FROM t
0e60: 31 20 57 48 45 52 45 20 77 3d 31 31 20 41 4e 44  1 WHERE w=11 AND
0e70: 20 79 3c 32 30 30 20 41 4e 44 20 78 3e 32 7d 0a   y<200 AND x>2}.
0e80: 7d 20 7b 33 20 31 34 34 20 33 7d 0a 64 6f 5f 74  } {3 144 3}.do_t
0e90: 65 73 74 20 77 68 65 72 65 2d 31 2e 38 20 7b 0a  est where-1.8 {.
0ea0: 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20    count {SELECT 
0eb0: 78 2c 20 79 20 46 52 4f 4d 20 74 31 20 57 48 45  x, y FROM t1 WHE
0ec0: 52 45 20 77 3e 31 30 20 41 4e 44 20 79 3d 31 34  RE w>10 AND y=14
0ed0: 34 20 41 4e 44 20 78 3d 33 7d 0a 7d 20 7b 33 20  4 AND x=3}.} {3 
0ee0: 31 34 34 20 33 7d 0a 64 6f 5f 65 71 70 5f 74 65  144 3}.do_eqp_te
0ef0: 73 74 20 77 68 65 72 65 2d 31 2e 38 2e 32 20 7b  st where-1.8.2 {
0f00: 0a 20 20 53 45 4c 45 43 54 20 78 2c 20 79 20 46  .  SELECT x, y F
0f10: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77 3e 31  ROM t1 WHERE w>1
0f20: 30 20 41 4e 44 20 79 3d 31 34 34 20 41 4e 44 20  0 AND y=144 AND 
0f30: 78 3d 33 0a 7d 20 7b 2a 53 45 41 52 43 48 20 54  x=3.} {*SEARCH T
0f40: 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20 49 4e  ABLE t1 USING IN
0f50: 44 45 58 20 69 31 78 79 20 28 78 3d 3f 20 41 4e  DEX i1xy (x=? AN
0f60: 44 20 79 3d 3f 29 2a 7d 0a 64 6f 5f 65 71 70 5f  D y=?)*}.do_eqp_
0f70: 74 65 73 74 20 77 68 65 72 65 2d 31 2e 38 2e 33  test where-1.8.3
0f80: 20 7b 0a 20 20 53 45 4c 45 43 54 20 78 2c 20 79   {.  SELECT x, y
0f90: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79   FROM t1 WHERE y
0fa0: 3d 31 34 34 20 41 4e 44 20 78 3d 33 0a 7d 20 7b  =144 AND x=3.} {
0fb0: 2a 53 45 41 52 43 48 20 54 41 42 4c 45 20 74 31  *SEARCH TABLE t1
0fc0: 20 55 53 49 4e 47 20 43 4f 56 45 52 49 4e 47 20   USING COVERING 
0fd0: 49 4e 44 45 58 20 69 31 78 79 20 28 78 3d 3f 20  INDEX i1xy (x=? 
0fe0: 41 4e 44 20 79 3d 3f 29 2a 7d 0a 64 6f 5f 74 65  AND y=?)*}.do_te
0ff0: 73 74 20 77 68 65 72 65 2d 31 2e 39 20 7b 0a 20  st where-1.9 {. 
1000: 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 78   count {SELECT x
1010: 2c 20 79 20 46 52 4f 4d 20 74 31 20 57 48 45 52  , y FROM t1 WHER
1020: 45 20 79 3d 31 34 34 20 41 4e 44 20 77 3e 31 30  E y=144 AND w>10
1030: 20 41 4e 44 20 78 3d 33 7d 0a 7d 20 7b 33 20 31   AND x=3}.} {3 1
1040: 34 34 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68  44 3}.do_test wh
1050: 65 72 65 2d 31 2e 31 30 20 7b 0a 20 20 63 6f 75  ere-1.10 {.  cou
1060: 6e 74 20 7b 53 45 4c 45 43 54 20 78 2c 20 79 20  nt {SELECT x, y 
1070: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d  FROM t1 WHERE x=
1080: 33 20 41 4e 44 20 77 3e 3d 31 30 20 41 4e 44 20  3 AND w>=10 AND 
1090: 79 3d 31 32 31 7d 0a 7d 20 7b 33 20 31 32 31 20  y=121}.} {3 121 
10a0: 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  3}.do_test where
10b0: 2d 31 2e 31 31 20 7b 0a 20 20 63 6f 75 6e 74 20  -1.11 {.  count 
10c0: 7b 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f  {SELECT x, y FRO
10d0: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41  M t1 WHERE x=3 A
10e0: 4e 44 20 79 3d 31 30 30 20 41 4e 44 20 77 3c 31  ND y=100 AND w<1
10f0: 30 7d 0a 7d 20 7b 33 20 31 30 30 20 33 7d 0a 0a  0}.} {3 100 3}..
1100: 23 20 4e 65 77 20 66 6f 72 20 53 51 4c 69 74 65  # New for SQLite
1110: 20 76 65 72 73 69 6f 6e 20 32 2e 31 3a 20 56 65   version 2.1: Ve
1120: 72 69 66 79 20 74 68 61 74 20 74 68 61 74 20 69  rify that that i
1130: 6e 65 71 75 61 6c 69 74 79 20 63 6f 6e 73 74 72  nequality constr
1140: 61 69 6e 74 73 0a 23 20 61 72 65 20 75 73 65 64  aints.# are used
1150: 20 63 6f 72 72 65 63 74 6c 79 2e 0a 23 0a 64 6f   correctly..#.do
1160: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 31 32  _test where-1.12
1170: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45   {.  count {SELE
1180: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
1190: 52 45 20 78 3d 33 20 41 4e 44 20 79 3c 31 30 30  RE x=3 AND y<100
11a0: 7d 0a 7d 20 7b 38 20 33 7d 0a 64 6f 5f 74 65 73  }.} {8 3}.do_tes
11b0: 74 20 77 68 65 72 65 2d 31 2e 31 33 20 7b 0a 20  t where-1.13 {. 
11c0: 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77   count {SELECT w
11d0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
11e0: 3d 33 20 41 4e 44 20 31 30 30 3e 79 7d 0a 7d 20  =3 AND 100>y}.} 
11f0: 7b 38 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68  {8 3}.do_test wh
1200: 65 72 65 2d 31 2e 31 34 20 7b 0a 20 20 63 6f 75  ere-1.14 {.  cou
1210: 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f  nt {SELECT w FRO
1220: 4d 20 74 31 20 57 48 45 52 45 20 33 3d 78 20 41  M t1 WHERE 3=x A
1230: 4e 44 20 79 3c 31 30 30 7d 0a 7d 20 7b 38 20 33  ND y<100}.} {8 3
1240: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
1250: 31 2e 31 35 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  1.15 {.  count {
1260: 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31  SELECT w FROM t1
1270: 20 57 48 45 52 45 20 33 3d 78 20 41 4e 44 20 31   WHERE 3=x AND 1
1280: 30 30 3e 79 7d 0a 7d 20 7b 38 20 33 7d 0a 64 6f  00>y}.} {8 3}.do
1290: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 31 36  _test where-1.16
12a0: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45   {.  count {SELE
12b0: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
12c0: 52 45 20 78 3d 33 20 41 4e 44 20 79 3c 3d 31 30  RE x=3 AND y<=10
12d0: 30 7d 0a 7d 20 7b 38 20 39 20 35 7d 0a 64 6f 5f  0}.} {8 9 5}.do_
12e0: 74 65 73 74 20 77 68 65 72 65 2d 31 2e 31 37 20  test where-1.17 
12f0: 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43  {.  count {SELEC
1300: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
1310: 45 20 78 3d 33 20 41 4e 44 20 31 30 30 3e 3d 79  E x=3 AND 100>=y
1320: 7d 0a 7d 20 7b 38 20 39 20 35 7d 0a 64 6f 5f 74  }.} {8 9 5}.do_t
1330: 65 73 74 20 77 68 65 72 65 2d 31 2e 31 38 20 7b  est where-1.18 {
1340: 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54  .  count {SELECT
1350: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
1360: 20 78 3d 33 20 41 4e 44 20 79 3e 32 32 35 7d 0a   x=3 AND y>225}.
1370: 7d 20 7b 31 35 20 33 7d 0a 64 6f 5f 74 65 73 74  } {15 3}.do_test
1380: 20 77 68 65 72 65 2d 31 2e 31 39 20 7b 0a 20 20   where-1.19 {.  
1390: 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20  count {SELECT w 
13a0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d  FROM t1 WHERE x=
13b0: 33 20 41 4e 44 20 32 32 35 3c 79 7d 0a 7d 20 7b  3 AND 225<y}.} {
13c0: 31 35 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68  15 3}.do_test wh
13d0: 65 72 65 2d 31 2e 32 30 20 7b 0a 20 20 63 6f 75  ere-1.20 {.  cou
13e0: 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f  nt {SELECT w FRO
13f0: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41  M t1 WHERE x=3 A
1400: 4e 44 20 79 3e 3d 32 32 35 7d 0a 7d 20 7b 31 34  ND y>=225}.} {14
1410: 20 31 35 20 35 7d 0a 64 6f 5f 74 65 73 74 20 77   15 5}.do_test w
1420: 68 65 72 65 2d 31 2e 32 31 20 7b 0a 20 20 63 6f  here-1.21 {.  co
1430: 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52  unt {SELECT w FR
1440: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20  OM t1 WHERE x=3 
1450: 41 4e 44 20 32 32 35 3c 3d 79 7d 0a 7d 20 7b 31  AND 225<=y}.} {1
1460: 34 20 31 35 20 35 7d 0a 64 6f 5f 74 65 73 74 20  4 15 5}.do_test 
1470: 77 68 65 72 65 2d 31 2e 32 32 20 7b 0a 20 20 63  where-1.22 {.  c
1480: 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46  ount {SELECT w F
1490: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33  ROM t1 WHERE x=3
14a0: 20 41 4e 44 20 79 3e 31 32 31 20 41 4e 44 20 79   AND y>121 AND y
14b0: 3c 31 39 36 7d 0a 7d 20 7b 31 31 20 31 32 20 35  <196}.} {11 12 5
14c0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
14d0: 31 2e 32 33 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  1.23 {.  count {
14e0: 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31  SELECT w FROM t1
14f0: 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79   WHERE x=3 AND y
1500: 3e 3d 31 32 31 20 41 4e 44 20 79 3c 3d 31 39 36  >=121 AND y<=196
1510: 7d 0a 7d 20 7b 31 30 20 31 31 20 31 32 20 31 33  }.} {10 11 12 13
1520: 20 39 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   9}.do_test wher
1530: 65 2d 31 2e 32 34 20 7b 0a 20 20 63 6f 75 6e 74  e-1.24 {.  count
1540: 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20   {SELECT w FROM 
1550: 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44  t1 WHERE x=3 AND
1560: 20 31 32 31 3c 79 20 41 4e 44 20 31 39 36 3e 79   121<y AND 196>y
1570: 7d 0a 7d 20 7b 31 31 20 31 32 20 35 7d 0a 64 6f  }.} {11 12 5}.do
1580: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 32 35  _test where-1.25
1590: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45   {.  count {SELE
15a0: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
15b0: 52 45 20 78 3d 33 20 41 4e 44 20 31 32 31 3c 3d  RE x=3 AND 121<=
15c0: 79 20 41 4e 44 20 31 39 36 3e 3d 79 7d 0a 7d 20  y AND 196>=y}.} 
15d0: 7b 31 30 20 31 31 20 31 32 20 31 33 20 39 7d 0a  {10 11 12 13 9}.
15e0: 0a 23 20 4e 65 65 64 20 74 6f 20 77 6f 72 6b 20  .# Need to work 
15f0: 6f 6e 20 6f 70 74 69 6d 69 7a 69 6e 67 20 74 68  on optimizing th
1600: 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74  e BETWEEN operat
1610: 6f 72 2e 20 20 0a 23 0a 23 20 64 6f 5f 74 65 73  or.  .#.# do_tes
1620: 74 20 77 68 65 72 65 2d 31 2e 32 36 20 7b 0a 23  t where-1.26 {.#
1630: 20 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54     count {SELECT
1640: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
1650: 20 78 3d 33 20 41 4e 44 20 79 20 42 45 54 57 45   x=3 AND y BETWE
1660: 45 4e 20 31 32 31 20 41 4e 44 20 31 39 36 7d 0a  EN 121 AND 196}.
1670: 23 20 7d 20 7b 31 30 20 31 31 20 31 32 20 31 33  # } {10 11 12 13
1680: 20 39 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65   9}..do_test whe
1690: 72 65 2d 31 2e 32 37 20 7b 0a 20 20 63 6f 75 6e  re-1.27 {.  coun
16a0: 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d  t {SELECT w FROM
16b0: 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e   t1 WHERE x=3 AN
16c0: 44 20 79 2b 31 3d 3d 31 32 32 7d 0a 7d 20 7b 31  D y+1==122}.} {1
16d0: 30 20 31 30 7d 0a 0a 64 6f 5f 74 65 73 74 20 77  0 10}..do_test w
16e0: 68 65 72 65 2d 31 2e 32 38 20 7b 0a 20 20 63 6f  here-1.28 {.  co
16f0: 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52  unt {SELECT w FR
1700: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 2b 31 3d  OM t1 WHERE x+1=
1710: 34 20 41 4e 44 20 79 2b 31 3d 3d 31 32 32 7d 0a  4 AND y+1==122}.
1720: 7d 20 7b 31 30 20 39 39 7d 0a 64 6f 5f 74 65 73  } {10 99}.do_tes
1730: 74 20 77 68 65 72 65 2d 31 2e 32 39 20 7b 0a 20  t where-1.29 {. 
1740: 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77   count {SELECT w
1750: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79   FROM t1 WHERE y
1760: 3d 3d 31 32 31 7d 0a 7d 20 7b 31 30 20 39 39 7d  ==121}.} {10 99}
1770: 0a 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  ...do_test where
1780: 2d 31 2e 33 30 20 7b 0a 20 20 63 6f 75 6e 74 20  -1.30 {.  count 
1790: 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74  {SELECT w FROM t
17a0: 31 20 57 48 45 52 45 20 77 3e 39 37 7d 0a 7d 20  1 WHERE w>97}.} 
17b0: 7b 39 38 20 39 39 20 31 30 30 20 33 7d 0a 64 6f  {98 99 100 3}.do
17c0: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 33 31  _test where-1.31
17d0: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45   {.  count {SELE
17e0: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
17f0: 52 45 20 77 3e 3d 39 37 7d 0a 7d 20 7b 39 37 20  RE w>=97}.} {97 
1800: 39 38 20 39 39 20 31 30 30 20 34 7d 0a 64 6f 5f  98 99 100 4}.do_
1810: 74 65 73 74 20 77 68 65 72 65 2d 31 2e 33 33 20  test where-1.33 
1820: 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43  {.  count {SELEC
1830: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
1840: 45 20 77 3d 3d 39 37 7d 0a 7d 20 7b 39 37 20 32  E w==97}.} {97 2
1850: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
1860: 31 2e 33 33 2e 31 20 20 7b 0a 20 20 63 6f 75 6e  1.33.1  {.  coun
1870: 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d  t {SELECT w FROM
1880: 20 74 31 20 57 48 45 52 45 20 77 3c 3d 39 37 20   t1 WHERE w<=97 
1890: 41 4e 44 20 77 3d 3d 39 37 7d 0a 7d 20 7b 39 37  AND w==97}.} {97
18a0: 20 32 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   2}.do_test wher
18b0: 65 2d 31 2e 33 33 2e 32 20 20 7b 0a 20 20 63 6f  e-1.33.2  {.  co
18c0: 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52  unt {SELECT w FR
18d0: 4f 4d 20 74 31 20 57 48 45 52 45 20 77 3c 39 38  OM t1 WHERE w<98
18e0: 20 41 4e 44 20 77 3d 3d 39 37 7d 0a 7d 20 7b 39   AND w==97}.} {9
18f0: 37 20 32 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  7 2}.do_test whe
1900: 72 65 2d 31 2e 33 33 2e 33 20 20 7b 0a 20 20 63  re-1.33.3  {.  c
1910: 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46  ount {SELECT w F
1920: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77 3e 3d  ROM t1 WHERE w>=
1930: 39 37 20 41 4e 44 20 77 3d 3d 39 37 7d 0a 7d 20  97 AND w==97}.} 
1940: 7b 39 37 20 32 7d 0a 64 6f 5f 74 65 73 74 20 77  {97 2}.do_test w
1950: 68 65 72 65 2d 31 2e 33 33 2e 34 20 20 7b 0a 20  here-1.33.4  {. 
1960: 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77   count {SELECT w
1970: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77   FROM t1 WHERE w
1980: 3e 39 36 20 41 4e 44 20 77 3d 3d 39 37 7d 0a 7d  >96 AND w==97}.}
1990: 20 7b 39 37 20 32 7d 0a 64 6f 5f 74 65 73 74 20   {97 2}.do_test 
19a0: 77 68 65 72 65 2d 31 2e 33 33 2e 35 20 20 7b 0a  where-1.33.5  {.
19b0: 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20    count {SELECT 
19c0: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
19d0: 77 3d 3d 39 37 20 41 4e 44 20 77 3d 3d 39 37 7d  w==97 AND w==97}
19e0: 0a 7d 20 7b 39 37 20 32 7d 0a 64 6f 5f 74 65 73  .} {97 2}.do_tes
19f0: 74 20 77 68 65 72 65 2d 31 2e 33 34 20 7b 0a 20  t where-1.34 {. 
1a00: 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77   count {SELECT w
1a10: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77   FROM t1 WHERE w
1a20: 2b 31 3d 3d 39 38 7d 0a 7d 20 7b 39 37 20 39 39  +1==98}.} {97 99
1a30: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
1a40: 31 2e 33 35 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  1.35 {.  count {
1a50: 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31  SELECT w FROM t1
1a60: 20 57 48 45 52 45 20 77 3c 33 7d 0a 7d 20 7b 31   WHERE w<3}.} {1
1a70: 20 32 20 32 7d 0a 64 6f 5f 74 65 73 74 20 77 68   2 2}.do_test wh
1a80: 65 72 65 2d 31 2e 33 36 20 7b 0a 20 20 63 6f 75  ere-1.36 {.  cou
1a90: 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f  nt {SELECT w FRO
1aa0: 4d 20 74 31 20 57 48 45 52 45 20 77 3c 3d 33 7d  M t1 WHERE w<=3}
1ab0: 0a 7d 20 7b 31 20 32 20 33 20 33 7d 0a 64 6f 5f  .} {1 2 3 3}.do_
1ac0: 74 65 73 74 20 77 68 65 72 65 2d 31 2e 33 37 20  test where-1.37 
1ad0: 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43  {.  count {SELEC
1ae0: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
1af0: 45 20 77 2b 31 3c 3d 34 20 4f 52 44 45 52 20 42  E w+1<=4 ORDER B
1b00: 59 20 77 7d 0a 7d 20 7b 31 20 32 20 33 20 39 39  Y w}.} {1 2 3 99
1b10: 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  }..do_test where
1b20: 2d 31 2e 33 38 20 7b 0a 20 20 63 6f 75 6e 74 20  -1.38 {.  count 
1b30: 7b 53 45 4c 45 43 54 20 28 77 29 20 46 52 4f 4d  {SELECT (w) FROM
1b40: 20 74 31 20 57 48 45 52 45 20 28 77 29 3e 28 39   t1 WHERE (w)>(9
1b50: 37 29 7d 0a 7d 20 7b 39 38 20 39 39 20 31 30 30  7)}.} {98 99 100
1b60: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   3}.do_test wher
1b70: 65 2d 31 2e 33 39 20 7b 0a 20 20 63 6f 75 6e 74  e-1.39 {.  count
1b80: 20 7b 53 45 4c 45 43 54 20 28 77 29 20 46 52 4f   {SELECT (w) FRO
1b90: 4d 20 74 31 20 57 48 45 52 45 20 28 77 29 3e 3d  M t1 WHERE (w)>=
1ba0: 28 39 37 29 7d 0a 7d 20 7b 39 37 20 39 38 20 39  (97)}.} {97 98 9
1bb0: 39 20 31 30 30 20 34 7d 0a 64 6f 5f 74 65 73 74  9 100 4}.do_test
1bc0: 20 77 68 65 72 65 2d 31 2e 34 30 20 7b 0a 20 20   where-1.40 {.  
1bd0: 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 28 77  count {SELECT (w
1be0: 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  ) FROM t1 WHERE 
1bf0: 28 77 29 3d 3d 28 39 37 29 7d 0a 7d 20 7b 39 37  (w)==(97)}.} {97
1c00: 20 32 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   2}.do_test wher
1c10: 65 2d 31 2e 34 31 20 7b 0a 20 20 63 6f 75 6e 74  e-1.41 {.  count
1c20: 20 7b 53 45 4c 45 43 54 20 28 77 29 20 46 52 4f   {SELECT (w) FRO
1c30: 4d 20 74 31 20 57 48 45 52 45 20 28 28 77 29 2b  M t1 WHERE ((w)+
1c40: 28 31 29 29 3d 3d 28 39 38 29 7d 0a 7d 20 7b 39  (1))==(98)}.} {9
1c50: 37 20 39 39 7d 0a 0a 0a 23 20 44 6f 20 74 68 65  7 99}...# Do the
1c60: 20 73 61 6d 65 20 6b 69 6e 64 20 6f 66 20 74 68   same kind of th
1c70: 69 6e 67 20 65 78 63 65 70 74 20 75 73 65 20 61  ing except use a
1c80: 20 6a 6f 69 6e 20 61 73 20 74 68 65 20 64 61 74   join as the dat
1c90: 61 20 73 6f 75 72 63 65 2e 0a 23 0a 64 6f 5f 74  a source..#.do_t
1ca0: 65 73 74 20 77 68 65 72 65 2d 32 2e 31 20 7b 0a  est where-2.1 {.
1cb0: 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45    count {.    SE
1cc0: 4c 45 43 54 20 77 2c 20 70 20 46 52 4f 4d 20 74  LECT w, p FROM t
1cd0: 32 2c 20 74 31 0a 20 20 20 20 57 48 45 52 45 20  2, t1.    WHERE 
1ce0: 78 3d 71 20 41 4e 44 20 79 3d 73 20 41 4e 44 20  x=q AND y=s AND 
1cf0: 72 3d 38 39 37 37 0a 20 20 7d 0a 7d 20 7b 33 34  r=8977.  }.} {34
1d00: 20 36 37 20 36 7d 0a 64 6f 5f 74 65 73 74 20 77   67 6}.do_test w
1d10: 68 65 72 65 2d 32 2e 32 20 7b 0a 20 20 63 6f 75  here-2.2 {.  cou
1d20: 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  nt {.    SELECT 
1d30: 77 2c 20 70 20 46 52 4f 4d 20 74 32 2c 20 74 31  w, p FROM t2, t1
1d40: 0a 20 20 20 20 57 48 45 52 45 20 78 3d 71 20 41  .    WHERE x=q A
1d50: 4e 44 20 73 3d 79 20 41 4e 44 20 72 3d 38 39 37  ND s=y AND r=897
1d60: 37 0a 20 20 7d 0a 7d 20 7b 33 34 20 36 37 20 36  7.  }.} {34 67 6
1d70: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
1d80: 32 2e 33 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a  2.3 {.  count {.
1d90: 20 20 20 20 53 45 4c 45 43 54 20 77 2c 20 70 20      SELECT w, p 
1da0: 46 52 4f 4d 20 74 32 2c 20 74 31 0a 20 20 20 20  FROM t2, t1.    
1db0: 57 48 45 52 45 20 78 3d 71 20 41 4e 44 20 73 3d  WHERE x=q AND s=
1dc0: 79 20 41 4e 44 20 72 3d 38 39 37 37 20 41 4e 44  y AND r=8977 AND
1dd0: 20 77 3e 31 30 0a 20 20 7d 0a 7d 20 7b 33 34 20   w>10.  }.} {34 
1de0: 36 37 20 36 7d 0a 64 6f 5f 74 65 73 74 20 77 68  67 6}.do_test wh
1df0: 65 72 65 2d 32 2e 34 20 7b 0a 20 20 63 6f 75 6e  ere-2.4 {.  coun
1e00: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77  t {.    SELECT w
1e10: 2c 20 70 20 46 52 4f 4d 20 74 32 2c 20 74 31 0a  , p FROM t2, t1.
1e20: 20 20 20 20 57 48 45 52 45 20 70 3c 38 30 20 41      WHERE p<80 A
1e30: 4e 44 20 78 3d 71 20 41 4e 44 20 73 3d 79 20 41  ND x=q AND s=y A
1e40: 4e 44 20 72 3d 38 39 37 37 20 41 4e 44 20 77 3e  ND r=8977 AND w>
1e50: 31 30 0a 20 20 7d 0a 7d 20 7b 33 34 20 36 37 20  10.  }.} {34 67 
1e60: 36 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  6}.do_test where
1e70: 2d 32 2e 35 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  -2.5 {.  count {
1e80: 0a 20 20 20 20 53 45 4c 45 43 54 20 77 2c 20 70  .    SELECT w, p
1e90: 20 46 52 4f 4d 20 74 32 2c 20 74 31 0a 20 20 20   FROM t2, t1.   
1ea0: 20 57 48 45 52 45 20 70 3c 38 30 20 41 4e 44 20   WHERE p<80 AND 
1eb0: 78 3d 71 20 41 4e 44 20 38 39 37 37 3d 72 20 41  x=q AND 8977=r A
1ec0: 4e 44 20 73 3d 79 20 41 4e 44 20 77 3e 31 30 0a  ND s=y AND w>10.
1ed0: 20 20 7d 0a 7d 20 7b 33 34 20 36 37 20 36 7d 0a    }.} {34 67 6}.
1ee0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 32 2e  do_test where-2.
1ef0: 36 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20  6 {.  count {.  
1f00: 20 20 53 45 4c 45 43 54 20 77 2c 20 70 20 46 52    SELECT w, p FR
1f10: 4f 4d 20 74 32 2c 20 74 31 0a 20 20 20 20 57 48  OM t2, t1.    WH
1f20: 45 52 45 20 78 3d 71 20 41 4e 44 20 70 3d 37 37  ERE x=q AND p=77
1f30: 20 41 4e 44 20 73 3d 79 20 41 4e 44 20 77 3e 35   AND s=y AND w>5
1f40: 0a 20 20 7d 0a 7d 20 7b 32 34 20 37 37 20 36 7d  .  }.} {24 77 6}
1f50: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 32  .do_test where-2
1f60: 2e 37 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20  .7 {.  count {. 
1f70: 20 20 20 53 45 4c 45 43 54 20 77 2c 20 70 20 46     SELECT w, p F
1f80: 52 4f 4d 20 74 31 2c 20 74 32 0a 20 20 20 20 57  ROM t1, t2.    W
1f90: 48 45 52 45 20 78 3d 71 20 41 4e 44 20 70 3e 37  HERE x=q AND p>7
1fa0: 37 20 41 4e 44 20 73 3d 79 20 41 4e 44 20 77 3d  7 AND s=y AND w=
1fb0: 35 0a 20 20 7d 0a 7d 20 7b 35 20 39 36 20 36 7d  5.  }.} {5 96 6}
1fc0: 0a 0a 23 20 4c 65 74 73 20 64 6f 20 61 20 33 2d  ..# Lets do a 3-
1fd0: 77 61 79 20 6a 6f 69 6e 2e 0a 23 0a 64 6f 5f 74  way join..#.do_t
1fe0: 65 73 74 20 77 68 65 72 65 2d 33 2e 31 20 7b 0a  est where-3.1 {.
1ff0: 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45    count {.    SE
2000: 4c 45 43 54 20 41 2e 77 2c 20 42 2e 70 2c 20 43  LECT A.w, B.p, C
2010: 2e 77 20 46 52 4f 4d 20 74 31 20 61 73 20 41 2c  .w FROM t1 as A,
2020: 20 74 32 20 61 73 20 42 2c 20 74 31 20 61 73 20   t2 as B, t1 as 
2030: 43 0a 20 20 20 20 57 48 45 52 45 20 43 2e 77 3d  C.    WHERE C.w=
2040: 31 30 31 2d 42 2e 70 20 41 4e 44 20 42 2e 72 3d  101-B.p AND B.r=
2050: 31 30 32 30 32 2d 41 2e 79 20 41 4e 44 20 41 2e  10202-A.y AND A.
2060: 77 3d 31 31 0a 20 20 7d 0a 7d 20 7b 31 31 20 39  w=11.  }.} {11 9
2070: 30 20 31 31 20 38 7d 0a 64 6f 5f 74 65 73 74 20  0 11 8}.do_test 
2080: 77 68 65 72 65 2d 33 2e 32 20 7b 0a 20 20 63 6f  where-3.2 {.  co
2090: 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  unt {.    SELECT
20a0: 20 41 2e 77 2c 20 42 2e 70 2c 20 43 2e 77 20 46   A.w, B.p, C.w F
20b0: 52 4f 4d 20 74 31 20 61 73 20 41 2c 20 74 32 20  ROM t1 as A, t2 
20c0: 61 73 20 42 2c 20 74 31 20 61 73 20 43 0a 20 20  as B, t1 as C.  
20d0: 20 20 57 48 45 52 45 20 43 2e 77 3d 31 30 31 2d    WHERE C.w=101-
20e0: 42 2e 70 20 41 4e 44 20 42 2e 72 3d 31 30 32 30  B.p AND B.r=1020
20f0: 32 2d 41 2e 79 20 41 4e 44 20 41 2e 77 3d 31 32  2-A.y AND A.w=12
2100: 0a 20 20 7d 0a 7d 20 7b 31 32 20 38 39 20 31 32  .  }.} {12 89 12
2110: 20 38 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   8}.do_test wher
2120: 65 2d 33 2e 33 20 7b 0a 20 20 63 6f 75 6e 74 20  e-3.3 {.  count 
2130: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 41 2e 77  {.    SELECT A.w
2140: 2c 20 42 2e 70 2c 20 43 2e 77 20 46 52 4f 4d 20  , B.p, C.w FROM 
2150: 74 31 20 61 73 20 41 2c 20 74 32 20 61 73 20 42  t1 as A, t2 as B
2160: 2c 20 74 31 20 61 73 20 43 0a 20 20 20 20 57 48  , t1 as C.    WH
2170: 45 52 45 20 41 2e 77 3d 31 35 20 41 4e 44 20 42  ERE A.w=15 AND B
2180: 2e 70 3d 43 2e 77 20 41 4e 44 20 42 2e 72 3d 31  .p=C.w AND B.r=1
2190: 30 32 30 32 2d 41 2e 79 0a 20 20 7d 0a 7d 20 7b  0202-A.y.  }.} {
21a0: 31 35 20 38 36 20 38 36 20 38 7d 0a 0a 23 20 54  15 86 86 8}..# T
21b0: 65 73 74 20 74 6f 20 73 65 65 20 74 68 61 74 20  est to see that 
21c0: 74 68 65 20 73 70 65 63 69 61 6c 20 63 61 73 65  the special case
21d0: 20 6f 66 20 61 20 63 6f 6e 73 74 61 6e 74 20 57   of a constant W
21e0: 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 0a 23  HERE clause is.#
21f0: 20 68 61 6e 64 6c 65 64 2e 0a 23 0a 64 6f 5f 74   handled..#.do_t
2200: 65 73 74 20 77 68 65 72 65 2d 34 2e 31 20 7b 0a  est where-4.1 {.
2210: 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45    count {.    SE
2220: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
2230: 48 45 52 45 20 30 0a 20 20 7d 0a 7d 20 7b 30 7d  HERE 0.  }.} {0}
2240: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 34  .do_test where-4
2250: 2e 32 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20  .2 {.  count {. 
2260: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
2270: 20 74 31 20 57 48 45 52 45 20 31 20 4c 49 4d 49   t1 WHERE 1 LIMI
2280: 54 20 31 0a 20 20 7d 0a 7d 20 7b 31 20 30 20 34  T 1.  }.} {1 0 4
2290: 20 30 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   0}.do_test wher
22a0: 65 2d 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  e-4.3 {.  execsq
22b0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 39  l {.    SELECT 9
22c0: 39 20 57 48 45 52 45 20 30 0a 20 20 7d 0a 7d 20  9 WHERE 0.  }.} 
22d0: 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  {}.do_test where
22e0: 2d 34 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.4 {.  execsql
22f0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 39 39   {.    SELECT 99
2300: 20 57 48 45 52 45 20 31 0a 20 20 7d 0a 7d 20 7b   WHERE 1.  }.} {
2310: 39 39 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  99}.do_test wher
2320: 65 2d 34 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  e-4.5 {.  execsq
2330: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 39  l {.    SELECT 9
2340: 39 20 57 48 45 52 45 20 30 2e 31 0a 20 20 7d 0a  9 WHERE 0.1.  }.
2350: 7d 20 7b 39 39 7d 0a 64 6f 5f 74 65 73 74 20 77  } {99}.do_test w
2360: 68 65 72 65 2d 34 2e 36 20 7b 0a 20 20 65 78 65  here-4.6 {.  exe
2370: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
2380: 54 20 39 39 20 57 48 45 52 45 20 30 2e 30 0a 20  T 99 WHERE 0.0. 
2390: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
23a0: 77 68 65 72 65 2d 34 2e 37 20 7b 0a 20 20 65 78  where-4.7 {.  ex
23b0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
23c0: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
23d0: 20 74 31 20 57 48 45 52 45 20 74 31 2e 77 0a 20   t1 WHERE t1.w. 
23e0: 20 7d 0a 7d 20 7b 31 30 30 7d 0a 0a 23 20 56 65   }.} {100}..# Ve
23f0: 72 69 66 79 20 74 68 61 74 20 49 4e 20 6f 70 65  rify that IN ope
2400: 72 61 74 6f 72 73 20 69 6e 20 61 20 57 48 45 52  rators in a WHER
2410: 45 20 63 6c 61 75 73 65 20 61 72 65 20 68 61 6e  E clause are han
2420: 64 6c 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a  dled correctly..
2430: 23 20 4f 6d 69 74 20 74 68 65 73 65 20 74 65 73  # Omit these tes
2440: 74 73 20 69 66 20 74 68 65 20 62 75 69 6c 64 20  ts if the build 
2450: 69 73 20 6e 6f 74 20 63 61 70 61 62 6c 65 20 6f  is not capable o
2460: 66 20 73 75 62 2d 71 75 65 72 69 65 73 2e 0a 23  f sub-queries..#
2470: 0a 69 66 63 61 70 61 62 6c 65 20 73 75 62 71 75  .ifcapable subqu
2480: 65 72 79 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  ery {.  do_test 
2490: 77 68 65 72 65 2d 35 2e 31 20 7b 0a 20 20 20 20  where-5.1 {.    
24a0: 63 6f 75 6e 74 20 7b 0a 20 20 20 20 20 20 53 45  count {.      SE
24b0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
24c0: 48 45 52 45 20 72 6f 77 69 64 20 49 4e 20 28 31  HERE rowid IN (1
24d0: 2c 32 2c 33 2c 31 32 33 34 29 20 6f 72 64 65 72  ,2,3,1234) order
24e0: 20 62 79 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d   by 1;.    }.  }
24f0: 20 7b 31 20 30 20 34 20 32 20 31 20 39 20 33 20   {1 0 4 2 1 9 3 
2500: 31 20 31 36 20 34 7d 0a 20 20 64 6f 5f 74 65 73  1 16 4}.  do_tes
2510: 74 20 77 68 65 72 65 2d 35 2e 32 20 7b 0a 20 20  t where-5.2 {.  
2520: 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 20 20    count {.      
2530: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
2540: 20 57 48 45 52 45 20 72 6f 77 69 64 2b 30 20 49   WHERE rowid+0 I
2550: 4e 20 28 31 2c 32 2c 33 2c 31 32 33 34 29 20 6f  N (1,2,3,1234) o
2560: 72 64 65 72 20 62 79 20 31 3b 0a 20 20 20 20 7d  rder by 1;.    }
2570: 0a 20 20 7d 20 7b 31 20 30 20 34 20 32 20 31 20  .  } {1 0 4 2 1 
2580: 39 20 33 20 31 20 31 36 20 31 30 32 7d 0a 20 20  9 3 1 16 102}.  
2590: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 35 2e  do_test where-5.
25a0: 33 61 20 7b 0a 20 20 20 20 63 6f 75 6e 74 20 7b  3a {.    count {
25b0: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20  .      SELECT * 
25c0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77 20  FROM t1 WHERE w 
25d0: 49 4e 20 28 2d 31 2c 31 2c 32 2c 33 29 20 6f 72  IN (-1,1,2,3) or
25e0: 64 65 72 20 62 79 20 31 3b 0a 20 20 20 20 7d 0a  der by 1;.    }.
25f0: 20 20 7d 20 7b 31 20 30 20 34 20 32 20 31 20 39    } {1 0 4 2 1 9
2600: 20 33 20 31 20 31 36 20 31 33 7d 0a 20 20 64 6f   3 1 16 13}.  do
2610: 5f 74 65 73 74 20 77 68 65 72 65 2d 35 2e 33 62  _test where-5.3b
2620: 20 7b 0a 20 20 20 20 63 6f 75 6e 74 20 7b 0a 20   {.    count {. 
2630: 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52       SELECT * FR
2640: 4f 4d 20 74 31 20 57 48 45 52 45 20 77 20 49 4e  OM t1 WHERE w IN
2650: 20 28 33 2c 2d 31 2c 31 2c 32 29 20 6f 72 64 65   (3,-1,1,2) orde
2660: 72 20 62 79 20 31 3b 0a 20 20 20 20 7d 0a 20 20  r by 1;.    }.  
2670: 7d 20 7b 31 20 30 20 34 20 32 20 31 20 39 20 33  } {1 0 4 2 1 9 3
2680: 20 31 20 31 36 20 31 33 7d 0a 20 20 64 6f 5f 74   1 16 13}.  do_t
2690: 65 73 74 20 77 68 65 72 65 2d 35 2e 33 63 20 7b  est where-5.3c {
26a0: 0a 20 20 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20  .    count {.   
26b0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
26c0: 20 74 31 20 57 48 45 52 45 20 77 20 49 4e 20 28   t1 WHERE w IN (
26d0: 33 2c 32 2c 2d 31 2c 31 2c 32 29 20 6f 72 64 65  3,2,-1,1,2) orde
26e0: 72 20 62 79 20 31 3b 0a 20 20 20 20 7d 0a 20 20  r by 1;.    }.  
26f0: 7d 20 7b 31 20 30 20 34 20 32 20 31 20 39 20 33  } {1 0 4 2 1 9 3
2700: 20 31 20 31 36 20 31 33 7d 0a 20 20 64 6f 5f 74   1 16 13}.  do_t
2710: 65 73 74 20 77 68 65 72 65 2d 35 2e 33 64 20 7b  est where-5.3d {
2720: 0a 20 20 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20  .    count {.   
2730: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
2740: 20 74 31 20 57 48 45 52 45 20 77 20 49 4e 20 28   t1 WHERE w IN (
2750: 2d 31 2c 31 2c 32 2c 33 29 20 6f 72 64 65 72 20  -1,1,2,3) order 
2760: 62 79 20 31 20 44 45 53 43 3b 0a 20 20 20 20 7d  by 1 DESC;.    }
2770: 0a 20 20 7d 20 7b 33 20 31 20 31 36 20 32 20 31  .  } {3 1 16 2 1
2780: 20 39 20 31 20 30 20 34 20 31 32 7d 0a 20 20 64   9 1 0 4 12}.  d
2790: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 35 2e 34  o_test where-5.4
27a0: 20 7b 0a 20 20 20 20 63 6f 75 6e 74 20 7b 0a 20   {.    count {. 
27b0: 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52       SELECT * FR
27c0: 4f 4d 20 74 31 20 57 48 45 52 45 20 77 2b 30 20  OM t1 WHERE w+0 
27d0: 49 4e 20 28 2d 31 2c 31 2c 32 2c 33 29 20 6f 72  IN (-1,1,2,3) or
27e0: 64 65 72 20 62 79 20 31 3b 0a 20 20 20 20 7d 0a  der by 1;.    }.
27f0: 20 20 7d 20 7b 31 20 30 20 34 20 32 20 31 20 39    } {1 0 4 2 1 9
2800: 20 33 20 31 20 31 36 20 31 30 32 7d 0a 20 20 64   3 1 16 102}.  d
2810: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 35 2e 35  o_test where-5.5
2820: 20 7b 0a 20 20 20 20 63 6f 75 6e 74 20 7b 0a 20   {.    count {. 
2830: 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52       SELECT * FR
2840: 4f 4d 20 74 31 20 57 48 45 52 45 20 72 6f 77 69  OM t1 WHERE rowi
2850: 64 20 49 4e 20 0a 20 20 20 20 20 20 20 20 20 28  d IN .         (
2860: 73 65 6c 65 63 74 20 72 6f 77 69 64 20 66 72 6f  select rowid fro
2870: 6d 20 74 31 20 77 68 65 72 65 20 72 6f 77 69 64  m t1 where rowid
2880: 20 49 4e 20 28 2d 31 2c 32 2c 34 29 29 0a 20 20   IN (-1,2,4)).  
2890: 20 20 20 20 4f 52 44 45 52 20 42 59 20 31 3b 0a      ORDER BY 1;.
28a0: 20 20 20 20 7d 0a 20 20 7d 20 7b 32 20 31 20 39      }.  } {2 1 9
28b0: 20 34 20 32 20 32 35 20 33 7d 0a 20 20 64 6f 5f   4 2 25 3}.  do_
28c0: 74 65 73 74 20 77 68 65 72 65 2d 35 2e 36 20 7b  test where-5.6 {
28d0: 0a 20 20 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20  .    count {.   
28e0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
28f0: 20 74 31 20 57 48 45 52 45 20 72 6f 77 69 64 2b   t1 WHERE rowid+
2900: 30 20 49 4e 20 0a 20 20 20 20 20 20 20 20 20 28  0 IN .         (
2910: 73 65 6c 65 63 74 20 72 6f 77 69 64 20 66 72 6f  select rowid fro
2920: 6d 20 74 31 20 77 68 65 72 65 20 72 6f 77 69 64  m t1 where rowid
2930: 20 49 4e 20 28 2d 31 2c 32 2c 34 29 29 0a 20 20   IN (-1,2,4)).  
2940: 20 20 20 20 4f 52 44 45 52 20 42 59 20 31 3b 0a      ORDER BY 1;.
2950: 20 20 20 20 7d 0a 20 20 7d 20 7b 32 20 31 20 39      }.  } {2 1 9
2960: 20 34 20 32 20 32 35 20 31 30 33 7d 0a 20 20 64   4 2 25 103}.  d
2970: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 35 2e 37  o_test where-5.7
2980: 20 7b 0a 20 20 20 20 63 6f 75 6e 74 20 7b 0a 20   {.    count {. 
2990: 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52       SELECT * FR
29a0: 4f 4d 20 74 31 20 57 48 45 52 45 20 77 20 49 4e  OM t1 WHERE w IN
29b0: 20 0a 20 20 20 20 20 20 20 20 20 28 73 65 6c 65   .         (sele
29c0: 63 74 20 72 6f 77 69 64 20 66 72 6f 6d 20 74 31  ct rowid from t1
29d0: 20 77 68 65 72 65 20 72 6f 77 69 64 20 49 4e 20   where rowid IN 
29e0: 28 2d 31 2c 32 2c 34 29 29 0a 20 20 20 20 20 20  (-1,2,4)).      
29f0: 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20 20 20  ORDER BY 1;.    
2a00: 7d 0a 20 20 7d 20 7b 32 20 31 20 39 20 34 20 32  }.  } {2 1 9 4 2
2a10: 20 32 35 20 39 7d 0a 20 20 64 6f 5f 74 65 73 74   25 9}.  do_test
2a20: 20 77 68 65 72 65 2d 35 2e 38 20 7b 0a 20 20 20   where-5.8 {.   
2a30: 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 20 20 53   count {.      S
2a40: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
2a50: 57 48 45 52 45 20 77 2b 30 20 49 4e 20 0a 20 20  WHERE w+0 IN .  
2a60: 20 20 20 20 20 20 20 28 73 65 6c 65 63 74 20 72         (select r
2a70: 6f 77 69 64 20 66 72 6f 6d 20 74 31 20 77 68 65  owid from t1 whe
2a80: 72 65 20 72 6f 77 69 64 20 49 4e 20 28 2d 31 2c  re rowid IN (-1,
2a90: 32 2c 34 29 29 0a 20 20 20 20 20 20 4f 52 44 45  2,4)).      ORDE
2aa0: 52 20 42 59 20 31 3b 0a 20 20 20 20 7d 0a 20 20  R BY 1;.    }.  
2ab0: 7d 20 7b 32 20 31 20 39 20 34 20 32 20 32 35 20  } {2 1 9 4 2 25 
2ac0: 31 30 33 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77  103}.  do_test w
2ad0: 68 65 72 65 2d 35 2e 39 20 7b 0a 20 20 20 20 63  here-5.9 {.    c
2ae0: 6f 75 6e 74 20 7b 0a 20 20 20 20 20 20 53 45 4c  ount {.      SEL
2af0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
2b00: 45 52 45 20 78 20 49 4e 20 28 31 2c 37 29 20 4f  ERE x IN (1,7) O
2b10: 52 44 45 52 20 42 59 20 31 3b 0a 20 20 20 20 7d  RDER BY 1;.    }
2b20: 0a 20 20 7d 20 7b 32 20 31 20 39 20 33 20 31 20  .  } {2 1 9 3 1 
2b30: 31 36 20 37 7d 0a 20 20 64 6f 5f 74 65 73 74 20  16 7}.  do_test 
2b40: 77 68 65 72 65 2d 35 2e 31 30 20 7b 0a 20 20 20  where-5.10 {.   
2b50: 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 20 20 53   count {.      S
2b60: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
2b70: 57 48 45 52 45 20 78 2b 30 20 49 4e 20 28 31 2c  WHERE x+0 IN (1,
2b80: 37 29 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20  7) ORDER BY 1;. 
2b90: 20 20 20 7d 0a 20 20 7d 20 7b 32 20 31 20 39 20     }.  } {2 1 9 
2ba0: 33 20 31 20 31 36 20 31 39 39 7d 0a 20 20 64 6f  3 1 16 199}.  do
2bb0: 5f 74 65 73 74 20 77 68 65 72 65 2d 35 2e 31 31  _test where-5.11
2bc0: 20 7b 0a 20 20 20 20 63 6f 75 6e 74 20 7b 0a 20   {.    count {. 
2bd0: 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52       SELECT * FR
2be0: 4f 4d 20 74 31 20 57 48 45 52 45 20 79 20 49 4e  OM t1 WHERE y IN
2bf0: 20 28 36 34 30 30 2c 38 31 30 30 29 20 4f 52 44   (6400,8100) ORD
2c00: 45 52 20 42 59 20 31 3b 0a 20 20 20 20 7d 0a 20  ER BY 1;.    }. 
2c10: 20 7d 20 7b 37 39 20 36 20 36 34 30 30 20 38 39   } {79 6 6400 89
2c20: 20 36 20 38 31 30 30 20 31 39 39 7d 0a 20 20 64   6 8100 199}.  d
2c30: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 35 2e 31  o_test where-5.1
2c40: 32 20 7b 0a 20 20 20 20 63 6f 75 6e 74 20 7b 0a  2 {.    count {.
2c50: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
2c60: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 36  ROM t1 WHERE x=6
2c70: 20 41 4e 44 20 79 20 49 4e 20 28 36 34 30 30 2c   AND y IN (6400,
2c80: 38 31 30 30 29 20 4f 52 44 45 52 20 42 59 20 31  8100) ORDER BY 1
2c90: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 37 39 20  ;.    }.  } {79 
2ca0: 36 20 36 34 30 30 20 38 39 20 36 20 38 31 30 30  6 6400 89 6 8100
2cb0: 20 37 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 68   7}.  do_test wh
2cc0: 65 72 65 2d 35 2e 31 33 20 7b 0a 20 20 20 20 63  ere-5.13 {.    c
2cd0: 6f 75 6e 74 20 7b 0a 20 20 20 20 20 20 53 45 4c  ount {.      SEL
2ce0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
2cf0: 45 52 45 20 78 20 49 4e 20 28 31 2c 37 29 20 41  ERE x IN (1,7) A
2d00: 4e 44 20 79 20 4e 4f 54 20 49 4e 20 28 36 34 30  ND y NOT IN (640
2d10: 30 2c 38 31 30 30 29 20 4f 52 44 45 52 20 42 59  0,8100) ORDER BY
2d20: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32   1;.    }.  } {2
2d30: 20 31 20 39 20 33 20 31 20 31 36 20 37 7d 0a 20   1 9 3 1 16 7}. 
2d40: 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 35   do_test where-5
2d50: 2e 31 34 20 7b 0a 20 20 20 20 63 6f 75 6e 74 20  .14 {.    count 
2d60: 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a  {.      SELECT *
2d70: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
2d80: 20 49 4e 20 28 31 2c 37 29 20 41 4e 44 20 79 20   IN (1,7) AND y 
2d90: 49 4e 20 28 39 2c 31 30 29 20 4f 52 44 45 52 20  IN (9,10) ORDER 
2da0: 42 59 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  BY 1;.    }.  } 
2db0: 7b 32 20 31 20 39 20 38 7d 0a 20 20 64 6f 5f 74  {2 1 9 8}.  do_t
2dc0: 65 73 74 20 77 68 65 72 65 2d 35 2e 31 35 20 7b  est where-5.15 {
2dd0: 0a 20 20 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20  .    count {.   
2de0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
2df0: 20 74 31 20 57 48 45 52 45 20 78 20 49 4e 20 28   t1 WHERE x IN (
2e00: 31 2c 37 29 20 41 4e 44 20 79 20 49 4e 20 28 39  1,7) AND y IN (9
2e10: 2c 31 36 29 20 4f 52 44 45 52 20 42 59 20 31 3b  ,16) ORDER BY 1;
2e20: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 20 31 20  .    }.  } {2 1 
2e30: 39 20 33 20 31 20 31 36 20 31 31 7d 0a 20 20 64  9 3 1 16 11}.  d
2e40: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 35 2e 31  o_test where-5.1
2e50: 30 30 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c  00 {.    db eval
2e60: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
2e70: 77 2c 20 78 2c 20 79 20 46 52 4f 4d 20 74 31 20  w, x, y FROM t1 
2e80: 57 48 45 52 45 20 78 20 49 4e 20 28 31 2c 35 29  WHERE x IN (1,5)
2e90: 20 41 4e 44 20 79 20 49 4e 20 28 39 2c 38 2c 33   AND y IN (9,8,3
2ea0: 30 32 35 2c 31 30 30 30 2c 33 39 36 39 29 0a 20  025,1000,3969). 
2eb0: 20 20 20 20 20 20 4f 52 44 45 52 20 42 59 20 78        ORDER BY x
2ec0: 2c 20 79 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32  , y.    }.  } {2
2ed0: 20 31 20 39 20 35 34 20 35 20 33 30 32 35 20 36   1 9 54 5 3025 6
2ee0: 32 20 35 20 33 39 36 39 7d 0a 20 20 64 6f 5f 74  2 5 3969}.  do_t
2ef0: 65 73 74 20 77 68 65 72 65 2d 35 2e 31 30 31 20  est where-5.101 
2f00: 7b 0a 20 20 20 20 64 62 20 65 76 61 6c 20 7b 0a  {.    db eval {.
2f10: 20 20 20 20 20 20 53 45 4c 45 43 54 20 77 2c 20        SELECT w, 
2f20: 78 2c 20 79 20 46 52 4f 4d 20 74 31 20 57 48 45  x, y FROM t1 WHE
2f30: 52 45 20 78 20 49 4e 20 28 31 2c 35 29 20 41 4e  RE x IN (1,5) AN
2f40: 44 20 79 20 49 4e 20 28 39 2c 38 2c 33 30 32 35  D y IN (9,8,3025
2f50: 2c 31 30 30 30 2c 33 39 36 39 29 0a 20 20 20 20  ,1000,3969).    
2f60: 20 20 20 4f 52 44 45 52 20 42 59 20 78 20 44 45     ORDER BY x DE
2f70: 53 43 2c 20 79 20 44 45 53 43 0a 20 20 20 20 7d  SC, y DESC.    }
2f80: 0a 20 20 7d 20 7b 36 32 20 35 20 33 39 36 39 20  .  } {62 5 3969 
2f90: 35 34 20 35 20 33 30 32 35 20 32 20 31 20 39 7d  54 5 3025 2 1 9}
2fa0: 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65  .  do_test where
2fb0: 2d 35 2e 31 30 32 20 7b 0a 20 20 20 20 64 62 20  -5.102 {.    db 
2fc0: 65 76 61 6c 20 7b 0a 20 20 20 20 20 20 53 45 4c  eval {.      SEL
2fd0: 45 43 54 20 77 2c 20 78 2c 20 79 20 46 52 4f 4d  ECT w, x, y FROM
2fe0: 20 74 31 20 57 48 45 52 45 20 78 20 49 4e 20 28   t1 WHERE x IN (
2ff0: 31 2c 35 29 20 41 4e 44 20 79 20 49 4e 20 28 39  1,5) AND y IN (9
3000: 2c 38 2c 33 30 32 35 2c 31 30 30 30 2c 33 39 36  ,8,3025,1000,396
3010: 39 29 0a 20 20 20 20 20 20 20 4f 52 44 45 52 20  9).       ORDER 
3020: 42 59 20 78 20 44 45 53 43 2c 20 79 0a 20 20 20  BY x DESC, y.   
3030: 20 7d 0a 20 20 7d 20 7b 35 34 20 35 20 33 30 32   }.  } {54 5 302
3040: 35 20 36 32 20 35 20 33 39 36 39 20 32 20 31 20  5 62 5 3969 2 1 
3050: 39 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65  9}.  do_test whe
3060: 72 65 2d 35 2e 31 30 33 20 7b 0a 20 20 20 20 64  re-5.103 {.    d
3070: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 20 20 53  b eval {.      S
3080: 45 4c 45 43 54 20 77 2c 20 78 2c 20 79 20 46 52  ELECT w, x, y FR
3090: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20 49 4e  OM t1 WHERE x IN
30a0: 20 28 31 2c 35 29 20 41 4e 44 20 79 20 49 4e 20   (1,5) AND y IN 
30b0: 28 39 2c 38 2c 33 30 32 35 2c 31 30 30 30 2c 33  (9,8,3025,1000,3
30c0: 39 36 39 29 0a 20 20 20 20 20 20 20 4f 52 44 45  969).       ORDE
30d0: 52 20 42 59 20 78 2c 20 79 20 44 45 53 43 0a 20  R BY x, y DESC. 
30e0: 20 20 20 7d 0a 20 20 7d 20 7b 32 20 31 20 39 20     }.  } {2 1 9 
30f0: 36 32 20 35 20 33 39 36 39 20 35 34 20 35 20 33  62 5 3969 54 5 3
3100: 30 32 35 7d 0a 7d 0a 0a 23 20 54 68 69 73 20 70  025}.}..# This p
3110: 72 6f 63 65 64 75 72 65 20 65 78 65 63 75 74 65  rocedure execute
3120: 73 20 74 68 65 20 53 51 4c 2e 20 20 54 68 65 6e  s the SQL.  Then
3130: 20 69 74 20 63 68 65 63 6b 73 20 74 6f 20 73 65   it checks to se
3140: 65 20 69 66 20 74 68 65 20 4f 50 5f 53 6f 72 74  e if the OP_Sort
3150: 0a 23 20 6f 70 63 6f 64 65 20 77 61 73 20 65 78  .# opcode was ex
3160: 65 63 75 74 65 64 2e 20 20 49 66 20 61 6e 20 4f  ecuted.  If an O
3170: 50 5f 53 6f 72 74 20 64 69 64 20 6f 63 63 75 72  P_Sort did occur
3180: 2c 20 74 68 65 6e 20 22 73 6f 72 74 22 20 69 73  , then "sort" is
3190: 20 61 70 70 65 6e 64 65 64 0a 23 20 74 6f 20 74   appended.# to t
31a0: 68 65 20 72 65 73 75 6c 74 2e 20 20 49 66 20 6e  he result.  If n
31b0: 6f 20 4f 50 5f 53 6f 72 74 20 68 61 70 70 65 6e  o OP_Sort happen
31c0: 65 64 2c 20 74 68 65 6e 20 22 6e 6f 73 6f 72 74  ed, then "nosort
31d0: 22 20 69 73 20 61 70 70 65 6e 64 65 64 2e 0a 23  " is appended..#
31e0: 0a 23 20 54 68 69 73 20 70 72 6f 63 65 64 75 72  .# This procedur
31f0: 65 20 69 73 20 75 73 65 64 20 74 6f 20 63 68 65  e is used to che
3200: 63 6b 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  ck to make sure 
3210: 73 6f 72 74 69 6e 67 20 69 73 20 6f 72 20 69 73  sorting is or is
3220: 20 6e 6f 74 0a 23 20 6f 63 63 75 72 72 69 6e 67   not.# occurring
3230: 20 61 73 20 65 78 70 65 63 74 65 64 2e 0a 23 0a   as expected..#.
3240: 70 72 6f 63 20 63 6b 73 6f 72 74 20 7b 73 71 6c  proc cksort {sql
3250: 7d 20 7b 0a 20 20 73 65 74 20 64 61 74 61 20 5b  } {.  set data [
3260: 65 78 65 63 73 71 6c 20 24 73 71 6c 5d 0a 20 20  execsql $sql].  
3270: 69 66 20 7b 5b 64 62 20 73 74 61 74 75 73 20 73  if {[db status s
3280: 6f 72 74 5d 7d 20 7b 73 65 74 20 78 20 73 6f 72  ort]} {set x sor
3290: 74 7d 20 7b 73 65 74 20 78 20 6e 6f 73 6f 72 74  t} {set x nosort
32a0: 7d 0a 20 20 6c 61 70 70 65 6e 64 20 64 61 74 61  }.  lappend data
32b0: 20 24 78 0a 20 20 72 65 74 75 72 6e 20 24 64 61   $x.  return $da
32c0: 74 61 0a 7d 0a 23 20 43 68 65 63 6b 20 6f 75 74  ta.}.# Check out
32d0: 20 74 68 65 20 6c 6f 67 69 63 20 74 68 61 74 20   the logic that 
32e0: 61 74 74 65 6d 70 74 73 20 74 6f 20 69 6d 70 6c  attempts to impl
32f0: 65 6d 65 6e 74 20 74 68 65 20 4f 52 44 45 52 20  ement the ORDER 
3300: 42 59 20 63 6c 61 75 73 65 0a 23 20 75 73 69 6e  BY clause.# usin
3310: 67 20 61 6e 20 69 6e 64 65 78 20 72 61 74 68 65  g an index rathe
3320: 72 20 74 68 61 6e 20 62 79 20 73 6f 72 74 69 6e  r than by sortin
3330: 67 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68 65  g..#.do_test whe
3340: 72 65 2d 36 2e 31 20 7b 0a 20 20 65 78 65 63 73  re-6.1 {.  execs
3350: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
3360: 54 41 42 4c 45 20 74 33 28 61 2c 62 2c 63 29 3b  TABLE t3(a,b,c);
3370: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
3380: 58 20 74 33 61 20 4f 4e 20 74 33 28 61 29 3b 0a  X t3a ON t3(a);.
3390: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
33a0: 20 74 33 62 63 20 4f 4e 20 74 33 28 62 2c 63 29   t3bc ON t3(b,c)
33b0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  ;.    CREATE IND
33c0: 45 58 20 74 33 61 63 62 20 4f 4e 20 74 33 28 61  EX t3acb ON t3(a
33d0: 2c 63 2c 62 29 3b 0a 20 20 20 20 49 4e 53 45 52  ,c,b);.    INSER
33e0: 54 20 49 4e 54 4f 20 74 33 20 53 45 4c 45 43 54  T INTO t3 SELECT
33f0: 20 77 2c 20 31 30 31 2d 77 2c 20 79 20 46 52 4f   w, 101-w, y FRO
3400: 4d 20 74 31 3b 0a 20 20 20 20 53 45 4c 45 43 54  M t1;.    SELECT
3410: 20 63 6f 75 6e 74 28 2a 29 2c 20 73 75 6d 28 61   count(*), sum(a
3420: 29 2c 20 73 75 6d 28 62 29 2c 20 73 75 6d 28 63  ), sum(b), sum(c
3430: 29 20 46 52 4f 4d 20 74 33 3b 0a 20 20 7d 0a 7d  ) FROM t3;.  }.}
3440: 20 7b 31 30 30 20 35 30 35 30 20 35 30 35 30 20   {100 5050 5050 
3450: 33 34 38 35 35 30 7d 0a 64 6f 5f 74 65 73 74 20  348550}.do_test 
3460: 77 68 65 72 65 2d 36 2e 32 20 7b 0a 20 20 63 6b  where-6.2 {.  ck
3470: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
3480: 54 20 2a 20 46 52 4f 4d 20 74 33 20 4f 52 44 45  T * FROM t3 ORDE
3490: 52 20 42 59 20 61 20 4c 49 4d 49 54 20 33 0a 20  R BY a LIMIT 3. 
34a0: 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20 32 20   }.} {1 100 4 2 
34b0: 39 39 20 39 20 33 20 39 38 20 31 36 20 6e 6f 73  99 9 3 98 16 nos
34c0: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
34d0: 72 65 2d 36 2e 33 20 7b 0a 20 20 63 6b 73 6f 72  re-6.3 {.  cksor
34e0: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t {.    SELECT *
34f0: 20 46 52 4f 4d 20 74 33 20 4f 52 44 45 52 20 42   FROM t3 ORDER B
3500: 59 20 61 2b 31 20 4c 49 4d 49 54 20 33 0a 20 20  Y a+1 LIMIT 3.  
3510: 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20 32 20 39  }.} {1 100 4 2 9
3520: 39 20 39 20 33 20 39 38 20 31 36 20 73 6f 72 74  9 9 3 98 16 sort
3530: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
3540: 36 2e 34 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  6.4 {.  cksort {
3550: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
3560: 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3c 31 30  OM t3 WHERE a<10
3570: 20 4f 52 44 45 52 20 42 59 20 61 20 4c 49 4d 49   ORDER BY a LIMI
3580: 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30  T 3.  }.} {1 100
3590: 20 34 20 32 20 39 39 20 39 20 33 20 39 38 20 31   4 2 99 9 3 98 1
35a0: 36 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  6 nosort}.do_tes
35b0: 74 20 77 68 65 72 65 2d 36 2e 35 20 7b 0a 20 20  t where-6.5 {.  
35c0: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
35d0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48  ECT * FROM t3 WH
35e0: 45 52 45 20 61 3e 30 20 41 4e 44 20 61 3c 31 30  ERE a>0 AND a<10
35f0: 20 4f 52 44 45 52 20 42 59 20 61 20 4c 49 4d 49   ORDER BY a LIMI
3600: 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30  T 3.  }.} {1 100
3610: 20 34 20 32 20 39 39 20 39 20 33 20 39 38 20 31   4 2 99 9 3 98 1
3620: 36 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  6 nosort}.do_tes
3630: 74 20 77 68 65 72 65 2d 36 2e 36 20 7b 0a 20 20  t where-6.6 {.  
3640: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
3650: 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48  ECT * FROM t3 WH
3660: 45 52 45 20 61 3e 30 20 4f 52 44 45 52 20 42 59  ERE a>0 ORDER BY
3670: 20 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d   a LIMIT 3.  }.}
3680: 20 7b 31 20 31 30 30 20 34 20 32 20 39 39 20 39   {1 100 4 2 99 9
3690: 20 33 20 39 38 20 31 36 20 6e 6f 73 6f 72 74 7d   3 98 16 nosort}
36a0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36  .do_test where-6
36b0: 2e 37 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .7 {.  cksort {.
36c0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
36d0: 4d 20 74 33 20 57 48 45 52 45 20 62 3e 30 20 4f  M t3 WHERE b>0 O
36e0: 52 44 45 52 20 42 59 20 61 20 4c 49 4d 49 54 20  RDER BY a LIMIT 
36f0: 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34  3.  }.} {1 100 4
3700: 20 32 20 39 39 20 39 20 33 20 39 38 20 31 36 20   2 99 9 3 98 16 
3710: 6e 6f 73 6f 72 74 7d 0a 69 66 63 61 70 61 62 6c  nosort}.ifcapabl
3720: 65 20 73 75 62 71 75 65 72 79 20 7b 0a 20 20 64  e subquery {.  d
3730: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e 38  o_test where-6.8
3740: 61 20 7b 0a 20 20 20 20 63 6b 73 6f 72 74 20 7b  a {.    cksort {
3750: 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20  .      SELECT * 
3760: 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 20  FROM t3 WHERE a 
3770: 49 4e 20 28 33 2c 35 2c 37 2c 31 2c 39 2c 34 2c  IN (3,5,7,1,9,4,
3780: 32 29 20 4f 52 44 45 52 20 42 59 20 61 20 4c 49  2) ORDER BY a LI
3790: 4d 49 54 20 33 0a 20 20 20 20 7d 0a 20 20 7d 20  MIT 3.    }.  } 
37a0: 7b 31 20 31 30 30 20 34 20 32 20 39 39 20 39 20  {1 100 4 2 99 9 
37b0: 33 20 39 38 20 31 36 20 6e 6f 73 6f 72 74 7d 0a  3 98 16 nosort}.
37c0: 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d    do_test where-
37d0: 36 2e 38 62 20 7b 0a 20 20 20 20 63 6b 73 6f 72  6.8b {.    cksor
37e0: 74 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  t {.      SELECT
37f0: 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45   * FROM t3 WHERE
3800: 20 61 20 49 4e 20 28 33 2c 35 2c 37 2c 31 2c 39   a IN (3,5,7,1,9
3810: 2c 34 2c 32 29 20 4f 52 44 45 52 20 42 59 20 61  ,4,2) ORDER BY a
3820: 20 44 45 53 43 20 4c 49 4d 49 54 20 33 0a 20 20   DESC LIMIT 3.  
3830: 20 20 7d 0a 20 20 7d 20 7b 39 20 39 32 20 31 30    }.  } {9 92 10
3840: 30 20 37 20 39 34 20 36 34 20 35 20 39 36 20 33  0 7 94 64 5 96 3
3850: 36 20 6e 6f 73 6f 72 74 7d 0a 7d 0a 64 6f 5f 74  6 nosort}.}.do_t
3860: 65 73 74 20 77 68 65 72 65 2d 36 2e 39 2e 31 20  est where-6.9.1 
3870: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
3880: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
3890: 33 20 57 48 45 52 45 20 61 3d 31 20 41 4e 44 20  3 WHERE a=1 AND 
38a0: 63 3e 30 20 4f 52 44 45 52 20 42 59 20 61 20 4c  c>0 ORDER BY a L
38b0: 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20  IMIT 3.  }.} {1 
38c0: 31 30 30 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f  100 4 nosort}.do
38d0: 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e 39 2e  _test where-6.9.
38e0: 31 2e 31 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  1.1 {.  cksort {
38f0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
3900: 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3e 3d 31  OM t3 WHERE a>=1
3910: 20 41 4e 44 20 61 3d 31 20 41 4e 44 20 63 3e 30   AND a=1 AND c>0
3920: 20 4f 52 44 45 52 20 42 59 20 61 20 4c 49 4d 49   ORDER BY a LIMI
3930: 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30  T 3.  }.} {1 100
3940: 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65   4 nosort}.do_te
3950: 73 74 20 77 68 65 72 65 2d 36 2e 39 2e 31 2e 32  st where-6.9.1.2
3960: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
3970: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
3980: 74 33 20 57 48 45 52 45 20 61 3c 32 20 41 4e 44  t3 WHERE a<2 AND
3990: 20 61 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52 44   a=1 AND c>0 ORD
39a0: 45 52 20 42 59 20 61 20 4c 49 4d 49 54 20 33 0a  ER BY a LIMIT 3.
39b0: 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20 6e    }.} {1 100 4 n
39c0: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
39d0: 68 65 72 65 2d 36 2e 39 2e 32 20 7b 0a 20 20 63  here-6.9.2 {.  c
39e0: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
39f0: 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45  CT * FROM t3 WHE
3a00: 52 45 20 61 3d 31 20 41 4e 44 20 63 3e 30 20 4f  RE a=1 AND c>0 O
3a10: 52 44 45 52 20 42 59 20 61 2c 63 20 4c 49 4d 49  RDER BY a,c LIMI
3a20: 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30  T 3.  }.} {1 100
3a30: 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65   4 nosort}.do_te
3a40: 73 74 20 77 68 65 72 65 2d 36 2e 39 2e 33 20 7b  st where-6.9.3 {
3a50: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
3a60: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
3a70: 20 57 48 45 52 45 20 61 3d 31 20 41 4e 44 20 63   WHERE a=1 AND c
3a80: 3e 30 20 4f 52 44 45 52 20 42 59 20 63 20 4c 49  >0 ORDER BY c LI
3a90: 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31  MIT 3.  }.} {1 1
3aa0: 30 30 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f  00 4 nosort}.do_
3ab0: 74 65 73 74 20 77 68 65 72 65 2d 36 2e 39 2e 34  test where-6.9.4
3ac0: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
3ad0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
3ae0: 74 33 20 57 48 45 52 45 20 61 3d 31 20 41 4e 44  t3 WHERE a=1 AND
3af0: 20 63 3e 30 20 4f 52 44 45 52 20 42 59 20 61 20   c>0 ORDER BY a 
3b00: 44 45 53 43 20 4c 49 4d 49 54 20 33 0a 20 20 7d  DESC LIMIT 3.  }
3b10: 0a 7d 20 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f  .} {1 100 4 noso
3b20: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
3b30: 65 2d 36 2e 39 2e 35 20 7b 0a 20 20 63 6b 73 6f  e-6.9.5 {.  ckso
3b40: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
3b50: 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20  * FROM t3 WHERE 
3b60: 61 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52 44 45  a=1 AND c>0 ORDE
3b70: 52 20 42 59 20 61 20 44 45 53 43 2c 20 63 20 44  R BY a DESC, c D
3b80: 45 53 43 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a  ESC LIMIT 3.  }.
3b90: 7d 20 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f 72  } {1 100 4 nosor
3ba0: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
3bb0: 2d 36 2e 39 2e 36 20 7b 0a 20 20 63 6b 73 6f 72  -6.9.6 {.  cksor
3bc0: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t {.    SELECT *
3bd0: 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61   FROM t3 WHERE a
3be0: 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52  =1 AND c>0 ORDER
3bf0: 20 42 59 20 63 20 44 45 53 43 20 4c 49 4d 49 54   BY c DESC LIMIT
3c00: 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20   3.  }.} {1 100 
3c10: 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  4 nosort}.do_tes
3c20: 74 20 77 68 65 72 65 2d 36 2e 39 2e 37 20 7b 0a  t where-6.9.7 {.
3c30: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
3c40: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
3c50: 57 48 45 52 45 20 61 3d 31 20 41 4e 44 20 63 3e  WHERE a=1 AND c>
3c60: 30 20 4f 52 44 45 52 20 42 59 20 63 2c 61 20 4c  0 ORDER BY c,a L
3c70: 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20  IMIT 3.  }.} {1 
3c80: 31 30 30 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f  100 4 nosort}.do
3c90: 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e 39 2e  _test where-6.9.
3ca0: 38 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  8 {.  cksort {. 
3cb0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
3cc0: 20 74 33 20 57 48 45 52 45 20 61 3d 31 20 41 4e   t3 WHERE a=1 AN
3cd0: 44 20 63 3e 30 20 4f 52 44 45 52 20 42 59 20 61  D c>0 ORDER BY a
3ce0: 20 44 45 53 43 2c 20 63 20 41 53 43 20 4c 49 4d   DESC, c ASC LIM
3cf0: 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30  IT 3.  }.} {1 10
3d00: 30 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74  0 4 nosort}.do_t
3d10: 65 73 74 20 77 68 65 72 65 2d 36 2e 39 2e 39 20  est where-6.9.9 
3d20: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
3d30: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
3d40: 33 20 57 48 45 52 45 20 61 3d 31 20 41 4e 44 20  3 WHERE a=1 AND 
3d50: 63 3e 30 20 4f 52 44 45 52 20 42 59 20 61 20 41  c>0 ORDER BY a A
3d60: 53 43 2c 20 63 20 44 45 53 43 20 4c 49 4d 49 54  SC, c DESC LIMIT
3d70: 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20   3.  }.} {1 100 
3d80: 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  4 nosort}.do_tes
3d90: 74 20 77 68 65 72 65 2d 36 2e 31 30 20 7b 0a 20  t where-6.10 {. 
3da0: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
3db0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57  LECT * FROM t3 W
3dc0: 48 45 52 45 20 61 3d 31 20 41 4e 44 20 63 3e 30  HERE a=1 AND c>0
3dd0: 20 4f 52 44 45 52 20 42 59 20 61 20 4c 49 4d 49   ORDER BY a LIMI
3de0: 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30  T 3.  }.} {1 100
3df0: 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65   4 nosort}.do_te
3e00: 73 74 20 77 68 65 72 65 2d 36 2e 31 31 20 7b 0a  st where-6.11 {.
3e10: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
3e20: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
3e30: 57 48 45 52 45 20 61 3d 31 20 41 4e 44 20 63 3e  WHERE a=1 AND c>
3e40: 30 20 4f 52 44 45 52 20 42 59 20 61 2c 63 20 4c  0 ORDER BY a,c L
3e50: 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20  IMIT 3.  }.} {1 
3e60: 31 30 30 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f  100 4 nosort}.do
3e70: 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e 31 32  _test where-6.12
3e80: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
3e90: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
3ea0: 74 33 20 57 48 45 52 45 20 61 3d 31 20 41 4e 44  t3 WHERE a=1 AND
3eb0: 20 63 3e 30 20 4f 52 44 45 52 20 42 59 20 61 2c   c>0 ORDER BY a,
3ec0: 63 2c 62 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a  c,b LIMIT 3.  }.
3ed0: 7d 20 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f 72  } {1 100 4 nosor
3ee0: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
3ef0: 2d 36 2e 31 33 20 7b 0a 20 20 63 6b 73 6f 72 74  -6.13 {.  cksort
3f00: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
3f10: 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3e  FROM t3 WHERE a>
3f20: 30 20 4f 52 44 45 52 20 42 59 20 61 20 44 45 53  0 ORDER BY a DES
3f30: 43 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20  C LIMIT 3.  }.} 
3f40: 7b 31 30 30 20 31 20 31 30 32 30 31 20 39 39 20  {100 1 10201 99 
3f50: 32 20 31 30 30 30 30 20 39 38 20 33 20 39 38 30  2 10000 98 3 980
3f60: 31 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  1 nosort}.do_tes
3f70: 74 20 77 68 65 72 65 2d 36 2e 31 33 2e 31 20 7b  t where-6.13.1 {
3f80: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
3f90: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
3fa0: 20 57 48 45 52 45 20 61 3e 30 20 4f 52 44 45 52   WHERE a>0 ORDER
3fb0: 20 42 59 20 2d 61 20 4c 49 4d 49 54 20 33 0a 20   BY -a LIMIT 3. 
3fc0: 20 7d 0a 7d 20 7b 31 30 30 20 31 20 31 30 32 30   }.} {100 1 1020
3fd0: 31 20 39 39 20 32 20 31 30 30 30 30 20 39 38 20  1 99 2 10000 98 
3fe0: 33 20 39 38 30 31 20 73 6f 72 74 7d 0a 64 6f 5f  3 9801 sort}.do_
3ff0: 74 65 73 74 20 77 68 65 72 65 2d 36 2e 31 34 20  test where-6.14 
4000: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
4010: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
4020: 33 20 4f 52 44 45 52 20 42 59 20 62 20 4c 49 4d  3 ORDER BY b LIM
4030: 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 30 30 20  IT 3.  }.} {100 
4040: 31 20 31 30 32 30 31 20 39 39 20 32 20 31 30 30  1 10201 99 2 100
4050: 30 30 20 39 38 20 33 20 39 38 30 31 20 6e 6f 73  00 98 3 9801 nos
4060: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
4070: 72 65 2d 36 2e 31 35 20 7b 0a 20 20 63 6b 73 6f  re-6.15 {.  ckso
4080: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
4090: 74 33 2e 61 2c 20 74 31 2e 78 20 46 52 4f 4d 20  t3.a, t1.x FROM 
40a0: 74 33 2c 20 74 31 20 57 48 45 52 45 20 74 33 2e  t3, t1 WHERE t3.
40b0: 61 3d 74 31 2e 77 20 4f 52 44 45 52 20 42 59 20  a=t1.w ORDER BY 
40c0: 74 33 2e 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d  t3.a LIMIT 3.  }
40d0: 0a 7d 20 7b 31 20 30 20 32 20 31 20 33 20 31 20  .} {1 0 2 1 3 1 
40e0: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
40f0: 77 68 65 72 65 2d 36 2e 31 36 20 7b 0a 20 20 63  where-6.16 {.  c
4100: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
4110: 43 54 20 74 33 2e 61 2c 20 74 31 2e 78 20 46 52  CT t3.a, t1.x FR
4120: 4f 4d 20 74 33 2c 20 74 31 20 57 48 45 52 45 20  OM t3, t1 WHERE 
4130: 74 33 2e 61 3d 74 31 2e 77 20 4f 52 44 45 52 20  t3.a=t1.w ORDER 
4140: 42 59 20 74 31 2e 78 2c 20 74 33 2e 61 20 4c 49  BY t1.x, t3.a LI
4150: 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 30  MIT 3.  }.} {1 0
4160: 20 32 20 31 20 33 20 31 20 73 6f 72 74 7d 0a 64   2 1 3 1 sort}.d
4170: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e 31  o_test where-6.1
4180: 39 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  9 {.  cksort {. 
4190: 20 20 20 53 45 4c 45 43 54 20 79 20 46 52 4f 4d     SELECT y FROM
41a0: 20 74 31 20 4f 52 44 45 52 20 42 59 20 77 20 4c   t1 ORDER BY w L
41b0: 49 4d 49 54 20 33 3b 0a 20 20 7d 0a 7d 20 7b 34  IMIT 3;.  }.} {4
41c0: 20 39 20 31 36 20 6e 6f 73 6f 72 74 7d 0a 64 6f   9 16 nosort}.do
41d0: 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e 32 30  _test where-6.20
41e0: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
41f0: 20 20 53 45 4c 45 43 54 20 79 20 46 52 4f 4d 20    SELECT y FROM 
4200: 74 31 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69  t1 ORDER BY rowi
4210: 64 20 4c 49 4d 49 54 20 33 3b 0a 20 20 7d 0a 7d  d LIMIT 3;.  }.}
4220: 20 7b 34 20 39 20 31 36 20 6e 6f 73 6f 72 74 7d   {4 9 16 nosort}
4230: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36  .do_test where-6
4240: 2e 32 31 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  .21 {.  cksort {
4250: 0a 20 20 20 20 53 45 4c 45 43 54 20 79 20 46 52  .    SELECT y FR
4260: 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 72  OM t1 ORDER BY r
4270: 6f 77 69 64 2c 20 79 20 4c 49 4d 49 54 20 33 3b  owid, y LIMIT 3;
4280: 0a 20 20 7d 0a 7d 20 7b 34 20 39 20 31 36 20 6e  .  }.} {4 9 16 n
4290: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
42a0: 68 65 72 65 2d 36 2e 32 32 20 7b 0a 20 20 63 6b  here-6.22 {.  ck
42b0: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
42c0: 54 20 79 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  T y FROM t1 ORDE
42d0: 52 20 42 59 20 72 6f 77 69 64 2c 20 79 20 44 45  R BY rowid, y DE
42e0: 53 43 20 4c 49 4d 49 54 20 33 3b 0a 20 20 7d 0a  SC LIMIT 3;.  }.
42f0: 7d 20 7b 34 20 39 20 31 36 20 6e 6f 73 6f 72 74  } {4 9 16 nosort
4300: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
4310: 36 2e 32 33 20 7b 0a 20 20 63 6b 73 6f 72 74 20  6.23 {.  cksort 
4320: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 79 20 46  {.    SELECT y F
4330: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3e 34  ROM t1 WHERE y>4
4340: 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 2c   ORDER BY rowid,
4350: 20 77 2c 20 78 20 4c 49 4d 49 54 20 33 3b 0a 20   w, x LIMIT 3;. 
4360: 20 7d 0a 7d 20 7b 39 20 31 36 20 32 35 20 6e 6f   }.} {9 16 25 no
4370: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
4380: 65 72 65 2d 36 2e 32 34 20 7b 0a 20 20 63 6b 73  ere-6.24 {.  cks
4390: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
43a0: 20 79 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   y FROM t1 WHERE
43b0: 20 79 3e 3d 39 20 4f 52 44 45 52 20 42 59 20 72   y>=9 ORDER BY r
43c0: 6f 77 69 64 2c 20 78 20 44 45 53 43 2c 20 77 20  owid, x DESC, w 
43d0: 4c 49 4d 49 54 20 33 3b 0a 20 20 7d 0a 7d 20 7b  LIMIT 3;.  }.} {
43e0: 39 20 31 36 20 32 35 20 6e 6f 73 6f 72 74 7d 0a  9 16 25 nosort}.
43f0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e  do_test where-6.
4400: 32 35 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  25 {.  cksort {.
4410: 20 20 20 20 53 45 4c 45 43 54 20 79 20 46 52 4f      SELECT y FRO
4420: 4d 20 74 31 20 57 48 45 52 45 20 79 3e 34 20 41  M t1 WHERE y>4 A
4430: 4e 44 20 79 3c 32 35 20 4f 52 44 45 52 20 42 59  ND y<25 ORDER BY
4440: 20 72 6f 77 69 64 3b 0a 20 20 7d 0a 7d 20 7b 39   rowid;.  }.} {9
4450: 20 31 36 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74   16 nosort}.do_t
4460: 65 73 74 20 77 68 65 72 65 2d 36 2e 32 36 20 7b  est where-6.26 {
4470: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
4480: 53 45 4c 45 43 54 20 79 20 46 52 4f 4d 20 74 31  SELECT y FROM t1
4490: 20 57 48 45 52 45 20 79 3e 3d 34 20 41 4e 44 20   WHERE y>=4 AND 
44a0: 79 3c 3d 32 35 20 4f 52 44 45 52 20 42 59 20 6f  y<=25 ORDER BY o
44b0: 69 64 3b 0a 20 20 7d 0a 7d 20 7b 34 20 39 20 31  id;.  }.} {4 9 1
44c0: 36 20 32 35 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f  6 25 nosort}.do_
44d0: 74 65 73 74 20 77 68 65 72 65 2d 36 2e 32 37 20  test where-6.27 
44e0: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
44f0: 20 53 45 4c 45 43 54 20 79 20 46 52 4f 4d 20 74   SELECT y FROM t
4500: 31 20 57 48 45 52 45 20 79 3c 3d 32 35 20 4f 52  1 WHERE y<=25 OR
4510: 44 45 52 20 42 59 20 5f 72 6f 77 69 64 5f 2c 20  DER BY _rowid_, 
4520: 77 2b 79 3b 0a 20 20 7d 0a 7d 20 7b 34 20 39 20  w+y;.  }.} {4 9 
4530: 31 36 20 32 35 20 6e 6f 73 6f 72 74 7d 0a 0a 0a  16 25 nosort}...
4540: 23 20 54 65 73 74 73 20 66 6f 72 20 72 65 76 65  # Tests for reve
4550: 72 73 65 2d 6f 72 64 65 72 20 73 6f 72 74 69 6e  rse-order sortin
4560: 67 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68 65  g..#.do_test whe
4570: 72 65 2d 37 2e 31 20 7b 0a 20 20 63 6b 73 6f 72  re-7.1 {.  cksor
4580: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77  t {.    SELECT w
4590: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
45a0: 3d 33 20 4f 52 44 45 52 20 42 59 20 79 3b 0a 20  =3 ORDER BY y;. 
45b0: 20 7d 0a 7d 20 7b 38 20 39 20 31 30 20 31 31 20   }.} {8 9 10 11 
45c0: 31 32 20 31 33 20 31 34 20 31 35 20 6e 6f 73 6f  12 13 14 15 noso
45d0: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
45e0: 65 2d 37 2e 32 20 7b 0a 20 20 63 6b 73 6f 72 74  e-7.2 {.  cksort
45f0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20   {.    SELECT w 
4600: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d  FROM t1 WHERE x=
4610: 33 20 4f 52 44 45 52 20 42 59 20 79 20 44 45 53  3 ORDER BY y DES
4620: 43 3b 0a 20 20 7d 0a 7d 20 7b 31 35 20 31 34 20  C;.  }.} {15 14 
4630: 31 33 20 31 32 20 31 31 20 31 30 20 39 20 38 20  13 12 11 10 9 8 
4640: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
4650: 77 68 65 72 65 2d 37 2e 33 20 7b 0a 20 20 63 6b  where-7.3 {.  ck
4660: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
4670: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
4680: 45 20 78 3d 33 20 41 4e 44 20 79 3e 31 30 30 20  E x=3 AND y>100 
4690: 4f 52 44 45 52 20 42 59 20 79 20 4c 49 4d 49 54  ORDER BY y LIMIT
46a0: 20 33 3b 0a 20 20 7d 0a 7d 20 7b 31 30 20 31 31   3;.  }.} {10 11
46b0: 20 31 32 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74   12 nosort}.do_t
46c0: 65 73 74 20 77 68 65 72 65 2d 37 2e 34 20 7b 0a  est where-7.4 {.
46d0: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
46e0: 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20  ELECT w FROM t1 
46f0: 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e  WHERE x=3 AND y>
4700: 31 30 30 20 4f 52 44 45 52 20 42 59 20 79 20 44  100 ORDER BY y D
4710: 45 53 43 20 4c 49 4d 49 54 20 33 3b 0a 20 20 7d  ESC LIMIT 3;.  }
4720: 0a 7d 20 7b 31 35 20 31 34 20 31 33 20 6e 6f 73  .} {15 14 13 nos
4730: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
4740: 72 65 2d 37 2e 35 20 7b 0a 20 20 63 6b 73 6f 72  re-7.5 {.  cksor
4750: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77  t {.    SELECT w
4760: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
4770: 3d 33 20 41 4e 44 20 79 3e 31 32 31 20 4f 52 44  =3 AND y>121 ORD
4780: 45 52 20 42 59 20 79 20 44 45 53 43 3b 0a 20 20  ER BY y DESC;.  
4790: 7d 0a 7d 20 7b 31 35 20 31 34 20 31 33 20 31 32  }.} {15 14 13 12
47a0: 20 31 31 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74   11 nosort}.do_t
47b0: 65 73 74 20 77 68 65 72 65 2d 37 2e 36 20 7b 0a  est where-7.6 {.
47c0: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
47d0: 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20  ELECT w FROM t1 
47e0: 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e  WHERE x=3 AND y>
47f0: 3d 31 32 31 20 4f 52 44 45 52 20 42 59 20 79 20  =121 ORDER BY y 
4800: 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 35 20  DESC;.  }.} {15 
4810: 31 34 20 31 33 20 31 32 20 31 31 20 31 30 20 6e  14 13 12 11 10 n
4820: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
4830: 68 65 72 65 2d 37 2e 37 20 7b 0a 20 20 63 6b 73  here-7.7 {.  cks
4840: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
4850: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
4860: 20 78 3d 33 20 41 4e 44 20 79 3e 3d 31 32 31 20   x=3 AND y>=121 
4870: 41 4e 44 20 79 3c 31 39 36 20 4f 52 44 45 52 20  AND y<196 ORDER 
4880: 42 59 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d  BY y DESC;.  }.}
4890: 20 7b 31 32 20 31 31 20 31 30 20 6e 6f 73 6f 72   {12 11 10 nosor
48a0: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
48b0: 2d 37 2e 38 20 7b 0a 20 20 63 6b 73 6f 72 74 20  -7.8 {.  cksort 
48c0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46  {.    SELECT w F
48d0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33  ROM t1 WHERE x=3
48e0: 20 41 4e 44 20 79 3e 3d 31 32 31 20 41 4e 44 20   AND y>=121 AND 
48f0: 79 3c 3d 31 39 36 20 4f 52 44 45 52 20 42 59 20  y<=196 ORDER BY 
4900: 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31  y DESC;.  }.} {1
4910: 33 20 31 32 20 31 31 20 31 30 20 6e 6f 73 6f 72  3 12 11 10 nosor
4920: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
4930: 2d 37 2e 39 20 7b 0a 20 20 63 6b 73 6f 72 74 20  -7.9 {.  cksort 
4940: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46  {.    SELECT w F
4950: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33  ROM t1 WHERE x=3
4960: 20 41 4e 44 20 79 3e 31 32 31 20 41 4e 44 20 79   AND y>121 AND y
4970: 3c 3d 31 39 36 20 4f 52 44 45 52 20 42 59 20 79  <=196 ORDER BY y
4980: 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 33   DESC;.  }.} {13
4990: 20 31 32 20 31 31 20 6e 6f 73 6f 72 74 7d 0a 64   12 11 nosort}.d
49a0: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 31  o_test where-7.1
49b0: 30 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  0 {.  cksort {. 
49c0: 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d     SELECT w FROM
49d0: 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e   t1 WHERE x=3 AN
49e0: 44 20 79 3e 31 30 30 20 41 4e 44 20 79 3c 31 39  D y>100 AND y<19
49f0: 36 20 4f 52 44 45 52 20 42 59 20 79 20 44 45 53  6 ORDER BY y DES
4a00: 43 3b 0a 20 20 7d 0a 7d 20 7b 31 32 20 31 31 20  C;.  }.} {12 11 
4a10: 31 30 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  10 nosort}.do_te
4a20: 73 74 20 77 68 65 72 65 2d 37 2e 31 31 20 7b 0a  st where-7.11 {.
4a30: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
4a40: 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20  ELECT w FROM t1 
4a50: 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e  WHERE x=3 AND y>
4a60: 3d 31 32 31 20 41 4e 44 20 79 3c 31 39 36 20 4f  =121 AND y<196 O
4a70: 52 44 45 52 20 42 59 20 79 3b 0a 20 20 7d 0a 7d  RDER BY y;.  }.}
4a80: 20 7b 31 30 20 31 31 20 31 32 20 6e 6f 73 6f 72   {10 11 12 nosor
4a90: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
4aa0: 2d 37 2e 31 32 20 7b 0a 20 20 63 6b 73 6f 72 74  -7.12 {.  cksort
4ab0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20   {.    SELECT w 
4ac0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d  FROM t1 WHERE x=
4ad0: 33 20 41 4e 44 20 79 3e 3d 31 32 31 20 41 4e 44  3 AND y>=121 AND
4ae0: 20 79 3c 3d 31 39 36 20 4f 52 44 45 52 20 42 59   y<=196 ORDER BY
4af0: 20 79 3b 0a 20 20 7d 0a 7d 20 7b 31 30 20 31 31   y;.  }.} {10 11
4b00: 20 31 32 20 31 33 20 6e 6f 73 6f 72 74 7d 0a 64   12 13 nosort}.d
4b10: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 31  o_test where-7.1
4b20: 33 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  3 {.  cksort {. 
4b30: 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d     SELECT w FROM
4b40: 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e   t1 WHERE x=3 AN
4b50: 44 20 79 3e 31 32 31 20 41 4e 44 20 79 3c 3d 31  D y>121 AND y<=1
4b60: 39 36 20 4f 52 44 45 52 20 42 59 20 79 3b 0a 20  96 ORDER BY y;. 
4b70: 20 7d 0a 7d 20 7b 31 31 20 31 32 20 31 33 20 6e   }.} {11 12 13 n
4b80: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
4b90: 68 65 72 65 2d 37 2e 31 34 20 7b 0a 20 20 63 6b  here-7.14 {.  ck
4ba0: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
4bb0: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
4bc0: 45 20 78 3d 33 20 41 4e 44 20 79 3e 31 30 30 20  E x=3 AND y>100 
4bd0: 41 4e 44 20 79 3c 31 39 36 20 4f 52 44 45 52 20  AND y<196 ORDER 
4be0: 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 31 30 20  BY y;.  }.} {10 
4bf0: 31 31 20 31 32 20 6e 6f 73 6f 72 74 7d 0a 64 6f  11 12 nosort}.do
4c00: 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 31 35  _test where-7.15
4c10: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
4c20: 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20    SELECT w FROM 
4c30: 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44  t1 WHERE x=3 AND
4c40: 20 79 3c 38 31 20 4f 52 44 45 52 20 42 59 20 79   y<81 ORDER BY y
4c50: 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d  ;.  }.} {nosort}
4c60: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37  .do_test where-7
4c70: 2e 31 36 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  .16 {.  cksort {
4c80: 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52  .    SELECT w FR
4c90: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20  OM t1 WHERE x=3 
4ca0: 41 4e 44 20 79 3c 3d 38 31 20 4f 52 44 45 52 20  AND y<=81 ORDER 
4cb0: 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 38 20 6e  BY y;.  }.} {8 n
4cc0: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
4cd0: 68 65 72 65 2d 37 2e 31 37 20 7b 0a 20 20 63 6b  here-7.17 {.  ck
4ce0: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
4cf0: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
4d00: 45 20 78 3d 33 20 41 4e 44 20 79 3e 32 35 36 20  E x=3 AND y>256 
4d10: 4f 52 44 45 52 20 42 59 20 79 3b 0a 20 20 7d 0a  ORDER BY y;.  }.
4d20: 7d 20 7b 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  } {nosort}.do_te
4d30: 73 74 20 77 68 65 72 65 2d 37 2e 31 38 20 7b 0a  st where-7.18 {.
4d40: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
4d50: 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20  ELECT w FROM t1 
4d60: 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e  WHERE x=3 AND y>
4d70: 3d 32 35 36 20 4f 52 44 45 52 20 42 59 20 79 3b  =256 ORDER BY y;
4d80: 0a 20 20 7d 0a 7d 20 7b 31 35 20 6e 6f 73 6f 72  .  }.} {15 nosor
4d90: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
4da0: 2d 37 2e 31 39 20 7b 0a 20 20 63 6b 73 6f 72 74  -7.19 {.  cksort
4db0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20   {.    SELECT w 
4dc0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d  FROM t1 WHERE x=
4dd0: 33 20 41 4e 44 20 79 3c 38 31 20 4f 52 44 45 52  3 AND y<81 ORDER
4de0: 20 42 59 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a   BY y DESC;.  }.
4df0: 7d 20 7b 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  } {nosort}.do_te
4e00: 73 74 20 77 68 65 72 65 2d 37 2e 32 30 20 7b 0a  st where-7.20 {.
4e10: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
4e20: 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20  ELECT w FROM t1 
4e30: 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3c  WHERE x=3 AND y<
4e40: 3d 38 31 20 4f 52 44 45 52 20 42 59 20 79 20 44  =81 ORDER BY y D
4e50: 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 38 20 6e 6f  ESC;.  }.} {8 no
4e60: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
4e70: 65 72 65 2d 37 2e 32 31 20 7b 0a 20 20 63 6b 73  ere-7.21 {.  cks
4e80: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
4e90: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
4ea0: 20 78 3d 33 20 41 4e 44 20 79 3e 32 35 36 20 4f   x=3 AND y>256 O
4eb0: 52 44 45 52 20 42 59 20 79 20 44 45 53 43 3b 0a  RDER BY y DESC;.
4ec0: 20 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a 64    }.} {nosort}.d
4ed0: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 32  o_test where-7.2
4ee0: 32 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  2 {.  cksort {. 
4ef0: 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d     SELECT w FROM
4f00: 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e   t1 WHERE x=3 AN
4f10: 44 20 79 3e 3d 32 35 36 20 4f 52 44 45 52 20 42  D y>=256 ORDER B
4f20: 59 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20  Y y DESC;.  }.} 
4f30: 7b 31 35 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74  {15 nosort}.do_t
4f40: 65 73 74 20 77 68 65 72 65 2d 37 2e 32 33 20 7b  est where-7.23 {
4f50: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
4f60: 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31  SELECT w FROM t1
4f70: 20 57 48 45 52 45 20 78 3d 30 20 41 4e 44 20 79   WHERE x=0 AND y
4f80: 3c 34 20 4f 52 44 45 52 20 42 59 20 79 3b 0a 20  <4 ORDER BY y;. 
4f90: 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a 64 6f   }.} {nosort}.do
4fa0: 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 32 34  _test where-7.24
4fb0: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
4fc0: 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20    SELECT w FROM 
4fd0: 74 31 20 57 48 45 52 45 20 78 3d 30 20 41 4e 44  t1 WHERE x=0 AND
4fe0: 20 79 3c 3d 34 20 4f 52 44 45 52 20 42 59 20 79   y<=4 ORDER BY y
4ff0: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 6e 6f 73 6f 72  ;.  }.} {1 nosor
5000: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
5010: 2d 37 2e 32 35 20 7b 0a 20 20 63 6b 73 6f 72 74  -7.25 {.  cksort
5020: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20   {.    SELECT w 
5030: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d  FROM t1 WHERE x=
5040: 36 20 41 4e 44 20 79 3e 31 30 32 30 31 20 4f 52  6 AND y>10201 OR
5050: 44 45 52 20 42 59 20 79 3b 0a 20 20 7d 0a 7d 20  DER BY y;.  }.} 
5060: 7b 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74  {nosort}.do_test
5070: 20 77 68 65 72 65 2d 37 2e 32 36 20 7b 0a 20 20   where-7.26 {.  
5080: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
5090: 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48  ECT w FROM t1 WH
50a0: 45 52 45 20 78 3d 36 20 41 4e 44 20 79 3e 3d 31  ERE x=6 AND y>=1
50b0: 30 32 30 31 20 4f 52 44 45 52 20 42 59 20 79 3b  0201 ORDER BY y;
50c0: 0a 20 20 7d 0a 7d 20 7b 31 30 30 20 6e 6f 73 6f  .  }.} {100 noso
50d0: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
50e0: 65 2d 37 2e 32 37 20 7b 0a 20 20 63 6b 73 6f 72  e-7.27 {.  cksor
50f0: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77  t {.    SELECT w
5100: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
5110: 3d 30 20 41 4e 44 20 79 3c 34 20 4f 52 44 45 52  =0 AND y<4 ORDER
5120: 20 42 59 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a   BY y DESC;.  }.
5130: 7d 20 7b 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  } {nosort}.do_te
5140: 73 74 20 77 68 65 72 65 2d 37 2e 32 38 20 7b 0a  st where-7.28 {.
5150: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
5160: 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20  ELECT w FROM t1 
5170: 57 48 45 52 45 20 78 3d 30 20 41 4e 44 20 79 3c  WHERE x=0 AND y<
5180: 3d 34 20 4f 52 44 45 52 20 42 59 20 79 20 44 45  =4 ORDER BY y DE
5190: 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 20 6e 6f 73  SC;.  }.} {1 nos
51a0: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
51b0: 72 65 2d 37 2e 32 39 20 7b 0a 20 20 63 6b 73 6f  re-7.29 {.  ckso
51c0: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
51d0: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
51e0: 78 3d 36 20 41 4e 44 20 79 3e 31 30 32 30 31 20  x=6 AND y>10201 
51f0: 4f 52 44 45 52 20 42 59 20 79 20 44 45 53 43 3b  ORDER BY y DESC;
5200: 0a 20 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a  .  }.} {nosort}.
5210: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e  do_test where-7.
5220: 33 30 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  30 {.  cksort {.
5230: 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f      SELECT w FRO
5240: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 36 20 41  M t1 WHERE x=6 A
5250: 4e 44 20 79 3e 3d 31 30 32 30 31 20 4f 52 44 45  ND y>=10201 ORDE
5260: 52 20 42 59 20 79 20 44 45 53 43 3b 0a 20 20 7d  R BY y DESC;.  }
5270: 0a 7d 20 7b 31 30 30 20 6e 6f 73 6f 72 74 7d 0a  .} {100 nosort}.
5280: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e  do_test where-7.
5290: 33 31 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  31 {.  cksort {.
52a0: 20 20 20 20 53 45 4c 45 43 54 20 79 20 46 52 4f      SELECT y FRO
52b0: 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 72 6f  M t1 ORDER BY ro
52c0: 77 69 64 20 44 45 53 43 20 4c 49 4d 49 54 20 33  wid DESC LIMIT 3
52d0: 0a 20 20 7d 0a 7d 20 7b 31 30 32 30 31 20 31 30  .  }.} {10201 10
52e0: 30 30 30 20 39 38 30 31 20 6e 6f 73 6f 72 74 7d  000 9801 nosort}
52f0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37  .do_test where-7
5300: 2e 33 32 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  .32 {.  cksort {
5310: 0a 20 20 20 20 53 45 4c 45 43 54 20 79 20 46 52  .    SELECT y FR
5320: 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3c 32 35  OM t1 WHERE y<25
5330: 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20   ORDER BY rowid 
5340: 44 45 53 43 0a 20 20 7d 0a 7d 20 7b 31 36 20 39  DESC.  }.} {16 9
5350: 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65   4 nosort}.do_te
5360: 73 74 20 77 68 65 72 65 2d 37 2e 33 33 20 7b 0a  st where-7.33 {.
5370: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
5380: 45 4c 45 43 54 20 79 20 46 52 4f 4d 20 74 31 20  ELECT y FROM t1 
5390: 57 48 45 52 45 20 79 3c 3d 32 35 20 4f 52 44 45  WHERE y<=25 ORDE
53a0: 52 20 42 59 20 72 6f 77 69 64 20 44 45 53 43 0a  R BY rowid DESC.
53b0: 20 20 7d 0a 7d 20 7b 32 35 20 31 36 20 39 20 34    }.} {25 16 9 4
53c0: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
53d0: 20 77 68 65 72 65 2d 37 2e 33 34 20 7b 0a 20 20   where-7.34 {.  
53e0: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
53f0: 45 43 54 20 79 20 46 52 4f 4d 20 74 31 20 57 48  ECT y FROM t1 WH
5400: 45 52 45 20 79 3c 32 35 20 41 4e 44 20 79 3e 34  ERE y<25 AND y>4
5410: 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20   ORDER BY rowid 
5420: 44 45 53 43 2c 20 79 20 44 45 53 43 0a 20 20 7d  DESC, y DESC.  }
5430: 0a 7d 20 7b 31 36 20 39 20 6e 6f 73 6f 72 74 7d  .} {16 9 nosort}
5440: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37  .do_test where-7
5450: 2e 33 35 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  .35 {.  cksort {
5460: 0a 20 20 20 20 53 45 4c 45 43 54 20 79 20 46 52  .    SELECT y FR
5470: 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3c 32 35  OM t1 WHERE y<25
5480: 20 41 4e 44 20 79 3e 3d 34 20 4f 52 44 45 52 20   AND y>=4 ORDER 
5490: 42 59 20 72 6f 77 69 64 20 44 45 53 43 0a 20 20  BY rowid DESC.  
54a0: 7d 0a 7d 20 7b 31 36 20 39 20 34 20 6e 6f 73 6f  }.} {16 9 4 noso
54b0: 72 74 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65  rt}..do_test whe
54c0: 72 65 2d 38 2e 31 20 7b 0a 20 20 65 78 65 63 73  re-8.1 {.  execs
54d0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
54e0: 54 41 42 4c 45 20 74 34 20 41 53 20 53 45 4c 45  TABLE t4 AS SELE
54f0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20  CT * FROM t1;.  
5500: 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69    CREATE INDEX i
5510: 34 78 79 20 4f 4e 20 74 34 28 78 2c 79 29 3b 0a  4xy ON t4(x,y);.
5520: 20 20 7d 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20    }.  cksort {. 
5530: 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d     SELECT w FROM
5540: 20 74 34 20 57 48 45 52 45 20 78 3d 34 20 61 6e   t4 WHERE x=4 an
5550: 64 20 79 3c 31 30 30 30 20 4f 52 44 45 52 20 42  d y<1000 ORDER B
5560: 59 20 79 20 44 45 53 43 20 6c 69 6d 69 74 20 33  Y y DESC limit 3
5570: 3b 0a 20 20 7d 0a 7d 20 7b 33 30 20 32 39 20 32  ;.  }.} {30 29 2
5580: 38 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  8 nosort}.do_tes
5590: 74 20 77 68 65 72 65 2d 38 2e 32 20 7b 0a 20 20  t where-8.2 {.  
55a0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45  execsql {.    DE
55b0: 4c 45 54 45 20 46 52 4f 4d 20 74 34 3b 0a 20 20  LETE FROM t4;.  
55c0: 7d 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  }.  cksort {.   
55d0: 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74   SELECT w FROM t
55e0: 34 20 57 48 45 52 45 20 78 3d 34 20 61 6e 64 20  4 WHERE x=4 and 
55f0: 79 3c 31 30 30 30 20 4f 52 44 45 52 20 42 59 20  y<1000 ORDER BY 
5600: 79 20 44 45 53 43 20 6c 69 6d 69 74 20 33 3b 0a  y DESC limit 3;.
5610: 20 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a 0a    }.} {nosort}..
5620: 23 20 4d 61 6b 65 20 73 75 72 65 20 73 65 61 72  # Make sure sear
5630: 63 68 65 73 20 77 69 74 68 20 61 6e 20 69 6e 64  ches with an ind
5640: 65 78 20 77 6f 72 6b 20 77 69 74 68 20 61 6e 20  ex work with an 
5650: 65 6d 70 74 79 20 74 61 62 6c 65 2e 0a 23 0a 64  empty table..#.d
5660: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 39 2e 31  o_test where-9.1
5670: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
5680: 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20     CREATE TABLE 
5690: 74 35 28 78 20 50 52 49 4d 41 52 59 20 4b 45 59  t5(x PRIMARY KEY
56a0: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20  );.    SELECT * 
56b0: 46 52 4f 4d 20 74 35 20 57 48 45 52 45 20 78 3c  FROM t5 WHERE x<
56c0: 31 30 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  10;.  }.} {}.do_
56d0: 74 65 73 74 20 77 68 65 72 65 2d 39 2e 32 20 7b  test where-9.2 {
56e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
56f0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
5700: 35 20 57 48 45 52 45 20 78 3c 31 30 20 4f 52 44  5 WHERE x<10 ORD
5710: 45 52 20 42 59 20 78 20 44 45 53 43 3b 0a 20 20  ER BY x DESC;.  
5720: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77  }.} {}.do_test w
5730: 68 65 72 65 2d 39 2e 33 20 7b 0a 20 20 65 78 65  here-9.3 {.  exe
5740: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
5750: 54 20 2a 20 46 52 4f 4d 20 74 35 20 57 48 45 52  T * FROM t5 WHER
5760: 45 20 78 3d 31 30 3b 0a 20 20 7d 0a 7d 20 7b 7d  E x=10;.  }.} {}
5770: 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  ..do_test where-
5780: 31 30 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  10.1 {.  execsql
5790: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 31 20   {.    SELECT 1 
57a0: 57 48 45 52 45 20 61 62 73 28 72 61 6e 64 6f 6d  WHERE abs(random
57b0: 28 29 29 3c 30 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  ())<0.  }.} {}.d
57c0: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 30 2e  o_test where-10.
57d0: 32 20 7b 0a 20 20 70 72 6f 63 20 74 63 6c 76 61  2 {.  proc tclva
57e0: 72 5f 66 75 6e 63 20 7b 76 6e 61 6d 65 7d 20 7b  r_func {vname} {
57f0: 72 65 74 75 72 6e 20 5b 73 65 74 20 3a 3a 24 76  return [set ::$v
5800: 6e 61 6d 65 5d 7d 0a 20 20 64 62 20 66 75 6e 63  name]}.  db func
5810: 74 69 6f 6e 20 74 63 6c 76 61 72 20 74 63 6c 76  tion tclvar tclv
5820: 61 72 5f 66 75 6e 63 0a 20 20 73 65 74 20 3a 3a  ar_func.  set ::
5830: 76 31 20 30 0a 20 20 65 78 65 63 73 71 6c 20 7b  v1 0.  execsql {
5840: 0a 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e  .    SELECT coun
5850: 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 57 48 45  t(*) FROM t1 WHE
5860: 52 45 20 74 63 6c 76 61 72 28 27 76 31 27 29 3b  RE tclvar('v1');
5870: 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65  .  }.} {0}.do_te
5880: 73 74 20 77 68 65 72 65 2d 31 30 2e 33 20 7b 0a  st where-10.3 {.
5890: 20 20 73 65 74 20 3a 3a 76 31 20 31 0a 20 20 65    set ::v1 1.  e
58a0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
58b0: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
58c0: 4d 20 74 31 20 57 48 45 52 45 20 74 63 6c 76 61  M t1 WHERE tclva
58d0: 72 28 27 76 31 27 29 3b 0a 20 20 7d 0a 7d 20 7b  r('v1');.  }.} {
58e0: 31 30 30 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  100}.do_test whe
58f0: 72 65 2d 31 30 2e 34 20 7b 0a 20 20 73 65 74 20  re-10.4 {.  set 
5900: 3a 3a 76 31 20 31 0a 20 20 70 72 6f 63 20 74 63  ::v1 1.  proc tc
5910: 6c 76 61 72 5f 66 75 6e 63 20 7b 76 6e 61 6d 65  lvar_func {vname
5920: 7d 20 7b 0a 20 20 20 20 75 70 76 61 72 20 23 30  } {.    upvar #0
5930: 20 24 76 6e 61 6d 65 20 76 0a 20 20 20 20 73 65   $vname v.    se
5940: 74 20 76 20 5b 65 78 70 72 20 7b 21 24 76 7d 5d  t v [expr {!$v}]
5950: 0a 20 20 20 20 72 65 74 75 72 6e 20 24 76 0a 20  .    return $v. 
5960: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   }.  execsql {. 
5970: 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28     SELECT count(
5980: 2a 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  *) FROM t1 WHERE
5990: 20 74 63 6c 76 61 72 28 27 76 31 27 29 3b 0a 20   tclvar('v1');. 
59a0: 20 7d 0a 7d 20 7b 35 30 7d 0a 0a 23 20 54 69 63   }.} {50}..# Tic
59b0: 6b 65 74 20 23 31 33 37 36 2e 20 20 54 68 65 20  ket #1376.  The 
59c0: 71 75 65 72 79 20 62 65 6c 6f 77 20 77 61 73 20  query below was 
59d0: 63 61 75 73 69 6e 67 20 61 20 73 65 67 66 61 75  causing a segfau
59e0: 6c 74 2e 0a 23 20 54 68 65 20 70 72 6f 62 6c 65  lt..# The proble
59f0: 6d 20 77 61 73 20 74 68 65 20 61 67 65 2d 6f 6c  m was the age-ol
5a00: 64 20 65 72 72 6f 72 20 6f 66 20 63 61 6c 6c 69  d error of calli
5a10: 6e 67 20 72 65 61 6c 6c 6f 63 28 29 20 6f 6e 20  ng realloc() on 
5a20: 61 6e 0a 23 20 61 72 72 61 79 20 77 68 69 6c 65  an.# array while
5a30: 20 74 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c   there are still
5a40: 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 64   pointers to ind
5a50: 69 76 69 64 75 61 6c 20 65 6c 65 6d 65 6e 74 73  ividual elements
5a60: 20 6f 66 0a 23 20 74 68 61 74 20 61 72 72 61 79   of.# that array
5a70: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  ..#.do_test wher
5a80: 65 2d 31 31 2e 31 20 7b 0a 20 20 65 78 65 63 73  e-11.1 {.  execs
5a90: 71 6c 20 7b 0a 20 20 20 43 52 45 41 54 45 20 54  ql {.   CREATE T
5aa0: 41 42 4c 45 20 74 39 39 28 44 74 65 20 49 4e 54  ABLE t99(Dte INT
5ab0: 2c 20 58 20 49 4e 54 29 3b 0a 20 20 20 44 45 4c  , X INT);.   DEL
5ac0: 45 54 45 20 46 52 4f 4d 20 74 39 39 20 57 48 45  ETE FROM t99 WHE
5ad0: 52 45 20 28 44 74 65 20 3d 20 32 34 35 31 33 33  RE (Dte = 245133
5ae0: 37 29 20 4f 52 20 28 44 74 65 20 3d 20 32 34 35  7) OR (Dte = 245
5af0: 31 33 33 39 29 20 4f 52 0a 20 20 20 20 20 28 44  1339) OR.     (D
5b00: 74 65 20 42 45 54 57 45 45 4e 20 32 34 35 31 33  te BETWEEN 24513
5b10: 34 35 20 41 4e 44 20 32 34 35 31 33 34 37 29 20  45 AND 2451347) 
5b20: 4f 52 20 28 44 74 65 20 3d 20 32 34 35 31 33 35  OR (Dte = 245135
5b30: 31 29 20 4f 52 20 0a 20 20 20 20 20 28 44 74 65  1) OR .     (Dte
5b40: 20 42 45 54 57 45 45 4e 20 32 34 35 31 33 35 35   BETWEEN 2451355
5b50: 20 41 4e 44 20 32 34 35 31 33 35 36 29 20 4f 52   AND 2451356) OR
5b60: 20 28 44 74 65 20 3d 20 32 34 35 31 33 35 38 29   (Dte = 2451358)
5b70: 20 4f 52 0a 20 20 20 20 20 28 44 74 65 20 3d 20   OR.     (Dte = 
5b80: 32 34 35 31 33 36 32 29 20 4f 52 20 28 44 74 65  2451362) OR (Dte
5b90: 20 3d 20 32 34 35 31 33 36 35 29 20 4f 52 20 28   = 2451365) OR (
5ba0: 44 74 65 20 3d 20 32 34 35 31 33 36 37 29 20 4f  Dte = 2451367) O
5bb0: 52 0a 20 20 20 20 20 28 44 74 65 20 42 45 54 57  R.     (Dte BETW
5bc0: 45 45 4e 20 32 34 35 31 33 37 32 20 41 4e 44 20  EEN 2451372 AND 
5bd0: 32 34 35 31 33 37 36 29 20 4f 52 20 28 44 74 65  2451376) OR (Dte
5be0: 20 42 45 54 57 45 45 4e 20 32 34 35 31 33 38 32   BETWEEN 2451382
5bf0: 20 41 4e 44 20 32 34 35 31 33 38 34 29 20 4f 52   AND 2451384) OR
5c00: 0a 20 20 20 20 20 28 44 74 65 20 3d 20 32 34 35  .     (Dte = 245
5c10: 31 33 38 37 29 20 4f 52 20 28 44 74 65 20 42 45  1387) OR (Dte BE
5c20: 54 57 45 45 4e 20 32 34 35 31 33 38 39 20 41 4e  TWEEN 2451389 AN
5c30: 44 20 32 34 35 31 33 39 31 29 20 4f 52 20 0a 20  D 2451391) OR . 
5c40: 20 20 20 20 28 44 74 65 20 42 45 54 57 45 45 4e      (Dte BETWEEN
5c50: 20 32 34 35 31 33 39 33 20 41 4e 44 20 32 34 35   2451393 AND 245
5c60: 31 33 39 35 29 20 4f 52 20 28 44 74 65 20 3d 20  1395) OR (Dte = 
5c70: 32 34 35 31 34 30 30 29 20 4f 52 20 0a 20 20 20  2451400) OR .   
5c80: 20 20 28 44 74 65 20 3d 20 32 34 35 31 34 30 32    (Dte = 2451402
5c90: 29 20 4f 52 20 28 44 74 65 20 3d 20 32 34 35 31  ) OR (Dte = 2451
5ca0: 34 30 34 29 20 4f 52 20 28 44 74 65 20 42 45 54  404) OR (Dte BET
5cb0: 57 45 45 4e 20 32 34 35 31 34 31 36 20 41 4e 44  WEEN 2451416 AND
5cc0: 20 32 34 35 31 34 31 38 29 20 4f 52 20 0a 20 20   2451418) OR .  
5cd0: 20 20 20 28 44 74 65 20 3d 20 32 34 35 31 34 32     (Dte = 245142
5ce0: 32 29 20 4f 52 20 28 44 74 65 20 3d 20 32 34 35  2) OR (Dte = 245
5cf0: 31 34 32 36 29 20 4f 52 20 28 44 74 65 20 42 45  1426) OR (Dte BE
5d00: 54 57 45 45 4e 20 32 34 35 31 34 34 35 20 41 4e  TWEEN 2451445 AN
5d10: 44 20 32 34 35 31 34 34 36 29 20 4f 52 0a 20 20  D 2451446) OR.  
5d20: 20 20 20 28 44 74 65 20 3d 20 32 34 35 31 34 35     (Dte = 245145
5d30: 36 29 20 4f 52 20 28 44 74 65 20 3d 20 32 34 35  6) OR (Dte = 245
5d40: 31 34 35 38 29 20 4f 52 20 28 44 74 65 20 42 45  1458) OR (Dte BE
5d50: 54 57 45 45 4e 20 32 34 35 31 34 36 35 20 41 4e  TWEEN 2451465 AN
5d60: 44 20 32 34 35 31 34 36 37 29 20 4f 52 0a 20 20  D 2451467) OR.  
5d70: 20 20 20 28 44 74 65 20 42 45 54 57 45 45 4e 20     (Dte BETWEEN 
5d80: 32 34 35 31 34 36 39 20 41 4e 44 20 32 34 35 31  2451469 AND 2451
5d90: 34 37 31 29 20 4f 52 20 28 44 74 65 20 3d 20 32  471) OR (Dte = 2
5da0: 34 35 31 34 37 34 29 20 4f 52 0a 20 20 20 20 20  451474) OR.     
5db0: 28 44 74 65 20 42 45 54 57 45 45 4e 20 32 34 35  (Dte BETWEEN 245
5dc0: 31 34 37 37 20 41 4e 44 20 32 34 35 31 35 30 31  1477 AND 2451501
5dd0: 29 20 4f 52 20 28 44 74 65 20 42 45 54 57 45 45  ) OR (Dte BETWEE
5de0: 4e 20 32 34 35 31 35 30 33 20 41 4e 44 20 32 34  N 2451503 AND 24
5df0: 35 31 35 30 39 29 20 4f 52 0a 20 20 20 20 20 28  51509) OR.     (
5e00: 44 74 65 20 42 45 54 57 45 45 4e 20 32 34 35 31  Dte BETWEEN 2451
5e10: 35 31 31 20 41 4e 44 20 32 34 35 31 35 31 34 29  511 AND 2451514)
5e20: 20 4f 52 20 28 44 74 65 20 42 45 54 57 45 45 4e   OR (Dte BETWEEN
5e30: 20 32 34 35 31 35 31 38 20 41 4e 44 20 32 34 35   2451518 AND 245
5e40: 31 35 32 31 29 20 4f 52 0a 20 20 20 20 20 28 44  1521) OR.     (D
5e50: 74 65 20 42 45 54 57 45 45 4e 20 32 34 35 31 35  te BETWEEN 24515
5e60: 32 33 20 41 4e 44 20 32 34 35 31 35 33 31 29 20  23 AND 2451531) 
5e70: 4f 52 20 28 44 74 65 20 42 45 54 57 45 45 4e 20  OR (Dte BETWEEN 
5e80: 32 34 35 31 35 33 33 20 41 4e 44 20 32 34 35 31  2451533 AND 2451
5e90: 35 33 37 29 20 4f 52 0a 20 20 20 20 20 28 44 74  537) OR.     (Dt
5ea0: 65 20 42 45 54 57 45 45 4e 20 32 34 35 31 35 33  e BETWEEN 245153
5eb0: 39 20 41 4e 44 20 32 34 35 31 35 34 34 29 20 4f  9 AND 2451544) O
5ec0: 52 20 28 44 74 65 20 42 45 54 57 45 45 4e 20 32  R (Dte BETWEEN 2
5ed0: 34 35 31 35 34 36 20 41 4e 44 20 32 34 35 31 35  451546 AND 24515
5ee0: 35 31 29 20 4f 52 0a 20 20 20 20 20 28 44 74 65  51) OR.     (Dte
5ef0: 20 42 45 54 57 45 45 4e 20 32 34 35 31 35 35 33   BETWEEN 2451553
5f00: 20 41 4e 44 20 32 34 35 31 35 35 35 29 20 4f 52   AND 2451555) OR
5f10: 20 28 44 74 65 20 3d 20 32 34 35 31 35 35 37 29   (Dte = 2451557)
5f20: 20 4f 52 0a 20 20 20 20 20 28 44 74 65 20 42 45   OR.     (Dte BE
5f30: 54 57 45 45 4e 20 32 34 35 31 35 35 39 20 41 4e  TWEEN 2451559 AN
5f40: 44 20 32 34 35 31 35 36 31 29 20 4f 52 20 28 44  D 2451561) OR (D
5f50: 74 65 20 3d 20 32 34 35 31 35 36 33 29 20 4f 52  te = 2451563) OR
5f60: 0a 20 20 20 20 20 28 44 74 65 20 42 45 54 57 45  .     (Dte BETWE
5f70: 45 4e 20 32 34 35 31 35 36 35 20 41 4e 44 20 32  EN 2451565 AND 2
5f80: 34 35 31 35 36 36 29 20 4f 52 20 28 44 74 65 20  451566) OR (Dte 
5f90: 42 45 54 57 45 45 4e 20 32 34 35 31 35 36 39 20  BETWEEN 2451569 
5fa0: 41 4e 44 20 32 34 35 31 35 37 31 29 20 4f 52 20  AND 2451571) OR 
5fb0: 0a 20 20 20 20 20 28 44 74 65 20 3d 20 32 34 35  .     (Dte = 245
5fc0: 31 35 37 33 29 20 4f 52 20 28 44 74 65 20 3d 20  1573) OR (Dte = 
5fd0: 32 34 35 31 35 37 35 29 20 4f 52 20 28 44 74 65  2451575) OR (Dte
5fe0: 20 3d 20 32 34 35 31 35 37 37 29 20 4f 52 20 28   = 2451577) OR (
5ff0: 44 74 65 20 3d 20 32 34 35 31 35 38 31 29 20 4f  Dte = 2451581) O
6000: 52 0a 20 20 20 20 20 28 44 74 65 20 42 45 54 57  R.     (Dte BETW
6010: 45 45 4e 20 32 34 35 31 35 38 33 20 41 4e 44 20  EEN 2451583 AND 
6020: 32 34 35 31 35 38 36 29 20 4f 52 20 28 44 74 65  2451586) OR (Dte
6030: 20 42 45 54 57 45 45 4e 20 32 34 35 31 35 38 38   BETWEEN 2451588
6040: 20 41 4e 44 20 32 34 35 31 35 39 32 29 20 4f 52   AND 2451592) OR
6050: 20 0a 20 20 20 20 20 28 44 74 65 20 42 45 54 57   .     (Dte BETW
6060: 45 45 4e 20 32 34 35 31 35 39 36 20 41 4e 44 20  EEN 2451596 AND 
6070: 32 34 35 31 35 39 38 29 20 4f 52 20 28 44 74 65  2451598) OR (Dte
6080: 20 3d 20 32 34 35 31 36 30 30 29 20 4f 52 0a 20   = 2451600) OR. 
6090: 20 20 20 20 28 44 74 65 20 42 45 54 57 45 45 4e      (Dte BETWEEN
60a0: 20 32 34 35 31 36 30 32 20 41 4e 44 20 32 34 35   2451602 AND 245
60b0: 31 36 30 33 29 20 4f 52 20 28 44 74 65 20 3d 20  1603) OR (Dte = 
60c0: 32 34 35 31 36 30 36 29 20 4f 52 20 28 44 74 65  2451606) OR (Dte
60d0: 20 3d 20 32 34 35 31 36 31 31 29 3b 0a 20 20 7d   = 2451611);.  }
60e0: 0a 7d 20 7b 7d 0a 0a 23 20 54 69 63 6b 65 74 20  .} {}..# Ticket 
60f0: 23 32 31 31 36 3a 20 20 4d 61 6b 65 20 73 75 72  #2116:  Make sur
6100: 65 20 73 6f 72 74 69 6e 67 20 62 79 20 69 6e 64  e sorting by ind
6110: 65 78 20 77 6f 72 6b 73 20 77 65 6c 6c 20 77 69  ex works well wi
6120: 74 68 20 6e 6e 20 49 4e 54 45 47 45 52 20 50 52  th nn INTEGER PR
6130: 49 4d 41 52 59 0a 23 20 4b 45 59 2e 0a 23 0a 64  IMARY.# KEY..#.d
6140: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 32 2e  o_test where-12.
6150: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
6160: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
6170: 20 74 36 28 61 20 49 4e 54 45 47 45 52 20 50 52   t6(a INTEGER PR
6180: 49 4d 41 52 59 20 4b 45 59 2c 20 62 20 54 45 58  IMARY KEY, b TEX
6190: 54 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  T);.    INSERT I
61a0: 4e 54 4f 20 74 36 20 56 41 4c 55 45 53 28 31 2c  NTO t6 VALUES(1,
61b0: 27 6f 6e 65 27 29 3b 0a 20 20 20 20 49 4e 53 45  'one');.    INSE
61c0: 52 54 20 49 4e 54 4f 20 74 36 20 56 41 4c 55 45  RT INTO t6 VALUE
61d0: 53 28 34 2c 27 66 6f 75 72 27 29 3b 0a 20 20 20  S(4,'four');.   
61e0: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 74 36   CREATE INDEX t6
61f0: 69 31 20 4f 4e 20 74 36 28 62 29 3b 0a 20 20 7d  i1 ON t6(b);.  }
6200: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
6210: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 36  SELECT * FROM t6
6220: 20 4f 52 44 45 52 20 42 59 20 62 3b 0a 20 20 7d   ORDER BY b;.  }
6230: 0a 7d 20 7b 34 20 66 6f 75 72 20 31 20 6f 6e 65  .} {4 four 1 one
6240: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
6250: 20 77 68 65 72 65 2d 31 32 2e 32 20 7b 0a 20 20   where-12.2 {.  
6260: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
6270: 45 43 54 20 2a 20 46 52 4f 4d 20 74 36 20 4f 52  ECT * FROM t6 OR
6280: 44 45 52 20 42 59 20 62 2c 20 61 3b 0a 20 20 7d  DER BY b, a;.  }
6290: 0a 7d 20 7b 34 20 66 6f 75 72 20 31 20 6f 6e 65  .} {4 four 1 one
62a0: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
62b0: 20 77 68 65 72 65 2d 31 32 2e 33 20 7b 0a 20 20   where-12.3 {.  
62c0: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
62d0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 36 20 4f 52  ECT * FROM t6 OR
62e0: 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20  DER BY a;.  }.} 
62f0: 7b 31 20 6f 6e 65 20 34 20 66 6f 75 72 20 6e 6f  {1 one 4 four no
6300: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
6310: 65 72 65 2d 31 32 2e 34 20 7b 0a 20 20 63 6b 73  ere-12.4 {.  cks
6320: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
6330: 20 2a 20 46 52 4f 4d 20 74 36 20 4f 52 44 45 52   * FROM t6 ORDER
6340: 20 42 59 20 61 2c 20 62 3b 0a 20 20 7d 0a 7d 20   BY a, b;.  }.} 
6350: 7b 31 20 6f 6e 65 20 34 20 66 6f 75 72 20 6e 6f  {1 one 4 four no
6360: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
6370: 65 72 65 2d 31 32 2e 35 20 7b 0a 20 20 63 6b 73  ere-12.5 {.  cks
6380: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
6390: 20 2a 20 46 52 4f 4d 20 74 36 20 4f 52 44 45 52   * FROM t6 ORDER
63a0: 20 42 59 20 62 20 44 45 53 43 3b 0a 20 20 7d 0a   BY b DESC;.  }.
63b0: 7d 20 7b 31 20 6f 6e 65 20 34 20 66 6f 75 72 20  } {1 one 4 four 
63c0: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
63d0: 77 68 65 72 65 2d 31 32 2e 36 20 7b 0a 20 20 63  where-12.6 {.  c
63e0: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
63f0: 43 54 20 2a 20 46 52 4f 4d 20 74 36 20 4f 52 44  CT * FROM t6 ORD
6400: 45 52 20 42 59 20 62 20 44 45 53 43 2c 20 61 20  ER BY b DESC, a 
6410: 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 20 6f  DESC;.  }.} {1 o
6420: 6e 65 20 34 20 66 6f 75 72 20 6e 6f 73 6f 72 74  ne 4 four nosort
6430: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
6440: 31 32 2e 37 20 7b 0a 20 20 63 6b 73 6f 72 74 20  12.7 {.  cksort 
6450: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
6460: 52 4f 4d 20 74 36 20 4f 52 44 45 52 20 42 59 20  ROM t6 ORDER BY 
6470: 62 20 44 45 53 43 2c 20 61 20 41 53 43 3b 0a 20  b DESC, a ASC;. 
6480: 20 7d 0a 7d 20 7b 31 20 6f 6e 65 20 34 20 66 6f   }.} {1 one 4 fo
6490: 75 72 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74  ur sort}.do_test
64a0: 20 77 68 65 72 65 2d 31 32 2e 38 20 7b 0a 20 20   where-12.8 {.  
64b0: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
64c0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 36 20 4f 52  ECT * FROM t6 OR
64d0: 44 45 52 20 42 59 20 62 20 41 53 43 2c 20 61 20  DER BY b ASC, a 
64e0: 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 34 20 66  DESC;.  }.} {4 f
64f0: 6f 75 72 20 31 20 6f 6e 65 20 73 6f 72 74 7d 0a  our 1 one sort}.
6500: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 32  do_test where-12
6510: 2e 39 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .9 {.  cksort {.
6520: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
6530: 4d 20 74 36 20 4f 52 44 45 52 20 42 59 20 61 20  M t6 ORDER BY a 
6540: 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 34 20 66  DESC;.  }.} {4 f
6550: 6f 75 72 20 31 20 6f 6e 65 20 6e 6f 73 6f 72 74  our 1 one nosort
6560: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
6570: 31 32 2e 31 30 20 7b 0a 20 20 63 6b 73 6f 72 74  12.10 {.  cksort
6580: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
6590: 46 52 4f 4d 20 74 36 20 4f 52 44 45 52 20 42 59  FROM t6 ORDER BY
65a0: 20 61 20 44 45 53 43 2c 20 62 20 44 45 53 43 3b   a DESC, b DESC;
65b0: 0a 20 20 7d 0a 7d 20 7b 34 20 66 6f 75 72 20 31  .  }.} {4 four 1
65c0: 20 6f 6e 65 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f   one nosort}.do_
65d0: 74 65 73 74 20 77 68 65 72 65 2d 31 32 2e 31 31  test where-12.11
65e0: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
65f0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
6600: 74 36 20 4f 52 44 45 52 20 42 59 20 61 20 44 45  t6 ORDER BY a DE
6610: 53 43 2c 20 62 20 41 53 43 3b 0a 20 20 7d 0a 7d  SC, b ASC;.  }.}
6620: 20 7b 34 20 66 6f 75 72 20 31 20 6f 6e 65 20 6e   {4 four 1 one n
6630: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
6640: 68 65 72 65 2d 31 32 2e 31 32 20 7b 0a 20 20 63  here-12.12 {.  c
6650: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
6660: 43 54 20 2a 20 46 52 4f 4d 20 74 36 20 4f 52 44  CT * FROM t6 ORD
6670: 45 52 20 42 59 20 61 20 41 53 43 2c 20 62 20 44  ER BY a ASC, b D
6680: 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 20 6f 6e  ESC;.  }.} {1 on
6690: 65 20 34 20 66 6f 75 72 20 6e 6f 73 6f 72 74 7d  e 4 four nosort}
66a0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31  .do_test where-1
66b0: 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.1 {.  execsql 
66c0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  {.    CREATE TAB
66d0: 4c 45 20 74 37 28 61 20 49 4e 54 45 47 45 52 20  LE t7(a INTEGER 
66e0: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 62 20 54  PRIMARY KEY, b T
66f0: 45 58 54 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  EXT);.    INSERT
6700: 20 49 4e 54 4f 20 74 37 20 56 41 4c 55 45 53 28   INTO t7 VALUES(
6710: 31 2c 27 6f 6e 65 27 29 3b 0a 20 20 20 20 49 4e  1,'one');.    IN
6720: 53 45 52 54 20 49 4e 54 4f 20 74 37 20 56 41 4c  SERT INTO t7 VAL
6730: 55 45 53 28 34 2c 27 66 6f 75 72 27 29 3b 0a 20  UES(4,'four');. 
6740: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
6750: 74 37 69 31 20 4f 4e 20 74 37 28 62 29 3b 0a 20  t7i1 ON t7(b);. 
6760: 20 7d 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   }.  cksort {.  
6770: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
6780: 74 37 20 4f 52 44 45 52 20 42 59 20 62 3b 0a 20  t7 ORDER BY b;. 
6790: 20 7d 0a 7d 20 7b 34 20 66 6f 75 72 20 31 20 6f   }.} {4 four 1 o
67a0: 6e 65 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  ne nosort}.do_te
67b0: 73 74 20 77 68 65 72 65 2d 31 33 2e 32 20 7b 0a  st where-13.2 {.
67c0: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
67d0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 37 20  ELECT * FROM t7 
67e0: 4f 52 44 45 52 20 42 59 20 62 2c 20 61 3b 0a 20  ORDER BY b, a;. 
67f0: 20 7d 0a 7d 20 7b 34 20 66 6f 75 72 20 31 20 6f   }.} {4 four 1 o
6800: 6e 65 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  ne nosort}.do_te
6810: 73 74 20 77 68 65 72 65 2d 31 33 2e 33 20 7b 0a  st where-13.3 {.
6820: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
6830: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 37 20  ELECT * FROM t7 
6840: 4f 52 44 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a  ORDER BY a;.  }.
6850: 7d 20 7b 31 20 6f 6e 65 20 34 20 66 6f 75 72 20  } {1 one 4 four 
6860: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
6870: 77 68 65 72 65 2d 31 33 2e 34 20 7b 0a 20 20 63  where-13.4 {.  c
6880: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
6890: 43 54 20 2a 20 46 52 4f 4d 20 74 37 20 4f 52 44  CT * FROM t7 ORD
68a0: 45 52 20 42 59 20 61 2c 20 62 3b 0a 20 20 7d 0a  ER BY a, b;.  }.
68b0: 7d 20 7b 31 20 6f 6e 65 20 34 20 66 6f 75 72 20  } {1 one 4 four 
68c0: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
68d0: 77 68 65 72 65 2d 31 33 2e 35 20 7b 0a 20 20 63  where-13.5 {.  c
68e0: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
68f0: 43 54 20 2a 20 46 52 4f 4d 20 74 37 20 4f 52 44  CT * FROM t7 ORD
6900: 45 52 20 42 59 20 62 20 44 45 53 43 3b 0a 20 20  ER BY b DESC;.  
6910: 7d 0a 7d 20 7b 31 20 6f 6e 65 20 34 20 66 6f 75  }.} {1 one 4 fou
6920: 72 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  r nosort}.do_tes
6930: 74 20 77 68 65 72 65 2d 31 33 2e 36 20 7b 0a 20  t where-13.6 {. 
6940: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
6950: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 37 20 4f  LECT * FROM t7 O
6960: 52 44 45 52 20 42 59 20 62 20 44 45 53 43 2c 20  RDER BY b DESC, 
6970: 61 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31  a DESC;.  }.} {1
6980: 20 6f 6e 65 20 34 20 66 6f 75 72 20 6e 6f 73 6f   one 4 four noso
6990: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
69a0: 65 2d 31 33 2e 37 20 7b 0a 20 20 63 6b 73 6f 72  e-13.7 {.  cksor
69b0: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t {.    SELECT *
69c0: 20 46 52 4f 4d 20 74 37 20 4f 52 44 45 52 20 42   FROM t7 ORDER B
69d0: 59 20 62 20 44 45 53 43 2c 20 61 20 41 53 43 3b  Y b DESC, a ASC;
69e0: 0a 20 20 7d 0a 7d 20 7b 31 20 6f 6e 65 20 34 20  .  }.} {1 one 4 
69f0: 66 6f 75 72 20 73 6f 72 74 7d 0a 64 6f 5f 74 65  four sort}.do_te
6a00: 73 74 20 77 68 65 72 65 2d 31 33 2e 38 20 7b 0a  st where-13.8 {.
6a10: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
6a20: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 37 20  ELECT * FROM t7 
6a30: 4f 52 44 45 52 20 42 59 20 62 20 41 53 43 2c 20  ORDER BY b ASC, 
6a40: 61 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 34  a DESC;.  }.} {4
6a50: 20 66 6f 75 72 20 31 20 6f 6e 65 20 73 6f 72 74   four 1 one sort
6a60: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
6a70: 31 33 2e 39 20 7b 0a 20 20 63 6b 73 6f 72 74 20  13.9 {.  cksort 
6a80: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
6a90: 52 4f 4d 20 74 37 20 4f 52 44 45 52 20 42 59 20  ROM t7 ORDER BY 
6aa0: 61 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 34  a DESC;.  }.} {4
6ab0: 20 66 6f 75 72 20 31 20 6f 6e 65 20 6e 6f 73 6f   four 1 one noso
6ac0: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
6ad0: 65 2d 31 33 2e 31 30 20 7b 0a 20 20 63 6b 73 6f  e-13.10 {.  ckso
6ae0: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
6af0: 2a 20 46 52 4f 4d 20 74 37 20 4f 52 44 45 52 20  * FROM t7 ORDER 
6b00: 42 59 20 61 20 44 45 53 43 2c 20 62 20 44 45 53  BY a DESC, b DES
6b10: 43 3b 0a 20 20 7d 0a 7d 20 7b 34 20 66 6f 75 72  C;.  }.} {4 four
6b20: 20 31 20 6f 6e 65 20 6e 6f 73 6f 72 74 7d 0a 64   1 one nosort}.d
6b30: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 33 2e  o_test where-13.
6b40: 31 31 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  11 {.  cksort {.
6b50: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
6b60: 4d 20 74 37 20 4f 52 44 45 52 20 42 59 20 61 20  M t7 ORDER BY a 
6b70: 44 45 53 43 2c 20 62 20 41 53 43 3b 0a 20 20 7d  DESC, b ASC;.  }
6b80: 0a 7d 20 7b 34 20 66 6f 75 72 20 31 20 6f 6e 65  .} {4 four 1 one
6b90: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
6ba0: 20 77 68 65 72 65 2d 31 33 2e 31 32 20 7b 0a 20   where-13.12 {. 
6bb0: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
6bc0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 37 20 4f  LECT * FROM t7 O
6bd0: 52 44 45 52 20 42 59 20 61 20 41 53 43 2c 20 62  RDER BY a ASC, b
6be0: 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 20   DESC;.  }.} {1 
6bf0: 6f 6e 65 20 34 20 66 6f 75 72 20 6e 6f 73 6f 72  one 4 four nosor
6c00: 74 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 32 32  t}..# Ticket #22
6c10: 31 31 2e 0a 23 0a 23 20 57 68 65 6e 20 6f 70 74  11..#.# When opt
6c20: 69 6d 69 7a 69 6e 67 20 6f 75 74 20 4f 52 44 45  imizing out ORDE
6c30: 52 20 42 59 20 63 6c 61 75 73 65 73 2c 20 6d 61  R BY clauses, ma
6c40: 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 72 61  ke sure that tra
6c50: 69 6c 69 6e 67 20 74 65 72 6d 73 0a 23 20 6f 66  iling terms.# of
6c60: 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
6c70: 61 75 73 65 20 64 6f 20 6e 6f 74 20 72 65 66 65  ause do not refe
6c80: 72 65 6e 63 65 20 6f 74 68 65 72 20 74 61 62 6c  rence other tabl
6c90: 65 73 20 69 6e 20 61 20 6a 6f 69 6e 2e 0a 23 0a  es in a join..#.
6ca0: 69 66 20 7b 5b 70 65 72 6d 75 74 61 74 69 6f 6e  if {[permutation
6cb0: 5d 20 21 3d 20 22 6e 6f 5f 6f 70 74 69 6d 69 7a  ] != "no_optimiz
6cc0: 61 74 69 6f 6e 22 7d 20 7b 0a 64 6f 5f 74 65 73  ation"} {.do_tes
6cd0: 74 20 77 68 65 72 65 2d 31 34 2e 31 20 7b 0a 20  t where-14.1 {. 
6ce0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
6cf0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 38 28 61  REATE TABLE t8(a
6d00: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
6d10: 20 4b 45 59 2c 20 62 20 54 45 58 54 20 55 4e 49   KEY, b TEXT UNI
6d20: 51 55 45 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  QUE);.    INSERT
6d30: 20 49 4e 54 4f 20 74 38 20 56 41 4c 55 45 53 28   INTO t8 VALUES(
6d40: 31 2c 27 6f 6e 65 27 29 3b 0a 20 20 20 20 49 4e  1,'one');.    IN
6d50: 53 45 52 54 20 49 4e 54 4f 20 74 38 20 56 41 4c  SERT INTO t8 VAL
6d60: 55 45 53 28 34 2c 27 66 6f 75 72 27 29 3b 0a 20  UES(4,'four');. 
6d70: 20 7d 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   }.  cksort {.  
6d80: 20 20 53 45 4c 45 43 54 20 78 2e 61 20 7c 7c 20    SELECT x.a || 
6d90: 27 2f 27 20 7c 7c 20 79 2e 61 20 46 52 4f 4d 20  '/' || y.a FROM 
6da0: 74 38 20 78 2c 20 74 38 20 79 20 4f 52 44 45 52  t8 x, t8 y ORDER
6db0: 20 42 59 20 78 2e 61 2c 20 79 2e 62 0a 20 20 7d   BY x.a, y.b.  }
6dc0: 20 0a 7d 20 7b 31 2f 34 20 31 2f 31 20 34 2f 34   .} {1/4 1/1 4/4
6dd0: 20 34 2f 31 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f   4/1 nosort}.do_
6de0: 74 65 73 74 20 77 68 65 72 65 2d 31 34 2e 32 20  test where-14.2 
6df0: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
6e00: 20 53 45 4c 45 43 54 20 78 2e 61 20 7c 7c 20 27   SELECT x.a || '
6e10: 2f 27 20 7c 7c 20 79 2e 61 20 46 52 4f 4d 20 74  /' || y.a FROM t
6e20: 38 20 78 2c 20 74 38 20 79 20 4f 52 44 45 52 20  8 x, t8 y ORDER 
6e30: 42 59 20 78 2e 61 2c 20 79 2e 62 20 44 45 53 43  BY x.a, y.b DESC
6e40: 0a 20 20 7d 20 0a 7d 20 7b 31 2f 31 20 31 2f 34  .  } .} {1/1 1/4
6e50: 20 34 2f 31 20 34 2f 34 20 6e 6f 73 6f 72 74 7d   4/1 4/4 nosort}
6e60: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31  .do_test where-1
6e70: 34 2e 33 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  4.3 {.  cksort {
6e80: 0a 20 20 20 20 53 45 4c 45 43 54 20 78 2e 61 20  .    SELECT x.a 
6e90: 7c 7c 20 27 2f 27 20 7c 7c 20 79 2e 61 20 46 52  || '/' || y.a FR
6ea0: 4f 4d 20 74 38 20 78 2c 20 74 38 20 79 20 4f 52  OM t8 x, t8 y OR
6eb0: 44 45 52 20 42 59 20 78 2e 61 2c 20 78 2e 62 0a  DER BY x.a, x.b.
6ec0: 20 20 7d 20 0a 7d 20 7b 31 2f 34 20 31 2f 31 20    } .} {1/4 1/1 
6ed0: 34 2f 34 20 34 2f 31 20 6e 6f 73 6f 72 74 7d 0a  4/4 4/1 nosort}.
6ee0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 34  do_test where-14
6ef0: 2e 34 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .4 {.  cksort {.
6f00: 20 20 20 20 53 45 4c 45 43 54 20 78 2e 61 20 7c      SELECT x.a |
6f10: 7c 20 27 2f 27 20 7c 7c 20 79 2e 61 20 46 52 4f  | '/' || y.a FRO
6f20: 4d 20 74 38 20 78 2c 20 74 38 20 79 20 4f 52 44  M t8 x, t8 y ORD
6f30: 45 52 20 42 59 20 78 2e 61 2c 20 78 2e 62 20 44  ER BY x.a, x.b D
6f40: 45 53 43 0a 20 20 7d 20 0a 7d 20 7b 31 2f 34 20  ESC.  } .} {1/4 
6f50: 31 2f 31 20 34 2f 34 20 34 2f 31 20 6e 6f 73 6f  1/1 4/4 4/1 noso
6f60: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
6f70: 65 2d 31 34 2e 35 20 7b 0a 20 20 23 20 54 68 69  e-14.5 {.  # Thi
6f80: 73 20 74 65 73 74 20 63 61 73 65 20 63 68 61 6e  s test case chan
6f90: 67 65 64 20 66 72 6f 6d 20 22 6e 6f 73 6f 72 74  ged from "nosort
6fa0: 22 20 74 6f 20 22 73 6f 72 74 22 2e 20 53 65 65  " to "sort". See
6fb0: 20 74 69 63 6b 65 74 20 32 61 35 36 32 39 32 30   ticket 2a562920
6fc0: 32 66 2e 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  2f..  cksort {. 
6fd0: 20 20 20 53 45 4c 45 43 54 20 78 2e 61 20 7c 7c     SELECT x.a ||
6fe0: 20 27 2f 27 20 7c 7c 20 79 2e 61 20 46 52 4f 4d   '/' || y.a FROM
6ff0: 20 74 38 20 78 2c 20 74 38 20 79 20 4f 52 44 45   t8 x, t8 y ORDE
7000: 52 20 42 59 20 78 2e 62 2c 20 78 2e 61 7c 7c 78  R BY x.b, x.a||x
7010: 2e 62 0a 20 20 7d 20 0a 7d 20 7b 2f 34 2f 5b 31  .b.  } .} {/4/[1
7020: 34 5d 20 34 2f 5b 31 34 5d 20 31 2f 5b 31 34 5d  4] 4/[14] 1/[14]
7030: 20 31 2f 5b 31 34 5d 20 73 6f 72 74 2f 7d 0a 64   1/[14] sort/}.d
7040: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 34 2e  o_test where-14.
7050: 36 20 7b 0a 20 20 23 20 54 68 69 73 20 74 65 73  6 {.  # This tes
7060: 74 20 63 61 73 65 20 63 68 61 6e 67 65 64 20 66  t case changed f
7070: 72 6f 6d 20 22 6e 6f 73 6f 72 74 22 20 74 6f 20  rom "nosort" to 
7080: 22 73 6f 72 74 22 2e 20 53 65 65 20 74 69 63 6b  "sort". See tick
7090: 65 74 20 32 61 35 36 32 39 32 30 32 66 2e 0a 20  et 2a5629202f.. 
70a0: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
70b0: 4c 45 43 54 20 78 2e 61 20 7c 7c 20 27 2f 27 20  LECT x.a || '/' 
70c0: 7c 7c 20 79 2e 61 20 46 52 4f 4d 20 74 38 20 78  || y.a FROM t8 x
70d0: 2c 20 74 38 20 79 20 4f 52 44 45 52 20 42 59 20  , t8 y ORDER BY 
70e0: 78 2e 62 2c 20 78 2e 61 7c 7c 78 2e 62 20 44 45  x.b, x.a||x.b DE
70f0: 53 43 0a 20 20 7d 20 0a 7d 20 7b 2f 34 2f 5b 31  SC.  } .} {/4/[1
7100: 34 5d 20 34 2f 5b 31 34 5d 20 31 2f 5b 31 34 5d  4] 4/[14] 1/[14]
7110: 20 31 2f 5b 31 34 5d 20 73 6f 72 74 2f 7d 0a 64   1/[14] sort/}.d
7120: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 34 2e  o_test where-14.
7130: 37 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  7 {.  cksort {. 
7140: 20 20 20 53 45 4c 45 43 54 20 78 2e 61 20 7c 7c     SELECT x.a ||
7150: 20 27 2f 27 20 7c 7c 20 79 2e 61 20 46 52 4f 4d   '/' || y.a FROM
7160: 20 74 38 20 78 2c 20 74 38 20 79 20 4f 52 44 45   t8 x, t8 y ORDE
7170: 52 20 42 59 20 78 2e 62 2c 20 79 2e 61 7c 7c 79  R BY x.b, y.a||y
7180: 2e 62 0a 20 20 7d 20 0a 7d 20 7b 34 2f 31 20 34  .b.  } .} {4/1 4
7190: 2f 34 20 31 2f 31 20 31 2f 34 20 73 6f 72 74 7d  /4 1/1 1/4 sort}
71a0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31  .do_test where-1
71b0: 34 2e 37 2e 31 20 7b 0a 20 20 63 6b 73 6f 72 74  4.7.1 {.  cksort
71c0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78 2e   {.    SELECT x.
71d0: 61 20 7c 7c 20 27 2f 27 20 7c 7c 20 79 2e 61 20  a || '/' || y.a 
71e0: 46 52 4f 4d 20 74 38 20 78 2c 20 74 38 20 79 20  FROM t8 x, t8 y 
71f0: 4f 52 44 45 52 20 42 59 20 78 2e 62 2c 20 78 2e  ORDER BY x.b, x.
7200: 61 2c 20 79 2e 61 7c 7c 79 2e 62 0a 20 20 7d 20  a, y.a||y.b.  } 
7210: 0a 7d 20 7b 34 2f 31 20 34 2f 34 20 31 2f 31 20  .} {4/1 4/4 1/1 
7220: 31 2f 34 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  1/4 sort}.do_tes
7230: 74 20 77 68 65 72 65 2d 31 34 2e 37 2e 32 20 7b  t where-14.7.2 {
7240: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
7250: 53 45 4c 45 43 54 20 78 2e 61 20 7c 7c 20 27 2f  SELECT x.a || '/
7260: 27 20 7c 7c 20 79 2e 61 20 46 52 4f 4d 20 74 38  ' || y.a FROM t8
7270: 20 78 2c 20 74 38 20 79 20 4f 52 44 45 52 20 42   x, t8 y ORDER B
7280: 59 20 78 2e 62 2c 20 78 2e 61 2c 20 78 2e 61 7c  Y x.b, x.a, x.a|
7290: 7c 78 2e 62 0a 20 20 7d 20 0a 7d 20 7b 34 2f 34  |x.b.  } .} {4/4
72a0: 20 34 2f 31 20 31 2f 34 20 31 2f 31 20 6e 6f 73   4/1 1/4 1/1 nos
72b0: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
72c0: 72 65 2d 31 34 2e 38 20 7b 0a 20 20 63 6b 73 6f  re-14.8 {.  ckso
72d0: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
72e0: 78 2e 61 20 7c 7c 20 27 2f 27 20 7c 7c 20 79 2e  x.a || '/' || y.
72f0: 61 20 46 52 4f 4d 20 74 38 20 78 2c 20 74 38 20  a FROM t8 x, t8 
7300: 79 20 4f 52 44 45 52 20 42 59 20 78 2e 62 2c 20  y ORDER BY x.b, 
7310: 79 2e 61 7c 7c 79 2e 62 20 44 45 53 43 0a 20 20  y.a||y.b DESC.  
7320: 7d 20 0a 7d 20 7b 34 2f 34 20 34 2f 31 20 31 2f  } .} {4/4 4/1 1/
7330: 34 20 31 2f 31 20 73 6f 72 74 7d 0a 64 6f 5f 74  4 1/1 sort}.do_t
7340: 65 73 74 20 77 68 65 72 65 2d 31 34 2e 39 20 7b  est where-14.9 {
7350: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
7360: 53 45 4c 45 43 54 20 78 2e 61 20 7c 7c 20 27 2f  SELECT x.a || '/
7370: 27 20 7c 7c 20 79 2e 61 20 46 52 4f 4d 20 74 38  ' || y.a FROM t8
7380: 20 78 2c 20 74 38 20 79 20 4f 52 44 45 52 20 42   x, t8 y ORDER B
7390: 59 20 78 2e 62 2c 20 78 2e 61 7c 7c 79 2e 62 0a  Y x.b, x.a||y.b.
73a0: 20 20 7d 20 0a 7d 20 7b 34 2f 34 20 34 2f 31 20    } .} {4/4 4/1 
73b0: 31 2f 34 20 31 2f 31 20 73 6f 72 74 7d 0a 64 6f  1/4 1/1 sort}.do
73c0: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 34 2e 31  _test where-14.1
73d0: 30 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  0 {.  cksort {. 
73e0: 20 20 20 53 45 4c 45 43 54 20 78 2e 61 20 7c 7c     SELECT x.a ||
73f0: 20 27 2f 27 20 7c 7c 20 79 2e 61 20 46 52 4f 4d   '/' || y.a FROM
7400: 20 74 38 20 78 2c 20 74 38 20 79 20 4f 52 44 45   t8 x, t8 y ORDE
7410: 52 20 42 59 20 78 2e 62 2c 20 78 2e 61 7c 7c 79  R BY x.b, x.a||y
7420: 2e 62 20 44 45 53 43 0a 20 20 7d 20 0a 7d 20 7b  .b DESC.  } .} {
7430: 34 2f 31 20 34 2f 34 20 31 2f 31 20 31 2f 34 20  4/1 4/4 1/1 1/4 
7440: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
7450: 65 72 65 2d 31 34 2e 31 31 20 7b 0a 20 20 63 6b  ere-14.11 {.  ck
7460: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
7470: 54 20 78 2e 61 20 7c 7c 20 27 2f 27 20 7c 7c 20  T x.a || '/' || 
7480: 79 2e 61 20 46 52 4f 4d 20 74 38 20 78 2c 20 74  y.a FROM t8 x, t
7490: 38 20 79 20 4f 52 44 45 52 20 42 59 20 78 2e 62  8 y ORDER BY x.b
74a0: 2c 20 79 2e 61 7c 7c 78 2e 62 0a 20 20 7d 20 0a  , y.a||x.b.  } .
74b0: 7d 20 7b 34 2f 31 20 34 2f 34 20 31 2f 31 20 31  } {4/1 4/4 1/1 1
74c0: 2f 34 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74  /4 sort}.do_test
74d0: 20 77 68 65 72 65 2d 31 34 2e 31 32 20 7b 0a 20   where-14.12 {. 
74e0: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
74f0: 4c 45 43 54 20 78 2e 61 20 7c 7c 20 27 2f 27 20  LECT x.a || '/' 
7500: 7c 7c 20 79 2e 61 20 46 52 4f 4d 20 74 38 20 78  || y.a FROM t8 x
7510: 2c 20 74 38 20 79 20 4f 52 44 45 52 20 42 59 20  , t8 y ORDER BY 
7520: 78 2e 62 2c 20 79 2e 61 7c 7c 78 2e 62 20 44 45  x.b, y.a||x.b DE
7530: 53 43 0a 20 20 7d 20 0a 7d 20 7b 34 2f 34 20 34  SC.  } .} {4/4 4
7540: 2f 31 20 31 2f 34 20 31 2f 31 20 73 6f 72 74 7d  /1 1/4 1/1 sort}
7550: 0a 7d 20 3b 23 20 7b 70 65 72 6d 75 74 61 74 69  .} ;# {permutati
7560: 6f 6e 20 21 3d 20 22 6e 6f 5f 6f 70 74 69 6d 69  on != "no_optimi
7570: 7a 61 74 69 6f 6e 22 7d 0a 0a 23 20 54 69 63 6b  zation"}..# Tick
7580: 65 74 20 23 32 34 34 35 2e 0a 23 0a 23 20 54 68  et #2445..#.# Th
7590: 65 72 65 20 77 61 73 20 61 20 63 72 61 73 68 20  ere was a crash 
75a0: 74 68 61 74 20 63 6f 75 6c 64 20 6f 63 63 75 72  that could occur
75b0: 20 77 68 65 6e 20 61 20 77 68 65 72 65 20 63 6c   when a where cl
75c0: 61 75 73 65 20 63 6f 6e 74 61 69 6e 73 20 61 6e  ause contains an
75d0: 0a 23 20 61 6c 69 61 73 20 66 6f 72 20 61 6e 20  .# alias for an 
75e0: 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68  expression in th
75f0: 65 20 72 65 73 75 6c 74 20 73 65 74 2c 20 61 6e  e result set, an
7600: 64 20 74 68 61 74 20 65 78 70 72 65 73 73 69 6f  d that expressio
7610: 6e 20 72 65 74 72 69 65 76 65 73 0a 23 20 61 20  n retrieves.# a 
7620: 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 73 65  column of the se
7630: 63 6f 6e 64 20 6f 72 20 73 75 62 73 65 71 75 65  cond or subseque
7640: 6e 74 20 74 61 62 6c 65 20 69 6e 20 61 20 6a 6f  nt table in a jo
7650: 69 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68  in..#.do_test wh
7660: 65 72 65 2d 31 35 2e 31 20 7b 0a 20 20 65 78 65  ere-15.1 {.  exe
7670: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
7680: 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31 20  E TEMP TABLE t1 
7690: 28 61 2c 20 62 2c 20 63 2c 20 64 2c 20 65 29 3b  (a, b, c, d, e);
76a0: 0a 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50  .    CREATE TEMP
76b0: 20 54 41 42 4c 45 20 74 32 20 28 66 29 3b 0a 20   TABLE t2 (f);. 
76c0: 20 20 20 53 45 4c 45 43 54 20 74 31 2e 65 20 41     SELECT t1.e A
76d0: 53 20 61 6c 69 61 73 20 46 52 4f 4d 20 74 32 2c  S alias FROM t2,
76e0: 20 74 31 20 57 48 45 52 45 20 61 6c 69 61 73 20   t1 WHERE alias 
76f0: 3d 20 31 20 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a  = 1 ;.  }.} {}..
7700: 23 20 54 69 63 6b 65 74 20 23 33 34 30 38 2e 0a  # Ticket #3408..
7710: 23 20 0a 23 20 54 68 65 20 62 72 61 6e 63 68 20  # .# The branch 
7720: 6f 66 20 63 6f 64 65 20 69 6e 20 77 68 65 72 65  of code in where
7730: 2e 63 20 74 68 61 74 20 67 65 6e 65 72 61 74 65  .c that generate
7740: 64 20 72 6f 77 69 64 20 6c 6f 6f 6b 75 70 73 20  d rowid lookups 
7750: 77 61 73 0a 23 20 69 6e 63 6f 72 72 65 63 74 6c  was.# incorrectl
7760: 79 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 61  y deallocating a
7770: 20 63 6f 6e 73 74 61 6e 74 20 72 65 67 69 73 74   constant regist
7780: 65 72 2c 20 6d 65 61 6e 69 6e 67 20 74 68 61 74  er, meaning that
7790: 20 69 66 20 74 68 65 20 0a 23 20 76 64 62 65 20   if the .# vdbe 
77a0: 63 6f 64 65 20 72 61 6e 20 6d 6f 72 65 20 74 68  code ran more th
77b0: 61 6e 20 6f 6e 63 65 2c 20 74 68 65 20 73 65 63  an once, the sec
77c0: 6f 6e 64 20 74 69 6d 65 20 61 72 6f 75 6e 64 20  ond time around 
77d0: 74 68 65 20 63 6f 6e 73 74 61 6e 74 0a 23 20 76  the constant.# v
77e0: 61 6c 75 65 20 6d 61 79 20 68 61 76 65 20 62 65  alue may have be
77f0: 65 6e 20 63 6c 6f 62 62 65 72 65 64 20 62 79 20  en clobbered by 
7800: 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65  some other value
7810: 2e 0a 23 20 0a 64 6f 5f 74 65 73 74 20 77 68 65  ..# .do_test whe
7820: 72 65 2d 31 36 2e 31 20 7b 0a 20 20 65 78 65 63  re-16.1 {.  exec
7830: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
7840: 20 54 41 42 4c 45 20 61 31 28 69 64 20 49 4e 54   TABLE a1(id INT
7850: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
7860: 2c 20 76 29 3b 0a 20 20 20 20 43 52 45 41 54 45  , v);.    CREATE
7870: 20 54 41 42 4c 45 20 61 32 28 69 64 20 49 4e 54   TABLE a2(id INT
7880: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
7890: 2c 20 76 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  , v);.    INSERT
78a0: 20 49 4e 54 4f 20 61 31 20 56 41 4c 55 45 53 28   INTO a1 VALUES(
78b0: 31 2c 20 27 6f 6e 65 27 29 3b 0a 20 20 20 20 49  1, 'one');.    I
78c0: 4e 53 45 52 54 20 49 4e 54 4f 20 61 31 20 56 41  NSERT INTO a1 VA
78d0: 4c 55 45 53 28 32 2c 20 27 74 77 6f 27 29 3b 0a  LUES(2, 'two');.
78e0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
78f0: 61 32 20 56 41 4c 55 45 53 28 31 2c 20 27 6f 6e  a2 VALUES(1, 'on
7900: 65 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  e');.    INSERT 
7910: 49 4e 54 4f 20 61 32 20 56 41 4c 55 45 53 28 32  INTO a2 VALUES(2
7920: 2c 20 27 74 77 6f 27 29 3b 0a 20 20 7d 0a 7d 20  , 'two');.  }.} 
7930: 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  {}.do_test where
7940: 2d 31 36 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  -16.2 {.  execsq
7950: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
7960: 20 46 52 4f 4d 20 61 32 20 43 52 4f 53 53 20 4a   FROM a2 CROSS J
7970: 4f 49 4e 20 61 31 20 57 48 45 52 45 20 61 31 2e  OIN a1 WHERE a1.
7980: 69 64 3d 31 20 41 4e 44 20 61 31 2e 76 3d 27 6f  id=1 AND a1.v='o
7990: 6e 65 27 3b 0a 20 20 7d 0a 7d 20 7b 31 20 6f 6e  ne';.  }.} {1 on
79a0: 65 20 31 20 6f 6e 65 20 32 20 74 77 6f 20 31 20  e 1 one 2 two 1 
79b0: 6f 6e 65 7d 0a 0a 23 20 54 68 65 20 61 63 74 75  one}..# The actu
79c0: 61 6c 20 70 72 6f 62 6c 65 6d 20 72 65 70 6f 72  al problem repor
79d0: 74 65 64 20 69 6e 20 23 33 34 30 38 2e 0a 64 6f  ted in #3408..do
79e0: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 36 2e 33  _test where-16.3
79f0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
7a00: 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20 54     CREATE TEMP T
7a10: 41 42 4c 45 20 66 6f 6f 28 69 64 78 20 49 4e 54  ABLE foo(idx INT
7a20: 45 47 45 52 29 3b 0a 20 20 20 20 49 4e 53 45 52  EGER);.    INSER
7a30: 54 20 49 4e 54 4f 20 66 6f 6f 20 56 41 4c 55 45  T INTO foo VALUE
7a40: 53 28 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  S(1);.    INSERT
7a50: 20 49 4e 54 4f 20 66 6f 6f 20 56 41 4c 55 45 53   INTO foo VALUES
7a60: 28 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  (1);.    INSERT 
7a70: 49 4e 54 4f 20 66 6f 6f 20 56 41 4c 55 45 53 28  INTO foo VALUES(
7a80: 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  1);.    INSERT I
7a90: 4e 54 4f 20 66 6f 6f 20 56 41 4c 55 45 53 28 32  NTO foo VALUES(2
7aa0: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
7ab0: 54 4f 20 66 6f 6f 20 56 41 4c 55 45 53 28 32 29  TO foo VALUES(2)
7ac0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 45 4d  ;.    CREATE TEM
7ad0: 50 20 54 41 42 4c 45 20 62 61 72 28 73 74 75 66  P TABLE bar(stuf
7ae0: 66 20 49 4e 54 45 47 45 52 29 3b 0a 20 20 20 20  f INTEGER);.    
7af0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 62 61 72 20  INSERT INTO bar 
7b00: 56 41 4c 55 45 53 28 31 30 30 29 3b 0a 20 20 20  VALUES(100);.   
7b10: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 62 61 72   INSERT INTO bar
7b20: 20 56 41 4c 55 45 53 28 32 30 30 29 3b 0a 20 20   VALUES(200);.  
7b30: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 62 61    INSERT INTO ba
7b40: 72 20 56 41 4c 55 45 53 28 33 30 30 29 3b 0a 20  r VALUES(300);. 
7b50: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
7b60: 77 68 65 72 65 2d 31 36 2e 34 20 7b 0a 20 20 65  where-16.4 {.  e
7b70: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
7b80: 45 43 54 20 62 61 72 2e 52 6f 77 49 44 20 69 64  ECT bar.RowID id
7b90: 20 46 52 4f 4d 20 66 6f 6f 2c 20 62 61 72 20 57   FROM foo, bar W
7ba0: 48 45 52 45 20 66 6f 6f 2e 69 64 78 20 3d 20 62  HERE foo.idx = b
7bb0: 61 72 2e 52 6f 77 49 44 20 41 4e 44 20 69 64 20  ar.RowID AND id 
7bc0: 3d 20 32 3b 0a 20 20 7d 0a 7d 20 7b 32 20 32 7d  = 2;.  }.} {2 2}
7bd0: 0a 0a 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  ..integrity_chec
7be0: 6b 20 7b 77 68 65 72 65 2d 39 39 2e 30 7d 0a 0a  k {where-99.0}..
7bf0: 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  #---------------
7c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7c30: 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 65 73 65 20 74  ------.# These t
7c40: 65 73 74 73 20 74 65 73 74 20 74 68 61 74 20 61  ests test that a
7c50: 20 62 75 67 20 73 75 72 72 6f 75 6e 64 69 6e 67   bug surrounding
7c60: 20 74 68 65 20 75 73 65 20 6f 66 20 46 6f 72 63   the use of Forc
7c70: 65 49 6e 74 20 68 61 73 20 62 65 65 6e 0a 23 20  eInt has been.# 
7c80: 66 69 78 65 64 20 69 6e 20 77 68 65 72 65 2e 63  fixed in where.c
7c90: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  ..#.do_test wher
7ca0: 65 2d 31 37 2e 31 20 7b 0a 20 20 65 78 65 63 73  e-17.1 {.  execs
7cb0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
7cc0: 54 41 42 4c 45 20 74 62 6f 6f 6b 69 6e 67 20 28  TABLE tbooking (
7cd0: 0a 20 20 20 20 20 20 69 64 20 49 4e 54 45 47 45  .      id INTEGE
7ce0: 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 0a 20  R PRIMARY KEY,. 
7cf0: 20 20 20 20 20 65 76 65 6e 74 74 79 70 65 20 49       eventtype I
7d00: 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 0a  NTEGER NOT NULL.
7d10: 20 20 20 20 29 3b 0a 20 20 20 20 49 4e 53 45 52      );.    INSER
7d20: 54 20 49 4e 54 4f 20 74 62 6f 6f 6b 69 6e 67 20  T INTO tbooking 
7d30: 56 41 4c 55 45 53 28 34 32 2c 20 33 29 3b 0a 20  VALUES(42, 3);. 
7d40: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
7d50: 62 6f 6f 6b 69 6e 67 20 56 41 4c 55 45 53 28 34  booking VALUES(4
7d60: 33 2c 20 34 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  3, 4);.  }.} {}.
7d70: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 37  do_test where-17
7d80: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
7d90: 0a 20 20 20 20 53 45 4c 45 43 54 20 61 2e 69 64  .    SELECT a.id
7da0: 0a 20 20 20 20 46 52 4f 4d 20 74 62 6f 6f 6b 69  .    FROM tbooki
7db0: 6e 67 20 41 53 20 61 0a 20 20 20 20 57 48 45 52  ng AS a.    WHER
7dc0: 45 20 61 2e 65 76 65 6e 74 74 79 70 65 3d 33 3b  E a.eventtype=3;
7dd0: 0a 20 20 7d 0a 7d 20 7b 34 32 7d 0a 64 6f 5f 74  .  }.} {42}.do_t
7de0: 65 73 74 20 77 68 65 72 65 2d 31 37 2e 33 20 7b  est where-17.3 {
7df0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
7e00: 20 53 45 4c 45 43 54 20 61 2e 69 64 2c 20 28 53   SELECT a.id, (S
7e10: 45 4c 45 43 54 20 62 2e 69 64 20 46 52 4f 4d 20  ELECT b.id FROM 
7e20: 74 62 6f 6f 6b 69 6e 67 20 41 53 20 62 20 57 48  tbooking AS b WH
7e30: 45 52 45 20 62 2e 69 64 3e 61 2e 69 64 29 0a 20  ERE b.id>a.id). 
7e40: 20 20 20 46 52 4f 4d 20 74 62 6f 6f 6b 69 6e 67     FROM tbooking
7e50: 20 41 53 20 61 0a 20 20 20 20 57 48 45 52 45 20   AS a.    WHERE 
7e60: 61 2e 65 76 65 6e 74 74 79 70 65 3d 33 3b 0a 20  a.eventtype=3;. 
7e70: 20 7d 0a 7d 20 7b 34 32 20 34 33 7d 0a 64 6f 5f   }.} {42 43}.do_
7e80: 74 65 73 74 20 77 68 65 72 65 2d 31 37 2e 34 20  test where-17.4 
7e90: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
7ea0: 20 20 53 45 4c 45 43 54 20 61 2e 69 64 2c 20 28    SELECT a.id, (
7eb0: 53 45 4c 45 43 54 20 62 2e 69 64 20 46 52 4f 4d  SELECT b.id FROM
7ec0: 20 74 62 6f 6f 6b 69 6e 67 20 41 53 20 62 20 57   tbooking AS b W
7ed0: 48 45 52 45 20 62 2e 69 64 3e 61 2e 69 64 29 0a  HERE b.id>a.id).
7ee0: 20 20 20 20 46 52 4f 4d 20 28 53 45 4c 45 43 54      FROM (SELECT
7ef0: 20 31 2e 35 20 41 53 20 69 64 29 20 41 53 20 61   1.5 AS id) AS a
7f00: 0a 20 20 7d 0a 7d 20 7b 31 2e 35 20 34 32 7d 0a  .  }.} {1.5 42}.
7f10: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 37  do_test where-17
7f20: 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .5 {.  execsql {
7f30: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
7f40: 45 20 74 6f 74 68 65 72 28 61 2c 20 62 29 3b 0a  E tother(a, b);.
7f50: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
7f60: 74 6f 74 68 65 72 20 56 41 4c 55 45 53 28 31 2c  tother VALUES(1,
7f70: 20 33 2e 37 29 3b 0a 20 20 20 20 53 45 4c 45 43   3.7);.    SELEC
7f80: 54 20 69 64 2c 20 61 20 46 52 4f 4d 20 74 62 6f  T id, a FROM tbo
7f90: 6f 6b 69 6e 67 2c 20 74 6f 74 68 65 72 20 57 48  oking, tother WH
7fa0: 45 52 45 20 69 64 3e 61 3b 0a 20 20 7d 0a 7d 20  ERE id>a;.  }.} 
7fb0: 7b 34 32 20 31 20 34 33 20 31 7d 0a 0a 23 20 54  {42 1 43 1}..# T
7fc0: 69 63 6b 65 74 20 5b 62 65 38 34 65 33 35 37 63  icket [be84e357c
7fd0: 30 33 35 64 30 36 38 31 33 35 66 32 30 62 63 66  035d068135f20bcf
7fe0: 65 38 32 37 36 31 62 62 66 39 35 30 30 36 62 5d  e82761bbf95006b]
7ff0: 20 20 32 30 31 33 2d 30 39 2d 30 33 0a 23 20 53    2013-09-03.# S
8000: 65 67 66 61 75 6c 74 20 64 75 72 69 6e 67 20 71  egfault during q
8010: 75 65 72 79 20 69 6e 76 6f 6c 76 69 6e 67 20 4c  uery involving L
8020: 45 46 54 20 4a 4f 49 4e 20 63 6f 6c 75 6d 6e 20  EFT JOIN column 
8030: 69 6e 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  in the ORDER BY 
8040: 63 6c 61 75 73 65 2e 0a 23 0a 64 6f 5f 65 78 65  clause..#.do_exe
8050: 63 73 71 6c 5f 74 65 73 74 20 77 68 65 72 65 2d  csql_test where-
8060: 31 38 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20  18.1 {.  CREATE 
8070: 54 41 42 4c 45 20 74 31 38 31 28 61 29 3b 0a 20  TABLE t181(a);. 
8080: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31   CREATE TABLE t1
8090: 38 32 28 62 2c 63 29 3b 0a 20 20 49 4e 53 45 52  82(b,c);.  INSER
80a0: 54 20 49 4e 54 4f 20 74 31 38 31 20 56 41 4c 55  T INTO t181 VALU
80b0: 45 53 28 31 29 3b 0a 20 20 53 45 4c 45 43 54 20  ES(1);.  SELECT 
80c0: 44 49 53 54 49 4e 43 54 20 61 20 46 52 4f 4d 20  DISTINCT a FROM 
80d0: 74 31 38 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74  t181 LEFT JOIN t
80e0: 31 38 32 20 4f 4e 20 61 3d 62 20 4f 52 44 45 52  182 ON a=b ORDER
80f0: 20 42 59 20 63 20 49 53 20 4e 55 4c 4c 3b 0a 7d   BY c IS NULL;.}
8100: 20 7b 31 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f   {1}.do_execsql_
8110: 74 65 73 74 20 77 68 65 72 65 2d 31 38 2e 32 20  test where-18.2 
8120: 7b 0a 20 20 53 45 4c 45 43 54 20 44 49 53 54 49  {.  SELECT DISTI
8130: 4e 43 54 20 61 20 46 52 4f 4d 20 74 31 38 31 20  NCT a FROM t181 
8140: 4c 45 46 54 20 4a 4f 49 4e 20 74 31 38 32 20 4f  LEFT JOIN t182 O
8150: 4e 20 61 3d 62 20 4f 52 44 45 52 20 42 59 20 2b  N a=b ORDER BY +
8160: 63 3b 0a 7d 20 7b 31 7d 0a 64 6f 5f 65 78 65 63  c;.} {1}.do_exec
8170: 73 71 6c 5f 74 65 73 74 20 77 68 65 72 65 2d 31  sql_test where-1
8180: 38 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 44  8.3 {.  SELECT D
8190: 49 53 54 49 4e 43 54 20 61 20 46 52 4f 4d 20 74  ISTINCT a FROM t
81a0: 31 38 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74 31  181 LEFT JOIN t1
81b0: 38 32 20 4f 4e 20 61 3d 62 20 4f 52 44 45 52 20  82 ON a=b ORDER 
81c0: 42 59 20 63 3b 0a 7d 20 7b 31 7d 0a 64 6f 5f 65  BY c;.} {1}.do_e
81d0: 78 65 63 73 71 6c 5f 74 65 73 74 20 77 68 65 72  xecsql_test wher
81e0: 65 2d 31 38 2e 34 20 7b 0a 20 20 49 4e 53 45 52  e-18.4 {.  INSER
81f0: 54 20 49 4e 54 4f 20 74 31 38 31 20 56 41 4c 55  T INTO t181 VALU
8200: 45 53 28 31 29 2c 28 31 29 2c 28 31 29 2c 28 31  ES(1),(1),(1),(1
8210: 29 3b 0a 20 20 53 45 4c 45 43 54 20 44 49 53 54  );.  SELECT DIST
8220: 49 4e 43 54 20 61 20 46 52 4f 4d 20 74 31 38 31  INCT a FROM t181
8230: 20 4c 45 46 54 20 4a 4f 49 4e 20 74 31 38 32 20   LEFT JOIN t182 
8240: 4f 4e 20 61 3d 62 20 4f 52 44 45 52 20 42 59 20  ON a=b ORDER BY 
8250: 2b 63 3b 0a 7d 20 7b 31 7d 0a 64 6f 5f 65 78 65  +c;.} {1}.do_exe
8260: 63 73 71 6c 5f 74 65 73 74 20 77 68 65 72 65 2d  csql_test where-
8270: 31 38 2e 35 20 7b 0a 20 20 49 4e 53 45 52 54 20  18.5 {.  INSERT 
8280: 49 4e 54 4f 20 74 31 38 31 20 56 41 4c 55 45 53  INTO t181 VALUES
8290: 28 32 29 3b 0a 20 20 53 45 4c 45 43 54 20 44 49  (2);.  SELECT DI
82a0: 53 54 49 4e 43 54 20 61 20 46 52 4f 4d 20 74 31  STINCT a FROM t1
82b0: 38 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74 31 38  81 LEFT JOIN t18
82c0: 32 20 4f 4e 20 61 3d 62 20 4f 52 44 45 52 20 42  2 ON a=b ORDER B
82d0: 59 20 63 20 49 53 20 4e 55 4c 4c 2c 20 2b 61 3b  Y c IS NULL, +a;
82e0: 0a 7d 20 7b 31 20 32 7d 0a 64 6f 5f 65 78 65 63  .} {1 2}.do_exec
82f0: 73 71 6c 5f 74 65 73 74 20 77 68 65 72 65 2d 31  sql_test where-1
8300: 38 2e 36 20 7b 0a 20 20 49 4e 53 45 52 54 20 49  8.6 {.  INSERT I
8310: 4e 54 4f 20 74 31 38 31 20 56 41 4c 55 45 53 28  NTO t181 VALUES(
8320: 32 29 3b 0a 20 20 53 45 4c 45 43 54 20 44 49 53  2);.  SELECT DIS
8330: 54 49 4e 43 54 20 61 20 46 52 4f 4d 20 74 31 38  TINCT a FROM t18
8340: 31 20 4c 45 46 54 20 4a 4f 49 4e 20 74 31 38 32  1 LEFT JOIN t182
8350: 20 4f 4e 20 61 3d 62 20 4f 52 44 45 52 20 42 59   ON a=b ORDER BY
8360: 20 2b 61 2c 20 2b 63 20 49 53 20 4e 55 4c 4c 3b   +a, +c IS NULL;
8370: 0a 7d 20 7b 31 20 32 7d 0a 0a 0a 66 69 6e 69 73  .} {1 2}...finis
8380: 68 5f 74 65 73 74 0a                             h_test.