/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 7dcfe573d4a5c6c4b7670271d02c006f2c7414b8:


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 34 38 20 32 30 30 38 2f 31  st,v 1.48 2008/1
0210: 30 2f 30 31 20 30 38 3a 34 33 3a 30 33 20 64 61  0/01 08:43:03 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 74 65 73 74 20 77   10 3}.do_test w
07a0: 68 65 72 65 2d 31 2e 31 2e 32 20 7b 0a 20 20 73  here-1.1.2 {.  s
07b0: 65 74 20 73 71 6c 69 74 65 5f 71 75 65 72 79 5f  et sqlite_query_
07c0: 70 6c 61 6e 0a 7d 20 7b 74 31 20 69 31 77 7d 0a  plan.} {t1 i1w}.
07d0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e  do_test where-1.
07e0: 31 2e 33 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53  1.3 {.  count {S
07f0: 45 4c 45 43 54 20 78 2c 20 79 2c 20 77 20 41 53  ELECT x, y, w AS
0800: 20 61 62 63 20 46 52 4f 4d 20 74 31 20 57 48 45   abc FROM t1 WHE
0810: 52 45 20 61 62 63 3d 31 30 7d 0a 7d 20 7b 33 20  RE abc=10}.} {3 
0820: 31 32 31 20 31 30 20 33 7d 0a 64 6f 5f 74 65 73  121 10 3}.do_tes
0830: 74 20 77 68 65 72 65 2d 31 2e 31 2e 34 20 7b 0a  t where-1.1.4 {.
0840: 20 20 73 65 74 20 73 71 6c 69 74 65 5f 71 75 65    set sqlite_que
0850: 72 79 5f 70 6c 61 6e 0a 7d 20 7b 74 31 20 69 31  ry_plan.} {t1 i1
0860: 77 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  w}.do_test where
0870: 2d 31 2e 32 2e 31 20 7b 0a 20 20 63 6f 75 6e 74  -1.2.1 {.  count
0880: 20 7b 53 45 4c 45 43 54 20 78 2c 20 79 2c 20 77   {SELECT x, y, w
0890: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77   FROM t1 WHERE w
08a0: 3d 31 31 7d 0a 7d 20 7b 33 20 31 34 34 20 31 31  =11}.} {3 144 11
08b0: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   3}.do_test wher
08c0: 65 2d 31 2e 32 2e 32 20 7b 0a 20 20 63 6f 75 6e  e-1.2.2 {.  coun
08d0: 74 20 7b 53 45 4c 45 43 54 20 78 2c 20 79 2c 20  t {SELECT x, y, 
08e0: 77 20 41 53 20 61 62 63 20 46 52 4f 4d 20 74 31  w AS abc FROM t1
08f0: 20 57 48 45 52 45 20 61 62 63 3d 31 31 7d 0a 7d   WHERE abc=11}.}
0900: 20 7b 33 20 31 34 34 20 31 31 20 33 7d 0a 64 6f   {3 144 11 3}.do
0910: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 33 2e  _test where-1.3.
0920: 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c  1 {.  count {SEL
0930: 45 43 54 20 78 2c 20 79 2c 20 77 20 41 53 20 61  ECT x, y, w AS a
0940: 62 63 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  bc FROM t1 WHERE
0950: 20 31 31 3d 77 7d 0a 7d 20 7b 33 20 31 34 34 20   11=w}.} {3 144 
0960: 31 31 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68  11 3}.do_test wh
0970: 65 72 65 2d 31 2e 33 2e 32 20 7b 0a 20 20 63 6f  ere-1.3.2 {.  co
0980: 75 6e 74 20 7b 53 45 4c 45 43 54 20 78 2c 20 79  unt {SELECT x, y
0990: 2c 20 77 20 41 53 20 61 62 63 20 46 52 4f 4d 20  , w AS abc FROM 
09a0: 74 31 20 57 48 45 52 45 20 31 31 3d 61 62 63 7d  t1 WHERE 11=abc}
09b0: 0a 7d 20 7b 33 20 31 34 34 20 31 31 20 33 7d 0a  .} {3 144 11 3}.
09c0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e  do_test where-1.
09d0: 34 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53  4.1 {.  count {S
09e0: 45 4c 45 43 54 20 77 2c 20 78 2c 20 79 20 46 52  ELECT w, x, y FR
09f0: 4f 4d 20 74 31 20 57 48 45 52 45 20 31 31 3d 77  OM t1 WHERE 11=w
0a00: 20 41 4e 44 20 78 3e 32 7d 0a 7d 20 7b 31 31 20   AND x>2}.} {11 
0a10: 33 20 31 34 34 20 33 7d 0a 64 6f 5f 74 65 73 74  3 144 3}.do_test
0a20: 20 77 68 65 72 65 2d 31 2e 34 2e 32 20 7b 0a 20   where-1.4.2 {. 
0a30: 20 73 65 74 20 73 71 6c 69 74 65 5f 71 75 65 72   set sqlite_quer
0a40: 79 5f 70 6c 61 6e 0a 7d 20 7b 74 31 20 69 31 77  y_plan.} {t1 i1w
0a50: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
0a60: 31 2e 34 2e 33 20 7b 0a 20 20 63 6f 75 6e 74 20  1.4.3 {.  count 
0a70: 7b 53 45 4c 45 43 54 20 77 20 41 53 20 61 2c 20  {SELECT w AS a, 
0a80: 78 20 41 53 20 62 2c 20 79 20 46 52 4f 4d 20 74  x AS b, y FROM t
0a90: 31 20 57 48 45 52 45 20 31 31 3d 61 20 41 4e 44  1 WHERE 11=a AND
0aa0: 20 62 3e 32 7d 0a 7d 20 7b 31 31 20 33 20 31 34   b>2}.} {11 3 14
0ab0: 34 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  4 3}.do_test whe
0ac0: 72 65 2d 31 2e 34 2e 34 20 7b 0a 20 20 73 65 74  re-1.4.4 {.  set
0ad0: 20 73 71 6c 69 74 65 5f 71 75 65 72 79 5f 70 6c   sqlite_query_pl
0ae0: 61 6e 0a 7d 20 7b 74 31 20 69 31 77 7d 0a 64 6f  an.} {t1 i1w}.do
0af0: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 35 20  _test where-1.5 
0b00: 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43  {.  count {SELEC
0b10: 54 20 78 2c 20 79 20 46 52 4f 4d 20 74 31 20 57  T x, y FROM t1 W
0b20: 48 45 52 45 20 79 3c 32 30 30 20 41 4e 44 20 77  HERE y<200 AND w
0b30: 3d 31 31 20 41 4e 44 20 78 3e 32 7d 0a 7d 20 7b  =11 AND x>2}.} {
0b40: 33 20 31 34 34 20 33 7d 0a 64 6f 5f 74 65 73 74  3 144 3}.do_test
0b50: 20 77 68 65 72 65 2d 31 2e 35 2e 32 20 7b 0a 20   where-1.5.2 {. 
0b60: 20 73 65 74 20 73 71 6c 69 74 65 5f 71 75 65 72   set sqlite_quer
0b70: 79 5f 70 6c 61 6e 0a 7d 20 7b 74 31 20 69 31 77  y_plan.} {t1 i1w
0b80: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
0b90: 31 2e 36 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53  1.6 {.  count {S
0ba0: 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20  ELECT x, y FROM 
0bb0: 74 31 20 57 48 45 52 45 20 79 3c 32 30 30 20 41  t1 WHERE y<200 A
0bc0: 4e 44 20 78 3e 32 20 41 4e 44 20 77 3d 31 31 7d  ND x>2 AND w=11}
0bd0: 0a 7d 20 7b 33 20 31 34 34 20 33 7d 0a 64 6f 5f  .} {3 144 3}.do_
0be0: 74 65 73 74 20 77 68 65 72 65 2d 31 2e 37 20 7b  test where-1.7 {
0bf0: 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54  .  count {SELECT
0c00: 20 78 2c 20 79 20 46 52 4f 4d 20 74 31 20 57 48   x, y FROM t1 WH
0c10: 45 52 45 20 77 3d 31 31 20 41 4e 44 20 79 3c 32  ERE w=11 AND y<2
0c20: 30 30 20 41 4e 44 20 78 3e 32 7d 0a 7d 20 7b 33  00 AND x>2}.} {3
0c30: 20 31 34 34 20 33 7d 0a 64 6f 5f 74 65 73 74 20   144 3}.do_test 
0c40: 77 68 65 72 65 2d 31 2e 38 20 7b 0a 20 20 63 6f  where-1.8 {.  co
0c50: 75 6e 74 20 7b 53 45 4c 45 43 54 20 78 2c 20 79  unt {SELECT x, y
0c60: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77   FROM t1 WHERE w
0c70: 3e 31 30 20 41 4e 44 20 79 3d 31 34 34 20 41 4e  >10 AND y=144 AN
0c80: 44 20 78 3d 33 7d 0a 7d 20 7b 33 20 31 34 34 20  D x=3}.} {3 144 
0c90: 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  3}.do_test where
0ca0: 2d 31 2e 38 2e 32 20 7b 0a 20 20 73 65 74 20 73  -1.8.2 {.  set s
0cb0: 71 6c 69 74 65 5f 71 75 65 72 79 5f 70 6c 61 6e  qlite_query_plan
0cc0: 0a 7d 20 7b 74 31 20 69 31 78 79 7d 0a 64 6f 5f  .} {t1 i1xy}.do_
0cd0: 74 65 73 74 20 77 68 65 72 65 2d 31 2e 38 2e 33  test where-1.8.3
0ce0: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45   {.  count {SELE
0cf0: 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 74 31 20  CT x, y FROM t1 
0d00: 57 48 45 52 45 20 79 3d 31 34 34 20 41 4e 44 20  WHERE y=144 AND 
0d10: 78 3d 33 7d 0a 20 20 73 65 74 20 73 71 6c 69 74  x=3}.  set sqlit
0d20: 65 5f 71 75 65 72 79 5f 70 6c 61 6e 0a 7d 20 7b  e_query_plan.} {
0d30: 7b 7d 20 69 31 78 79 7d 0a 64 6f 5f 74 65 73 74  {} i1xy}.do_test
0d40: 20 77 68 65 72 65 2d 31 2e 39 20 7b 0a 20 20 63   where-1.9 {.  c
0d50: 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 78 2c 20  ount {SELECT x, 
0d60: 79 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  y FROM t1 WHERE 
0d70: 79 3d 31 34 34 20 41 4e 44 20 77 3e 31 30 20 41  y=144 AND w>10 A
0d80: 4e 44 20 78 3d 33 7d 0a 7d 20 7b 33 20 31 34 34  ND x=3}.} {3 144
0d90: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   3}.do_test wher
0da0: 65 2d 31 2e 31 30 20 7b 0a 20 20 63 6f 75 6e 74  e-1.10 {.  count
0db0: 20 7b 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52   {SELECT x, y FR
0dc0: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20  OM t1 WHERE x=3 
0dd0: 41 4e 44 20 77 3e 3d 31 30 20 41 4e 44 20 79 3d  AND w>=10 AND y=
0de0: 31 32 31 7d 0a 7d 20 7b 33 20 31 32 31 20 33 7d  121}.} {3 121 3}
0df0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31  .do_test where-1
0e00: 2e 31 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53  .11 {.  count {S
0e10: 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20  ELECT x, y FROM 
0e20: 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44  t1 WHERE x=3 AND
0e30: 20 79 3d 31 30 30 20 41 4e 44 20 77 3c 31 30 7d   y=100 AND w<10}
0e40: 0a 7d 20 7b 33 20 31 30 30 20 33 7d 0a 0a 23 20  .} {3 100 3}..# 
0e50: 4e 65 77 20 66 6f 72 20 53 51 4c 69 74 65 20 76  New for SQLite v
0e60: 65 72 73 69 6f 6e 20 32 2e 31 3a 20 56 65 72 69  ersion 2.1: Veri
0e70: 66 79 20 74 68 61 74 20 74 68 61 74 20 69 6e 65  fy that that ine
0e80: 71 75 61 6c 69 74 79 20 63 6f 6e 73 74 72 61 69  quality constrai
0e90: 6e 74 73 0a 23 20 61 72 65 20 75 73 65 64 20 63  nts.# are used c
0ea0: 6f 72 72 65 63 74 6c 79 2e 0a 23 0a 64 6f 5f 74  orrectly..#.do_t
0eb0: 65 73 74 20 77 68 65 72 65 2d 31 2e 31 32 20 7b  est where-1.12 {
0ec0: 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54  .  count {SELECT
0ed0: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
0ee0: 20 78 3d 33 20 41 4e 44 20 79 3c 31 30 30 7d 0a   x=3 AND y<100}.
0ef0: 7d 20 7b 38 20 33 7d 0a 64 6f 5f 74 65 73 74 20  } {8 3}.do_test 
0f00: 77 68 65 72 65 2d 31 2e 31 33 20 7b 0a 20 20 63  where-1.13 {.  c
0f10: 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46  ount {SELECT w F
0f20: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33  ROM t1 WHERE x=3
0f30: 20 41 4e 44 20 31 30 30 3e 79 7d 0a 7d 20 7b 38   AND 100>y}.} {8
0f40: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   3}.do_test wher
0f50: 65 2d 31 2e 31 34 20 7b 0a 20 20 63 6f 75 6e 74  e-1.14 {.  count
0f60: 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20   {SELECT w FROM 
0f70: 74 31 20 57 48 45 52 45 20 33 3d 78 20 41 4e 44  t1 WHERE 3=x AND
0f80: 20 79 3c 31 30 30 7d 0a 7d 20 7b 38 20 33 7d 0a   y<100}.} {8 3}.
0f90: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e  do_test where-1.
0fa0: 31 35 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45  15 {.  count {SE
0fb0: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
0fc0: 48 45 52 45 20 33 3d 78 20 41 4e 44 20 31 30 30  HERE 3=x AND 100
0fd0: 3e 79 7d 0a 7d 20 7b 38 20 33 7d 0a 64 6f 5f 74  >y}.} {8 3}.do_t
0fe0: 65 73 74 20 77 68 65 72 65 2d 31 2e 31 36 20 7b  est where-1.16 {
0ff0: 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54  .  count {SELECT
1000: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
1010: 20 78 3d 33 20 41 4e 44 20 79 3c 3d 31 30 30 7d   x=3 AND y<=100}
1020: 0a 7d 20 7b 38 20 39 20 35 7d 0a 64 6f 5f 74 65  .} {8 9 5}.do_te
1030: 73 74 20 77 68 65 72 65 2d 31 2e 31 37 20 7b 0a  st where-1.17 {.
1040: 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20    count {SELECT 
1050: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
1060: 78 3d 33 20 41 4e 44 20 31 30 30 3e 3d 79 7d 0a  x=3 AND 100>=y}.
1070: 7d 20 7b 38 20 39 20 35 7d 0a 64 6f 5f 74 65 73  } {8 9 5}.do_tes
1080: 74 20 77 68 65 72 65 2d 31 2e 31 38 20 7b 0a 20  t where-1.18 {. 
1090: 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77   count {SELECT w
10a0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
10b0: 3d 33 20 41 4e 44 20 79 3e 32 32 35 7d 0a 7d 20  =3 AND y>225}.} 
10c0: 7b 31 35 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77  {15 3}.do_test w
10d0: 68 65 72 65 2d 31 2e 31 39 20 7b 0a 20 20 63 6f  here-1.19 {.  co
10e0: 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52  unt {SELECT w FR
10f0: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20  OM t1 WHERE x=3 
1100: 41 4e 44 20 32 32 35 3c 79 7d 0a 7d 20 7b 31 35  AND 225<y}.} {15
1110: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   3}.do_test wher
1120: 65 2d 31 2e 32 30 20 7b 0a 20 20 63 6f 75 6e 74  e-1.20 {.  count
1130: 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20   {SELECT w FROM 
1140: 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44  t1 WHERE x=3 AND
1150: 20 79 3e 3d 32 32 35 7d 0a 7d 20 7b 31 34 20 31   y>=225}.} {14 1
1160: 35 20 35 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  5 5}.do_test whe
1170: 72 65 2d 31 2e 32 31 20 7b 0a 20 20 63 6f 75 6e  re-1.21 {.  coun
1180: 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d  t {SELECT w FROM
1190: 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e   t1 WHERE x=3 AN
11a0: 44 20 32 32 35 3c 3d 79 7d 0a 7d 20 7b 31 34 20  D 225<=y}.} {14 
11b0: 31 35 20 35 7d 0a 64 6f 5f 74 65 73 74 20 77 68  15 5}.do_test wh
11c0: 65 72 65 2d 31 2e 32 32 20 7b 0a 20 20 63 6f 75  ere-1.22 {.  cou
11d0: 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f  nt {SELECT w FRO
11e0: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41  M t1 WHERE x=3 A
11f0: 4e 44 20 79 3e 31 32 31 20 41 4e 44 20 79 3c 31  ND y>121 AND y<1
1200: 39 36 7d 0a 7d 20 7b 31 31 20 31 32 20 35 7d 0a  96}.} {11 12 5}.
1210: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e  do_test where-1.
1220: 32 33 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45  23 {.  count {SE
1230: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
1240: 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e 3d  HERE x=3 AND y>=
1250: 31 32 31 20 41 4e 44 20 79 3c 3d 31 39 36 7d 0a  121 AND y<=196}.
1260: 7d 20 7b 31 30 20 31 31 20 31 32 20 31 33 20 39  } {10 11 12 13 9
1270: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
1280: 31 2e 32 34 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  1.24 {.  count {
1290: 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31  SELECT w FROM t1
12a0: 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20 31   WHERE x=3 AND 1
12b0: 32 31 3c 79 20 41 4e 44 20 31 39 36 3e 79 7d 0a  21<y AND 196>y}.
12c0: 7d 20 7b 31 31 20 31 32 20 35 7d 0a 64 6f 5f 74  } {11 12 5}.do_t
12d0: 65 73 74 20 77 68 65 72 65 2d 31 2e 32 35 20 7b  est where-1.25 {
12e0: 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54  .  count {SELECT
12f0: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
1300: 20 78 3d 33 20 41 4e 44 20 31 32 31 3c 3d 79 20   x=3 AND 121<=y 
1310: 41 4e 44 20 31 39 36 3e 3d 79 7d 0a 7d 20 7b 31  AND 196>=y}.} {1
1320: 30 20 31 31 20 31 32 20 31 33 20 39 7d 0a 0a 23  0 11 12 13 9}..#
1330: 20 4e 65 65 64 20 74 6f 20 77 6f 72 6b 20 6f 6e   Need to work on
1340: 20 6f 70 74 69 6d 69 7a 69 6e 67 20 74 68 65 20   optimizing the 
1350: 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74 6f 72  BETWEEN operator
1360: 2e 20 20 0a 23 0a 23 20 64 6f 5f 74 65 73 74 20  .  .#.# do_test 
1370: 77 68 65 72 65 2d 31 2e 32 36 20 7b 0a 23 20 20  where-1.26 {.#  
1380: 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77   count {SELECT w
1390: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
13a0: 3d 33 20 41 4e 44 20 79 20 42 45 54 57 45 45 4e  =3 AND y BETWEEN
13b0: 20 31 32 31 20 41 4e 44 20 31 39 36 7d 0a 23 20   121 AND 196}.# 
13c0: 7d 20 7b 31 30 20 31 31 20 31 32 20 31 33 20 39  } {10 11 12 13 9
13d0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  }..do_test where
13e0: 2d 31 2e 32 37 20 7b 0a 20 20 63 6f 75 6e 74 20  -1.27 {.  count 
13f0: 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74  {SELECT w FROM t
1400: 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20  1 WHERE x=3 AND 
1410: 79 2b 31 3d 3d 31 32 32 7d 0a 7d 20 7b 31 30 20  y+1==122}.} {10 
1420: 31 30 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65  10}..do_test whe
1430: 72 65 2d 31 2e 32 38 20 7b 0a 20 20 63 6f 75 6e  re-1.28 {.  coun
1440: 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d  t {SELECT w FROM
1450: 20 74 31 20 57 48 45 52 45 20 78 2b 31 3d 34 20   t1 WHERE x+1=4 
1460: 41 4e 44 20 79 2b 31 3d 3d 31 32 32 7d 0a 7d 20  AND y+1==122}.} 
1470: 7b 31 30 20 39 39 7d 0a 64 6f 5f 74 65 73 74 20  {10 99}.do_test 
1480: 77 68 65 72 65 2d 31 2e 32 39 20 7b 0a 20 20 63  where-1.29 {.  c
1490: 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46  ount {SELECT w F
14a0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3d 3d  ROM t1 WHERE y==
14b0: 31 32 31 7d 0a 7d 20 7b 31 30 20 39 39 7d 0a 0a  121}.} {10 99}..
14c0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31  .do_test where-1
14d0: 2e 33 30 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53  .30 {.  count {S
14e0: 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20  ELECT w FROM t1 
14f0: 57 48 45 52 45 20 77 3e 39 37 7d 0a 7d 20 7b 39  WHERE w>97}.} {9
1500: 38 20 39 39 20 31 30 30 20 33 7d 0a 64 6f 5f 74  8 99 100 3}.do_t
1510: 65 73 74 20 77 68 65 72 65 2d 31 2e 33 31 20 7b  est where-1.31 {
1520: 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54  .  count {SELECT
1530: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
1540: 20 77 3e 3d 39 37 7d 0a 7d 20 7b 39 37 20 39 38   w>=97}.} {97 98
1550: 20 39 39 20 31 30 30 20 34 7d 0a 64 6f 5f 74 65   99 100 4}.do_te
1560: 73 74 20 77 68 65 72 65 2d 31 2e 33 33 20 7b 0a  st where-1.33 {.
1570: 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20    count {SELECT 
1580: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
1590: 77 3d 3d 39 37 7d 0a 7d 20 7b 39 37 20 32 7d 0a  w==97}.} {97 2}.
15a0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e  do_test where-1.
15b0: 33 33 2e 31 20 20 7b 0a 20 20 63 6f 75 6e 74 20  33.1  {.  count 
15c0: 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74  {SELECT w FROM t
15d0: 31 20 57 48 45 52 45 20 77 3c 3d 39 37 20 41 4e  1 WHERE w<=97 AN
15e0: 44 20 77 3d 3d 39 37 7d 0a 7d 20 7b 39 37 20 32  D w==97}.} {97 2
15f0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
1600: 31 2e 33 33 2e 32 20 20 7b 0a 20 20 63 6f 75 6e  1.33.2  {.  coun
1610: 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d  t {SELECT w FROM
1620: 20 74 31 20 57 48 45 52 45 20 77 3c 39 38 20 41   t1 WHERE w<98 A
1630: 4e 44 20 77 3d 3d 39 37 7d 0a 7d 20 7b 39 37 20  ND w==97}.} {97 
1640: 32 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  2}.do_test where
1650: 2d 31 2e 33 33 2e 33 20 20 7b 0a 20 20 63 6f 75  -1.33.3  {.  cou
1660: 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f  nt {SELECT w FRO
1670: 4d 20 74 31 20 57 48 45 52 45 20 77 3e 3d 39 37  M t1 WHERE w>=97
1680: 20 41 4e 44 20 77 3d 3d 39 37 7d 0a 7d 20 7b 39   AND w==97}.} {9
1690: 37 20 32 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  7 2}.do_test whe
16a0: 72 65 2d 31 2e 33 33 2e 34 20 20 7b 0a 20 20 63  re-1.33.4  {.  c
16b0: 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46  ount {SELECT w F
16c0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77 3e 39  ROM t1 WHERE w>9
16d0: 36 20 41 4e 44 20 77 3d 3d 39 37 7d 0a 7d 20 7b  6 AND w==97}.} {
16e0: 39 37 20 32 7d 0a 64 6f 5f 74 65 73 74 20 77 68  97 2}.do_test wh
16f0: 65 72 65 2d 31 2e 33 33 2e 35 20 20 7b 0a 20 20  ere-1.33.5  {.  
1700: 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20  count {SELECT w 
1710: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77 3d  FROM t1 WHERE w=
1720: 3d 39 37 20 41 4e 44 20 77 3d 3d 39 37 7d 0a 7d  =97 AND w==97}.}
1730: 20 7b 39 37 20 32 7d 0a 64 6f 5f 74 65 73 74 20   {97 2}.do_test 
1740: 77 68 65 72 65 2d 31 2e 33 34 20 7b 0a 20 20 63  where-1.34 {.  c
1750: 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46  ount {SELECT w F
1760: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77 2b 31  ROM t1 WHERE w+1
1770: 3d 3d 39 38 7d 0a 7d 20 7b 39 37 20 39 39 7d 0a  ==98}.} {97 99}.
1780: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e  do_test where-1.
1790: 33 35 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45  35 {.  count {SE
17a0: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
17b0: 48 45 52 45 20 77 3c 33 7d 0a 7d 20 7b 31 20 32  HERE w<3}.} {1 2
17c0: 20 32 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   2}.do_test wher
17d0: 65 2d 31 2e 33 36 20 7b 0a 20 20 63 6f 75 6e 74  e-1.36 {.  count
17e0: 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20   {SELECT w FROM 
17f0: 74 31 20 57 48 45 52 45 20 77 3c 3d 33 7d 0a 7d  t1 WHERE w<=3}.}
1800: 20 7b 31 20 32 20 33 20 33 7d 0a 64 6f 5f 74 65   {1 2 3 3}.do_te
1810: 73 74 20 77 68 65 72 65 2d 31 2e 33 37 20 7b 0a  st where-1.37 {.
1820: 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20    count {SELECT 
1830: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
1840: 77 2b 31 3c 3d 34 20 4f 52 44 45 52 20 42 59 20  w+1<=4 ORDER BY 
1850: 77 7d 0a 7d 20 7b 31 20 32 20 33 20 39 39 7d 0a  w}.} {1 2 3 99}.
1860: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31  .do_test where-1
1870: 2e 33 38 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53  .38 {.  count {S
1880: 45 4c 45 43 54 20 28 77 29 20 46 52 4f 4d 20 74  ELECT (w) FROM t
1890: 31 20 57 48 45 52 45 20 28 77 29 3e 28 39 37 29  1 WHERE (w)>(97)
18a0: 7d 0a 7d 20 7b 39 38 20 39 39 20 31 30 30 20 33  }.} {98 99 100 3
18b0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
18c0: 31 2e 33 39 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  1.39 {.  count {
18d0: 53 45 4c 45 43 54 20 28 77 29 20 46 52 4f 4d 20  SELECT (w) FROM 
18e0: 74 31 20 57 48 45 52 45 20 28 77 29 3e 3d 28 39  t1 WHERE (w)>=(9
18f0: 37 29 7d 0a 7d 20 7b 39 37 20 39 38 20 39 39 20  7)}.} {97 98 99 
1900: 31 30 30 20 34 7d 0a 64 6f 5f 74 65 73 74 20 77  100 4}.do_test w
1910: 68 65 72 65 2d 31 2e 34 30 20 7b 0a 20 20 63 6f  here-1.40 {.  co
1920: 75 6e 74 20 7b 53 45 4c 45 43 54 20 28 77 29 20  unt {SELECT (w) 
1930: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 28 77  FROM t1 WHERE (w
1940: 29 3d 3d 28 39 37 29 7d 0a 7d 20 7b 39 37 20 32  )==(97)}.} {97 2
1950: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
1960: 31 2e 34 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  1.41 {.  count {
1970: 53 45 4c 45 43 54 20 28 77 29 20 46 52 4f 4d 20  SELECT (w) FROM 
1980: 74 31 20 57 48 45 52 45 20 28 28 77 29 2b 28 31  t1 WHERE ((w)+(1
1990: 29 29 3d 3d 28 39 38 29 7d 0a 7d 20 7b 39 37 20  ))==(98)}.} {97 
19a0: 39 39 7d 0a 0a 0a 23 20 44 6f 20 74 68 65 20 73  99}...# Do the s
19b0: 61 6d 65 20 6b 69 6e 64 20 6f 66 20 74 68 69 6e  ame kind of thin
19c0: 67 20 65 78 63 65 70 74 20 75 73 65 20 61 20 6a  g except use a j
19d0: 6f 69 6e 20 61 73 20 74 68 65 20 64 61 74 61 20  oin as the data 
19e0: 73 6f 75 72 63 65 2e 0a 23 0a 64 6f 5f 74 65 73  source..#.do_tes
19f0: 74 20 77 68 65 72 65 2d 32 2e 31 20 7b 0a 20 20  t where-2.1 {.  
1a00: 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45  count {.    SELE
1a10: 43 54 20 77 2c 20 70 20 46 52 4f 4d 20 74 32 2c  CT w, p FROM t2,
1a20: 20 74 31 0a 20 20 20 20 57 48 45 52 45 20 78 3d   t1.    WHERE x=
1a30: 71 20 41 4e 44 20 79 3d 73 20 41 4e 44 20 72 3d  q AND y=s AND r=
1a40: 38 39 37 37 0a 20 20 7d 0a 7d 20 7b 33 34 20 36  8977.  }.} {34 6
1a50: 37 20 36 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  7 6}.do_test whe
1a60: 72 65 2d 32 2e 32 20 7b 0a 20 20 63 6f 75 6e 74  re-2.2 {.  count
1a70: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 2c   {.    SELECT w,
1a80: 20 70 20 46 52 4f 4d 20 74 32 2c 20 74 31 0a 20   p FROM t2, t1. 
1a90: 20 20 20 57 48 45 52 45 20 78 3d 71 20 41 4e 44     WHERE x=q AND
1aa0: 20 73 3d 79 20 41 4e 44 20 72 3d 38 39 37 37 0a   s=y AND r=8977.
1ab0: 20 20 7d 0a 7d 20 7b 33 34 20 36 37 20 36 7d 0a    }.} {34 67 6}.
1ac0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 32 2e  do_test where-2.
1ad0: 33 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20  3 {.  count {.  
1ae0: 20 20 53 45 4c 45 43 54 20 77 2c 20 70 20 46 52    SELECT w, p FR
1af0: 4f 4d 20 74 32 2c 20 74 31 0a 20 20 20 20 57 48  OM t2, t1.    WH
1b00: 45 52 45 20 78 3d 71 20 41 4e 44 20 73 3d 79 20  ERE x=q AND s=y 
1b10: 41 4e 44 20 72 3d 38 39 37 37 20 41 4e 44 20 77  AND r=8977 AND w
1b20: 3e 31 30 0a 20 20 7d 0a 7d 20 7b 33 34 20 36 37  >10.  }.} {34 67
1b30: 20 36 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   6}.do_test wher
1b40: 65 2d 32 2e 34 20 7b 0a 20 20 63 6f 75 6e 74 20  e-2.4 {.  count 
1b50: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 2c 20  {.    SELECT w, 
1b60: 70 20 46 52 4f 4d 20 74 32 2c 20 74 31 0a 20 20  p FROM t2, t1.  
1b70: 20 20 57 48 45 52 45 20 70 3c 38 30 20 41 4e 44    WHERE p<80 AND
1b80: 20 78 3d 71 20 41 4e 44 20 73 3d 79 20 41 4e 44   x=q AND s=y AND
1b90: 20 72 3d 38 39 37 37 20 41 4e 44 20 77 3e 31 30   r=8977 AND w>10
1ba0: 0a 20 20 7d 0a 7d 20 7b 33 34 20 36 37 20 36 7d  .  }.} {34 67 6}
1bb0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 32  .do_test where-2
1bc0: 2e 35 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20  .5 {.  count {. 
1bd0: 20 20 20 53 45 4c 45 43 54 20 77 2c 20 70 20 46     SELECT w, p F
1be0: 52 4f 4d 20 74 32 2c 20 74 31 0a 20 20 20 20 57  ROM t2, t1.    W
1bf0: 48 45 52 45 20 70 3c 38 30 20 41 4e 44 20 78 3d  HERE p<80 AND x=
1c00: 71 20 41 4e 44 20 38 39 37 37 3d 72 20 41 4e 44  q AND 8977=r AND
1c10: 20 73 3d 79 20 41 4e 44 20 77 3e 31 30 0a 20 20   s=y AND w>10.  
1c20: 7d 0a 7d 20 7b 33 34 20 36 37 20 36 7d 0a 64 6f  }.} {34 67 6}.do
1c30: 5f 74 65 73 74 20 77 68 65 72 65 2d 32 2e 36 20  _test where-2.6 
1c40: 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20  {.  count {.    
1c50: 53 45 4c 45 43 54 20 77 2c 20 70 20 46 52 4f 4d  SELECT w, p FROM
1c60: 20 74 32 2c 20 74 31 0a 20 20 20 20 57 48 45 52   t2, t1.    WHER
1c70: 45 20 78 3d 71 20 41 4e 44 20 70 3d 37 37 20 41  E x=q AND p=77 A
1c80: 4e 44 20 73 3d 79 20 41 4e 44 20 77 3e 35 0a 20  ND s=y AND w>5. 
1c90: 20 7d 0a 7d 20 7b 32 34 20 37 37 20 36 7d 0a 64   }.} {24 77 6}.d
1ca0: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 32 2e 37  o_test where-2.7
1cb0: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20   {.  count {.   
1cc0: 20 53 45 4c 45 43 54 20 77 2c 20 70 20 46 52 4f   SELECT w, p FRO
1cd0: 4d 20 74 31 2c 20 74 32 0a 20 20 20 20 57 48 45  M t1, t2.    WHE
1ce0: 52 45 20 78 3d 71 20 41 4e 44 20 70 3e 37 37 20  RE x=q AND p>77 
1cf0: 41 4e 44 20 73 3d 79 20 41 4e 44 20 77 3d 35 0a  AND s=y AND w=5.
1d00: 20 20 7d 0a 7d 20 7b 35 20 39 36 20 36 7d 0a 0a    }.} {5 96 6}..
1d10: 23 20 4c 65 74 73 20 64 6f 20 61 20 33 2d 77 61  # Lets do a 3-wa
1d20: 79 20 6a 6f 69 6e 2e 0a 23 0a 64 6f 5f 74 65 73  y join..#.do_tes
1d30: 74 20 77 68 65 72 65 2d 33 2e 31 20 7b 0a 20 20  t where-3.1 {.  
1d40: 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45  count {.    SELE
1d50: 43 54 20 41 2e 77 2c 20 42 2e 70 2c 20 43 2e 77  CT A.w, B.p, C.w
1d60: 20 46 52 4f 4d 20 74 31 20 61 73 20 41 2c 20 74   FROM t1 as A, t
1d70: 32 20 61 73 20 42 2c 20 74 31 20 61 73 20 43 0a  2 as B, t1 as C.
1d80: 20 20 20 20 57 48 45 52 45 20 43 2e 77 3d 31 30      WHERE C.w=10
1d90: 31 2d 42 2e 70 20 41 4e 44 20 42 2e 72 3d 31 30  1-B.p AND B.r=10
1da0: 32 30 32 2d 41 2e 79 20 41 4e 44 20 41 2e 77 3d  202-A.y AND A.w=
1db0: 31 31 0a 20 20 7d 0a 7d 20 7b 31 31 20 39 30 20  11.  }.} {11 90 
1dc0: 31 31 20 38 7d 0a 64 6f 5f 74 65 73 74 20 77 68  11 8}.do_test wh
1dd0: 65 72 65 2d 33 2e 32 20 7b 0a 20 20 63 6f 75 6e  ere-3.2 {.  coun
1de0: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 41  t {.    SELECT A
1df0: 2e 77 2c 20 42 2e 70 2c 20 43 2e 77 20 46 52 4f  .w, B.p, C.w FRO
1e00: 4d 20 74 31 20 61 73 20 41 2c 20 74 32 20 61 73  M t1 as A, t2 as
1e10: 20 42 2c 20 74 31 20 61 73 20 43 0a 20 20 20 20   B, t1 as C.    
1e20: 57 48 45 52 45 20 43 2e 77 3d 31 30 31 2d 42 2e  WHERE C.w=101-B.
1e30: 70 20 41 4e 44 20 42 2e 72 3d 31 30 32 30 32 2d  p AND B.r=10202-
1e40: 41 2e 79 20 41 4e 44 20 41 2e 77 3d 31 32 0a 20  A.y AND A.w=12. 
1e50: 20 7d 0a 7d 20 7b 31 32 20 38 39 20 31 32 20 38   }.} {12 89 12 8
1e60: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
1e70: 33 2e 33 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a  3.3 {.  count {.
1e80: 20 20 20 20 53 45 4c 45 43 54 20 41 2e 77 2c 20      SELECT A.w, 
1e90: 42 2e 70 2c 20 43 2e 77 20 46 52 4f 4d 20 74 31  B.p, C.w FROM t1
1ea0: 20 61 73 20 41 2c 20 74 32 20 61 73 20 42 2c 20   as A, t2 as B, 
1eb0: 74 31 20 61 73 20 43 0a 20 20 20 20 57 48 45 52  t1 as C.    WHER
1ec0: 45 20 41 2e 77 3d 31 35 20 41 4e 44 20 42 2e 70  E A.w=15 AND B.p
1ed0: 3d 43 2e 77 20 41 4e 44 20 42 2e 72 3d 31 30 32  =C.w AND B.r=102
1ee0: 30 32 2d 41 2e 79 0a 20 20 7d 0a 7d 20 7b 31 35  02-A.y.  }.} {15
1ef0: 20 38 36 20 38 36 20 38 7d 0a 0a 23 20 54 65 73   86 86 8}..# Tes
1f00: 74 20 74 6f 20 73 65 65 20 74 68 61 74 20 74 68  t to see that th
1f10: 65 20 73 70 65 63 69 61 6c 20 63 61 73 65 20 6f  e special case o
1f20: 66 20 61 20 63 6f 6e 73 74 61 6e 74 20 57 48 45  f a constant WHE
1f30: 52 45 20 63 6c 61 75 73 65 20 69 73 0a 23 20 68  RE clause is.# h
1f40: 61 6e 64 6c 65 64 2e 0a 23 0a 64 6f 5f 74 65 73  andled..#.do_tes
1f50: 74 20 77 68 65 72 65 2d 34 2e 31 20 7b 0a 20 20  t where-4.1 {.  
1f60: 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45  count {.    SELE
1f70: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
1f80: 52 45 20 30 0a 20 20 7d 0a 7d 20 7b 30 7d 0a 64  RE 0.  }.} {0}.d
1f90: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 34 2e 32  o_test where-4.2
1fa0: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20   {.  count {.   
1fb0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1fc0: 31 20 57 48 45 52 45 20 31 20 4c 49 4d 49 54 20  1 WHERE 1 LIMIT 
1fd0: 31 0a 20 20 7d 0a 7d 20 7b 31 20 30 20 34 20 30  1.  }.} {1 0 4 0
1fe0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
1ff0: 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.3 {.  execsql 
2000: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 39 39 20  {.    SELECT 99 
2010: 57 48 45 52 45 20 30 0a 20 20 7d 0a 7d 20 7b 7d  WHERE 0.  }.} {}
2020: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 34  .do_test where-4
2030: 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .4 {.  execsql {
2040: 0a 20 20 20 20 53 45 4c 45 43 54 20 39 39 20 57  .    SELECT 99 W
2050: 48 45 52 45 20 31 0a 20 20 7d 0a 7d 20 7b 39 39  HERE 1.  }.} {99
2060: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
2070: 34 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.5 {.  execsql 
2080: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 39 39 20  {.    SELECT 99 
2090: 57 48 45 52 45 20 30 2e 31 0a 20 20 7d 0a 7d 20  WHERE 0.1.  }.} 
20a0: 7b 39 39 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  {99}.do_test whe
20b0: 72 65 2d 34 2e 36 20 7b 0a 20 20 65 78 65 63 73  re-4.6 {.  execs
20c0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
20d0: 39 39 20 57 48 45 52 45 20 30 2e 30 0a 20 20 7d  99 WHERE 0.0.  }
20e0: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 68  .} {}.do_test wh
20f0: 65 72 65 2d 34 2e 37 20 7b 0a 20 20 65 78 65 63  ere-4.7 {.  exec
2100: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
2110: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
2120: 31 20 57 48 45 52 45 20 74 31 2e 77 0a 20 20 7d  1 WHERE t1.w.  }
2130: 0a 7d 20 7b 31 30 30 7d 0a 0a 23 20 56 65 72 69  .} {100}..# Veri
2140: 66 79 20 74 68 61 74 20 49 4e 20 6f 70 65 72 61  fy that IN opera
2150: 74 6f 72 73 20 69 6e 20 61 20 57 48 45 52 45 20  tors in a WHERE 
2160: 63 6c 61 75 73 65 20 61 72 65 20 68 61 6e 64 6c  clause are handl
2170: 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a 23 20  ed correctly..# 
2180: 4f 6d 69 74 20 74 68 65 73 65 20 74 65 73 74 73  Omit these tests
2190: 20 69 66 20 74 68 65 20 62 75 69 6c 64 20 69 73   if the build is
21a0: 20 6e 6f 74 20 63 61 70 61 62 6c 65 20 6f 66 20   not capable of 
21b0: 73 75 62 2d 71 75 65 72 69 65 73 2e 0a 23 0a 69  sub-queries..#.i
21c0: 66 63 61 70 61 62 6c 65 20 73 75 62 71 75 65 72  fcapable subquer
21d0: 79 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 77 68  y {.  do_test wh
21e0: 65 72 65 2d 35 2e 31 20 7b 0a 20 20 20 20 63 6f  ere-5.1 {.    co
21f0: 75 6e 74 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  unt {.      SELE
2200: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
2210: 52 45 20 72 6f 77 69 64 20 49 4e 20 28 31 2c 32  RE rowid IN (1,2
2220: 2c 33 2c 31 32 33 34 29 20 6f 72 64 65 72 20 62  ,3,1234) order b
2230: 79 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  y 1;.    }.  } {
2240: 31 20 30 20 34 20 32 20 31 20 39 20 33 20 31 20  1 0 4 2 1 9 3 1 
2250: 31 36 20 34 7d 0a 20 20 64 6f 5f 74 65 73 74 20  16 4}.  do_test 
2260: 77 68 65 72 65 2d 35 2e 32 20 7b 0a 20 20 20 20  where-5.2 {.    
2270: 63 6f 75 6e 74 20 7b 0a 20 20 20 20 20 20 53 45  count {.      SE
2280: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
2290: 48 45 52 45 20 72 6f 77 69 64 2b 30 20 49 4e 20  HERE rowid+0 IN 
22a0: 28 31 2c 32 2c 33 2c 31 32 33 34 29 20 6f 72 64  (1,2,3,1234) ord
22b0: 65 72 20 62 79 20 31 3b 0a 20 20 20 20 7d 0a 20  er by 1;.    }. 
22c0: 20 7d 20 7b 31 20 30 20 34 20 32 20 31 20 39 20   } {1 0 4 2 1 9 
22d0: 33 20 31 20 31 36 20 31 30 32 7d 0a 20 20 64 6f  3 1 16 102}.  do
22e0: 5f 74 65 73 74 20 77 68 65 72 65 2d 35 2e 33 20  _test where-5.3 
22f0: 7b 0a 20 20 20 20 63 6f 75 6e 74 20 7b 0a 20 20  {.    count {.  
2300: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2310: 4d 20 74 31 20 57 48 45 52 45 20 77 20 49 4e 20  M t1 WHERE w IN 
2320: 28 2d 31 2c 31 2c 32 2c 33 29 20 6f 72 64 65 72  (-1,1,2,3) order
2330: 20 62 79 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d   by 1;.    }.  }
2340: 20 7b 31 20 30 20 34 20 32 20 31 20 39 20 33 20   {1 0 4 2 1 9 3 
2350: 31 20 31 36 20 31 34 7d 0a 20 20 64 6f 5f 74 65  1 16 14}.  do_te
2360: 73 74 20 77 68 65 72 65 2d 35 2e 34 20 7b 0a 20  st where-5.4 {. 
2370: 20 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 20     count {.     
2380: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2390: 31 20 57 48 45 52 45 20 77 2b 30 20 49 4e 20 28  1 WHERE w+0 IN (
23a0: 2d 31 2c 31 2c 32 2c 33 29 20 6f 72 64 65 72 20  -1,1,2,3) order 
23b0: 62 79 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  by 1;.    }.  } 
23c0: 7b 31 20 30 20 34 20 32 20 31 20 39 20 33 20 31  {1 0 4 2 1 9 3 1
23d0: 20 31 36 20 31 30 32 7d 0a 20 20 64 6f 5f 74 65   16 102}.  do_te
23e0: 73 74 20 77 68 65 72 65 2d 35 2e 35 20 7b 0a 20  st where-5.5 {. 
23f0: 20 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 20     count {.     
2400: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2410: 31 20 57 48 45 52 45 20 72 6f 77 69 64 20 49 4e  1 WHERE rowid IN
2420: 20 0a 20 20 20 20 20 20 20 20 20 28 73 65 6c 65   .         (sele
2430: 63 74 20 72 6f 77 69 64 20 66 72 6f 6d 20 74 31  ct rowid from t1
2440: 20 77 68 65 72 65 20 72 6f 77 69 64 20 49 4e 20   where rowid IN 
2450: 28 2d 31 2c 32 2c 34 29 29 0a 20 20 20 20 20 20  (-1,2,4)).      
2460: 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20 20 20  ORDER BY 1;.    
2470: 7d 0a 20 20 7d 20 7b 32 20 31 20 39 20 34 20 32  }.  } {2 1 9 4 2
2480: 20 32 35 20 33 7d 0a 20 20 64 6f 5f 74 65 73 74   25 3}.  do_test
2490: 20 77 68 65 72 65 2d 35 2e 36 20 7b 0a 20 20 20   where-5.6 {.   
24a0: 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 20 20 53   count {.      S
24b0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
24c0: 57 48 45 52 45 20 72 6f 77 69 64 2b 30 20 49 4e  WHERE rowid+0 IN
24d0: 20 0a 20 20 20 20 20 20 20 20 20 28 73 65 6c 65   .         (sele
24e0: 63 74 20 72 6f 77 69 64 20 66 72 6f 6d 20 74 31  ct rowid from t1
24f0: 20 77 68 65 72 65 20 72 6f 77 69 64 20 49 4e 20   where rowid IN 
2500: 28 2d 31 2c 32 2c 34 29 29 0a 20 20 20 20 20 20  (-1,2,4)).      
2510: 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20 20 20  ORDER BY 1;.    
2520: 7d 0a 20 20 7d 20 7b 32 20 31 20 39 20 34 20 32  }.  } {2 1 9 4 2
2530: 20 32 35 20 31 30 33 7d 0a 20 20 64 6f 5f 74 65   25 103}.  do_te
2540: 73 74 20 77 68 65 72 65 2d 35 2e 37 20 7b 0a 20  st where-5.7 {. 
2550: 20 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 20     count {.     
2560: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2570: 31 20 57 48 45 52 45 20 77 20 49 4e 20 0a 20 20  1 WHERE w IN .  
2580: 20 20 20 20 20 20 20 28 73 65 6c 65 63 74 20 72         (select r
2590: 6f 77 69 64 20 66 72 6f 6d 20 74 31 20 77 68 65  owid from t1 whe
25a0: 72 65 20 72 6f 77 69 64 20 49 4e 20 28 2d 31 2c  re rowid IN (-1,
25b0: 32 2c 34 29 29 0a 20 20 20 20 20 20 4f 52 44 45  2,4)).      ORDE
25c0: 52 20 42 59 20 31 3b 0a 20 20 20 20 7d 0a 20 20  R BY 1;.    }.  
25d0: 7d 20 7b 32 20 31 20 39 20 34 20 32 20 32 35 20  } {2 1 9 4 2 25 
25e0: 39 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65  9}.  do_test whe
25f0: 72 65 2d 35 2e 38 20 7b 0a 20 20 20 20 63 6f 75  re-5.8 {.    cou
2600: 6e 74 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43  nt {.      SELEC
2610: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
2620: 45 20 77 2b 30 20 49 4e 20 0a 20 20 20 20 20 20  E w+0 IN .      
2630: 20 20 20 28 73 65 6c 65 63 74 20 72 6f 77 69 64     (select rowid
2640: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 72   from t1 where r
2650: 6f 77 69 64 20 49 4e 20 28 2d 31 2c 32 2c 34 29  owid IN (-1,2,4)
2660: 29 0a 20 20 20 20 20 20 4f 52 44 45 52 20 42 59  ).      ORDER BY
2670: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32   1;.    }.  } {2
2680: 20 31 20 39 20 34 20 32 20 32 35 20 31 30 33 7d   1 9 4 2 25 103}
2690: 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65  .  do_test where
26a0: 2d 35 2e 39 20 7b 0a 20 20 20 20 63 6f 75 6e 74  -5.9 {.    count
26b0: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
26c0: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
26d0: 78 20 49 4e 20 28 31 2c 37 29 20 4f 52 44 45 52  x IN (1,7) ORDER
26e0: 20 42 59 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d   BY 1;.    }.  }
26f0: 20 7b 32 20 31 20 39 20 33 20 31 20 31 36 20 37   {2 1 9 3 1 16 7
2700: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72  }.  do_test wher
2710: 65 2d 35 2e 31 30 20 7b 0a 20 20 20 20 63 6f 75  e-5.10 {.    cou
2720: 6e 74 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43  nt {.      SELEC
2730: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
2740: 45 20 78 2b 30 20 49 4e 20 28 31 2c 37 29 20 4f  E x+0 IN (1,7) O
2750: 52 44 45 52 20 42 59 20 31 3b 0a 20 20 20 20 7d  RDER BY 1;.    }
2760: 0a 20 20 7d 20 7b 32 20 31 20 39 20 33 20 31 20  .  } {2 1 9 3 1 
2770: 31 36 20 31 39 39 7d 0a 20 20 64 6f 5f 74 65 73  16 199}.  do_tes
2780: 74 20 77 68 65 72 65 2d 35 2e 31 31 20 7b 0a 20  t where-5.11 {. 
2790: 20 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 20     count {.     
27a0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
27b0: 31 20 57 48 45 52 45 20 79 20 49 4e 20 28 36 34  1 WHERE y IN (64
27c0: 30 30 2c 38 31 30 30 29 20 4f 52 44 45 52 20 42  00,8100) ORDER B
27d0: 59 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  Y 1;.    }.  } {
27e0: 37 39 20 36 20 36 34 30 30 20 38 39 20 36 20 38  79 6 6400 89 6 8
27f0: 31 30 30 20 31 39 39 7d 0a 20 20 64 6f 5f 74 65  100 199}.  do_te
2800: 73 74 20 77 68 65 72 65 2d 35 2e 31 32 20 7b 0a  st where-5.12 {.
2810: 20 20 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20      count {.    
2820: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
2830: 74 31 20 57 48 45 52 45 20 78 3d 36 20 41 4e 44  t1 WHERE x=6 AND
2840: 20 79 20 49 4e 20 28 36 34 30 30 2c 38 31 30 30   y IN (6400,8100
2850: 29 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20  ) ORDER BY 1;.  
2860: 20 20 7d 0a 20 20 7d 20 7b 37 39 20 36 20 36 34    }.  } {79 6 64
2870: 30 30 20 38 39 20 36 20 38 31 30 30 20 37 7d 0a  00 89 6 8100 7}.
2880: 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d    do_test where-
2890: 35 2e 31 33 20 7b 0a 20 20 20 20 63 6f 75 6e 74  5.13 {.    count
28a0: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
28b0: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
28c0: 78 20 49 4e 20 28 31 2c 37 29 20 41 4e 44 20 79  x IN (1,7) AND y
28d0: 20 4e 4f 54 20 49 4e 20 28 36 34 30 30 2c 38 31   NOT IN (6400,81
28e0: 30 30 29 20 4f 52 44 45 52 20 42 59 20 31 3b 0a  00) ORDER BY 1;.
28f0: 20 20 20 20 7d 0a 20 20 7d 20 7b 32 20 31 20 39      }.  } {2 1 9
2900: 20 33 20 31 20 31 36 20 37 7d 0a 20 20 64 6f 5f   3 1 16 7}.  do_
2910: 74 65 73 74 20 77 68 65 72 65 2d 35 2e 31 34 20  test where-5.14 
2920: 7b 0a 20 20 20 20 63 6f 75 6e 74 20 7b 0a 20 20  {.    count {.  
2930: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2940: 4d 20 74 31 20 57 48 45 52 45 20 78 20 49 4e 20  M t1 WHERE x IN 
2950: 28 31 2c 37 29 20 41 4e 44 20 79 20 49 4e 20 28  (1,7) AND y IN (
2960: 39 2c 31 30 29 20 4f 52 44 45 52 20 42 59 20 31  9,10) ORDER BY 1
2970: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 20 31  ;.    }.  } {2 1
2980: 20 39 20 38 7d 0a 20 20 64 6f 5f 74 65 73 74 20   9 8}.  do_test 
2990: 77 68 65 72 65 2d 35 2e 31 35 20 7b 0a 20 20 20  where-5.15 {.   
29a0: 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 20 20 53   count {.      S
29b0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
29c0: 57 48 45 52 45 20 78 20 49 4e 20 28 31 2c 37 29  WHERE x IN (1,7)
29d0: 20 41 4e 44 20 79 20 49 4e 20 28 39 2c 31 36 29   AND y IN (9,16)
29e0: 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20 20   ORDER BY 1;.   
29f0: 20 7d 0a 20 20 7d 20 7b 32 20 31 20 39 20 33 20   }.  } {2 1 9 3 
2a00: 31 20 31 36 20 31 31 7d 0a 7d 0a 0a 23 20 54 68  1 16 11}.}..# Th
2a10: 69 73 20 70 72 6f 63 65 64 75 72 65 20 65 78 65  is procedure exe
2a20: 63 75 74 65 73 20 74 68 65 20 53 51 4c 2e 20 20  cutes the SQL.  
2a30: 54 68 65 6e 20 69 74 20 63 68 65 63 6b 73 20 74  Then it checks t
2a40: 6f 20 73 65 65 20 69 66 20 74 68 65 20 4f 50 5f  o see if the OP_
2a50: 53 6f 72 74 0a 23 20 6f 70 63 6f 64 65 20 77 61  Sort.# opcode wa
2a60: 73 20 65 78 65 63 75 74 65 64 2e 20 20 49 66 20  s executed.  If 
2a70: 61 6e 20 4f 50 5f 53 6f 72 74 20 64 69 64 20 6f  an OP_Sort did o
2a80: 63 63 75 72 2c 20 74 68 65 6e 20 22 73 6f 72 74  ccur, then "sort
2a90: 22 20 69 73 20 61 70 70 65 6e 64 65 64 0a 23 20  " is appended.# 
2aa0: 74 6f 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20  to the result.  
2ab0: 49 66 20 6e 6f 20 4f 50 5f 53 6f 72 74 20 68 61  If no OP_Sort ha
2ac0: 70 70 65 6e 65 64 2c 20 74 68 65 6e 20 22 6e 6f  ppened, then "no
2ad0: 73 6f 72 74 22 20 69 73 20 61 70 70 65 6e 64 65  sort" is appende
2ae0: 64 2e 0a 23 0a 23 20 54 68 69 73 20 70 72 6f 63  d..#.# This proc
2af0: 65 64 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  edure is used to
2b00: 20 63 68 65 63 6b 20 74 6f 20 6d 61 6b 65 20 73   check to make s
2b10: 75 72 65 20 73 6f 72 74 69 6e 67 20 69 73 20 6f  ure sorting is o
2b20: 72 20 69 73 20 6e 6f 74 0a 23 20 6f 63 63 75 72  r is not.# occur
2b30: 72 69 6e 67 20 61 73 20 65 78 70 65 63 74 65 64  ring as expected
2b40: 2e 0a 23 0a 70 72 6f 63 20 63 6b 73 6f 72 74 20  ..#.proc cksort 
2b50: 7b 73 71 6c 7d 20 7b 0a 20 20 73 65 74 20 3a 3a  {sql} {.  set ::
2b60: 73 71 6c 69 74 65 5f 73 6f 72 74 5f 63 6f 75 6e  sqlite_sort_coun
2b70: 74 20 30 0a 20 20 73 65 74 20 64 61 74 61 20 5b  t 0.  set data [
2b80: 65 78 65 63 73 71 6c 20 24 73 71 6c 5d 0a 20 20  execsql $sql].  
2b90: 69 66 20 7b 24 3a 3a 73 71 6c 69 74 65 5f 73 6f  if {$::sqlite_so
2ba0: 72 74 5f 63 6f 75 6e 74 7d 20 7b 73 65 74 20 78  rt_count} {set x
2bb0: 20 73 6f 72 74 7d 20 7b 73 65 74 20 78 20 6e 6f   sort} {set x no
2bc0: 73 6f 72 74 7d 0a 20 20 6c 61 70 70 65 6e 64 20  sort}.  lappend 
2bd0: 64 61 74 61 20 24 78 0a 20 20 72 65 74 75 72 6e  data $x.  return
2be0: 20 24 64 61 74 61 0a 7d 0a 23 20 43 68 65 63 6b   $data.}.# Check
2bf0: 20 6f 75 74 20 74 68 65 20 6c 6f 67 69 63 20 74   out the logic t
2c00: 68 61 74 20 61 74 74 65 6d 70 74 73 20 74 6f 20  hat attempts to 
2c10: 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 4f 52  implement the OR
2c20: 44 45 52 20 42 59 20 63 6c 61 75 73 65 0a 23 20  DER BY clause.# 
2c30: 75 73 69 6e 67 20 61 6e 20 69 6e 64 65 78 20 72  using an index r
2c40: 61 74 68 65 72 20 74 68 61 6e 20 62 79 20 73 6f  ather than by so
2c50: 72 74 69 6e 67 2e 0a 23 0a 64 6f 5f 74 65 73 74  rting..#.do_test
2c60: 20 77 68 65 72 65 2d 36 2e 31 20 7b 0a 20 20 65   where-6.1 {.  e
2c70: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
2c80: 41 54 45 20 54 41 42 4c 45 20 74 33 28 61 2c 62  ATE TABLE t3(a,b
2c90: 2c 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  ,c);.    CREATE 
2ca0: 49 4e 44 45 58 20 74 33 61 20 4f 4e 20 74 33 28  INDEX t3a ON t3(
2cb0: 61 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49  a);.    CREATE I
2cc0: 4e 44 45 58 20 74 33 62 63 20 4f 4e 20 74 33 28  NDEX t3bc ON t3(
2cd0: 62 2c 63 29 3b 0a 20 20 20 20 43 52 45 41 54 45  b,c);.    CREATE
2ce0: 20 49 4e 44 45 58 20 74 33 61 63 62 20 4f 4e 20   INDEX t3acb ON 
2cf0: 74 33 28 61 2c 63 2c 62 29 3b 0a 20 20 20 20 49  t3(a,c,b);.    I
2d00: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 53 45  NSERT INTO t3 SE
2d10: 4c 45 43 54 20 77 2c 20 31 30 31 2d 77 2c 20 79  LECT w, 101-w, y
2d20: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 53 45   FROM t1;.    SE
2d30: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 2c 20 73  LECT count(*), s
2d40: 75 6d 28 61 29 2c 20 73 75 6d 28 62 29 2c 20 73  um(a), sum(b), s
2d50: 75 6d 28 63 29 20 46 52 4f 4d 20 74 33 3b 0a 20  um(c) FROM t3;. 
2d60: 20 7d 0a 7d 20 7b 31 30 30 20 35 30 35 30 20 35   }.} {100 5050 5
2d70: 30 35 30 20 33 34 38 35 35 30 7d 0a 64 6f 5f 74  050 348550}.do_t
2d80: 65 73 74 20 77 68 65 72 65 2d 36 2e 32 20 7b 0a  est where-6.2 {.
2d90: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
2da0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
2db0: 4f 52 44 45 52 20 42 59 20 61 20 4c 49 4d 49 54  ORDER BY a LIMIT
2dc0: 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20   3.  }.} {1 100 
2dd0: 34 20 32 20 39 39 20 39 20 33 20 39 38 20 31 36  4 2 99 9 3 98 16
2de0: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
2df0: 20 77 68 65 72 65 2d 36 2e 33 20 7b 0a 20 20 63   where-6.3 {.  c
2e00: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
2e10: 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 4f 52 44  CT * FROM t3 ORD
2e20: 45 52 20 42 59 20 61 2b 31 20 4c 49 4d 49 54 20  ER BY a+1 LIMIT 
2e30: 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34  3.  }.} {1 100 4
2e40: 20 32 20 39 39 20 39 20 33 20 39 38 20 31 36 20   2 99 9 3 98 16 
2e50: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
2e60: 65 72 65 2d 36 2e 34 20 7b 0a 20 20 63 6b 73 6f  ere-6.4 {.  ckso
2e70: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
2e80: 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20  * FROM t3 WHERE 
2e90: 61 3c 31 30 20 4f 52 44 45 52 20 42 59 20 61 20  a<10 ORDER BY a 
2ea0: 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31  LIMIT 3.  }.} {1
2eb0: 20 31 30 30 20 34 20 32 20 39 39 20 39 20 33 20   100 4 2 99 9 3 
2ec0: 39 38 20 31 36 20 6e 6f 73 6f 72 74 7d 0a 64 6f  98 16 nosort}.do
2ed0: 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e 35 20  _test where-6.5 
2ee0: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
2ef0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2f00: 33 20 57 48 45 52 45 20 61 3e 30 20 41 4e 44 20  3 WHERE a>0 AND 
2f10: 61 3c 31 30 20 4f 52 44 45 52 20 42 59 20 61 20  a<10 ORDER BY a 
2f20: 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31  LIMIT 3.  }.} {1
2f30: 20 31 30 30 20 34 20 32 20 39 39 20 39 20 33 20   100 4 2 99 9 3 
2f40: 39 38 20 31 36 20 6e 6f 73 6f 72 74 7d 0a 64 6f  98 16 nosort}.do
2f50: 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e 36 20  _test where-6.6 
2f60: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
2f70: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2f80: 33 20 57 48 45 52 45 20 61 3e 30 20 4f 52 44 45  3 WHERE a>0 ORDE
2f90: 52 20 42 59 20 61 20 4c 49 4d 49 54 20 33 0a 20  R BY a LIMIT 3. 
2fa0: 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20 32 20   }.} {1 100 4 2 
2fb0: 39 39 20 39 20 33 20 39 38 20 31 36 20 6e 6f 73  99 9 3 98 16 nos
2fc0: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
2fd0: 72 65 2d 36 2e 37 20 7b 0a 20 20 63 6b 73 6f 72  re-6.7 {.  cksor
2fe0: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t {.    SELECT *
2ff0: 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 62   FROM t3 WHERE b
3000: 3e 30 20 4f 52 44 45 52 20 42 59 20 61 20 4c 49  >0 ORDER BY a LI
3010: 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31  MIT 3.  }.} {1 1
3020: 30 30 20 34 20 32 20 39 39 20 39 20 33 20 39 38  00 4 2 99 9 3 98
3030: 20 31 36 20 6e 6f 73 6f 72 74 7d 0a 69 66 63 61   16 nosort}.ifca
3040: 70 61 62 6c 65 20 73 75 62 71 75 65 72 79 20 7b  pable subquery {
3050: 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72 65  .  do_test where
3060: 2d 36 2e 38 20 7b 0a 20 20 20 20 63 6b 73 6f 72  -6.8 {.    cksor
3070: 74 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54  t {.      SELECT
3080: 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45   * FROM t3 WHERE
3090: 20 61 20 49 4e 20 28 33 2c 35 2c 37 2c 31 2c 39   a IN (3,5,7,1,9
30a0: 2c 34 2c 32 29 20 4f 52 44 45 52 20 42 59 20 61  ,4,2) ORDER BY a
30b0: 20 4c 49 4d 49 54 20 33 0a 20 20 20 20 7d 0a 20   LIMIT 3.    }. 
30c0: 20 7d 20 7b 31 20 31 30 30 20 34 20 32 20 39 39   } {1 100 4 2 99
30d0: 20 39 20 33 20 39 38 20 31 36 20 73 6f 72 74 7d   9 3 98 16 sort}
30e0: 0a 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  .}.do_test where
30f0: 2d 36 2e 39 2e 31 20 7b 0a 20 20 63 6b 73 6f 72  -6.9.1 {.  cksor
3100: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t {.    SELECT *
3110: 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61   FROM t3 WHERE a
3120: 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52  =1 AND c>0 ORDER
3130: 20 42 59 20 61 20 4c 49 4d 49 54 20 33 0a 20 20   BY a LIMIT 3.  
3140: 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20 6e 6f 73  }.} {1 100 4 nos
3150: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
3160: 72 65 2d 36 2e 39 2e 31 2e 31 20 7b 0a 20 20 63  re-6.9.1.1 {.  c
3170: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
3180: 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45  CT * FROM t3 WHE
3190: 52 45 20 61 3e 3d 31 20 41 4e 44 20 61 3d 31 20  RE a>=1 AND a=1 
31a0: 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20 42 59  AND c>0 ORDER BY
31b0: 20 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d   a LIMIT 3.  }.}
31c0: 20 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f 72 74   {1 100 4 nosort
31d0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
31e0: 36 2e 39 2e 31 2e 32 20 7b 0a 20 20 63 6b 73 6f  6.9.1.2 {.  ckso
31f0: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
3200: 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20  * FROM t3 WHERE 
3210: 61 3c 32 20 41 4e 44 20 61 3d 31 20 41 4e 44 20  a<2 AND a=1 AND 
3220: 63 3e 30 20 4f 52 44 45 52 20 42 59 20 61 20 4c  c>0 ORDER BY a L
3230: 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20  IMIT 3.  }.} {1 
3240: 31 30 30 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f  100 4 nosort}.do
3250: 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e 39 2e  _test where-6.9.
3260: 32 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  2 {.  cksort {. 
3270: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
3280: 20 74 33 20 57 48 45 52 45 20 61 3d 31 20 41 4e   t3 WHERE a=1 AN
3290: 44 20 63 3e 30 20 4f 52 44 45 52 20 42 59 20 61  D c>0 ORDER BY a
32a0: 2c 63 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d  ,c LIMIT 3.  }.}
32b0: 20 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f 72 74   {1 100 4 nosort
32c0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
32d0: 36 2e 39 2e 33 20 7b 0a 20 20 63 6b 73 6f 72 74  6.9.3 {.  cksort
32e0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
32f0: 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d  FROM t3 WHERE a=
3300: 31 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20  1 AND c>0 ORDER 
3310: 42 59 20 63 20 4c 49 4d 49 54 20 33 0a 20 20 7d  BY c LIMIT 3.  }
3320: 0a 7d 20 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f  .} {1 100 4 noso
3330: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
3340: 65 2d 36 2e 39 2e 34 20 7b 0a 20 20 63 6b 73 6f  e-6.9.4 {.  ckso
3350: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
3360: 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20  * FROM t3 WHERE 
3370: 61 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52 44 45  a=1 AND c>0 ORDE
3380: 52 20 42 59 20 61 20 44 45 53 43 20 4c 49 4d 49  R BY a DESC LIMI
3390: 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30  T 3.  }.} {1 100
33a0: 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65   4 nosort}.do_te
33b0: 73 74 20 77 68 65 72 65 2d 36 2e 39 2e 35 20 7b  st where-6.9.5 {
33c0: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
33d0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
33e0: 20 57 48 45 52 45 20 61 3d 31 20 41 4e 44 20 63   WHERE a=1 AND c
33f0: 3e 30 20 4f 52 44 45 52 20 42 59 20 61 20 44 45  >0 ORDER BY a DE
3400: 53 43 2c 20 63 20 44 45 53 43 20 4c 49 4d 49 54  SC, c DESC LIMIT
3410: 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20   3.  }.} {1 100 
3420: 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  4 nosort}.do_tes
3430: 74 20 77 68 65 72 65 2d 36 2e 39 2e 36 20 7b 0a  t where-6.9.6 {.
3440: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
3450: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
3460: 57 48 45 52 45 20 61 3d 31 20 41 4e 44 20 63 3e  WHERE a=1 AND c>
3470: 30 20 4f 52 44 45 52 20 42 59 20 63 20 44 45 53  0 ORDER BY c DES
3480: 43 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20  C LIMIT 3.  }.} 
3490: 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f 72 74 7d  {1 100 4 nosort}
34a0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36  .do_test where-6
34b0: 2e 39 2e 37 20 7b 0a 20 20 63 6b 73 6f 72 74 20  .9.7 {.  cksort 
34c0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
34d0: 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d 31  ROM t3 WHERE a=1
34e0: 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20 42   AND c>0 ORDER B
34f0: 59 20 63 2c 61 20 4c 49 4d 49 54 20 33 0a 20 20  Y c,a LIMIT 3.  
3500: 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20 73 6f 72  }.} {1 100 4 sor
3510: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
3520: 2d 36 2e 39 2e 38 20 7b 0a 20 20 63 6b 73 6f 72  -6.9.8 {.  cksor
3530: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t {.    SELECT *
3540: 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61   FROM t3 WHERE a
3550: 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52  =1 AND c>0 ORDER
3560: 20 42 59 20 61 20 44 45 53 43 2c 20 63 20 41 53   BY a DESC, c AS
3570: 43 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20  C LIMIT 3.  }.} 
3580: 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f 72 74 7d  {1 100 4 nosort}
3590: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36  .do_test where-6
35a0: 2e 39 2e 39 20 7b 0a 20 20 63 6b 73 6f 72 74 20  .9.9 {.  cksort 
35b0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
35c0: 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d 31  ROM t3 WHERE a=1
35d0: 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20 42   AND c>0 ORDER B
35e0: 59 20 61 20 41 53 43 2c 20 63 20 44 45 53 43 20  Y a ASC, c DESC 
35f0: 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31  LIMIT 3.  }.} {1
3600: 20 31 30 30 20 34 20 6e 6f 73 6f 72 74 7d 0a 64   100 4 nosort}.d
3610: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e 31  o_test where-6.1
3620: 30 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  0 {.  cksort {. 
3630: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
3640: 20 74 33 20 57 48 45 52 45 20 61 3d 31 20 41 4e   t3 WHERE a=1 AN
3650: 44 20 63 3e 30 20 4f 52 44 45 52 20 42 59 20 61  D c>0 ORDER BY a
3660: 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b   LIMIT 3.  }.} {
3670: 31 20 31 30 30 20 34 20 6e 6f 73 6f 72 74 7d 0a  1 100 4 nosort}.
3680: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e  do_test where-6.
3690: 31 31 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  11 {.  cksort {.
36a0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
36b0: 4d 20 74 33 20 57 48 45 52 45 20 61 3d 31 20 41  M t3 WHERE a=1 A
36c0: 4e 44 20 63 3e 30 20 4f 52 44 45 52 20 42 59 20  ND c>0 ORDER BY 
36d0: 61 2c 63 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a  a,c LIMIT 3.  }.
36e0: 7d 20 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f 72  } {1 100 4 nosor
36f0: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
3700: 2d 36 2e 31 32 20 7b 0a 20 20 63 6b 73 6f 72 74  -6.12 {.  cksort
3710: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
3720: 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d  FROM t3 WHERE a=
3730: 31 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20  1 AND c>0 ORDER 
3740: 42 59 20 61 2c 63 2c 62 20 4c 49 4d 49 54 20 33  BY a,c,b LIMIT 3
3750: 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20  .  }.} {1 100 4 
3760: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
3770: 77 68 65 72 65 2d 36 2e 31 33 20 7b 0a 20 20 63  where-6.13 {.  c
3780: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
3790: 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45  CT * FROM t3 WHE
37a0: 52 45 20 61 3e 30 20 4f 52 44 45 52 20 42 59 20  RE a>0 ORDER BY 
37b0: 61 20 44 45 53 43 20 4c 49 4d 49 54 20 33 0a 20  a DESC LIMIT 3. 
37c0: 20 7d 0a 7d 20 7b 31 30 30 20 31 20 31 30 32 30   }.} {100 1 1020
37d0: 31 20 39 39 20 32 20 31 30 30 30 30 20 39 38 20  1 99 2 10000 98 
37e0: 33 20 39 38 30 31 20 6e 6f 73 6f 72 74 7d 0a 64  3 9801 nosort}.d
37f0: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e 31  o_test where-6.1
3800: 33 2e 31 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  3.1 {.  cksort {
3810: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
3820: 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3e 30 20  OM t3 WHERE a>0 
3830: 4f 52 44 45 52 20 42 59 20 2d 61 20 4c 49 4d 49  ORDER BY -a LIMI
3840: 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 30 30 20 31  T 3.  }.} {100 1
3850: 20 31 30 32 30 31 20 39 39 20 32 20 31 30 30 30   10201 99 2 1000
3860: 30 20 39 38 20 33 20 39 38 30 31 20 73 6f 72 74  0 98 3 9801 sort
3870: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
3880: 36 2e 31 34 20 7b 0a 20 20 63 6b 73 6f 72 74 20  6.14 {.  cksort 
3890: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
38a0: 52 4f 4d 20 74 33 20 4f 52 44 45 52 20 42 59 20  ROM t3 ORDER BY 
38b0: 62 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20  b LIMIT 3.  }.} 
38c0: 7b 31 30 30 20 31 20 31 30 32 30 31 20 39 39 20  {100 1 10201 99 
38d0: 32 20 31 30 30 30 30 20 39 38 20 33 20 39 38 30  2 10000 98 3 980
38e0: 31 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  1 nosort}.do_tes
38f0: 74 20 77 68 65 72 65 2d 36 2e 31 35 20 7b 0a 20  t where-6.15 {. 
3900: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
3910: 4c 45 43 54 20 74 33 2e 61 2c 20 74 31 2e 78 20  LECT t3.a, t1.x 
3920: 46 52 4f 4d 20 74 33 2c 20 74 31 20 57 48 45 52  FROM t3, t1 WHER
3930: 45 20 74 33 2e 61 3d 74 31 2e 77 20 4f 52 44 45  E t3.a=t1.w ORDE
3940: 52 20 42 59 20 74 33 2e 61 20 4c 49 4d 49 54 20  R BY t3.a LIMIT 
3950: 33 0a 20 20 7d 0a 7d 20 7b 31 20 30 20 32 20 31  3.  }.} {1 0 2 1
3960: 20 33 20 31 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f   3 1 nosort}.do_
3970: 74 65 73 74 20 77 68 65 72 65 2d 36 2e 31 36 20  test where-6.16 
3980: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
3990: 20 53 45 4c 45 43 54 20 74 33 2e 61 2c 20 74 31   SELECT t3.a, t1
39a0: 2e 78 20 46 52 4f 4d 20 74 33 2c 20 74 31 20 57  .x FROM t3, t1 W
39b0: 48 45 52 45 20 74 33 2e 61 3d 74 31 2e 77 20 4f  HERE t3.a=t1.w O
39c0: 52 44 45 52 20 42 59 20 74 31 2e 78 2c 20 74 33  RDER BY t1.x, t3
39d0: 2e 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d  .a LIMIT 3.  }.}
39e0: 20 7b 31 20 30 20 32 20 31 20 33 20 31 20 73 6f   {1 0 2 1 3 1 so
39f0: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
3a00: 65 2d 36 2e 31 39 20 7b 0a 20 20 63 6b 73 6f 72  e-6.19 {.  cksor
3a10: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 79  t {.    SELECT y
3a20: 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42   FROM t1 ORDER B
3a30: 59 20 77 20 4c 49 4d 49 54 20 33 3b 0a 20 20 7d  Y w LIMIT 3;.  }
3a40: 0a 7d 20 7b 34 20 39 20 31 36 20 6e 6f 73 6f 72  .} {4 9 16 nosor
3a50: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
3a60: 2d 36 2e 32 30 20 7b 0a 20 20 63 6b 73 6f 72 74  -6.20 {.  cksort
3a70: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 79 20   {.    SELECT y 
3a80: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
3a90: 20 72 6f 77 69 64 20 4c 49 4d 49 54 20 33 3b 0a   rowid LIMIT 3;.
3aa0: 20 20 7d 0a 7d 20 7b 34 20 39 20 31 36 20 6e 6f    }.} {4 9 16 no
3ab0: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
3ac0: 65 72 65 2d 36 2e 32 31 20 7b 0a 20 20 63 6b 73  ere-6.21 {.  cks
3ad0: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
3ae0: 20 79 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52   y FROM t1 ORDER
3af0: 20 42 59 20 72 6f 77 69 64 2c 20 79 20 4c 49 4d   BY rowid, y LIM
3b00: 49 54 20 33 3b 0a 20 20 7d 0a 7d 20 7b 34 20 39  IT 3;.  }.} {4 9
3b10: 20 31 36 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74   16 nosort}.do_t
3b20: 65 73 74 20 77 68 65 72 65 2d 36 2e 32 32 20 7b  est where-6.22 {
3b30: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
3b40: 53 45 4c 45 43 54 20 79 20 46 52 4f 4d 20 74 31  SELECT y FROM t1
3b50: 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 2c   ORDER BY rowid,
3b60: 20 79 20 44 45 53 43 20 4c 49 4d 49 54 20 33 3b   y DESC LIMIT 3;
3b70: 0a 20 20 7d 0a 7d 20 7b 34 20 39 20 31 36 20 6e  .  }.} {4 9 16 n
3b80: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
3b90: 68 65 72 65 2d 36 2e 32 33 20 7b 0a 20 20 63 6b  here-6.23 {.  ck
3ba0: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
3bb0: 54 20 79 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T y FROM t1 WHER
3bc0: 45 20 79 3e 34 20 4f 52 44 45 52 20 42 59 20 72  E y>4 ORDER BY r
3bd0: 6f 77 69 64 2c 20 77 2c 20 78 20 4c 49 4d 49 54  owid, w, x LIMIT
3be0: 20 33 3b 0a 20 20 7d 0a 7d 20 7b 39 20 31 36 20   3;.  }.} {9 16 
3bf0: 32 35 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  25 nosort}.do_te
3c00: 73 74 20 77 68 65 72 65 2d 36 2e 32 34 20 7b 0a  st where-6.24 {.
3c10: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
3c20: 45 4c 45 43 54 20 79 20 46 52 4f 4d 20 74 31 20  ELECT y FROM t1 
3c30: 57 48 45 52 45 20 79 3e 3d 39 20 4f 52 44 45 52  WHERE y>=9 ORDER
3c40: 20 42 59 20 72 6f 77 69 64 2c 20 78 20 44 45 53   BY rowid, x DES
3c50: 43 2c 20 77 20 4c 49 4d 49 54 20 33 3b 0a 20 20  C, w LIMIT 3;.  
3c60: 7d 0a 7d 20 7b 39 20 31 36 20 32 35 20 6e 6f 73  }.} {9 16 25 nos
3c70: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
3c80: 72 65 2d 36 2e 32 35 20 7b 0a 20 20 63 6b 73 6f  re-6.25 {.  ckso
3c90: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
3ca0: 79 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  y FROM t1 WHERE 
3cb0: 79 3e 34 20 41 4e 44 20 79 3c 32 35 20 4f 52 44  y>4 AND y<25 ORD
3cc0: 45 52 20 42 59 20 72 6f 77 69 64 3b 0a 20 20 7d  ER BY rowid;.  }
3cd0: 0a 7d 20 7b 39 20 31 36 20 6e 6f 73 6f 72 74 7d  .} {9 16 nosort}
3ce0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36  .do_test where-6
3cf0: 2e 32 36 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  .26 {.  cksort {
3d00: 0a 20 20 20 20 53 45 4c 45 43 54 20 79 20 46 52  .    SELECT y FR
3d10: 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3e 3d 34  OM t1 WHERE y>=4
3d20: 20 41 4e 44 20 79 3c 3d 32 35 20 4f 52 44 45 52   AND y<=25 ORDER
3d30: 20 42 59 20 6f 69 64 3b 0a 20 20 7d 0a 7d 20 7b   BY oid;.  }.} {
3d40: 34 20 39 20 31 36 20 32 35 20 6e 6f 73 6f 72 74  4 9 16 25 nosort
3d50: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
3d60: 36 2e 32 37 20 7b 0a 20 20 63 6b 73 6f 72 74 20  6.27 {.  cksort 
3d70: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 79 20 46  {.    SELECT y F
3d80: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3c 3d  ROM t1 WHERE y<=
3d90: 32 35 20 4f 52 44 45 52 20 42 59 20 5f 72 6f 77  25 ORDER BY _row
3da0: 69 64 5f 2c 20 77 2b 79 3b 0a 20 20 7d 0a 7d 20  id_, w+y;.  }.} 
3db0: 7b 34 20 39 20 31 36 20 32 35 20 6e 6f 73 6f 72  {4 9 16 25 nosor
3dc0: 74 7d 0a 0a 0a 23 20 54 65 73 74 73 20 66 6f 72  t}...# Tests for
3dd0: 20 72 65 76 65 72 73 65 2d 6f 72 64 65 72 20 73   reverse-order s
3de0: 6f 72 74 69 6e 67 2e 0a 23 0a 64 6f 5f 74 65 73  orting..#.do_tes
3df0: 74 20 77 68 65 72 65 2d 37 2e 31 20 7b 0a 20 20  t where-7.1 {.  
3e00: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
3e10: 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48  ECT w FROM t1 WH
3e20: 45 52 45 20 78 3d 33 20 4f 52 44 45 52 20 42 59  ERE x=3 ORDER BY
3e30: 20 79 3b 0a 20 20 7d 0a 7d 20 7b 38 20 39 20 31   y;.  }.} {8 9 1
3e40: 30 20 31 31 20 31 32 20 31 33 20 31 34 20 31 35  0 11 12 13 14 15
3e50: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
3e60: 20 77 68 65 72 65 2d 37 2e 32 20 7b 0a 20 20 63   where-7.2 {.  c
3e70: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
3e80: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
3e90: 52 45 20 78 3d 33 20 4f 52 44 45 52 20 42 59 20  RE x=3 ORDER BY 
3ea0: 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31  y DESC;.  }.} {1
3eb0: 35 20 31 34 20 31 33 20 31 32 20 31 31 20 31 30  5 14 13 12 11 10
3ec0: 20 39 20 38 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f   9 8 nosort}.do_
3ed0: 74 65 73 74 20 77 68 65 72 65 2d 37 2e 33 20 7b  test where-7.3 {
3ee0: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
3ef0: 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31  SELECT w FROM t1
3f00: 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79   WHERE x=3 AND y
3f10: 3e 31 30 30 20 4f 52 44 45 52 20 42 59 20 79 20  >100 ORDER BY y 
3f20: 4c 49 4d 49 54 20 33 3b 0a 20 20 7d 0a 7d 20 7b  LIMIT 3;.  }.} {
3f30: 31 30 20 31 31 20 31 32 20 6e 6f 73 6f 72 74 7d  10 11 12 nosort}
3f40: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37  .do_test where-7
3f50: 2e 34 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .4 {.  cksort {.
3f60: 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f      SELECT w FRO
3f70: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41  M t1 WHERE x=3 A
3f80: 4e 44 20 79 3e 31 30 30 20 4f 52 44 45 52 20 42  ND y>100 ORDER B
3f90: 59 20 79 20 44 45 53 43 20 4c 49 4d 49 54 20 33  Y y DESC LIMIT 3
3fa0: 3b 0a 20 20 7d 0a 7d 20 7b 31 35 20 31 34 20 31  ;.  }.} {15 14 1
3fb0: 33 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  3 nosort}.do_tes
3fc0: 74 20 77 68 65 72 65 2d 37 2e 35 20 7b 0a 20 20  t where-7.5 {.  
3fd0: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
3fe0: 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48  ECT w FROM t1 WH
3ff0: 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e 31 32  ERE x=3 AND y>12
4000: 31 20 4f 52 44 45 52 20 42 59 20 79 20 44 45 53  1 ORDER BY y DES
4010: 43 3b 0a 20 20 7d 0a 7d 20 7b 31 35 20 31 34 20  C;.  }.} {15 14 
4020: 31 33 20 31 32 20 31 31 20 6e 6f 73 6f 72 74 7d  13 12 11 nosort}
4030: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37  .do_test where-7
4040: 2e 36 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .6 {.  cksort {.
4050: 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f      SELECT w FRO
4060: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41  M t1 WHERE x=3 A
4070: 4e 44 20 79 3e 3d 31 32 31 20 4f 52 44 45 52 20  ND y>=121 ORDER 
4080: 42 59 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d  BY y DESC;.  }.}
4090: 20 7b 31 35 20 31 34 20 31 33 20 31 32 20 31 31   {15 14 13 12 11
40a0: 20 31 30 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74   10 nosort}.do_t
40b0: 65 73 74 20 77 68 65 72 65 2d 37 2e 37 20 7b 0a  est where-7.7 {.
40c0: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
40d0: 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20  ELECT w FROM t1 
40e0: 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e  WHERE x=3 AND y>
40f0: 3d 31 32 31 20 41 4e 44 20 79 3c 31 39 36 20 4f  =121 AND y<196 O
4100: 52 44 45 52 20 42 59 20 79 20 44 45 53 43 3b 0a  RDER BY y DESC;.
4110: 20 20 7d 0a 7d 20 7b 31 32 20 31 31 20 31 30 20    }.} {12 11 10 
4120: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
4130: 77 68 65 72 65 2d 37 2e 38 20 7b 0a 20 20 63 6b  where-7.8 {.  ck
4140: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
4150: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
4160: 45 20 78 3d 33 20 41 4e 44 20 79 3e 3d 31 32 31  E x=3 AND y>=121
4170: 20 41 4e 44 20 79 3c 3d 31 39 36 20 4f 52 44 45   AND y<=196 ORDE
4180: 52 20 42 59 20 79 20 44 45 53 43 3b 0a 20 20 7d  R BY y DESC;.  }
4190: 0a 7d 20 7b 31 33 20 31 32 20 31 31 20 31 30 20  .} {13 12 11 10 
41a0: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
41b0: 77 68 65 72 65 2d 37 2e 39 20 7b 0a 20 20 63 6b  where-7.9 {.  ck
41c0: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
41d0: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
41e0: 45 20 78 3d 33 20 41 4e 44 20 79 3e 31 32 31 20  E x=3 AND y>121 
41f0: 41 4e 44 20 79 3c 3d 31 39 36 20 4f 52 44 45 52  AND y<=196 ORDER
4200: 20 42 59 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a   BY y DESC;.  }.
4210: 7d 20 7b 31 33 20 31 32 20 31 31 20 6e 6f 73 6f  } {13 12 11 noso
4220: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
4230: 65 2d 37 2e 31 30 20 7b 0a 20 20 63 6b 73 6f 72  e-7.10 {.  cksor
4240: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77  t {.    SELECT w
4250: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
4260: 3d 33 20 41 4e 44 20 79 3e 31 30 30 20 41 4e 44  =3 AND y>100 AND
4270: 20 79 3c 31 39 36 20 4f 52 44 45 52 20 42 59 20   y<196 ORDER BY 
4280: 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31  y DESC;.  }.} {1
4290: 32 20 31 31 20 31 30 20 6e 6f 73 6f 72 74 7d 0a  2 11 10 nosort}.
42a0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e  do_test where-7.
42b0: 31 31 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  11 {.  cksort {.
42c0: 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f      SELECT w FRO
42d0: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41  M t1 WHERE x=3 A
42e0: 4e 44 20 79 3e 3d 31 32 31 20 41 4e 44 20 79 3c  ND y>=121 AND y<
42f0: 31 39 36 20 4f 52 44 45 52 20 42 59 20 79 3b 0a  196 ORDER BY y;.
4300: 20 20 7d 0a 7d 20 7b 31 30 20 31 31 20 31 32 20    }.} {10 11 12 
4310: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
4320: 77 68 65 72 65 2d 37 2e 31 32 20 7b 0a 20 20 63  where-7.12 {.  c
4330: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
4340: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
4350: 52 45 20 78 3d 33 20 41 4e 44 20 79 3e 3d 31 32  RE x=3 AND y>=12
4360: 31 20 41 4e 44 20 79 3c 3d 31 39 36 20 4f 52 44  1 AND y<=196 ORD
4370: 45 52 20 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b  ER BY y;.  }.} {
4380: 31 30 20 31 31 20 31 32 20 31 33 20 6e 6f 73 6f  10 11 12 13 noso
4390: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
43a0: 65 2d 37 2e 31 33 20 7b 0a 20 20 63 6b 73 6f 72  e-7.13 {.  cksor
43b0: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77  t {.    SELECT w
43c0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
43d0: 3d 33 20 41 4e 44 20 79 3e 31 32 31 20 41 4e 44  =3 AND y>121 AND
43e0: 20 79 3c 3d 31 39 36 20 4f 52 44 45 52 20 42 59   y<=196 ORDER BY
43f0: 20 79 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20 31 32   y;.  }.} {11 12
4400: 20 31 33 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74   13 nosort}.do_t
4410: 65 73 74 20 77 68 65 72 65 2d 37 2e 31 34 20 7b  est where-7.14 {
4420: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
4430: 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31  SELECT w FROM t1
4440: 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79   WHERE x=3 AND y
4450: 3e 31 30 30 20 41 4e 44 20 79 3c 31 39 36 20 4f  >100 AND y<196 O
4460: 52 44 45 52 20 42 59 20 79 3b 0a 20 20 7d 0a 7d  RDER BY y;.  }.}
4470: 20 7b 31 30 20 31 31 20 31 32 20 6e 6f 73 6f 72   {10 11 12 nosor
4480: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
4490: 2d 37 2e 31 35 20 7b 0a 20 20 63 6b 73 6f 72 74  -7.15 {.  cksort
44a0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20   {.    SELECT w 
44b0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d  FROM t1 WHERE x=
44c0: 33 20 41 4e 44 20 79 3c 38 31 20 4f 52 44 45 52  3 AND y<81 ORDER
44d0: 20 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f   BY y;.  }.} {no
44e0: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
44f0: 65 72 65 2d 37 2e 31 36 20 7b 0a 20 20 63 6b 73  ere-7.16 {.  cks
4500: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
4510: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
4520: 20 78 3d 33 20 41 4e 44 20 79 3c 3d 38 31 20 4f   x=3 AND y<=81 O
4530: 52 44 45 52 20 42 59 20 79 3b 0a 20 20 7d 0a 7d  RDER BY y;.  }.}
4540: 20 7b 38 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74   {8 nosort}.do_t
4550: 65 73 74 20 77 68 65 72 65 2d 37 2e 31 37 20 7b  est where-7.17 {
4560: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
4570: 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31  SELECT w FROM t1
4580: 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79   WHERE x=3 AND y
4590: 3e 32 35 36 20 4f 52 44 45 52 20 42 59 20 79 3b  >256 ORDER BY y;
45a0: 0a 20 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a  .  }.} {nosort}.
45b0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e  do_test where-7.
45c0: 31 38 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  18 {.  cksort {.
45d0: 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f      SELECT w FRO
45e0: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41  M t1 WHERE x=3 A
45f0: 4e 44 20 79 3e 3d 32 35 36 20 4f 52 44 45 52 20  ND y>=256 ORDER 
4600: 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 31 35 20  BY y;.  }.} {15 
4610: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
4620: 77 68 65 72 65 2d 37 2e 31 39 20 7b 0a 20 20 63  where-7.19 {.  c
4630: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
4640: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
4650: 52 45 20 78 3d 33 20 41 4e 44 20 79 3c 38 31 20  RE x=3 AND y<81 
4660: 4f 52 44 45 52 20 42 59 20 79 20 44 45 53 43 3b  ORDER BY y DESC;
4670: 0a 20 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a  .  }.} {nosort}.
4680: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e  do_test where-7.
4690: 32 30 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  20 {.  cksort {.
46a0: 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f      SELECT w FRO
46b0: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41  M t1 WHERE x=3 A
46c0: 4e 44 20 79 3c 3d 38 31 20 4f 52 44 45 52 20 42  ND y<=81 ORDER B
46d0: 59 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20  Y y DESC;.  }.} 
46e0: 7b 38 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  {8 nosort}.do_te
46f0: 73 74 20 77 68 65 72 65 2d 37 2e 32 31 20 7b 0a  st where-7.21 {.
4700: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
4710: 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20  ELECT w FROM t1 
4720: 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e  WHERE x=3 AND y>
4730: 32 35 36 20 4f 52 44 45 52 20 42 59 20 79 20 44  256 ORDER BY y D
4740: 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f 73 6f  ESC;.  }.} {noso
4750: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
4760: 65 2d 37 2e 32 32 20 7b 0a 20 20 63 6b 73 6f 72  e-7.22 {.  cksor
4770: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77  t {.    SELECT w
4780: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
4790: 3d 33 20 41 4e 44 20 79 3e 3d 32 35 36 20 4f 52  =3 AND y>=256 OR
47a0: 44 45 52 20 42 59 20 79 20 44 45 53 43 3b 0a 20  DER BY y DESC;. 
47b0: 20 7d 0a 7d 20 7b 31 35 20 6e 6f 73 6f 72 74 7d   }.} {15 nosort}
47c0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37  .do_test where-7
47d0: 2e 32 33 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  .23 {.  cksort {
47e0: 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52  .    SELECT w FR
47f0: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 30 20  OM t1 WHERE x=0 
4800: 41 4e 44 20 79 3c 34 20 4f 52 44 45 52 20 42 59  AND y<4 ORDER BY
4810: 20 79 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f 73 6f 72   y;.  }.} {nosor
4820: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
4830: 2d 37 2e 32 34 20 7b 0a 20 20 63 6b 73 6f 72 74  -7.24 {.  cksort
4840: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20   {.    SELECT w 
4850: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d  FROM t1 WHERE x=
4860: 30 20 41 4e 44 20 79 3c 3d 34 20 4f 52 44 45 52  0 AND y<=4 ORDER
4870: 20 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 31 20   BY y;.  }.} {1 
4880: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
4890: 77 68 65 72 65 2d 37 2e 32 35 20 7b 0a 20 20 63  where-7.25 {.  c
48a0: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
48b0: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
48c0: 52 45 20 78 3d 36 20 41 4e 44 20 79 3e 31 30 32  RE x=6 AND y>102
48d0: 30 31 20 4f 52 44 45 52 20 42 59 20 79 3b 0a 20  01 ORDER BY y;. 
48e0: 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a 64 6f   }.} {nosort}.do
48f0: 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 32 36  _test where-7.26
4900: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
4910: 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20    SELECT w FROM 
4920: 74 31 20 57 48 45 52 45 20 78 3d 36 20 41 4e 44  t1 WHERE x=6 AND
4930: 20 79 3e 3d 31 30 32 30 31 20 4f 52 44 45 52 20   y>=10201 ORDER 
4940: 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 31 30 30  BY y;.  }.} {100
4950: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
4960: 20 77 68 65 72 65 2d 37 2e 32 37 20 7b 0a 20 20   where-7.27 {.  
4970: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
4980: 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48  ECT w FROM t1 WH
4990: 45 52 45 20 78 3d 30 20 41 4e 44 20 79 3c 34 20  ERE x=0 AND y<4 
49a0: 4f 52 44 45 52 20 42 59 20 79 20 44 45 53 43 3b  ORDER BY y DESC;
49b0: 0a 20 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a  .  }.} {nosort}.
49c0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e  do_test where-7.
49d0: 32 38 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  28 {.  cksort {.
49e0: 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f      SELECT w FRO
49f0: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 30 20 41  M t1 WHERE x=0 A
4a00: 4e 44 20 79 3c 3d 34 20 4f 52 44 45 52 20 42 59  ND y<=4 ORDER BY
4a10: 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b   y DESC;.  }.} {
4a20: 31 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  1 nosort}.do_tes
4a30: 74 20 77 68 65 72 65 2d 37 2e 32 39 20 7b 0a 20  t where-7.29 {. 
4a40: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
4a50: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
4a60: 48 45 52 45 20 78 3d 36 20 41 4e 44 20 79 3e 31  HERE x=6 AND y>1
4a70: 30 32 30 31 20 4f 52 44 45 52 20 42 59 20 79 20  0201 ORDER BY y 
4a80: 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f 73  DESC;.  }.} {nos
4a90: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
4aa0: 72 65 2d 37 2e 33 30 20 7b 0a 20 20 63 6b 73 6f  re-7.30 {.  ckso
4ab0: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
4ac0: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
4ad0: 78 3d 36 20 41 4e 44 20 79 3e 3d 31 30 32 30 31  x=6 AND y>=10201
4ae0: 20 4f 52 44 45 52 20 42 59 20 79 20 44 45 53 43   ORDER BY y DESC
4af0: 3b 0a 20 20 7d 0a 7d 20 7b 31 30 30 20 6e 6f 73  ;.  }.} {100 nos
4b00: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
4b10: 72 65 2d 37 2e 33 31 20 7b 0a 20 20 63 6b 73 6f  re-7.31 {.  ckso
4b20: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
4b30: 79 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20  y FROM t1 ORDER 
4b40: 42 59 20 72 6f 77 69 64 20 44 45 53 43 20 4c 49  BY rowid DESC LI
4b50: 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 30 32  MIT 3.  }.} {102
4b60: 30 31 20 31 30 30 30 30 20 39 38 30 31 20 6e 6f  01 10000 9801 no
4b70: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
4b80: 65 72 65 2d 37 2e 33 32 20 7b 0a 20 20 63 6b 73  ere-7.32 {.  cks
4b90: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
4ba0: 20 79 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   y FROM t1 WHERE
4bb0: 20 79 3c 32 35 20 4f 52 44 45 52 20 42 59 20 72   y<25 ORDER BY r
4bc0: 6f 77 69 64 20 44 45 53 43 0a 20 20 7d 0a 7d 20  owid DESC.  }.} 
4bd0: 7b 31 36 20 39 20 34 20 6e 6f 73 6f 72 74 7d 0a  {16 9 4 nosort}.
4be0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e  do_test where-7.
4bf0: 33 33 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  33 {.  cksort {.
4c00: 20 20 20 20 53 45 4c 45 43 54 20 79 20 46 52 4f      SELECT y FRO
4c10: 4d 20 74 31 20 57 48 45 52 45 20 79 3c 3d 32 35  M t1 WHERE y<=25
4c20: 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20   ORDER BY rowid 
4c30: 44 45 53 43 0a 20 20 7d 0a 7d 20 7b 32 35 20 31  DESC.  }.} {25 1
4c40: 36 20 39 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f  6 9 4 nosort}.do
4c50: 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 33 34  _test where-7.34
4c60: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
4c70: 20 20 53 45 4c 45 43 54 20 79 20 46 52 4f 4d 20    SELECT y FROM 
4c80: 74 31 20 57 48 45 52 45 20 79 3c 32 35 20 41 4e  t1 WHERE y<25 AN
4c90: 44 20 79 3e 34 20 4f 52 44 45 52 20 42 59 20 72  D y>4 ORDER BY r
4ca0: 6f 77 69 64 20 44 45 53 43 2c 20 79 20 44 45 53  owid DESC, y DES
4cb0: 43 0a 20 20 7d 0a 7d 20 7b 31 36 20 39 20 6e 6f  C.  }.} {16 9 no
4cc0: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
4cd0: 65 72 65 2d 37 2e 33 35 20 7b 0a 20 20 63 6b 73  ere-7.35 {.  cks
4ce0: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
4cf0: 20 79 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   y FROM t1 WHERE
4d00: 20 79 3c 32 35 20 41 4e 44 20 79 3e 3d 34 20 4f   y<25 AND y>=4 O
4d10: 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45  RDER BY rowid DE
4d20: 53 43 0a 20 20 7d 0a 7d 20 7b 31 36 20 39 20 34  SC.  }.} {16 9 4
4d30: 20 6e 6f 73 6f 72 74 7d 0a 0a 64 6f 5f 74 65 73   nosort}..do_tes
4d40: 74 20 77 68 65 72 65 2d 38 2e 31 20 7b 0a 20 20  t where-8.1 {.  
4d50: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
4d60: 45 41 54 45 20 54 41 42 4c 45 20 74 34 20 41 53  EATE TABLE t4 AS
4d70: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
4d80: 31 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  1;.    CREATE IN
4d90: 44 45 58 20 69 34 78 79 20 4f 4e 20 74 34 28 78  DEX i4xy ON t4(x
4da0: 2c 79 29 3b 0a 20 20 7d 0a 20 20 63 6b 73 6f 72  ,y);.  }.  cksor
4db0: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77  t {.    SELECT w
4dc0: 20 46 52 4f 4d 20 74 34 20 57 48 45 52 45 20 78   FROM t4 WHERE x
4dd0: 3d 34 20 61 6e 64 20 79 3c 31 30 30 30 20 4f 52  =4 and y<1000 OR
4de0: 44 45 52 20 42 59 20 79 20 44 45 53 43 20 6c 69  DER BY y DESC li
4df0: 6d 69 74 20 33 3b 0a 20 20 7d 0a 7d 20 7b 33 30  mit 3;.  }.} {30
4e00: 20 32 39 20 32 38 20 6e 6f 73 6f 72 74 7d 0a 64   29 28 nosort}.d
4e10: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 38 2e 32  o_test where-8.2
4e20: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
4e30: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74     DELETE FROM t
4e40: 34 3b 0a 20 20 7d 0a 20 20 63 6b 73 6f 72 74 20  4;.  }.  cksort 
4e50: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46  {.    SELECT w F
4e60: 52 4f 4d 20 74 34 20 57 48 45 52 45 20 78 3d 34  ROM t4 WHERE x=4
4e70: 20 61 6e 64 20 79 3c 31 30 30 30 20 4f 52 44 45   and y<1000 ORDE
4e80: 52 20 42 59 20 79 20 44 45 53 43 20 6c 69 6d 69  R BY y DESC limi
4e90: 74 20 33 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f 73 6f  t 3;.  }.} {noso
4ea0: 72 74 7d 0a 0a 23 20 4d 61 6b 65 20 73 75 72 65  rt}..# Make sure
4eb0: 20 73 65 61 72 63 68 65 73 20 77 69 74 68 20 61   searches with a
4ec0: 6e 20 69 6e 64 65 78 20 77 6f 72 6b 20 77 69 74  n index work wit
4ed0: 68 20 61 6e 20 65 6d 70 74 79 20 74 61 62 6c 65  h an empty table
4ee0: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  ..#.do_test wher
4ef0: 65 2d 39 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  e-9.1 {.  execsq
4f00: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
4f10: 41 42 4c 45 20 74 35 28 78 20 50 52 49 4d 41 52  ABLE t5(x PRIMAR
4f20: 59 20 4b 45 59 29 3b 0a 20 20 20 20 53 45 4c 45  Y KEY);.    SELE
4f30: 43 54 20 2a 20 46 52 4f 4d 20 74 35 20 57 48 45  CT * FROM t5 WHE
4f40: 52 45 20 78 3c 31 30 3b 0a 20 20 7d 0a 7d 20 7b  RE x<10;.  }.} {
4f50: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
4f60: 39 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  9.2 {.  execsql 
4f70: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
4f80: 52 4f 4d 20 74 35 20 57 48 45 52 45 20 78 3c 31  ROM t5 WHERE x<1
4f90: 30 20 4f 52 44 45 52 20 42 59 20 78 20 44 45 53  0 ORDER BY x DES
4fa0: 43 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  C;.  }.} {}.do_t
4fb0: 65 73 74 20 77 68 65 72 65 2d 39 2e 33 20 7b 0a  est where-9.3 {.
4fc0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4fd0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35  SELECT * FROM t5
4fe0: 20 57 48 45 52 45 20 78 3d 31 30 3b 0a 20 20 7d   WHERE x=10;.  }
4ff0: 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20 77  .} {}..do_test w
5000: 68 65 72 65 2d 31 30 2e 31 20 7b 0a 20 20 65 78  here-10.1 {.  ex
5010: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
5020: 43 54 20 31 20 57 48 45 52 45 20 61 62 73 28 72  CT 1 WHERE abs(r
5030: 61 6e 64 6f 6d 28 29 29 3c 30 0a 20 20 7d 0a 7d  andom())<0.  }.}
5040: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   {}.do_test wher
5050: 65 2d 31 30 2e 32 20 7b 0a 20 20 70 72 6f 63 20  e-10.2 {.  proc 
5060: 74 63 6c 76 61 72 5f 66 75 6e 63 20 7b 76 6e 61  tclvar_func {vna
5070: 6d 65 7d 20 7b 72 65 74 75 72 6e 20 5b 73 65 74  me} {return [set
5080: 20 3a 3a 24 76 6e 61 6d 65 5d 7d 0a 20 20 64 62   ::$vname]}.  db
5090: 20 66 75 6e 63 74 69 6f 6e 20 74 63 6c 76 61 72   function tclvar
50a0: 20 74 63 6c 76 61 72 5f 66 75 6e 63 0a 20 20 73   tclvar_func.  s
50b0: 65 74 20 3a 3a 76 31 20 30 0a 20 20 65 78 65 63  et ::v1 0.  exec
50c0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
50d0: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
50e0: 31 20 57 48 45 52 45 20 74 63 6c 76 61 72 28 27  1 WHERE tclvar('
50f0: 76 31 27 29 3b 0a 20 20 7d 0a 7d 20 7b 30 7d 0a  v1');.  }.} {0}.
5100: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 30  do_test where-10
5110: 2e 33 20 7b 0a 20 20 73 65 74 20 3a 3a 76 31 20  .3 {.  set ::v1 
5120: 31 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  1.  execsql {.  
5130: 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a    SELECT count(*
5140: 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  ) FROM t1 WHERE 
5150: 74 63 6c 76 61 72 28 27 76 31 27 29 3b 0a 20 20  tclvar('v1');.  
5160: 7d 0a 7d 20 7b 31 30 30 7d 0a 64 6f 5f 74 65 73  }.} {100}.do_tes
5170: 74 20 77 68 65 72 65 2d 31 30 2e 34 20 7b 0a 20  t where-10.4 {. 
5180: 20 73 65 74 20 3a 3a 76 31 20 31 0a 20 20 70 72   set ::v1 1.  pr
5190: 6f 63 20 74 63 6c 76 61 72 5f 66 75 6e 63 20 7b  oc tclvar_func {
51a0: 76 6e 61 6d 65 7d 20 7b 0a 20 20 20 20 75 70 76  vname} {.    upv
51b0: 61 72 20 23 30 20 24 76 6e 61 6d 65 20 76 0a 20  ar #0 $vname v. 
51c0: 20 20 20 73 65 74 20 76 20 5b 65 78 70 72 20 7b     set v [expr {
51d0: 21 24 76 7d 5d 0a 20 20 20 20 72 65 74 75 72 6e  !$v}].    return
51e0: 20 24 76 0a 20 20 7d 0a 20 20 65 78 65 63 73 71   $v.  }.  execsq
51f0: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 63  l {.    SELECT c
5200: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 31 20  ount(*) FROM t1 
5210: 57 48 45 52 45 20 74 63 6c 76 61 72 28 27 76 31  WHERE tclvar('v1
5220: 27 29 3b 0a 20 20 7d 0a 7d 20 7b 35 30 7d 0a 0a  ');.  }.} {50}..
5230: 23 20 54 69 63 6b 65 74 20 23 31 33 37 36 2e 20  # Ticket #1376. 
5240: 20 54 68 65 20 71 75 65 72 79 20 62 65 6c 6f 77   The query below
5250: 20 77 61 73 20 63 61 75 73 69 6e 67 20 61 20 73   was causing a s
5260: 65 67 66 61 75 6c 74 2e 0a 23 20 54 68 65 20 70  egfault..# The p
5270: 72 6f 62 6c 65 6d 20 77 61 73 20 74 68 65 20 61  roblem was the a
5280: 67 65 2d 6f 6c 64 20 65 72 72 6f 72 20 6f 66 20  ge-old error of 
5290: 63 61 6c 6c 69 6e 67 20 72 65 61 6c 6c 6f 63 28  calling realloc(
52a0: 29 20 6f 6e 20 61 6e 0a 23 20 61 72 72 61 79 20  ) on an.# array 
52b0: 77 68 69 6c 65 20 74 68 65 72 65 20 61 72 65 20  while there are 
52c0: 73 74 69 6c 6c 20 70 6f 69 6e 74 65 72 73 20 74  still pointers t
52d0: 6f 20 69 6e 64 69 76 69 64 75 61 6c 20 65 6c 65  o individual ele
52e0: 6d 65 6e 74 73 20 6f 66 0a 23 20 74 68 61 74 20  ments of.# that 
52f0: 61 72 72 61 79 2e 0a 23 0a 64 6f 5f 74 65 73 74  array..#.do_test
5300: 20 77 68 65 72 65 2d 31 31 2e 31 20 7b 0a 20 20   where-11.1 {.  
5310: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 43 52 45  execsql {.   CRE
5320: 41 54 45 20 54 41 42 4c 45 20 74 39 39 28 44 74  ATE TABLE t99(Dt
5330: 65 20 49 4e 54 2c 20 58 20 49 4e 54 29 3b 0a 20  e INT, X INT);. 
5340: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 39    DELETE FROM t9
5350: 39 20 57 48 45 52 45 20 28 44 74 65 20 3d 20 32  9 WHERE (Dte = 2
5360: 34 35 31 33 33 37 29 20 4f 52 20 28 44 74 65 20  451337) OR (Dte 
5370: 3d 20 32 34 35 31 33 33 39 29 20 4f 52 0a 20 20  = 2451339) OR.  
5380: 20 20 20 28 44 74 65 20 42 45 54 57 45 45 4e 20     (Dte BETWEEN 
5390: 32 34 35 31 33 34 35 20 41 4e 44 20 32 34 35 31  2451345 AND 2451
53a0: 33 34 37 29 20 4f 52 20 28 44 74 65 20 3d 20 32  347) OR (Dte = 2
53b0: 34 35 31 33 35 31 29 20 4f 52 20 0a 20 20 20 20  451351) OR .    
53c0: 20 28 44 74 65 20 42 45 54 57 45 45 4e 20 32 34   (Dte BETWEEN 24
53d0: 35 31 33 35 35 20 41 4e 44 20 32 34 35 31 33 35  51355 AND 245135
53e0: 36 29 20 4f 52 20 28 44 74 65 20 3d 20 32 34 35  6) OR (Dte = 245
53f0: 31 33 35 38 29 20 4f 52 0a 20 20 20 20 20 28 44  1358) OR.     (D
5400: 74 65 20 3d 20 32 34 35 31 33 36 32 29 20 4f 52  te = 2451362) OR
5410: 20 28 44 74 65 20 3d 20 32 34 35 31 33 36 35 29   (Dte = 2451365)
5420: 20 4f 52 20 28 44 74 65 20 3d 20 32 34 35 31 33   OR (Dte = 24513
5430: 36 37 29 20 4f 52 0a 20 20 20 20 20 28 44 74 65  67) OR.     (Dte
5440: 20 42 45 54 57 45 45 4e 20 32 34 35 31 33 37 32   BETWEEN 2451372
5450: 20 41 4e 44 20 32 34 35 31 33 37 36 29 20 4f 52   AND 2451376) OR
5460: 20 28 44 74 65 20 42 45 54 57 45 45 4e 20 32 34   (Dte BETWEEN 24
5470: 35 31 33 38 32 20 41 4e 44 20 32 34 35 31 33 38  51382 AND 245138
5480: 34 29 20 4f 52 0a 20 20 20 20 20 28 44 74 65 20  4) OR.     (Dte 
5490: 3d 20 32 34 35 31 33 38 37 29 20 4f 52 20 28 44  = 2451387) OR (D
54a0: 74 65 20 42 45 54 57 45 45 4e 20 32 34 35 31 33  te BETWEEN 24513
54b0: 38 39 20 41 4e 44 20 32 34 35 31 33 39 31 29 20  89 AND 2451391) 
54c0: 4f 52 20 0a 20 20 20 20 20 28 44 74 65 20 42 45  OR .     (Dte BE
54d0: 54 57 45 45 4e 20 32 34 35 31 33 39 33 20 41 4e  TWEEN 2451393 AN
54e0: 44 20 32 34 35 31 33 39 35 29 20 4f 52 20 28 44  D 2451395) OR (D
54f0: 74 65 20 3d 20 32 34 35 31 34 30 30 29 20 4f 52  te = 2451400) OR
5500: 20 0a 20 20 20 20 20 28 44 74 65 20 3d 20 32 34   .     (Dte = 24
5510: 35 31 34 30 32 29 20 4f 52 20 28 44 74 65 20 3d  51402) OR (Dte =
5520: 20 32 34 35 31 34 30 34 29 20 4f 52 20 28 44 74   2451404) OR (Dt
5530: 65 20 42 45 54 57 45 45 4e 20 32 34 35 31 34 31  e BETWEEN 245141
5540: 36 20 41 4e 44 20 32 34 35 31 34 31 38 29 20 4f  6 AND 2451418) O
5550: 52 20 0a 20 20 20 20 20 28 44 74 65 20 3d 20 32  R .     (Dte = 2
5560: 34 35 31 34 32 32 29 20 4f 52 20 28 44 74 65 20  451422) OR (Dte 
5570: 3d 20 32 34 35 31 34 32 36 29 20 4f 52 20 28 44  = 2451426) OR (D
5580: 74 65 20 42 45 54 57 45 45 4e 20 32 34 35 31 34  te BETWEEN 24514
5590: 34 35 20 41 4e 44 20 32 34 35 31 34 34 36 29 20  45 AND 2451446) 
55a0: 4f 52 0a 20 20 20 20 20 28 44 74 65 20 3d 20 32  OR.     (Dte = 2
55b0: 34 35 31 34 35 36 29 20 4f 52 20 28 44 74 65 20  451456) OR (Dte 
55c0: 3d 20 32 34 35 31 34 35 38 29 20 4f 52 20 28 44  = 2451458) OR (D
55d0: 74 65 20 42 45 54 57 45 45 4e 20 32 34 35 31 34  te BETWEEN 24514
55e0: 36 35 20 41 4e 44 20 32 34 35 31 34 36 37 29 20  65 AND 2451467) 
55f0: 4f 52 0a 20 20 20 20 20 28 44 74 65 20 42 45 54  OR.     (Dte BET
5600: 57 45 45 4e 20 32 34 35 31 34 36 39 20 41 4e 44  WEEN 2451469 AND
5610: 20 32 34 35 31 34 37 31 29 20 4f 52 20 28 44 74   2451471) OR (Dt
5620: 65 20 3d 20 32 34 35 31 34 37 34 29 20 4f 52 0a  e = 2451474) OR.
5630: 20 20 20 20 20 28 44 74 65 20 42 45 54 57 45 45       (Dte BETWEE
5640: 4e 20 32 34 35 31 34 37 37 20 41 4e 44 20 32 34  N 2451477 AND 24
5650: 35 31 35 30 31 29 20 4f 52 20 28 44 74 65 20 42  51501) OR (Dte B
5660: 45 54 57 45 45 4e 20 32 34 35 31 35 30 33 20 41  ETWEEN 2451503 A
5670: 4e 44 20 32 34 35 31 35 30 39 29 20 4f 52 0a 20  ND 2451509) OR. 
5680: 20 20 20 20 28 44 74 65 20 42 45 54 57 45 45 4e      (Dte BETWEEN
5690: 20 32 34 35 31 35 31 31 20 41 4e 44 20 32 34 35   2451511 AND 245
56a0: 31 35 31 34 29 20 4f 52 20 28 44 74 65 20 42 45  1514) OR (Dte BE
56b0: 54 57 45 45 4e 20 32 34 35 31 35 31 38 20 41 4e  TWEEN 2451518 AN
56c0: 44 20 32 34 35 31 35 32 31 29 20 4f 52 0a 20 20  D 2451521) OR.  
56d0: 20 20 20 28 44 74 65 20 42 45 54 57 45 45 4e 20     (Dte BETWEEN 
56e0: 32 34 35 31 35 32 33 20 41 4e 44 20 32 34 35 31  2451523 AND 2451
56f0: 35 33 31 29 20 4f 52 20 28 44 74 65 20 42 45 54  531) OR (Dte BET
5700: 57 45 45 4e 20 32 34 35 31 35 33 33 20 41 4e 44  WEEN 2451533 AND
5710: 20 32 34 35 31 35 33 37 29 20 4f 52 0a 20 20 20   2451537) OR.   
5720: 20 20 28 44 74 65 20 42 45 54 57 45 45 4e 20 32    (Dte BETWEEN 2
5730: 34 35 31 35 33 39 20 41 4e 44 20 32 34 35 31 35  451539 AND 24515
5740: 34 34 29 20 4f 52 20 28 44 74 65 20 42 45 54 57  44) OR (Dte BETW
5750: 45 45 4e 20 32 34 35 31 35 34 36 20 41 4e 44 20  EEN 2451546 AND 
5760: 32 34 35 31 35 35 31 29 20 4f 52 0a 20 20 20 20  2451551) OR.    
5770: 20 28 44 74 65 20 42 45 54 57 45 45 4e 20 32 34   (Dte BETWEEN 24
5780: 35 31 35 35 33 20 41 4e 44 20 32 34 35 31 35 35  51553 AND 245155
5790: 35 29 20 4f 52 20 28 44 74 65 20 3d 20 32 34 35  5) OR (Dte = 245
57a0: 31 35 35 37 29 20 4f 52 0a 20 20 20 20 20 28 44  1557) OR.     (D
57b0: 74 65 20 42 45 54 57 45 45 4e 20 32 34 35 31 35  te BETWEEN 24515
57c0: 35 39 20 41 4e 44 20 32 34 35 31 35 36 31 29 20  59 AND 2451561) 
57d0: 4f 52 20 28 44 74 65 20 3d 20 32 34 35 31 35 36  OR (Dte = 245156
57e0: 33 29 20 4f 52 0a 20 20 20 20 20 28 44 74 65 20  3) OR.     (Dte 
57f0: 42 45 54 57 45 45 4e 20 32 34 35 31 35 36 35 20  BETWEEN 2451565 
5800: 41 4e 44 20 32 34 35 31 35 36 36 29 20 4f 52 20  AND 2451566) OR 
5810: 28 44 74 65 20 42 45 54 57 45 45 4e 20 32 34 35  (Dte BETWEEN 245
5820: 31 35 36 39 20 41 4e 44 20 32 34 35 31 35 37 31  1569 AND 2451571
5830: 29 20 4f 52 20 0a 20 20 20 20 20 28 44 74 65 20  ) OR .     (Dte 
5840: 3d 20 32 34 35 31 35 37 33 29 20 4f 52 20 28 44  = 2451573) OR (D
5850: 74 65 20 3d 20 32 34 35 31 35 37 35 29 20 4f 52  te = 2451575) OR
5860: 20 28 44 74 65 20 3d 20 32 34 35 31 35 37 37 29   (Dte = 2451577)
5870: 20 4f 52 20 28 44 74 65 20 3d 20 32 34 35 31 35   OR (Dte = 24515
5880: 38 31 29 20 4f 52 0a 20 20 20 20 20 28 44 74 65  81) OR.     (Dte
5890: 20 42 45 54 57 45 45 4e 20 32 34 35 31 35 38 33   BETWEEN 2451583
58a0: 20 41 4e 44 20 32 34 35 31 35 38 36 29 20 4f 52   AND 2451586) OR
58b0: 20 28 44 74 65 20 42 45 54 57 45 45 4e 20 32 34   (Dte BETWEEN 24
58c0: 35 31 35 38 38 20 41 4e 44 20 32 34 35 31 35 39  51588 AND 245159
58d0: 32 29 20 4f 52 20 0a 20 20 20 20 20 28 44 74 65  2) OR .     (Dte
58e0: 20 42 45 54 57 45 45 4e 20 32 34 35 31 35 39 36   BETWEEN 2451596
58f0: 20 41 4e 44 20 32 34 35 31 35 39 38 29 20 4f 52   AND 2451598) OR
5900: 20 28 44 74 65 20 3d 20 32 34 35 31 36 30 30 29   (Dte = 2451600)
5910: 20 4f 52 0a 20 20 20 20 20 28 44 74 65 20 42 45   OR.     (Dte BE
5920: 54 57 45 45 4e 20 32 34 35 31 36 30 32 20 41 4e  TWEEN 2451602 AN
5930: 44 20 32 34 35 31 36 30 33 29 20 4f 52 20 28 44  D 2451603) OR (D
5940: 74 65 20 3d 20 32 34 35 31 36 30 36 29 20 4f 52  te = 2451606) OR
5950: 20 28 44 74 65 20 3d 20 32 34 35 31 36 31 31 29   (Dte = 2451611)
5960: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20 54 69  ;.  }.} {}..# Ti
5970: 63 6b 65 74 20 23 32 31 31 36 3a 20 20 4d 61 6b  cket #2116:  Mak
5980: 65 20 73 75 72 65 20 73 6f 72 74 69 6e 67 20 62  e sure sorting b
5990: 79 20 69 6e 64 65 78 20 77 6f 72 6b 73 20 77 65  y index works we
59a0: 6c 6c 20 77 69 74 68 20 6e 6e 20 49 4e 54 45 47  ll with nn INTEG
59b0: 45 52 20 50 52 49 4d 41 52 59 0a 23 20 4b 45 59  ER PRIMARY.# KEY
59c0: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  ..#.do_test wher
59d0: 65 2d 31 32 2e 31 20 7b 0a 20 20 65 78 65 63 73  e-12.1 {.  execs
59e0: 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20  ql {.    CREATE 
59f0: 54 41 42 4c 45 20 74 36 28 61 20 49 4e 54 45 47  TABLE t6(a INTEG
5a00: 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c 20  ER PRIMARY KEY, 
5a10: 62 20 54 45 58 54 29 3b 0a 20 20 20 20 49 4e 53  b TEXT);.    INS
5a20: 45 52 54 20 49 4e 54 4f 20 74 36 20 56 41 4c 55  ERT INTO t6 VALU
5a30: 45 53 28 31 2c 27 6f 6e 65 27 29 3b 0a 20 20 20  ES(1,'one');.   
5a40: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20   INSERT INTO t6 
5a50: 56 41 4c 55 45 53 28 34 2c 27 66 6f 75 72 27 29  VALUES(4,'four')
5a60: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44  ;.    CREATE IND
5a70: 45 58 20 74 36 69 31 20 4f 4e 20 74 36 28 62 29  EX t6i1 ON t6(b)
5a80: 3b 0a 20 20 7d 0a 20 20 63 6b 73 6f 72 74 20 7b  ;.  }.  cksort {
5a90: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
5aa0: 4f 4d 20 74 36 20 4f 52 44 45 52 20 42 59 20 62  OM t6 ORDER BY b
5ab0: 3b 0a 20 20 7d 0a 7d 20 7b 34 20 66 6f 75 72 20  ;.  }.} {4 four 
5ac0: 31 20 6f 6e 65 20 6e 6f 73 6f 72 74 7d 0a 64 6f  1 one nosort}.do
5ad0: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 32 2e 32  _test where-12.2
5ae0: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
5af0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
5b00: 74 36 20 4f 52 44 45 52 20 42 59 20 62 2c 20 61  t6 ORDER BY b, a
5b10: 3b 0a 20 20 7d 0a 7d 20 7b 34 20 66 6f 75 72 20  ;.  }.} {4 four 
5b20: 31 20 6f 6e 65 20 6e 6f 73 6f 72 74 7d 0a 64 6f  1 one nosort}.do
5b30: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 32 2e 33  _test where-12.3
5b40: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
5b50: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
5b60: 74 36 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20  t6 ORDER BY a;. 
5b70: 20 7d 0a 7d 20 7b 31 20 6f 6e 65 20 34 20 66 6f   }.} {1 one 4 fo
5b80: 75 72 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  ur nosort}.do_te
5b90: 73 74 20 77 68 65 72 65 2d 31 32 2e 34 20 7b 0a  st where-12.4 {.
5ba0: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
5bb0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 36 20  ELECT * FROM t6 
5bc0: 4f 52 44 45 52 20 42 59 20 61 2c 20 62 3b 0a 20  ORDER BY a, b;. 
5bd0: 20 7d 0a 7d 20 7b 31 20 6f 6e 65 20 34 20 66 6f   }.} {1 one 4 fo
5be0: 75 72 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  ur nosort}.do_te
5bf0: 73 74 20 77 68 65 72 65 2d 31 32 2e 35 20 7b 0a  st where-12.5 {.
5c00: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
5c10: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 36 20  ELECT * FROM t6 
5c20: 4f 52 44 45 52 20 42 59 20 62 20 44 45 53 43 3b  ORDER BY b DESC;
5c30: 0a 20 20 7d 0a 7d 20 7b 31 20 6f 6e 65 20 34 20  .  }.} {1 one 4 
5c40: 66 6f 75 72 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f  four nosort}.do_
5c50: 74 65 73 74 20 77 68 65 72 65 2d 31 32 2e 36 20  test where-12.6 
5c60: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
5c70: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
5c80: 36 20 4f 52 44 45 52 20 42 59 20 62 20 44 45 53  6 ORDER BY b DES
5c90: 43 2c 20 61 20 44 45 53 43 3b 0a 20 20 7d 0a 7d  C, a DESC;.  }.}
5ca0: 20 7b 31 20 6f 6e 65 20 34 20 66 6f 75 72 20 6e   {1 one 4 four n
5cb0: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
5cc0: 68 65 72 65 2d 31 32 2e 37 20 7b 0a 20 20 63 6b  here-12.7 {.  ck
5cd0: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
5ce0: 54 20 2a 20 46 52 4f 4d 20 74 36 20 4f 52 44 45  T * FROM t6 ORDE
5cf0: 52 20 42 59 20 62 20 44 45 53 43 2c 20 61 20 41  R BY b DESC, a A
5d00: 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 20 6f 6e 65  SC;.  }.} {1 one
5d10: 20 34 20 66 6f 75 72 20 73 6f 72 74 7d 0a 64 6f   4 four sort}.do
5d20: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 32 2e 38  _test where-12.8
5d30: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
5d40: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
5d50: 74 36 20 4f 52 44 45 52 20 42 59 20 62 20 41 53  t6 ORDER BY b AS
5d60: 43 2c 20 61 20 44 45 53 43 3b 0a 20 20 7d 0a 7d  C, a DESC;.  }.}
5d70: 20 7b 34 20 66 6f 75 72 20 31 20 6f 6e 65 20 73   {4 four 1 one s
5d80: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
5d90: 72 65 2d 31 32 2e 39 20 7b 0a 20 20 63 6b 73 6f  re-12.9 {.  ckso
5da0: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
5db0: 2a 20 46 52 4f 4d 20 74 36 20 4f 52 44 45 52 20  * FROM t6 ORDER 
5dc0: 42 59 20 61 20 44 45 53 43 3b 0a 20 20 7d 0a 7d  BY a DESC;.  }.}
5dd0: 20 7b 34 20 66 6f 75 72 20 31 20 6f 6e 65 20 6e   {4 four 1 one n
5de0: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
5df0: 68 65 72 65 2d 31 32 2e 31 30 20 7b 0a 20 20 63  here-12.10 {.  c
5e00: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
5e10: 43 54 20 2a 20 46 52 4f 4d 20 74 36 20 4f 52 44  CT * FROM t6 ORD
5e20: 45 52 20 42 59 20 61 20 44 45 53 43 2c 20 62 20  ER BY a DESC, b 
5e30: 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 34 20 66  DESC;.  }.} {4 f
5e40: 6f 75 72 20 31 20 6f 6e 65 20 6e 6f 73 6f 72 74  our 1 one nosort
5e50: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
5e60: 31 32 2e 31 31 20 7b 0a 20 20 63 6b 73 6f 72 74  12.11 {.  cksort
5e70: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
5e80: 46 52 4f 4d 20 74 36 20 4f 52 44 45 52 20 42 59  FROM t6 ORDER BY
5e90: 20 61 20 44 45 53 43 2c 20 62 20 41 53 43 3b 0a   a DESC, b ASC;.
5ea0: 20 20 7d 0a 7d 20 7b 34 20 66 6f 75 72 20 31 20    }.} {4 four 1 
5eb0: 6f 6e 65 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74  one nosort}.do_t
5ec0: 65 73 74 20 77 68 65 72 65 2d 31 32 2e 31 32 20  est where-12.12 
5ed0: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
5ee0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
5ef0: 36 20 4f 52 44 45 52 20 42 59 20 61 20 41 53 43  6 ORDER BY a ASC
5f00: 2c 20 62 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20  , b DESC;.  }.} 
5f10: 7b 31 20 6f 6e 65 20 34 20 66 6f 75 72 20 6e 6f  {1 one 4 four no
5f20: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
5f30: 65 72 65 2d 31 33 2e 31 20 7b 0a 20 20 65 78 65  ere-13.1 {.  exe
5f40: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
5f50: 45 20 54 41 42 4c 45 20 74 37 28 61 20 49 4e 54  E TABLE t7(a INT
5f60: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
5f70: 2c 20 62 20 54 45 58 54 29 3b 0a 20 20 20 20 49  , b TEXT);.    I
5f80: 4e 53 45 52 54 20 49 4e 54 4f 20 74 37 20 56 41  NSERT INTO t7 VA
5f90: 4c 55 45 53 28 31 2c 27 6f 6e 65 27 29 3b 0a 20  LUES(1,'one');. 
5fa0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
5fb0: 37 20 56 41 4c 55 45 53 28 34 2c 27 66 6f 75 72  7 VALUES(4,'four
5fc0: 27 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49  ');.    CREATE I
5fd0: 4e 44 45 58 20 74 37 69 31 20 4f 4e 20 74 37 28  NDEX t7i1 ON t7(
5fe0: 62 29 3b 0a 20 20 7d 0a 20 20 63 6b 73 6f 72 74  b);.  }.  cksort
5ff0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
6000: 46 52 4f 4d 20 74 37 20 4f 52 44 45 52 20 42 59  FROM t7 ORDER BY
6010: 20 62 3b 0a 20 20 7d 0a 7d 20 7b 34 20 66 6f 75   b;.  }.} {4 fou
6020: 72 20 31 20 6f 6e 65 20 6e 6f 73 6f 72 74 7d 0a  r 1 one nosort}.
6030: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 33  do_test where-13
6040: 2e 32 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .2 {.  cksort {.
6050: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
6060: 4d 20 74 37 20 4f 52 44 45 52 20 42 59 20 62 2c  M t7 ORDER BY b,
6070: 20 61 3b 0a 20 20 7d 0a 7d 20 7b 34 20 66 6f 75   a;.  }.} {4 fou
6080: 72 20 31 20 6f 6e 65 20 6e 6f 73 6f 72 74 7d 0a  r 1 one nosort}.
6090: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 33  do_test where-13
60a0: 2e 33 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .3 {.  cksort {.
60b0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
60c0: 4d 20 74 37 20 4f 52 44 45 52 20 42 59 20 61 3b  M t7 ORDER BY a;
60d0: 0a 20 20 7d 0a 7d 20 7b 31 20 6f 6e 65 20 34 20  .  }.} {1 one 4 
60e0: 66 6f 75 72 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f  four nosort}.do_
60f0: 74 65 73 74 20 77 68 65 72 65 2d 31 33 2e 34 20  test where-13.4 
6100: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
6110: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
6120: 37 20 4f 52 44 45 52 20 42 59 20 61 2c 20 62 3b  7 ORDER BY a, b;
6130: 0a 20 20 7d 0a 7d 20 7b 31 20 6f 6e 65 20 34 20  .  }.} {1 one 4 
6140: 66 6f 75 72 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f  four nosort}.do_
6150: 74 65 73 74 20 77 68 65 72 65 2d 31 33 2e 35 20  test where-13.5 
6160: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
6170: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
6180: 37 20 4f 52 44 45 52 20 42 59 20 62 20 44 45 53  7 ORDER BY b DES
6190: 43 3b 0a 20 20 7d 0a 7d 20 7b 31 20 6f 6e 65 20  C;.  }.} {1 one 
61a0: 34 20 66 6f 75 72 20 6e 6f 73 6f 72 74 7d 0a 64  4 four nosort}.d
61b0: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 33 2e  o_test where-13.
61c0: 36 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  6 {.  cksort {. 
61d0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
61e0: 20 74 37 20 4f 52 44 45 52 20 42 59 20 62 20 44   t7 ORDER BY b D
61f0: 45 53 43 2c 20 61 20 44 45 53 43 3b 0a 20 20 7d  ESC, a DESC;.  }
6200: 0a 7d 20 7b 31 20 6f 6e 65 20 34 20 66 6f 75 72  .} {1 one 4 four
6210: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
6220: 20 77 68 65 72 65 2d 31 33 2e 37 20 7b 0a 20 20   where-13.7 {.  
6230: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
6240: 45 43 54 20 2a 20 46 52 4f 4d 20 74 37 20 4f 52  ECT * FROM t7 OR
6250: 44 45 52 20 42 59 20 62 20 44 45 53 43 2c 20 61  DER BY b DESC, a
6260: 20 41 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 20 6f   ASC;.  }.} {1 o
6270: 6e 65 20 34 20 66 6f 75 72 20 73 6f 72 74 7d 0a  ne 4 four sort}.
6280: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 33  do_test where-13
6290: 2e 38 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .8 {.  cksort {.
62a0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
62b0: 4d 20 74 37 20 4f 52 44 45 52 20 42 59 20 62 20  M t7 ORDER BY b 
62c0: 41 53 43 2c 20 61 20 44 45 53 43 3b 0a 20 20 7d  ASC, a DESC;.  }
62d0: 0a 7d 20 7b 34 20 66 6f 75 72 20 31 20 6f 6e 65  .} {4 four 1 one
62e0: 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77   sort}.do_test w
62f0: 68 65 72 65 2d 31 33 2e 39 20 7b 0a 20 20 63 6b  here-13.9 {.  ck
6300: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
6310: 54 20 2a 20 46 52 4f 4d 20 74 37 20 4f 52 44 45  T * FROM t7 ORDE
6320: 52 20 42 59 20 61 20 44 45 53 43 3b 0a 20 20 7d  R BY a DESC;.  }
6330: 0a 7d 20 7b 34 20 66 6f 75 72 20 31 20 6f 6e 65  .} {4 four 1 one
6340: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
6350: 20 77 68 65 72 65 2d 31 33 2e 31 30 20 7b 0a 20   where-13.10 {. 
6360: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
6370: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 37 20 4f  LECT * FROM t7 O
6380: 52 44 45 52 20 42 59 20 61 20 44 45 53 43 2c 20  RDER BY a DESC, 
6390: 62 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 34  b DESC;.  }.} {4
63a0: 20 66 6f 75 72 20 31 20 6f 6e 65 20 6e 6f 73 6f   four 1 one noso
63b0: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
63c0: 65 2d 31 33 2e 31 31 20 7b 0a 20 20 63 6b 73 6f  e-13.11 {.  ckso
63d0: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
63e0: 2a 20 46 52 4f 4d 20 74 37 20 4f 52 44 45 52 20  * FROM t7 ORDER 
63f0: 42 59 20 61 20 44 45 53 43 2c 20 62 20 41 53 43  BY a DESC, b ASC
6400: 3b 0a 20 20 7d 0a 7d 20 7b 34 20 66 6f 75 72 20  ;.  }.} {4 four 
6410: 31 20 6f 6e 65 20 6e 6f 73 6f 72 74 7d 0a 64 6f  1 one nosort}.do
6420: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 33 2e 31  _test where-13.1
6430: 32 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  2 {.  cksort {. 
6440: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
6450: 20 74 37 20 4f 52 44 45 52 20 42 59 20 61 20 41   t7 ORDER BY a A
6460: 53 43 2c 20 62 20 44 45 53 43 3b 0a 20 20 7d 0a  SC, b DESC;.  }.
6470: 7d 20 7b 31 20 6f 6e 65 20 34 20 66 6f 75 72 20  } {1 one 4 four 
6480: 6e 6f 73 6f 72 74 7d 0a 0a 23 20 54 69 63 6b 65  nosort}..# Ticke
6490: 74 20 23 32 32 31 31 2e 0a 23 0a 23 20 57 68 65  t #2211..#.# Whe
64a0: 6e 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74  n optimizing out
64b0: 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
64c0: 73 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61  s, make sure tha
64d0: 74 20 74 72 61 69 6c 69 6e 67 20 74 65 72 6d 73  t trailing terms
64e0: 0a 23 20 6f 66 20 74 68 65 20 4f 52 44 45 52 20  .# of the ORDER 
64f0: 42 59 20 63 6c 61 75 73 65 20 64 6f 20 6e 6f 74  BY clause do not
6500: 20 72 65 66 65 72 65 6e 63 65 20 6f 74 68 65 72   reference other
6510: 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69   tables in a joi
6520: 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68 65  n..#.do_test whe
6530: 72 65 2d 31 34 2e 31 20 7b 0a 20 20 65 78 65 63  re-14.1 {.  exec
6540: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
6550: 20 54 41 42 4c 45 20 74 38 28 61 20 49 4e 54 45   TABLE t8(a INTE
6560: 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 2c  GER PRIMARY KEY,
6570: 20 62 20 54 45 58 54 20 55 4e 49 51 55 45 29 3b   b TEXT UNIQUE);
6580: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
6590: 20 74 38 20 56 41 4c 55 45 53 28 31 2c 27 6f 6e   t8 VALUES(1,'on
65a0: 65 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  e');.    INSERT 
65b0: 49 4e 54 4f 20 74 38 20 56 41 4c 55 45 53 28 34  INTO t8 VALUES(4
65c0: 2c 27 66 6f 75 72 27 29 3b 0a 20 20 7d 0a 20 20  ,'four');.  }.  
65d0: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
65e0: 45 43 54 20 78 2e 61 20 7c 7c 20 27 2f 27 20 7c  ECT x.a || '/' |
65f0: 7c 20 79 2e 61 20 46 52 4f 4d 20 74 38 20 78 2c  | y.a FROM t8 x,
6600: 20 74 38 20 79 20 4f 52 44 45 52 20 42 59 20 78   t8 y ORDER BY x
6610: 2e 61 2c 20 79 2e 62 0a 20 20 7d 20 0a 7d 20 7b  .a, y.b.  } .} {
6620: 31 2f 34 20 31 2f 31 20 34 2f 34 20 34 2f 31 20  1/4 1/1 4/4 4/1 
6630: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
6640: 65 72 65 2d 31 34 2e 32 20 7b 0a 20 20 63 6b 73  ere-14.2 {.  cks
6650: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
6660: 20 78 2e 61 20 7c 7c 20 27 2f 27 20 7c 7c 20 79   x.a || '/' || y
6670: 2e 61 20 46 52 4f 4d 20 74 38 20 78 2c 20 74 38  .a FROM t8 x, t8
6680: 20 79 20 4f 52 44 45 52 20 42 59 20 78 2e 61 2c   y ORDER BY x.a,
6690: 20 79 2e 62 20 44 45 53 43 0a 20 20 7d 20 0a 7d   y.b DESC.  } .}
66a0: 20 7b 31 2f 31 20 31 2f 34 20 34 2f 31 20 34 2f   {1/1 1/4 4/1 4/
66b0: 34 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  4 sort}.do_test 
66c0: 77 68 65 72 65 2d 31 34 2e 33 20 7b 0a 20 20 63  where-14.3 {.  c
66d0: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
66e0: 43 54 20 78 2e 61 20 7c 7c 20 27 2f 27 20 7c 7c  CT x.a || '/' ||
66f0: 20 79 2e 61 20 46 52 4f 4d 20 74 38 20 78 2c 20   y.a FROM t8 x, 
6700: 74 38 20 79 20 4f 52 44 45 52 20 42 59 20 78 2e  t8 y ORDER BY x.
6710: 61 2c 20 78 2e 62 0a 20 20 7d 20 0a 7d 20 7b 31  a, x.b.  } .} {1
6720: 2f 31 20 31 2f 34 20 34 2f 31 20 34 2f 34 20 6e  /1 1/4 4/1 4/4 n
6730: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
6740: 68 65 72 65 2d 31 34 2e 34 20 7b 0a 20 20 63 6b  here-14.4 {.  ck
6750: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
6760: 54 20 78 2e 61 20 7c 7c 20 27 2f 27 20 7c 7c 20  T x.a || '/' || 
6770: 79 2e 61 20 46 52 4f 4d 20 74 38 20 78 2c 20 74  y.a FROM t8 x, t
6780: 38 20 79 20 4f 52 44 45 52 20 42 59 20 78 2e 61  8 y ORDER BY x.a
6790: 2c 20 78 2e 62 20 44 45 53 43 0a 20 20 7d 20 0a  , x.b DESC.  } .
67a0: 7d 20 7b 31 2f 31 20 31 2f 34 20 34 2f 31 20 34  } {1/1 1/4 4/1 4
67b0: 2f 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  /4 nosort}.do_te
67c0: 73 74 20 77 68 65 72 65 2d 31 34 2e 35 20 7b 0a  st where-14.5 {.
67d0: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
67e0: 45 4c 45 43 54 20 78 2e 61 20 7c 7c 20 27 2f 27  ELECT x.a || '/'
67f0: 20 7c 7c 20 79 2e 61 20 46 52 4f 4d 20 74 38 20   || y.a FROM t8 
6800: 78 2c 20 74 38 20 79 20 4f 52 44 45 52 20 42 59  x, t8 y ORDER BY
6810: 20 78 2e 62 2c 20 78 2e 61 7c 7c 78 2e 62 0a 20   x.b, x.a||x.b. 
6820: 20 7d 20 0a 7d 20 7b 34 2f 31 20 34 2f 34 20 31   } .} {4/1 4/4 1
6830: 2f 31 20 31 2f 34 20 6e 6f 73 6f 72 74 7d 0a 64  /1 1/4 nosort}.d
6840: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 34 2e  o_test where-14.
6850: 36 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  6 {.  cksort {. 
6860: 20 20 20 53 45 4c 45 43 54 20 78 2e 61 20 7c 7c     SELECT x.a ||
6870: 20 27 2f 27 20 7c 7c 20 79 2e 61 20 46 52 4f 4d   '/' || y.a FROM
6880: 20 74 38 20 78 2c 20 74 38 20 79 20 4f 52 44 45   t8 x, t8 y ORDE
6890: 52 20 42 59 20 78 2e 62 2c 20 78 2e 61 7c 7c 78  R BY x.b, x.a||x
68a0: 2e 62 20 44 45 53 43 0a 20 20 7d 20 0a 7d 20 7b  .b DESC.  } .} {
68b0: 34 2f 31 20 34 2f 34 20 31 2f 31 20 31 2f 34 20  4/1 4/4 1/1 1/4 
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 34 2e 37 20 7b 0a 20 20 63  where-14.7 {.  c
68e0: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
68f0: 43 54 20 78 2e 61 20 7c 7c 20 27 2f 27 20 7c 7c  CT x.a || '/' ||
6900: 20 79 2e 61 20 46 52 4f 4d 20 74 38 20 78 2c 20   y.a FROM t8 x, 
6910: 74 38 20 79 20 4f 52 44 45 52 20 42 59 20 78 2e  t8 y ORDER BY x.
6920: 62 2c 20 79 2e 61 7c 7c 79 2e 62 0a 20 20 7d 20  b, y.a||y.b.  } 
6930: 0a 7d 20 7b 34 2f 31 20 34 2f 34 20 31 2f 31 20  .} {4/1 4/4 1/1 
6940: 31 2f 34 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  1/4 sort}.do_tes
6950: 74 20 77 68 65 72 65 2d 31 34 2e 37 2e 31 20 7b  t where-14.7.1 {
6960: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
6970: 53 45 4c 45 43 54 20 78 2e 61 20 7c 7c 20 27 2f  SELECT x.a || '/
6980: 27 20 7c 7c 20 79 2e 61 20 46 52 4f 4d 20 74 38  ' || y.a FROM t8
6990: 20 78 2c 20 74 38 20 79 20 4f 52 44 45 52 20 42   x, t8 y ORDER B
69a0: 59 20 78 2e 62 2c 20 78 2e 61 2c 20 79 2e 61 7c  Y x.b, x.a, y.a|
69b0: 7c 79 2e 62 0a 20 20 7d 20 0a 7d 20 7b 34 2f 31  |y.b.  } .} {4/1
69c0: 20 34 2f 34 20 31 2f 31 20 31 2f 34 20 73 6f 72   4/4 1/1 1/4 sor
69d0: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
69e0: 2d 31 34 2e 37 2e 32 20 7b 0a 20 20 63 6b 73 6f  -14.7.2 {.  ckso
69f0: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
6a00: 78 2e 61 20 7c 7c 20 27 2f 27 20 7c 7c 20 79 2e  x.a || '/' || y.
6a10: 61 20 46 52 4f 4d 20 74 38 20 78 2c 20 74 38 20  a FROM t8 x, t8 
6a20: 79 20 4f 52 44 45 52 20 42 59 20 78 2e 62 2c 20  y ORDER BY x.b, 
6a30: 78 2e 61 2c 20 78 2e 61 7c 7c 78 2e 62 0a 20 20  x.a, x.a||x.b.  
6a40: 7d 20 0a 7d 20 7b 34 2f 31 20 34 2f 34 20 31 2f  } .} {4/1 4/4 1/
6a50: 31 20 31 2f 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f  1 1/4 nosort}.do
6a60: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 34 2e 38  _test where-14.8
6a70: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
6a80: 20 20 53 45 4c 45 43 54 20 78 2e 61 20 7c 7c 20    SELECT x.a || 
6a90: 27 2f 27 20 7c 7c 20 79 2e 61 20 46 52 4f 4d 20  '/' || y.a FROM 
6aa0: 74 38 20 78 2c 20 74 38 20 79 20 4f 52 44 45 52  t8 x, t8 y ORDER
6ab0: 20 42 59 20 78 2e 62 2c 20 79 2e 61 7c 7c 79 2e   BY x.b, y.a||y.
6ac0: 62 20 44 45 53 43 0a 20 20 7d 20 0a 7d 20 7b 34  b DESC.  } .} {4
6ad0: 2f 34 20 34 2f 31 20 31 2f 34 20 31 2f 31 20 73  /4 4/1 1/4 1/1 s
6ae0: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
6af0: 72 65 2d 31 34 2e 39 20 7b 0a 20 20 63 6b 73 6f  re-14.9 {.  ckso
6b00: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
6b10: 78 2e 61 20 7c 7c 20 27 2f 27 20 7c 7c 20 79 2e  x.a || '/' || y.
6b20: 61 20 46 52 4f 4d 20 74 38 20 78 2c 20 74 38 20  a FROM t8 x, t8 
6b30: 79 20 4f 52 44 45 52 20 42 59 20 78 2e 62 2c 20  y ORDER BY x.b, 
6b40: 78 2e 61 7c 7c 79 2e 62 0a 20 20 7d 20 0a 7d 20  x.a||y.b.  } .} 
6b50: 7b 34 2f 34 20 34 2f 31 20 31 2f 34 20 31 2f 31  {4/4 4/1 1/4 1/1
6b60: 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77   sort}.do_test w
6b70: 68 65 72 65 2d 31 34 2e 31 30 20 7b 0a 20 20 63  here-14.10 {.  c
6b80: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
6b90: 43 54 20 78 2e 61 20 7c 7c 20 27 2f 27 20 7c 7c  CT x.a || '/' ||
6ba0: 20 79 2e 61 20 46 52 4f 4d 20 74 38 20 78 2c 20   y.a FROM t8 x, 
6bb0: 74 38 20 79 20 4f 52 44 45 52 20 42 59 20 78 2e  t8 y ORDER BY x.
6bc0: 62 2c 20 78 2e 61 7c 7c 79 2e 62 20 44 45 53 43  b, x.a||y.b DESC
6bd0: 0a 20 20 7d 20 0a 7d 20 7b 34 2f 31 20 34 2f 34  .  } .} {4/1 4/4
6be0: 20 31 2f 31 20 31 2f 34 20 73 6f 72 74 7d 0a 64   1/1 1/4 sort}.d
6bf0: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 34 2e  o_test where-14.
6c00: 31 31 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  11 {.  cksort {.
6c10: 20 20 20 20 53 45 4c 45 43 54 20 78 2e 61 20 7c      SELECT x.a |
6c20: 7c 20 27 2f 27 20 7c 7c 20 79 2e 61 20 46 52 4f  | '/' || y.a FRO
6c30: 4d 20 74 38 20 78 2c 20 74 38 20 79 20 4f 52 44  M t8 x, t8 y ORD
6c40: 45 52 20 42 59 20 78 2e 62 2c 20 79 2e 61 7c 7c  ER BY x.b, y.a||
6c50: 78 2e 62 0a 20 20 7d 20 0a 7d 20 7b 34 2f 31 20  x.b.  } .} {4/1 
6c60: 34 2f 34 20 31 2f 31 20 31 2f 34 20 73 6f 72 74  4/4 1/1 1/4 sort
6c70: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
6c80: 31 34 2e 31 32 20 7b 0a 20 20 63 6b 73 6f 72 74  14.12 {.  cksort
6c90: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78 2e   {.    SELECT x.
6ca0: 61 20 7c 7c 20 27 2f 27 20 7c 7c 20 79 2e 61 20  a || '/' || y.a 
6cb0: 46 52 4f 4d 20 74 38 20 78 2c 20 74 38 20 79 20  FROM t8 x, t8 y 
6cc0: 4f 52 44 45 52 20 42 59 20 78 2e 62 2c 20 79 2e  ORDER BY x.b, y.
6cd0: 61 7c 7c 78 2e 62 20 44 45 53 43 0a 20 20 7d 20  a||x.b DESC.  } 
6ce0: 0a 7d 20 7b 34 2f 34 20 34 2f 31 20 31 2f 34 20  .} {4/4 4/1 1/4 
6cf0: 31 2f 31 20 73 6f 72 74 7d 0a 0a 23 20 54 69 63  1/1 sort}..# Tic
6d00: 6b 65 74 20 23 32 34 34 35 2e 0a 23 0a 23 20 54  ket #2445..#.# T
6d10: 68 65 72 65 20 77 61 73 20 61 20 63 72 61 73 68  here was a crash
6d20: 20 74 68 61 74 20 63 6f 75 6c 64 20 6f 63 63 75   that could occu
6d30: 72 20 77 68 65 6e 20 61 20 77 68 65 72 65 20 63  r when a where c
6d40: 6c 61 75 73 65 20 63 6f 6e 74 61 69 6e 73 20 61  lause contains a
6d50: 6e 0a 23 20 61 6c 69 61 73 20 66 6f 72 20 61 6e  n.# alias for an
6d60: 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
6d70: 68 65 20 72 65 73 75 6c 74 20 73 65 74 2c 20 61  he result set, a
6d80: 6e 64 20 74 68 61 74 20 65 78 70 72 65 73 73 69  nd that expressi
6d90: 6f 6e 20 72 65 74 72 69 65 76 65 73 0a 23 20 61  on retrieves.# a
6da0: 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 73   column of the s
6db0: 65 63 6f 6e 64 20 6f 72 20 73 75 62 73 65 71 75  econd or subsequ
6dc0: 65 6e 74 20 74 61 62 6c 65 20 69 6e 20 61 20 6a  ent table in a j
6dd0: 6f 69 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77  oin..#.do_test w
6de0: 68 65 72 65 2d 31 35 2e 31 20 7b 0a 20 20 65 78  here-15.1 {.  ex
6df0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
6e00: 54 45 20 54 45 4d 50 20 54 41 42 4c 45 20 74 31  TE TEMP TABLE t1
6e10: 20 28 61 2c 20 62 2c 20 63 2c 20 64 2c 20 65 29   (a, b, c, d, e)
6e20: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 45 4d  ;.    CREATE TEM
6e30: 50 20 54 41 42 4c 45 20 74 32 20 28 66 29 3b 0a  P TABLE t2 (f);.
6e40: 20 20 20 20 53 45 4c 45 43 54 20 74 31 2e 65 20      SELECT t1.e 
6e50: 41 53 20 61 6c 69 61 73 20 46 52 4f 4d 20 74 32  AS alias FROM t2
6e60: 2c 20 74 31 20 57 48 45 52 45 20 61 6c 69 61 73  , t1 WHERE alias
6e70: 20 3d 20 31 20 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a   = 1 ;.  }.} {}.
6e80: 0a 23 20 54 69 63 6b 65 74 20 23 33 34 30 38 2e  .# Ticket #3408.
6e90: 0a 23 20 0a 23 20 54 68 65 20 62 72 61 6e 63 68  .# .# The branch
6ea0: 20 6f 66 20 63 6f 64 65 20 69 6e 20 77 68 65 72   of code in wher
6eb0: 65 2e 63 20 74 68 61 74 20 67 65 6e 65 72 61 74  e.c that generat
6ec0: 65 64 20 72 6f 77 69 64 20 6c 6f 6f 6b 75 70 73  ed rowid lookups
6ed0: 20 77 61 73 0a 23 20 69 6e 63 6f 72 72 65 63 74   was.# incorrect
6ee0: 6c 79 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20  ly deallocating 
6ef0: 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 67 69 73  a constant regis
6f00: 74 65 72 2c 20 6d 65 61 6e 69 6e 67 20 74 68 61  ter, meaning tha
6f10: 74 20 69 66 20 74 68 65 20 0a 23 20 76 64 62 65  t if the .# vdbe
6f20: 20 63 6f 64 65 20 72 61 6e 20 6d 6f 72 65 20 74   code ran more t
6f30: 68 61 6e 20 6f 6e 63 65 2c 20 74 68 65 20 73 65  han once, the se
6f40: 63 6f 6e 64 20 74 69 6d 65 20 61 72 6f 75 6e 64  cond time around
6f50: 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 0a 23 20   the constant.# 
6f60: 76 61 6c 75 65 20 6d 61 79 20 68 61 76 65 20 62  value may have b
6f70: 65 65 6e 20 63 6c 6f 62 62 65 72 65 64 20 62 79  een clobbered by
6f80: 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75   some other valu
6f90: 65 2e 0a 23 20 0a 64 6f 5f 74 65 73 74 20 77 68  e..# .do_test wh
6fa0: 65 72 65 2d 31 36 2e 31 20 7b 0a 20 20 65 78 65  ere-16.1 {.  exe
6fb0: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
6fc0: 45 20 54 41 42 4c 45 20 61 31 28 69 64 20 49 4e  E TABLE a1(id IN
6fd0: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
6fe0: 59 2c 20 76 29 3b 0a 20 20 20 20 43 52 45 41 54  Y, v);.    CREAT
6ff0: 45 20 54 41 42 4c 45 20 61 32 28 69 64 20 49 4e  E TABLE a2(id IN
7000: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
7010: 59 2c 20 76 29 3b 0a 20 20 20 20 49 4e 53 45 52  Y, v);.    INSER
7020: 54 20 49 4e 54 4f 20 61 31 20 56 41 4c 55 45 53  T INTO a1 VALUES
7030: 28 31 2c 20 27 6f 6e 65 27 29 3b 0a 20 20 20 20  (1, 'one');.    
7040: 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 31 20 56  INSERT INTO a1 V
7050: 41 4c 55 45 53 28 32 2c 20 27 74 77 6f 27 29 3b  ALUES(2, 'two');
7060: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
7070: 20 61 32 20 56 41 4c 55 45 53 28 31 2c 20 27 6f   a2 VALUES(1, 'o
7080: 6e 65 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  ne');.    INSERT
7090: 20 49 4e 54 4f 20 61 32 20 56 41 4c 55 45 53 28   INTO a2 VALUES(
70a0: 32 2c 20 27 74 77 6f 27 29 3b 0a 20 20 7d 0a 7d  2, 'two');.  }.}
70b0: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   {}.do_test wher
70c0: 65 2d 31 36 2e 32 20 7b 0a 20 20 65 78 65 63 73  e-16.2 {.  execs
70d0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
70e0: 2a 20 46 52 4f 4d 20 61 32 20 43 52 4f 53 53 20  * FROM a2 CROSS 
70f0: 4a 4f 49 4e 20 61 31 20 57 48 45 52 45 20 61 31  JOIN a1 WHERE a1
7100: 2e 69 64 3d 31 20 41 4e 44 20 61 31 2e 76 3d 27  .id=1 AND a1.v='
7110: 6f 6e 65 27 3b 0a 20 20 7d 0a 7d 20 7b 31 20 6f  one';.  }.} {1 o
7120: 6e 65 20 31 20 6f 6e 65 20 32 20 74 77 6f 20 31  ne 1 one 2 two 1
7130: 20 6f 6e 65 7d 0a 0a 23 20 54 68 65 20 61 63 74   one}..# The act
7140: 75 61 6c 20 70 72 6f 62 6c 65 6d 20 72 65 70 6f  ual problem repo
7150: 72 74 65 64 20 69 6e 20 23 33 34 30 38 2e 0a 64  rted in #3408..d
7160: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 36 2e  o_test where-16.
7170: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
7180: 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50 20      CREATE TEMP 
7190: 54 41 42 4c 45 20 66 6f 6f 28 69 64 78 20 49 4e  TABLE foo(idx IN
71a0: 54 45 47 45 52 29 3b 0a 20 20 20 20 49 4e 53 45  TEGER);.    INSE
71b0: 52 54 20 49 4e 54 4f 20 66 6f 6f 20 56 41 4c 55  RT INTO foo VALU
71c0: 45 53 28 31 29 3b 0a 20 20 20 20 49 4e 53 45 52  ES(1);.    INSER
71d0: 54 20 49 4e 54 4f 20 66 6f 6f 20 56 41 4c 55 45  T INTO foo VALUE
71e0: 53 28 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  S(1);.    INSERT
71f0: 20 49 4e 54 4f 20 66 6f 6f 20 56 41 4c 55 45 53   INTO foo VALUES
7200: 28 31 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  (1);.    INSERT 
7210: 49 4e 54 4f 20 66 6f 6f 20 56 41 4c 55 45 53 28  INTO foo VALUES(
7220: 32 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  2);.    INSERT I
7230: 4e 54 4f 20 66 6f 6f 20 56 41 4c 55 45 53 28 32  NTO foo VALUES(2
7240: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 45  );.    CREATE TE
7250: 4d 50 20 54 41 42 4c 45 20 62 61 72 28 73 74 75  MP TABLE bar(stu
7260: 66 66 20 49 4e 54 45 47 45 52 29 3b 0a 20 20 20  ff INTEGER);.   
7270: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 62 61 72   INSERT INTO bar
7280: 20 56 41 4c 55 45 53 28 31 30 30 29 3b 0a 20 20   VALUES(100);.  
7290: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 62 61    INSERT INTO ba
72a0: 72 20 56 41 4c 55 45 53 28 32 30 30 29 3b 0a 20  r VALUES(200);. 
72b0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 62     INSERT INTO b
72c0: 61 72 20 56 41 4c 55 45 53 28 33 30 30 29 3b 0a  ar VALUES(300);.
72d0: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
72e0: 20 77 68 65 72 65 2d 31 36 2e 34 20 7b 0a 20 20   where-16.4 {.  
72f0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
7300: 4c 45 43 54 20 62 61 72 2e 52 6f 77 49 44 20 69  LECT bar.RowID i
7310: 64 20 46 52 4f 4d 20 66 6f 6f 2c 20 62 61 72 20  d FROM foo, bar 
7320: 57 48 45 52 45 20 66 6f 6f 2e 69 64 78 20 3d 20  WHERE foo.idx = 
7330: 62 61 72 2e 52 6f 77 49 44 20 41 4e 44 20 69 64  bar.RowID AND id
7340: 20 3d 20 32 3b 0a 20 20 7d 0a 7d 20 7b 32 20 32   = 2;.  }.} {2 2
7350: 7d 0a 0a 69 6e 74 65 67 72 69 74 79 5f 63 68 65  }..integrity_che
7360: 63 6b 20 7b 77 68 65 72 65 2d 39 39 2e 30 7d 0a  ck {where-99.0}.
7370: 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a           .finish_test.