/ Hex Artifact Content
Login

Artifact 59cf231e6edaf0f20b106a26d4294847e7c6eb25:


0000: 23 20 32 30 30 31 20 53 65 70 74 65 6d 62 65 72  # 2001 September
0010: 20 31 35 0a 23 0a 23 20 54 68 65 20 61 75 74 68   15.#.# The auth
0020: 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70  or disclaims cop
0030: 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73  yright to this s
0040: 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20  ource code.  In 
0050: 70 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67  place of.# a leg
0060: 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20  al notice, here 
0070: 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23  is a blessing:.#
0080: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f  .#    May you do
0090: 20 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76   good and not ev
00a0: 69 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75  il..#    May you
00b0: 20 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73   find forgivenes
00c0: 73 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61  s for yourself a
00d0: 6e 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72  nd forgive other
00e0: 73 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  s..#    May you 
00f0: 73 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65  share freely, ne
0100: 76 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20  ver taking more 
0110: 74 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23  than you give..#
0120: 0a 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .#**************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73  *********.# This
0170: 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73   file implements
0180: 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
0190: 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62  s for SQLite lib
01a0: 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f 63  rary.  The.# foc
01b0: 75 73 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20  us of this file 
01c0: 69 73 20 74 65 73 74 69 6e 67 20 74 68 65 20 75  is testing the u
01d0: 73 65 20 6f 66 20 69 6e 64 69 63 65 73 20 69 6e  se of indices in
01e0: 20 57 48 45 52 45 20 63 6c 61 73 65 73 2e 0a 23   WHERE clases..#
01f0: 0a 23 20 24 49 64 3a 20 77 68 65 72 65 2e 74 65  .# $Id: where.te
0200: 73 74 2c 76 20 31 2e 35 30 20 32 30 30 38 2f 31  st,v 1.50 2008/1
0210: 31 2f 30 33 20 30 39 3a 30 36 3a 30 36 20 64 61  1/03 09:06:06 da
0220: 6e 69 65 6c 6b 31 39 37 37 20 45 78 70 20 24 0a  nielk1977 Exp $.
0230: 0a 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69  .set testdir [fi
0240: 6c 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76  le dirname $argv
0250: 30 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64  0].source $testd
0260: 69 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23  ir/tester.tcl..#
0270: 20 42 75 69 6c 64 20 73 6f 6d 65 20 74 65 73 74   Build some test
0280: 20 64 61 74 61 0a 23 0a 64 6f 5f 74 65 73 74 20   data.#.do_test 
0290: 77 68 65 72 65 2d 31 2e 30 20 7b 0a 20 20 65 78  where-1.0 {.  ex
02a0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
02b0: 54 45 20 54 41 42 4c 45 20 74 31 28 77 20 69 6e  TE TABLE t1(w in
02c0: 74 2c 20 78 20 69 6e 74 2c 20 79 20 69 6e 74 29  t, x int, y int)
02d0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ;.    CREATE TAB
02e0: 4c 45 20 74 32 28 70 20 69 6e 74 2c 20 71 20 69  LE t2(p int, q i
02f0: 6e 74 2c 20 72 20 69 6e 74 2c 20 73 20 69 6e 74  nt, r int, s int
0300: 29 3b 0a 20 20 7d 0a 20 20 66 6f 72 20 7b 73 65  );.  }.  for {se
0310: 74 20 69 20 31 7d 20 7b 24 69 3c 3d 31 30 30 7d  t i 1} {$i<=100}
0320: 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20   {incr i} {.    
0330: 73 65 74 20 77 20 24 69 0a 20 20 20 20 73 65 74  set w $i.    set
0340: 20 78 20 5b 65 78 70 72 20 7b 69 6e 74 28 6c 6f   x [expr {int(lo
0350: 67 28 24 69 29 2f 6c 6f 67 28 32 29 29 7d 5d 0a  g($i)/log(2))}].
0360: 20 20 20 20 73 65 74 20 79 20 5b 65 78 70 72 20      set y [expr 
0370: 7b 24 69 2a 24 69 20 2b 20 32 2a 24 69 20 2b 20  {$i*$i + 2*$i + 
0380: 31 7d 5d 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1}].    execsql 
0390: 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20  "INSERT INTO t1 
03a0: 56 41 4c 55 45 53 28 24 77 2c 24 78 2c 24 79 29  VALUES($w,$x,$y)
03b0: 22 0a 20 20 7d 0a 0a 20 20 69 66 63 61 70 61 62  ".  }..  ifcapab
03c0: 6c 65 20 73 75 62 71 75 65 72 79 20 7b 0a 20 20  le subquery {.  
03d0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
03e0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
03f0: 20 53 45 4c 45 43 54 20 31 30 31 2d 77 2c 20 78   SELECT 101-w, x
0400: 2c 20 28 53 45 4c 45 43 54 20 6d 61 78 28 79 29  , (SELECT max(y)
0410: 20 46 52 4f 4d 20 74 31 29 2b 31 2d 79 2c 20 79   FROM t1)+1-y, y
0420: 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20 7d 0a   FROM t1;.    }.
0430: 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 73    } else {.    s
0440: 65 74 20 6d 61 78 79 20 5b 65 78 65 63 73 71 6c  et maxy [execsql
0450: 20 7b 73 65 6c 65 63 74 20 6d 61 78 28 79 29 20   {select max(y) 
0460: 66 72 6f 6d 20 74 31 7d 5d 0a 20 20 20 20 65 78  from t1}].    ex
0470: 65 63 73 71 6c 20 22 0a 20 20 20 20 20 20 49 4e  ecsql ".      IN
0480: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c  SERT INTO t2 SEL
0490: 45 43 54 20 31 30 31 2d 77 2c 20 78 2c 20 24 6d  ECT 101-w, x, $m
04a0: 61 78 79 2b 31 2d 79 2c 20 79 20 46 52 4f 4d 20  axy+1-y, y FROM 
04b0: 74 31 3b 0a 20 20 20 20 22 0a 20 20 7d 0a 0a 20  t1;.    ".  }.. 
04c0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
04d0: 52 45 41 54 45 20 49 4e 44 45 58 20 69 31 77 20  REATE INDEX i1w 
04e0: 4f 4e 20 74 31 28 77 29 3b 0a 20 20 20 20 43 52  ON t1(w);.    CR
04f0: 45 41 54 45 20 49 4e 44 45 58 20 69 31 78 79 20  EATE INDEX i1xy 
0500: 4f 4e 20 74 31 28 78 2c 79 29 3b 0a 20 20 20 20  ON t1(x,y);.    
0510: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 70  CREATE INDEX i2p
0520: 20 4f 4e 20 74 32 28 70 29 3b 0a 20 20 20 20 43   ON t2(p);.    C
0530: 52 45 41 54 45 20 49 4e 44 45 58 20 69 32 72 20  REATE INDEX i2r 
0540: 4f 4e 20 74 32 28 72 29 3b 0a 20 20 20 20 43 52  ON t2(r);.    CR
0550: 45 41 54 45 20 49 4e 44 45 58 20 69 32 71 73 20  EATE INDEX i2qs 
0560: 4f 4e 20 74 32 28 71 2c 20 73 29 3b 0a 20 20 7d  ON t2(q, s);.  }
0570: 0a 7d 20 7b 7d 0a 0a 23 20 44 6f 20 61 6e 20 53  .} {}..# Do an S
0580: 51 4c 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 41  QL statement.  A
0590: 70 70 65 6e 64 20 74 68 65 20 73 65 61 72 63 68  ppend the search
05a0: 20 63 6f 75 6e 74 20 74 6f 20 74 68 65 20 65 6e   count to the en
05b0: 64 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 2e  d of the result.
05c0: 0a 23 0a 70 72 6f 63 20 63 6f 75 6e 74 20 73 71  .#.proc count sq
05d0: 6c 20 7b 0a 20 20 73 65 74 20 3a 3a 73 71 6c 69  l {.  set ::sqli
05e0: 74 65 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 20  te_search_count 
05f0: 30 0a 20 20 72 65 74 75 72 6e 20 5b 63 6f 6e 63  0.  return [conc
0600: 61 74 20 5b 65 78 65 63 73 71 6c 20 24 73 71 6c  at [execsql $sql
0610: 5d 20 24 3a 3a 73 71 6c 69 74 65 5f 73 65 61 72  ] $::sqlite_sear
0620: 63 68 5f 63 6f 75 6e 74 5d 0a 7d 0a 0a 23 20 56  ch_count].}..# V
0630: 65 72 69 66 79 20 74 68 61 74 20 71 75 65 72 69  erify that queri
0640: 65 73 20 75 73 65 20 61 6e 20 69 6e 64 65 78 2e  es use an index.
0650: 20 20 57 65 20 61 72 65 20 75 73 69 6e 67 20 74    We are using t
0660: 68 65 20 73 70 65 63 69 61 6c 20 76 61 72 69 61  he special varia
0670: 62 6c 65 0a 23 20 22 73 71 6c 69 74 65 5f 73 65  ble.# "sqlite_se
0680: 61 72 63 68 5f 63 6f 75 6e 74 22 20 77 68 69 63  arch_count" whic
0690: 68 20 74 61 6c 6c 79 73 20 74 68 65 20 6e 75 6d  h tallys the num
06a0: 62 65 72 20 6f 66 20 65 78 65 63 75 74 69 6f 6e  ber of execution
06b0: 73 20 6f 66 20 4d 6f 76 65 54 6f 0a 23 20 61 6e  s of MoveTo.# an
06c0: 64 20 4e 65 78 74 20 6f 70 65 72 61 74 6f 72 73  d Next operators
06d0: 20 69 6e 20 74 68 65 20 56 44 42 45 2e 20 20 42   in the VDBE.  B
06e0: 79 20 76 65 72 69 66 69 6e 67 20 74 68 61 74 20  y verifing that 
06f0: 74 68 65 20 73 65 61 72 63 68 20 63 6f 75 6e 74  the search count
0700: 20 69 73 0a 23 20 73 6d 61 6c 6c 20 77 65 20 63   is.# small we c
0710: 61 6e 20 62 65 20 61 73 73 75 72 65 64 20 74 68  an be assured th
0720: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 20 62  at indices are b
0730: 65 69 6e 67 20 75 73 65 64 20 70 72 6f 70 65 72  eing used proper
0740: 6c 79 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68  ly..#.do_test wh
0750: 65 72 65 2d 31 2e 31 2e 31 20 7b 0a 20 20 63 6f  ere-1.1.1 {.  co
0760: 75 6e 74 20 7b 53 45 4c 45 43 54 20 78 2c 20 79  unt {SELECT x, y
0770: 2c 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  , w FROM t1 WHER
0780: 45 20 77 3d 31 30 7d 0a 7d 20 7b 33 20 31 32 31  E w=10}.} {3 121
0790: 20 31 30 20 33 7d 0a 64 6f 5f 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 64 62 20 73 74 61 74 75  1.3 {.  db statu
07f0: 73 20 73 74 65 70 0a 7d 20 7b 30 7d 0a 64 6f 5f  s step.} {0}.do_
0800: 74 65 73 74 20 77 68 65 72 65 2d 31 2e 31 2e 34  test where-1.1.4
0810: 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 53 45   {.  db eval {SE
0820: 4c 45 43 54 20 78 2c 20 79 2c 20 77 20 46 52 4f  LECT x, y, w FRO
0830: 4d 20 74 31 20 57 48 45 52 45 20 2b 77 3d 31 30  M t1 WHERE +w=10
0840: 7d 0a 7d 20 7b 33 20 31 32 31 20 31 30 7d 0a 64  }.} {3 121 10}.d
0850: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 31  o_test where-1.1
0860: 2e 35 20 7b 0a 20 20 64 62 20 73 74 61 74 75 73  .5 {.  db status
0870: 20 73 74 65 70 0a 7d 20 7b 39 39 7d 0a 64 6f 5f   step.} {99}.do_
0880: 74 65 73 74 20 77 68 65 72 65 2d 31 2e 31 2e 36  test where-1.1.6
0890: 20 7b 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f   {.  set sqlite_
08a0: 71 75 65 72 79 5f 70 6c 61 6e 0a 7d 20 7b 74 31  query_plan.} {t1
08b0: 20 7b 7d 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65   {}}.do_test whe
08c0: 72 65 2d 31 2e 31 2e 37 20 7b 0a 20 20 63 6f 75  re-1.1.7 {.  cou
08d0: 6e 74 20 7b 53 45 4c 45 43 54 20 78 2c 20 79 2c  nt {SELECT x, y,
08e0: 20 77 20 41 53 20 61 62 63 20 46 52 4f 4d 20 74   w AS abc FROM t
08f0: 31 20 57 48 45 52 45 20 61 62 63 3d 31 30 7d 0a  1 WHERE abc=10}.
0900: 7d 20 7b 33 20 31 32 31 20 31 30 20 33 7d 0a 64  } {3 121 10 3}.d
0910: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 31  o_test where-1.1
0920: 2e 38 20 7b 0a 20 20 73 65 74 20 73 71 6c 69 74  .8 {.  set sqlit
0930: 65 5f 71 75 65 72 79 5f 70 6c 61 6e 0a 7d 20 7b  e_query_plan.} {
0940: 74 31 20 69 31 77 7d 0a 64 6f 5f 74 65 73 74 20  t1 i1w}.do_test 
0950: 77 68 65 72 65 2d 31 2e 31 2e 39 20 7b 0a 20 20  where-1.1.9 {.  
0960: 64 62 20 73 74 61 74 75 73 20 73 74 65 70 0a 7d  db status step.}
0970: 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65   {0}.do_test whe
0980: 72 65 2d 31 2e 32 2e 31 20 7b 0a 20 20 63 6f 75  re-1.2.1 {.  cou
0990: 6e 74 20 7b 53 45 4c 45 43 54 20 78 2c 20 79 2c  nt {SELECT x, y,
09a0: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
09b0: 20 77 3d 31 31 7d 0a 7d 20 7b 33 20 31 34 34 20   w=11}.} {3 144 
09c0: 31 31 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68  11 3}.do_test wh
09d0: 65 72 65 2d 31 2e 32 2e 32 20 7b 0a 20 20 63 6f  ere-1.2.2 {.  co
09e0: 75 6e 74 20 7b 53 45 4c 45 43 54 20 78 2c 20 79  unt {SELECT x, y
09f0: 2c 20 77 20 41 53 20 61 62 63 20 46 52 4f 4d 20  , w AS abc FROM 
0a00: 74 31 20 57 48 45 52 45 20 61 62 63 3d 31 31 7d  t1 WHERE abc=11}
0a10: 0a 7d 20 7b 33 20 31 34 34 20 31 31 20 33 7d 0a  .} {3 144 11 3}.
0a20: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e  do_test where-1.
0a30: 33 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53  3.1 {.  count {S
0a40: 45 4c 45 43 54 20 78 2c 20 79 2c 20 77 20 41 53  ELECT x, y, w AS
0a50: 20 61 62 63 20 46 52 4f 4d 20 74 31 20 57 48 45   abc FROM t1 WHE
0a60: 52 45 20 31 31 3d 77 7d 0a 7d 20 7b 33 20 31 34  RE 11=w}.} {3 14
0a70: 34 20 31 31 20 33 7d 0a 64 6f 5f 74 65 73 74 20  4 11 3}.do_test 
0a80: 77 68 65 72 65 2d 31 2e 33 2e 32 20 7b 0a 20 20  where-1.3.2 {.  
0a90: 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 78 2c  count {SELECT x,
0aa0: 20 79 2c 20 77 20 41 53 20 61 62 63 20 46 52 4f   y, w AS abc FRO
0ab0: 4d 20 74 31 20 57 48 45 52 45 20 31 31 3d 61 62  M t1 WHERE 11=ab
0ac0: 63 7d 0a 7d 20 7b 33 20 31 34 34 20 31 31 20 33  c}.} {3 144 11 3
0ad0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
0ae0: 31 2e 34 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 20  1.4.1 {.  count 
0af0: 7b 53 45 4c 45 43 54 20 77 2c 20 78 2c 20 79 20  {SELECT w, x, y 
0b00: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 31 31  FROM t1 WHERE 11
0b10: 3d 77 20 41 4e 44 20 78 3e 32 7d 0a 7d 20 7b 31  =w AND x>2}.} {1
0b20: 31 20 33 20 31 34 34 20 33 7d 0a 64 6f 5f 74 65  1 3 144 3}.do_te
0b30: 73 74 20 77 68 65 72 65 2d 31 2e 34 2e 32 20 7b  st where-1.4.2 {
0b40: 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f 71 75  .  set sqlite_qu
0b50: 65 72 79 5f 70 6c 61 6e 0a 7d 20 7b 74 31 20 69  ery_plan.} {t1 i
0b60: 31 77 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  1w}.do_test wher
0b70: 65 2d 31 2e 34 2e 33 20 7b 0a 20 20 63 6f 75 6e  e-1.4.3 {.  coun
0b80: 74 20 7b 53 45 4c 45 43 54 20 77 20 41 53 20 61  t {SELECT w AS a
0b90: 2c 20 78 20 41 53 20 62 2c 20 79 20 46 52 4f 4d  , x AS b, y FROM
0ba0: 20 74 31 20 57 48 45 52 45 20 31 31 3d 61 20 41   t1 WHERE 11=a A
0bb0: 4e 44 20 62 3e 32 7d 0a 7d 20 7b 31 31 20 33 20  ND b>2}.} {11 3 
0bc0: 31 34 34 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77  144 3}.do_test w
0bd0: 68 65 72 65 2d 31 2e 34 2e 34 20 7b 0a 20 20 73  here-1.4.4 {.  s
0be0: 65 74 20 73 71 6c 69 74 65 5f 71 75 65 72 79 5f  et sqlite_query_
0bf0: 70 6c 61 6e 0a 7d 20 7b 74 31 20 69 31 77 7d 0a  plan.} {t1 i1w}.
0c00: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e  do_test where-1.
0c10: 35 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c  5 {.  count {SEL
0c20: 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 74 31  ECT x, y FROM t1
0c30: 20 57 48 45 52 45 20 79 3c 32 30 30 20 41 4e 44   WHERE y<200 AND
0c40: 20 77 3d 31 31 20 41 4e 44 20 78 3e 32 7d 0a 7d   w=11 AND x>2}.}
0c50: 20 7b 33 20 31 34 34 20 33 7d 0a 64 6f 5f 74 65   {3 144 3}.do_te
0c60: 73 74 20 77 68 65 72 65 2d 31 2e 35 2e 32 20 7b  st where-1.5.2 {
0c70: 0a 20 20 73 65 74 20 73 71 6c 69 74 65 5f 71 75  .  set sqlite_qu
0c80: 65 72 79 5f 70 6c 61 6e 0a 7d 20 7b 74 31 20 69  ery_plan.} {t1 i
0c90: 31 77 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  1w}.do_test wher
0ca0: 65 2d 31 2e 36 20 7b 0a 20 20 63 6f 75 6e 74 20  e-1.6 {.  count 
0cb0: 7b 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f  {SELECT x, y FRO
0cc0: 4d 20 74 31 20 57 48 45 52 45 20 79 3c 32 30 30  M t1 WHERE y<200
0cd0: 20 41 4e 44 20 78 3e 32 20 41 4e 44 20 77 3d 31   AND x>2 AND w=1
0ce0: 31 7d 0a 7d 20 7b 33 20 31 34 34 20 33 7d 0a 64  1}.} {3 144 3}.d
0cf0: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 37  o_test where-1.7
0d00: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45   {.  count {SELE
0d10: 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 74 31 20  CT x, y FROM t1 
0d20: 57 48 45 52 45 20 77 3d 31 31 20 41 4e 44 20 79  WHERE w=11 AND y
0d30: 3c 32 30 30 20 41 4e 44 20 78 3e 32 7d 0a 7d 20  <200 AND x>2}.} 
0d40: 7b 33 20 31 34 34 20 33 7d 0a 64 6f 5f 74 65 73  {3 144 3}.do_tes
0d50: 74 20 77 68 65 72 65 2d 31 2e 38 20 7b 0a 20 20  t where-1.8 {.  
0d60: 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 78 2c  count {SELECT x,
0d70: 20 79 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   y FROM t1 WHERE
0d80: 20 77 3e 31 30 20 41 4e 44 20 79 3d 31 34 34 20   w>10 AND y=144 
0d90: 41 4e 44 20 78 3d 33 7d 0a 7d 20 7b 33 20 31 34  AND x=3}.} {3 14
0da0: 34 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  4 3}.do_test whe
0db0: 72 65 2d 31 2e 38 2e 32 20 7b 0a 20 20 73 65 74  re-1.8.2 {.  set
0dc0: 20 73 71 6c 69 74 65 5f 71 75 65 72 79 5f 70 6c   sqlite_query_pl
0dd0: 61 6e 0a 7d 20 7b 74 31 20 69 31 78 79 7d 0a 64  an.} {t1 i1xy}.d
0de0: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 38  o_test where-1.8
0df0: 2e 33 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45  .3 {.  count {SE
0e00: 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 74  LECT x, y FROM t
0e10: 31 20 57 48 45 52 45 20 79 3d 31 34 34 20 41 4e  1 WHERE y=144 AN
0e20: 44 20 78 3d 33 7d 0a 20 20 73 65 74 20 73 71 6c  D x=3}.  set sql
0e30: 69 74 65 5f 71 75 65 72 79 5f 70 6c 61 6e 0a 7d  ite_query_plan.}
0e40: 20 7b 7b 7d 20 69 31 78 79 7d 0a 64 6f 5f 74 65   {{} i1xy}.do_te
0e50: 73 74 20 77 68 65 72 65 2d 31 2e 39 20 7b 0a 20  st where-1.9 {. 
0e60: 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 78   count {SELECT x
0e70: 2c 20 79 20 46 52 4f 4d 20 74 31 20 57 48 45 52  , y FROM t1 WHER
0e80: 45 20 79 3d 31 34 34 20 41 4e 44 20 77 3e 31 30  E y=144 AND w>10
0e90: 20 41 4e 44 20 78 3d 33 7d 0a 7d 20 7b 33 20 31   AND x=3}.} {3 1
0ea0: 34 34 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68  44 3}.do_test wh
0eb0: 65 72 65 2d 31 2e 31 30 20 7b 0a 20 20 63 6f 75  ere-1.10 {.  cou
0ec0: 6e 74 20 7b 53 45 4c 45 43 54 20 78 2c 20 79 20  nt {SELECT x, y 
0ed0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d  FROM t1 WHERE x=
0ee0: 33 20 41 4e 44 20 77 3e 3d 31 30 20 41 4e 44 20  3 AND w>=10 AND 
0ef0: 79 3d 31 32 31 7d 0a 7d 20 7b 33 20 31 32 31 20  y=121}.} {3 121 
0f00: 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  3}.do_test where
0f10: 2d 31 2e 31 31 20 7b 0a 20 20 63 6f 75 6e 74 20  -1.11 {.  count 
0f20: 7b 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f  {SELECT x, y FRO
0f30: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41  M t1 WHERE x=3 A
0f40: 4e 44 20 79 3d 31 30 30 20 41 4e 44 20 77 3c 31  ND y=100 AND w<1
0f50: 30 7d 0a 7d 20 7b 33 20 31 30 30 20 33 7d 0a 0a  0}.} {3 100 3}..
0f60: 23 20 4e 65 77 20 66 6f 72 20 53 51 4c 69 74 65  # New for SQLite
0f70: 20 76 65 72 73 69 6f 6e 20 32 2e 31 3a 20 56 65   version 2.1: Ve
0f80: 72 69 66 79 20 74 68 61 74 20 74 68 61 74 20 69  rify that that i
0f90: 6e 65 71 75 61 6c 69 74 79 20 63 6f 6e 73 74 72  nequality constr
0fa0: 61 69 6e 74 73 0a 23 20 61 72 65 20 75 73 65 64  aints.# are used
0fb0: 20 63 6f 72 72 65 63 74 6c 79 2e 0a 23 0a 64 6f   correctly..#.do
0fc0: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 31 32  _test where-1.12
0fd0: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45   {.  count {SELE
0fe0: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
0ff0: 52 45 20 78 3d 33 20 41 4e 44 20 79 3c 31 30 30  RE x=3 AND y<100
1000: 7d 0a 7d 20 7b 38 20 33 7d 0a 64 6f 5f 74 65 73  }.} {8 3}.do_tes
1010: 74 20 77 68 65 72 65 2d 31 2e 31 33 20 7b 0a 20  t where-1.13 {. 
1020: 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77   count {SELECT w
1030: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
1040: 3d 33 20 41 4e 44 20 31 30 30 3e 79 7d 0a 7d 20  =3 AND 100>y}.} 
1050: 7b 38 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68  {8 3}.do_test wh
1060: 65 72 65 2d 31 2e 31 34 20 7b 0a 20 20 63 6f 75  ere-1.14 {.  cou
1070: 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f  nt {SELECT w FRO
1080: 4d 20 74 31 20 57 48 45 52 45 20 33 3d 78 20 41  M t1 WHERE 3=x A
1090: 4e 44 20 79 3c 31 30 30 7d 0a 7d 20 7b 38 20 33  ND y<100}.} {8 3
10a0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
10b0: 31 2e 31 35 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  1.15 {.  count {
10c0: 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31  SELECT w FROM t1
10d0: 20 57 48 45 52 45 20 33 3d 78 20 41 4e 44 20 31   WHERE 3=x AND 1
10e0: 30 30 3e 79 7d 0a 7d 20 7b 38 20 33 7d 0a 64 6f  00>y}.} {8 3}.do
10f0: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 31 36  _test where-1.16
1100: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45   {.  count {SELE
1110: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
1120: 52 45 20 78 3d 33 20 41 4e 44 20 79 3c 3d 31 30  RE x=3 AND y<=10
1130: 30 7d 0a 7d 20 7b 38 20 39 20 35 7d 0a 64 6f 5f  0}.} {8 9 5}.do_
1140: 74 65 73 74 20 77 68 65 72 65 2d 31 2e 31 37 20  test where-1.17 
1150: 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43  {.  count {SELEC
1160: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
1170: 45 20 78 3d 33 20 41 4e 44 20 31 30 30 3e 3d 79  E x=3 AND 100>=y
1180: 7d 0a 7d 20 7b 38 20 39 20 35 7d 0a 64 6f 5f 74  }.} {8 9 5}.do_t
1190: 65 73 74 20 77 68 65 72 65 2d 31 2e 31 38 20 7b  est where-1.18 {
11a0: 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54  .  count {SELECT
11b0: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
11c0: 20 78 3d 33 20 41 4e 44 20 79 3e 32 32 35 7d 0a   x=3 AND y>225}.
11d0: 7d 20 7b 31 35 20 33 7d 0a 64 6f 5f 74 65 73 74  } {15 3}.do_test
11e0: 20 77 68 65 72 65 2d 31 2e 31 39 20 7b 0a 20 20   where-1.19 {.  
11f0: 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20  count {SELECT w 
1200: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d  FROM t1 WHERE x=
1210: 33 20 41 4e 44 20 32 32 35 3c 79 7d 0a 7d 20 7b  3 AND 225<y}.} {
1220: 31 35 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68  15 3}.do_test wh
1230: 65 72 65 2d 31 2e 32 30 20 7b 0a 20 20 63 6f 75  ere-1.20 {.  cou
1240: 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f  nt {SELECT w FRO
1250: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41  M t1 WHERE x=3 A
1260: 4e 44 20 79 3e 3d 32 32 35 7d 0a 7d 20 7b 31 34  ND y>=225}.} {14
1270: 20 31 35 20 35 7d 0a 64 6f 5f 74 65 73 74 20 77   15 5}.do_test w
1280: 68 65 72 65 2d 31 2e 32 31 20 7b 0a 20 20 63 6f  here-1.21 {.  co
1290: 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52  unt {SELECT w FR
12a0: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20  OM t1 WHERE x=3 
12b0: 41 4e 44 20 32 32 35 3c 3d 79 7d 0a 7d 20 7b 31  AND 225<=y}.} {1
12c0: 34 20 31 35 20 35 7d 0a 64 6f 5f 74 65 73 74 20  4 15 5}.do_test 
12d0: 77 68 65 72 65 2d 31 2e 32 32 20 7b 0a 20 20 63  where-1.22 {.  c
12e0: 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46  ount {SELECT w F
12f0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33  ROM t1 WHERE x=3
1300: 20 41 4e 44 20 79 3e 31 32 31 20 41 4e 44 20 79   AND y>121 AND y
1310: 3c 31 39 36 7d 0a 7d 20 7b 31 31 20 31 32 20 35  <196}.} {11 12 5
1320: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
1330: 31 2e 32 33 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  1.23 {.  count {
1340: 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31  SELECT w FROM t1
1350: 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79   WHERE x=3 AND y
1360: 3e 3d 31 32 31 20 41 4e 44 20 79 3c 3d 31 39 36  >=121 AND y<=196
1370: 7d 0a 7d 20 7b 31 30 20 31 31 20 31 32 20 31 33  }.} {10 11 12 13
1380: 20 39 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   9}.do_test wher
1390: 65 2d 31 2e 32 34 20 7b 0a 20 20 63 6f 75 6e 74  e-1.24 {.  count
13a0: 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20   {SELECT w FROM 
13b0: 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44  t1 WHERE x=3 AND
13c0: 20 31 32 31 3c 79 20 41 4e 44 20 31 39 36 3e 79   121<y AND 196>y
13d0: 7d 0a 7d 20 7b 31 31 20 31 32 20 35 7d 0a 64 6f  }.} {11 12 5}.do
13e0: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 32 35  _test where-1.25
13f0: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45   {.  count {SELE
1400: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
1410: 52 45 20 78 3d 33 20 41 4e 44 20 31 32 31 3c 3d  RE x=3 AND 121<=
1420: 79 20 41 4e 44 20 31 39 36 3e 3d 79 7d 0a 7d 20  y AND 196>=y}.} 
1430: 7b 31 30 20 31 31 20 31 32 20 31 33 20 39 7d 0a  {10 11 12 13 9}.
1440: 0a 23 20 4e 65 65 64 20 74 6f 20 77 6f 72 6b 20  .# Need to work 
1450: 6f 6e 20 6f 70 74 69 6d 69 7a 69 6e 67 20 74 68  on optimizing th
1460: 65 20 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74  e BETWEEN operat
1470: 6f 72 2e 20 20 0a 23 0a 23 20 64 6f 5f 74 65 73  or.  .#.# do_tes
1480: 74 20 77 68 65 72 65 2d 31 2e 32 36 20 7b 0a 23  t where-1.26 {.#
1490: 20 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54     count {SELECT
14a0: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
14b0: 20 78 3d 33 20 41 4e 44 20 79 20 42 45 54 57 45   x=3 AND y BETWE
14c0: 45 4e 20 31 32 31 20 41 4e 44 20 31 39 36 7d 0a  EN 121 AND 196}.
14d0: 23 20 7d 20 7b 31 30 20 31 31 20 31 32 20 31 33  # } {10 11 12 13
14e0: 20 39 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65   9}..do_test whe
14f0: 72 65 2d 31 2e 32 37 20 7b 0a 20 20 63 6f 75 6e  re-1.27 {.  coun
1500: 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d  t {SELECT w FROM
1510: 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e   t1 WHERE x=3 AN
1520: 44 20 79 2b 31 3d 3d 31 32 32 7d 0a 7d 20 7b 31  D y+1==122}.} {1
1530: 30 20 31 30 7d 0a 0a 64 6f 5f 74 65 73 74 20 77  0 10}..do_test w
1540: 68 65 72 65 2d 31 2e 32 38 20 7b 0a 20 20 63 6f  here-1.28 {.  co
1550: 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52  unt {SELECT w FR
1560: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 2b 31 3d  OM t1 WHERE x+1=
1570: 34 20 41 4e 44 20 79 2b 31 3d 3d 31 32 32 7d 0a  4 AND y+1==122}.
1580: 7d 20 7b 31 30 20 39 39 7d 0a 64 6f 5f 74 65 73  } {10 99}.do_tes
1590: 74 20 77 68 65 72 65 2d 31 2e 32 39 20 7b 0a 20  t where-1.29 {. 
15a0: 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77   count {SELECT w
15b0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79   FROM t1 WHERE y
15c0: 3d 3d 31 32 31 7d 0a 7d 20 7b 31 30 20 39 39 7d  ==121}.} {10 99}
15d0: 0a 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  ...do_test where
15e0: 2d 31 2e 33 30 20 7b 0a 20 20 63 6f 75 6e 74 20  -1.30 {.  count 
15f0: 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74  {SELECT w FROM t
1600: 31 20 57 48 45 52 45 20 77 3e 39 37 7d 0a 7d 20  1 WHERE w>97}.} 
1610: 7b 39 38 20 39 39 20 31 30 30 20 33 7d 0a 64 6f  {98 99 100 3}.do
1620: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 33 31  _test where-1.31
1630: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45   {.  count {SELE
1640: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
1650: 52 45 20 77 3e 3d 39 37 7d 0a 7d 20 7b 39 37 20  RE w>=97}.} {97 
1660: 39 38 20 39 39 20 31 30 30 20 34 7d 0a 64 6f 5f  98 99 100 4}.do_
1670: 74 65 73 74 20 77 68 65 72 65 2d 31 2e 33 33 20  test where-1.33 
1680: 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43  {.  count {SELEC
1690: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
16a0: 45 20 77 3d 3d 39 37 7d 0a 7d 20 7b 39 37 20 32  E w==97}.} {97 2
16b0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
16c0: 31 2e 33 33 2e 31 20 20 7b 0a 20 20 63 6f 75 6e  1.33.1  {.  coun
16d0: 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d  t {SELECT w FROM
16e0: 20 74 31 20 57 48 45 52 45 20 77 3c 3d 39 37 20   t1 WHERE w<=97 
16f0: 41 4e 44 20 77 3d 3d 39 37 7d 0a 7d 20 7b 39 37  AND w==97}.} {97
1700: 20 32 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   2}.do_test wher
1710: 65 2d 31 2e 33 33 2e 32 20 20 7b 0a 20 20 63 6f  e-1.33.2  {.  co
1720: 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52  unt {SELECT w FR
1730: 4f 4d 20 74 31 20 57 48 45 52 45 20 77 3c 39 38  OM t1 WHERE w<98
1740: 20 41 4e 44 20 77 3d 3d 39 37 7d 0a 7d 20 7b 39   AND w==97}.} {9
1750: 37 20 32 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  7 2}.do_test whe
1760: 72 65 2d 31 2e 33 33 2e 33 20 20 7b 0a 20 20 63  re-1.33.3  {.  c
1770: 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46  ount {SELECT w F
1780: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77 3e 3d  ROM t1 WHERE w>=
1790: 39 37 20 41 4e 44 20 77 3d 3d 39 37 7d 0a 7d 20  97 AND w==97}.} 
17a0: 7b 39 37 20 32 7d 0a 64 6f 5f 74 65 73 74 20 77  {97 2}.do_test w
17b0: 68 65 72 65 2d 31 2e 33 33 2e 34 20 20 7b 0a 20  here-1.33.4  {. 
17c0: 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77   count {SELECT w
17d0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77   FROM t1 WHERE w
17e0: 3e 39 36 20 41 4e 44 20 77 3d 3d 39 37 7d 0a 7d  >96 AND w==97}.}
17f0: 20 7b 39 37 20 32 7d 0a 64 6f 5f 74 65 73 74 20   {97 2}.do_test 
1800: 77 68 65 72 65 2d 31 2e 33 33 2e 35 20 20 7b 0a  where-1.33.5  {.
1810: 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20    count {SELECT 
1820: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
1830: 77 3d 3d 39 37 20 41 4e 44 20 77 3d 3d 39 37 7d  w==97 AND w==97}
1840: 0a 7d 20 7b 39 37 20 32 7d 0a 64 6f 5f 74 65 73  .} {97 2}.do_tes
1850: 74 20 77 68 65 72 65 2d 31 2e 33 34 20 7b 0a 20  t where-1.34 {. 
1860: 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77   count {SELECT w
1870: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77   FROM t1 WHERE w
1880: 2b 31 3d 3d 39 38 7d 0a 7d 20 7b 39 37 20 39 39  +1==98}.} {97 99
1890: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
18a0: 31 2e 33 35 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  1.35 {.  count {
18b0: 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31  SELECT w FROM t1
18c0: 20 57 48 45 52 45 20 77 3c 33 7d 0a 7d 20 7b 31   WHERE w<3}.} {1
18d0: 20 32 20 32 7d 0a 64 6f 5f 74 65 73 74 20 77 68   2 2}.do_test wh
18e0: 65 72 65 2d 31 2e 33 36 20 7b 0a 20 20 63 6f 75  ere-1.36 {.  cou
18f0: 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f  nt {SELECT w FRO
1900: 4d 20 74 31 20 57 48 45 52 45 20 77 3c 3d 33 7d  M t1 WHERE w<=3}
1910: 0a 7d 20 7b 31 20 32 20 33 20 33 7d 0a 64 6f 5f  .} {1 2 3 3}.do_
1920: 74 65 73 74 20 77 68 65 72 65 2d 31 2e 33 37 20  test where-1.37 
1930: 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43  {.  count {SELEC
1940: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
1950: 45 20 77 2b 31 3c 3d 34 20 4f 52 44 45 52 20 42  E w+1<=4 ORDER B
1960: 59 20 77 7d 0a 7d 20 7b 31 20 32 20 33 20 39 39  Y w}.} {1 2 3 99
1970: 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  }..do_test where
1980: 2d 31 2e 33 38 20 7b 0a 20 20 63 6f 75 6e 74 20  -1.38 {.  count 
1990: 7b 53 45 4c 45 43 54 20 28 77 29 20 46 52 4f 4d  {SELECT (w) FROM
19a0: 20 74 31 20 57 48 45 52 45 20 28 77 29 3e 28 39   t1 WHERE (w)>(9
19b0: 37 29 7d 0a 7d 20 7b 39 38 20 39 39 20 31 30 30  7)}.} {98 99 100
19c0: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   3}.do_test wher
19d0: 65 2d 31 2e 33 39 20 7b 0a 20 20 63 6f 75 6e 74  e-1.39 {.  count
19e0: 20 7b 53 45 4c 45 43 54 20 28 77 29 20 46 52 4f   {SELECT (w) FRO
19f0: 4d 20 74 31 20 57 48 45 52 45 20 28 77 29 3e 3d  M t1 WHERE (w)>=
1a00: 28 39 37 29 7d 0a 7d 20 7b 39 37 20 39 38 20 39  (97)}.} {97 98 9
1a10: 39 20 31 30 30 20 34 7d 0a 64 6f 5f 74 65 73 74  9 100 4}.do_test
1a20: 20 77 68 65 72 65 2d 31 2e 34 30 20 7b 0a 20 20   where-1.40 {.  
1a30: 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 28 77  count {SELECT (w
1a40: 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  ) FROM t1 WHERE 
1a50: 28 77 29 3d 3d 28 39 37 29 7d 0a 7d 20 7b 39 37  (w)==(97)}.} {97
1a60: 20 32 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   2}.do_test wher
1a70: 65 2d 31 2e 34 31 20 7b 0a 20 20 63 6f 75 6e 74  e-1.41 {.  count
1a80: 20 7b 53 45 4c 45 43 54 20 28 77 29 20 46 52 4f   {SELECT (w) FRO
1a90: 4d 20 74 31 20 57 48 45 52 45 20 28 28 77 29 2b  M t1 WHERE ((w)+
1aa0: 28 31 29 29 3d 3d 28 39 38 29 7d 0a 7d 20 7b 39  (1))==(98)}.} {9
1ab0: 37 20 39 39 7d 0a 0a 0a 23 20 44 6f 20 74 68 65  7 99}...# Do the
1ac0: 20 73 61 6d 65 20 6b 69 6e 64 20 6f 66 20 74 68   same kind of th
1ad0: 69 6e 67 20 65 78 63 65 70 74 20 75 73 65 20 61  ing except use a
1ae0: 20 6a 6f 69 6e 20 61 73 20 74 68 65 20 64 61 74   join as the dat
1af0: 61 20 73 6f 75 72 63 65 2e 0a 23 0a 64 6f 5f 74  a source..#.do_t
1b00: 65 73 74 20 77 68 65 72 65 2d 32 2e 31 20 7b 0a  est where-2.1 {.
1b10: 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45    count {.    SE
1b20: 4c 45 43 54 20 77 2c 20 70 20 46 52 4f 4d 20 74  LECT w, p FROM t
1b30: 32 2c 20 74 31 0a 20 20 20 20 57 48 45 52 45 20  2, t1.    WHERE 
1b40: 78 3d 71 20 41 4e 44 20 79 3d 73 20 41 4e 44 20  x=q AND y=s AND 
1b50: 72 3d 38 39 37 37 0a 20 20 7d 0a 7d 20 7b 33 34  r=8977.  }.} {34
1b60: 20 36 37 20 36 7d 0a 64 6f 5f 74 65 73 74 20 77   67 6}.do_test w
1b70: 68 65 72 65 2d 32 2e 32 20 7b 0a 20 20 63 6f 75  here-2.2 {.  cou
1b80: 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  nt {.    SELECT 
1b90: 77 2c 20 70 20 46 52 4f 4d 20 74 32 2c 20 74 31  w, p FROM t2, t1
1ba0: 0a 20 20 20 20 57 48 45 52 45 20 78 3d 71 20 41  .    WHERE x=q A
1bb0: 4e 44 20 73 3d 79 20 41 4e 44 20 72 3d 38 39 37  ND s=y AND r=897
1bc0: 37 0a 20 20 7d 0a 7d 20 7b 33 34 20 36 37 20 36  7.  }.} {34 67 6
1bd0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
1be0: 32 2e 33 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a  2.3 {.  count {.
1bf0: 20 20 20 20 53 45 4c 45 43 54 20 77 2c 20 70 20      SELECT w, p 
1c00: 46 52 4f 4d 20 74 32 2c 20 74 31 0a 20 20 20 20  FROM t2, t1.    
1c10: 57 48 45 52 45 20 78 3d 71 20 41 4e 44 20 73 3d  WHERE x=q AND s=
1c20: 79 20 41 4e 44 20 72 3d 38 39 37 37 20 41 4e 44  y AND r=8977 AND
1c30: 20 77 3e 31 30 0a 20 20 7d 0a 7d 20 7b 33 34 20   w>10.  }.} {34 
1c40: 36 37 20 36 7d 0a 64 6f 5f 74 65 73 74 20 77 68  67 6}.do_test wh
1c50: 65 72 65 2d 32 2e 34 20 7b 0a 20 20 63 6f 75 6e  ere-2.4 {.  coun
1c60: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77  t {.    SELECT w
1c70: 2c 20 70 20 46 52 4f 4d 20 74 32 2c 20 74 31 0a  , p FROM t2, t1.
1c80: 20 20 20 20 57 48 45 52 45 20 70 3c 38 30 20 41      WHERE p<80 A
1c90: 4e 44 20 78 3d 71 20 41 4e 44 20 73 3d 79 20 41  ND x=q AND s=y A
1ca0: 4e 44 20 72 3d 38 39 37 37 20 41 4e 44 20 77 3e  ND r=8977 AND w>
1cb0: 31 30 0a 20 20 7d 0a 7d 20 7b 33 34 20 36 37 20  10.  }.} {34 67 
1cc0: 36 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  6}.do_test where
1cd0: 2d 32 2e 35 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  -2.5 {.  count {
1ce0: 0a 20 20 20 20 53 45 4c 45 43 54 20 77 2c 20 70  .    SELECT w, p
1cf0: 20 46 52 4f 4d 20 74 32 2c 20 74 31 0a 20 20 20   FROM t2, t1.   
1d00: 20 57 48 45 52 45 20 70 3c 38 30 20 41 4e 44 20   WHERE p<80 AND 
1d10: 78 3d 71 20 41 4e 44 20 38 39 37 37 3d 72 20 41  x=q AND 8977=r A
1d20: 4e 44 20 73 3d 79 20 41 4e 44 20 77 3e 31 30 0a  ND s=y AND w>10.
1d30: 20 20 7d 0a 7d 20 7b 33 34 20 36 37 20 36 7d 0a    }.} {34 67 6}.
1d40: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 32 2e  do_test where-2.
1d50: 36 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20  6 {.  count {.  
1d60: 20 20 53 45 4c 45 43 54 20 77 2c 20 70 20 46 52    SELECT w, p FR
1d70: 4f 4d 20 74 32 2c 20 74 31 0a 20 20 20 20 57 48  OM t2, t1.    WH
1d80: 45 52 45 20 78 3d 71 20 41 4e 44 20 70 3d 37 37  ERE x=q AND p=77
1d90: 20 41 4e 44 20 73 3d 79 20 41 4e 44 20 77 3e 35   AND s=y AND w>5
1da0: 0a 20 20 7d 0a 7d 20 7b 32 34 20 37 37 20 36 7d  .  }.} {24 77 6}
1db0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 32  .do_test where-2
1dc0: 2e 37 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20  .7 {.  count {. 
1dd0: 20 20 20 53 45 4c 45 43 54 20 77 2c 20 70 20 46     SELECT w, p F
1de0: 52 4f 4d 20 74 31 2c 20 74 32 0a 20 20 20 20 57  ROM t1, t2.    W
1df0: 48 45 52 45 20 78 3d 71 20 41 4e 44 20 70 3e 37  HERE x=q AND p>7
1e00: 37 20 41 4e 44 20 73 3d 79 20 41 4e 44 20 77 3d  7 AND s=y AND w=
1e10: 35 0a 20 20 7d 0a 7d 20 7b 35 20 39 36 20 36 7d  5.  }.} {5 96 6}
1e20: 0a 0a 23 20 4c 65 74 73 20 64 6f 20 61 20 33 2d  ..# Lets do a 3-
1e30: 77 61 79 20 6a 6f 69 6e 2e 0a 23 0a 64 6f 5f 74  way join..#.do_t
1e40: 65 73 74 20 77 68 65 72 65 2d 33 2e 31 20 7b 0a  est where-3.1 {.
1e50: 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45    count {.    SE
1e60: 4c 45 43 54 20 41 2e 77 2c 20 42 2e 70 2c 20 43  LECT A.w, B.p, C
1e70: 2e 77 20 46 52 4f 4d 20 74 31 20 61 73 20 41 2c  .w FROM t1 as A,
1e80: 20 74 32 20 61 73 20 42 2c 20 74 31 20 61 73 20   t2 as B, t1 as 
1e90: 43 0a 20 20 20 20 57 48 45 52 45 20 43 2e 77 3d  C.    WHERE C.w=
1ea0: 31 30 31 2d 42 2e 70 20 41 4e 44 20 42 2e 72 3d  101-B.p AND B.r=
1eb0: 31 30 32 30 32 2d 41 2e 79 20 41 4e 44 20 41 2e  10202-A.y AND A.
1ec0: 77 3d 31 31 0a 20 20 7d 0a 7d 20 7b 31 31 20 39  w=11.  }.} {11 9
1ed0: 30 20 31 31 20 38 7d 0a 64 6f 5f 74 65 73 74 20  0 11 8}.do_test 
1ee0: 77 68 65 72 65 2d 33 2e 32 20 7b 0a 20 20 63 6f  where-3.2 {.  co
1ef0: 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  unt {.    SELECT
1f00: 20 41 2e 77 2c 20 42 2e 70 2c 20 43 2e 77 20 46   A.w, B.p, C.w F
1f10: 52 4f 4d 20 74 31 20 61 73 20 41 2c 20 74 32 20  ROM t1 as A, t2 
1f20: 61 73 20 42 2c 20 74 31 20 61 73 20 43 0a 20 20  as B, t1 as C.  
1f30: 20 20 57 48 45 52 45 20 43 2e 77 3d 31 30 31 2d    WHERE C.w=101-
1f40: 42 2e 70 20 41 4e 44 20 42 2e 72 3d 31 30 32 30  B.p AND B.r=1020
1f50: 32 2d 41 2e 79 20 41 4e 44 20 41 2e 77 3d 31 32  2-A.y AND A.w=12
1f60: 0a 20 20 7d 0a 7d 20 7b 31 32 20 38 39 20 31 32  .  }.} {12 89 12
1f70: 20 38 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   8}.do_test wher
1f80: 65 2d 33 2e 33 20 7b 0a 20 20 63 6f 75 6e 74 20  e-3.3 {.  count 
1f90: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 41 2e 77  {.    SELECT A.w
1fa0: 2c 20 42 2e 70 2c 20 43 2e 77 20 46 52 4f 4d 20  , B.p, C.w FROM 
1fb0: 74 31 20 61 73 20 41 2c 20 74 32 20 61 73 20 42  t1 as A, t2 as B
1fc0: 2c 20 74 31 20 61 73 20 43 0a 20 20 20 20 57 48  , t1 as C.    WH
1fd0: 45 52 45 20 41 2e 77 3d 31 35 20 41 4e 44 20 42  ERE A.w=15 AND B
1fe0: 2e 70 3d 43 2e 77 20 41 4e 44 20 42 2e 72 3d 31  .p=C.w AND B.r=1
1ff0: 30 32 30 32 2d 41 2e 79 0a 20 20 7d 0a 7d 20 7b  0202-A.y.  }.} {
2000: 31 35 20 38 36 20 38 36 20 38 7d 0a 0a 23 20 54  15 86 86 8}..# T
2010: 65 73 74 20 74 6f 20 73 65 65 20 74 68 61 74 20  est to see that 
2020: 74 68 65 20 73 70 65 63 69 61 6c 20 63 61 73 65  the special case
2030: 20 6f 66 20 61 20 63 6f 6e 73 74 61 6e 74 20 57   of a constant W
2040: 48 45 52 45 20 63 6c 61 75 73 65 20 69 73 0a 23  HERE clause is.#
2050: 20 68 61 6e 64 6c 65 64 2e 0a 23 0a 64 6f 5f 74   handled..#.do_t
2060: 65 73 74 20 77 68 65 72 65 2d 34 2e 31 20 7b 0a  est where-4.1 {.
2070: 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45    count {.    SE
2080: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
2090: 48 45 52 45 20 30 0a 20 20 7d 0a 7d 20 7b 30 7d  HERE 0.  }.} {0}
20a0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 34  .do_test where-4
20b0: 2e 32 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20  .2 {.  count {. 
20c0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
20d0: 20 74 31 20 57 48 45 52 45 20 31 20 4c 49 4d 49   t1 WHERE 1 LIMI
20e0: 54 20 31 0a 20 20 7d 0a 7d 20 7b 31 20 30 20 34  T 1.  }.} {1 0 4
20f0: 20 30 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   0}.do_test wher
2100: 65 2d 34 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  e-4.3 {.  execsq
2110: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 39  l {.    SELECT 9
2120: 39 20 57 48 45 52 45 20 30 0a 20 20 7d 0a 7d 20  9 WHERE 0.  }.} 
2130: 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  {}.do_test where
2140: 2d 34 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  -4.4 {.  execsql
2150: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 39 39   {.    SELECT 99
2160: 20 57 48 45 52 45 20 31 0a 20 20 7d 0a 7d 20 7b   WHERE 1.  }.} {
2170: 39 39 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  99}.do_test wher
2180: 65 2d 34 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  e-4.5 {.  execsq
2190: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 39  l {.    SELECT 9
21a0: 39 20 57 48 45 52 45 20 30 2e 31 0a 20 20 7d 0a  9 WHERE 0.1.  }.
21b0: 7d 20 7b 39 39 7d 0a 64 6f 5f 74 65 73 74 20 77  } {99}.do_test w
21c0: 68 65 72 65 2d 34 2e 36 20 7b 0a 20 20 65 78 65  here-4.6 {.  exe
21d0: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
21e0: 54 20 39 39 20 57 48 45 52 45 20 30 2e 30 0a 20  T 99 WHERE 0.0. 
21f0: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
2200: 77 68 65 72 65 2d 34 2e 37 20 7b 0a 20 20 65 78  where-4.7 {.  ex
2210: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
2220: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
2230: 20 74 31 20 57 48 45 52 45 20 74 31 2e 77 0a 20   t1 WHERE t1.w. 
2240: 20 7d 0a 7d 20 7b 31 30 30 7d 0a 0a 23 20 56 65   }.} {100}..# Ve
2250: 72 69 66 79 20 74 68 61 74 20 49 4e 20 6f 70 65  rify that IN ope
2260: 72 61 74 6f 72 73 20 69 6e 20 61 20 57 48 45 52  rators in a WHER
2270: 45 20 63 6c 61 75 73 65 20 61 72 65 20 68 61 6e  E clause are han
2280: 64 6c 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a  dled correctly..
2290: 23 20 4f 6d 69 74 20 74 68 65 73 65 20 74 65 73  # Omit these tes
22a0: 74 73 20 69 66 20 74 68 65 20 62 75 69 6c 64 20  ts if the build 
22b0: 69 73 20 6e 6f 74 20 63 61 70 61 62 6c 65 20 6f  is not capable o
22c0: 66 20 73 75 62 2d 71 75 65 72 69 65 73 2e 0a 23  f sub-queries..#
22d0: 0a 69 66 63 61 70 61 62 6c 65 20 73 75 62 71 75  .ifcapable subqu
22e0: 65 72 79 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20  ery {.  do_test 
22f0: 77 68 65 72 65 2d 35 2e 31 20 7b 0a 20 20 20 20  where-5.1 {.    
2300: 63 6f 75 6e 74 20 7b 0a 20 20 20 20 20 20 53 45  count {.      SE
2310: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
2320: 48 45 52 45 20 72 6f 77 69 64 20 49 4e 20 28 31  HERE rowid IN (1
2330: 2c 32 2c 33 2c 31 32 33 34 29 20 6f 72 64 65 72  ,2,3,1234) order
2340: 20 62 79 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d   by 1;.    }.  }
2350: 20 7b 31 20 30 20 34 20 32 20 31 20 39 20 33 20   {1 0 4 2 1 9 3 
2360: 31 20 31 36 20 34 7d 0a 20 20 64 6f 5f 74 65 73  1 16 4}.  do_tes
2370: 74 20 77 68 65 72 65 2d 35 2e 32 20 7b 0a 20 20  t where-5.2 {.  
2380: 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 20 20    count {.      
2390: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
23a0: 20 57 48 45 52 45 20 72 6f 77 69 64 2b 30 20 49   WHERE rowid+0 I
23b0: 4e 20 28 31 2c 32 2c 33 2c 31 32 33 34 29 20 6f  N (1,2,3,1234) o
23c0: 72 64 65 72 20 62 79 20 31 3b 0a 20 20 20 20 7d  rder by 1;.    }
23d0: 0a 20 20 7d 20 7b 31 20 30 20 34 20 32 20 31 20  .  } {1 0 4 2 1 
23e0: 39 20 33 20 31 20 31 36 20 31 30 32 7d 0a 20 20  9 3 1 16 102}.  
23f0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 35 2e  do_test where-5.
2400: 33 20 7b 0a 20 20 20 20 63 6f 75 6e 74 20 7b 0a  3 {.    count {.
2410: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
2420: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77 20 49  ROM t1 WHERE w I
2430: 4e 20 28 2d 31 2c 31 2c 32 2c 33 29 20 6f 72 64  N (-1,1,2,3) ord
2440: 65 72 20 62 79 20 31 3b 0a 20 20 20 20 7d 0a 20  er by 1;.    }. 
2450: 20 7d 20 7b 31 20 30 20 34 20 32 20 31 20 39 20   } {1 0 4 2 1 9 
2460: 33 20 31 20 31 36 20 31 34 7d 0a 20 20 64 6f 5f  3 1 16 14}.  do_
2470: 74 65 73 74 20 77 68 65 72 65 2d 35 2e 34 20 7b  test where-5.4 {
2480: 0a 20 20 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20  .    count {.   
2490: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
24a0: 20 74 31 20 57 48 45 52 45 20 77 2b 30 20 49 4e   t1 WHERE w+0 IN
24b0: 20 28 2d 31 2c 31 2c 32 2c 33 29 20 6f 72 64 65   (-1,1,2,3) orde
24c0: 72 20 62 79 20 31 3b 0a 20 20 20 20 7d 0a 20 20  r by 1;.    }.  
24d0: 7d 20 7b 31 20 30 20 34 20 32 20 31 20 39 20 33  } {1 0 4 2 1 9 3
24e0: 20 31 20 31 36 20 31 30 32 7d 0a 20 20 64 6f 5f   1 16 102}.  do_
24f0: 74 65 73 74 20 77 68 65 72 65 2d 35 2e 35 20 7b  test where-5.5 {
2500: 0a 20 20 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20  .    count {.   
2510: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
2520: 20 74 31 20 57 48 45 52 45 20 72 6f 77 69 64 20   t1 WHERE rowid 
2530: 49 4e 20 0a 20 20 20 20 20 20 20 20 20 28 73 65  IN .         (se
2540: 6c 65 63 74 20 72 6f 77 69 64 20 66 72 6f 6d 20  lect rowid from 
2550: 74 31 20 77 68 65 72 65 20 72 6f 77 69 64 20 49  t1 where rowid I
2560: 4e 20 28 2d 31 2c 32 2c 34 29 29 0a 20 20 20 20  N (-1,2,4)).    
2570: 20 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20    ORDER BY 1;.  
2580: 20 20 7d 0a 20 20 7d 20 7b 32 20 31 20 39 20 34    }.  } {2 1 9 4
2590: 20 32 20 32 35 20 33 7d 0a 20 20 64 6f 5f 74 65   2 25 3}.  do_te
25a0: 73 74 20 77 68 65 72 65 2d 35 2e 36 20 7b 0a 20  st where-5.6 {. 
25b0: 20 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 20     count {.     
25c0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
25d0: 31 20 57 48 45 52 45 20 72 6f 77 69 64 2b 30 20  1 WHERE rowid+0 
25e0: 49 4e 20 0a 20 20 20 20 20 20 20 20 20 28 73 65  IN .         (se
25f0: 6c 65 63 74 20 72 6f 77 69 64 20 66 72 6f 6d 20  lect rowid from 
2600: 74 31 20 77 68 65 72 65 20 72 6f 77 69 64 20 49  t1 where rowid I
2610: 4e 20 28 2d 31 2c 32 2c 34 29 29 0a 20 20 20 20  N (-1,2,4)).    
2620: 20 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20    ORDER BY 1;.  
2630: 20 20 7d 0a 20 20 7d 20 7b 32 20 31 20 39 20 34    }.  } {2 1 9 4
2640: 20 32 20 32 35 20 31 30 33 7d 0a 20 20 64 6f 5f   2 25 103}.  do_
2650: 74 65 73 74 20 77 68 65 72 65 2d 35 2e 37 20 7b  test where-5.7 {
2660: 0a 20 20 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20  .    count {.   
2670: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
2680: 20 74 31 20 57 48 45 52 45 20 77 20 49 4e 20 0a   t1 WHERE w IN .
2690: 20 20 20 20 20 20 20 20 20 28 73 65 6c 65 63 74           (select
26a0: 20 72 6f 77 69 64 20 66 72 6f 6d 20 74 31 20 77   rowid from t1 w
26b0: 68 65 72 65 20 72 6f 77 69 64 20 49 4e 20 28 2d  here rowid IN (-
26c0: 31 2c 32 2c 34 29 29 0a 20 20 20 20 20 20 4f 52  1,2,4)).      OR
26d0: 44 45 52 20 42 59 20 31 3b 0a 20 20 20 20 7d 0a  DER BY 1;.    }.
26e0: 20 20 7d 20 7b 32 20 31 20 39 20 34 20 32 20 32    } {2 1 9 4 2 2
26f0: 35 20 39 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77  5 9}.  do_test w
2700: 68 65 72 65 2d 35 2e 38 20 7b 0a 20 20 20 20 63  here-5.8 {.    c
2710: 6f 75 6e 74 20 7b 0a 20 20 20 20 20 20 53 45 4c  ount {.      SEL
2720: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
2730: 45 52 45 20 77 2b 30 20 49 4e 20 0a 20 20 20 20  ERE w+0 IN .    
2740: 20 20 20 20 20 28 73 65 6c 65 63 74 20 72 6f 77       (select row
2750: 69 64 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65  id from t1 where
2760: 20 72 6f 77 69 64 20 49 4e 20 28 2d 31 2c 32 2c   rowid IN (-1,2,
2770: 34 29 29 0a 20 20 20 20 20 20 4f 52 44 45 52 20  4)).      ORDER 
2780: 42 59 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  BY 1;.    }.  } 
2790: 7b 32 20 31 20 39 20 34 20 32 20 32 35 20 31 30  {2 1 9 4 2 25 10
27a0: 33 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65  3}.  do_test whe
27b0: 72 65 2d 35 2e 39 20 7b 0a 20 20 20 20 63 6f 75  re-5.9 {.    cou
27c0: 6e 74 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43  nt {.      SELEC
27d0: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
27e0: 45 20 78 20 49 4e 20 28 31 2c 37 29 20 4f 52 44  E x IN (1,7) ORD
27f0: 45 52 20 42 59 20 31 3b 0a 20 20 20 20 7d 0a 20  ER BY 1;.    }. 
2800: 20 7d 20 7b 32 20 31 20 39 20 33 20 31 20 31 36   } {2 1 9 3 1 16
2810: 20 37 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 68   7}.  do_test wh
2820: 65 72 65 2d 35 2e 31 30 20 7b 0a 20 20 20 20 63  ere-5.10 {.    c
2830: 6f 75 6e 74 20 7b 0a 20 20 20 20 20 20 53 45 4c  ount {.      SEL
2840: 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48  ECT * FROM t1 WH
2850: 45 52 45 20 78 2b 30 20 49 4e 20 28 31 2c 37 29  ERE x+0 IN (1,7)
2860: 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20 20   ORDER BY 1;.   
2870: 20 7d 0a 20 20 7d 20 7b 32 20 31 20 39 20 33 20   }.  } {2 1 9 3 
2880: 31 20 31 36 20 31 39 39 7d 0a 20 20 64 6f 5f 74  1 16 199}.  do_t
2890: 65 73 74 20 77 68 65 72 65 2d 35 2e 31 31 20 7b  est where-5.11 {
28a0: 0a 20 20 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20  .    count {.   
28b0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
28c0: 20 74 31 20 57 48 45 52 45 20 79 20 49 4e 20 28   t1 WHERE y IN (
28d0: 36 34 30 30 2c 38 31 30 30 29 20 4f 52 44 45 52  6400,8100) ORDER
28e0: 20 42 59 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d   BY 1;.    }.  }
28f0: 20 7b 37 39 20 36 20 36 34 30 30 20 38 39 20 36   {79 6 6400 89 6
2900: 20 38 31 30 30 20 31 39 39 7d 0a 20 20 64 6f 5f   8100 199}.  do_
2910: 74 65 73 74 20 77 68 65 72 65 2d 35 2e 31 32 20  test where-5.12 
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 3d 36 20 41  M t1 WHERE x=6 A
2950: 4e 44 20 79 20 49 4e 20 28 36 34 30 30 2c 38 31  ND y IN (6400,81
2960: 30 30 29 20 4f 52 44 45 52 20 42 59 20 31 3b 0a  00) ORDER BY 1;.
2970: 20 20 20 20 7d 0a 20 20 7d 20 7b 37 39 20 36 20      }.  } {79 6 
2980: 36 34 30 30 20 38 39 20 36 20 38 31 30 30 20 37  6400 89 6 8100 7
2990: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65 72  }.  do_test wher
29a0: 65 2d 35 2e 31 33 20 7b 0a 20 20 20 20 63 6f 75  e-5.13 {.    cou
29b0: 6e 74 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43  nt {.      SELEC
29c0: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
29d0: 45 20 78 20 49 4e 20 28 31 2c 37 29 20 41 4e 44  E x IN (1,7) AND
29e0: 20 79 20 4e 4f 54 20 49 4e 20 28 36 34 30 30 2c   y NOT IN (6400,
29f0: 38 31 30 30 29 20 4f 52 44 45 52 20 42 59 20 31  8100) ORDER BY 1
2a00: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32 20 31  ;.    }.  } {2 1
2a10: 20 39 20 33 20 31 20 31 36 20 37 7d 0a 20 20 64   9 3 1 16 7}.  d
2a20: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 35 2e 31  o_test where-5.1
2a30: 34 20 7b 0a 20 20 20 20 63 6f 75 6e 74 20 7b 0a  4 {.    count {.
2a40: 20 20 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46        SELECT * F
2a50: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 20 49  ROM t1 WHERE x I
2a60: 4e 20 28 31 2c 37 29 20 41 4e 44 20 79 20 49 4e  N (1,7) AND y IN
2a70: 20 28 39 2c 31 30 29 20 4f 52 44 45 52 20 42 59   (9,10) ORDER BY
2a80: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 32   1;.    }.  } {2
2a90: 20 31 20 39 20 38 7d 0a 20 20 64 6f 5f 74 65 73   1 9 8}.  do_tes
2aa0: 74 20 77 68 65 72 65 2d 35 2e 31 35 20 7b 0a 20  t where-5.15 {. 
2ab0: 20 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 20     count {.     
2ac0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2ad0: 31 20 57 48 45 52 45 20 78 20 49 4e 20 28 31 2c  1 WHERE x IN (1,
2ae0: 37 29 20 41 4e 44 20 79 20 49 4e 20 28 39 2c 31  7) AND y IN (9,1
2af0: 36 29 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20  6) ORDER BY 1;. 
2b00: 20 20 20 7d 0a 20 20 7d 20 7b 32 20 31 20 39 20     }.  } {2 1 9 
2b10: 33 20 31 20 31 36 20 31 31 7d 0a 7d 0a 0a 23 20  3 1 16 11}.}..# 
2b20: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 65  This procedure e
2b30: 78 65 63 75 74 65 73 20 74 68 65 20 53 51 4c 2e  xecutes the SQL.
2b40: 20 20 54 68 65 6e 20 69 74 20 63 68 65 63 6b 73    Then it checks
2b50: 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 4f   to see if the O
2b60: 50 5f 53 6f 72 74 0a 23 20 6f 70 63 6f 64 65 20  P_Sort.# opcode 
2b70: 77 61 73 20 65 78 65 63 75 74 65 64 2e 20 20 49  was executed.  I
2b80: 66 20 61 6e 20 4f 50 5f 53 6f 72 74 20 64 69 64  f an OP_Sort did
2b90: 20 6f 63 63 75 72 2c 20 74 68 65 6e 20 22 73 6f   occur, then "so
2ba0: 72 74 22 20 69 73 20 61 70 70 65 6e 64 65 64 0a  rt" is appended.
2bb0: 23 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 2e  # to the result.
2bc0: 20 20 49 66 20 6e 6f 20 4f 50 5f 53 6f 72 74 20    If no OP_Sort 
2bd0: 68 61 70 70 65 6e 65 64 2c 20 74 68 65 6e 20 22  happened, then "
2be0: 6e 6f 73 6f 72 74 22 20 69 73 20 61 70 70 65 6e  nosort" is appen
2bf0: 64 65 64 2e 0a 23 0a 23 20 54 68 69 73 20 70 72  ded..#.# This pr
2c00: 6f 63 65 64 75 72 65 20 69 73 20 75 73 65 64 20  ocedure is used 
2c10: 74 6f 20 63 68 65 63 6b 20 74 6f 20 6d 61 6b 65  to check to make
2c20: 20 73 75 72 65 20 73 6f 72 74 69 6e 67 20 69 73   sure sorting is
2c30: 20 6f 72 20 69 73 20 6e 6f 74 0a 23 20 6f 63 63   or is not.# occ
2c40: 75 72 72 69 6e 67 20 61 73 20 65 78 70 65 63 74  urring as expect
2c50: 65 64 2e 0a 23 0a 70 72 6f 63 20 63 6b 73 6f 72  ed..#.proc cksor
2c60: 74 20 7b 73 71 6c 7d 20 7b 0a 20 20 73 65 74 20  t {sql} {.  set 
2c70: 64 61 74 61 20 5b 65 78 65 63 73 71 6c 20 24 73  data [execsql $s
2c80: 71 6c 5d 0a 20 20 69 66 20 7b 5b 64 62 20 73 74  ql].  if {[db st
2c90: 61 74 75 73 20 73 6f 72 74 5d 7d 20 7b 73 65 74  atus sort]} {set
2ca0: 20 78 20 73 6f 72 74 7d 20 7b 73 65 74 20 78 20   x sort} {set x 
2cb0: 6e 6f 73 6f 72 74 7d 0a 20 20 6c 61 70 70 65 6e  nosort}.  lappen
2cc0: 64 20 64 61 74 61 20 24 78 0a 20 20 72 65 74 75  d data $x.  retu
2cd0: 72 6e 20 24 64 61 74 61 0a 7d 0a 23 20 43 68 65  rn $data.}.# Che
2ce0: 63 6b 20 6f 75 74 20 74 68 65 20 6c 6f 67 69 63  ck out the logic
2cf0: 20 74 68 61 74 20 61 74 74 65 6d 70 74 73 20 74   that attempts t
2d00: 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  o implement the 
2d10: 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 0a  ORDER BY clause.
2d20: 23 20 75 73 69 6e 67 20 61 6e 20 69 6e 64 65 78  # using an index
2d30: 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 79 20   rather than by 
2d40: 73 6f 72 74 69 6e 67 2e 0a 23 0a 64 6f 5f 74 65  sorting..#.do_te
2d50: 73 74 20 77 68 65 72 65 2d 36 2e 31 20 7b 0a 20  st where-6.1 {. 
2d60: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
2d70: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61  REATE TABLE t3(a
2d80: 2c 62 2c 63 29 3b 0a 20 20 20 20 43 52 45 41 54  ,b,c);.    CREAT
2d90: 45 20 49 4e 44 45 58 20 74 33 61 20 4f 4e 20 74  E INDEX t3a ON t
2da0: 33 28 61 29 3b 0a 20 20 20 20 43 52 45 41 54 45  3(a);.    CREATE
2db0: 20 49 4e 44 45 58 20 74 33 62 63 20 4f 4e 20 74   INDEX t3bc ON t
2dc0: 33 28 62 2c 63 29 3b 0a 20 20 20 20 43 52 45 41  3(b,c);.    CREA
2dd0: 54 45 20 49 4e 44 45 58 20 74 33 61 63 62 20 4f  TE INDEX t3acb O
2de0: 4e 20 74 33 28 61 2c 63 2c 62 29 3b 0a 20 20 20  N t3(a,c,b);.   
2df0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20   INSERT INTO t3 
2e00: 53 45 4c 45 43 54 20 77 2c 20 31 30 31 2d 77 2c  SELECT w, 101-w,
2e10: 20 79 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20   y FROM t1;.    
2e20: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 2c  SELECT count(*),
2e30: 20 73 75 6d 28 61 29 2c 20 73 75 6d 28 62 29 2c   sum(a), sum(b),
2e40: 20 73 75 6d 28 63 29 20 46 52 4f 4d 20 74 33 3b   sum(c) FROM t3;
2e50: 0a 20 20 7d 0a 7d 20 7b 31 30 30 20 35 30 35 30  .  }.} {100 5050
2e60: 20 35 30 35 30 20 33 34 38 35 35 30 7d 0a 64 6f   5050 348550}.do
2e70: 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e 32 20  _test where-6.2 
2e80: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
2e90: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2ea0: 33 20 4f 52 44 45 52 20 42 59 20 61 20 4c 49 4d  3 ORDER BY a LIM
2eb0: 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30  IT 3.  }.} {1 10
2ec0: 30 20 34 20 32 20 39 39 20 39 20 33 20 39 38 20  0 4 2 99 9 3 98 
2ed0: 31 36 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  16 nosort}.do_te
2ee0: 73 74 20 77 68 65 72 65 2d 36 2e 33 20 7b 0a 20  st where-6.3 {. 
2ef0: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
2f00: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 4f  LECT * FROM t3 O
2f10: 52 44 45 52 20 42 59 20 61 2b 31 20 4c 49 4d 49  RDER BY a+1 LIMI
2f20: 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30  T 3.  }.} {1 100
2f30: 20 34 20 32 20 39 39 20 39 20 33 20 39 38 20 31   4 2 99 9 3 98 1
2f40: 36 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  6 sort}.do_test 
2f50: 77 68 65 72 65 2d 36 2e 34 20 7b 0a 20 20 63 6b  where-6.4 {.  ck
2f60: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
2f70: 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52  T * FROM t3 WHER
2f80: 45 20 61 3c 31 30 20 4f 52 44 45 52 20 42 59 20  E a<10 ORDER BY 
2f90: 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20  a LIMIT 3.  }.} 
2fa0: 7b 31 20 31 30 30 20 34 20 32 20 39 39 20 39 20  {1 100 4 2 99 9 
2fb0: 33 20 39 38 20 31 36 20 6e 6f 73 6f 72 74 7d 0a  3 98 16 nosort}.
2fc0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e  do_test where-6.
2fd0: 35 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  5 {.  cksort {. 
2fe0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
2ff0: 20 74 33 20 57 48 45 52 45 20 61 3e 30 20 41 4e   t3 WHERE a>0 AN
3000: 44 20 61 3c 31 30 20 4f 52 44 45 52 20 42 59 20  D a<10 ORDER BY 
3010: 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20  a LIMIT 3.  }.} 
3020: 7b 31 20 31 30 30 20 34 20 32 20 39 39 20 39 20  {1 100 4 2 99 9 
3030: 33 20 39 38 20 31 36 20 6e 6f 73 6f 72 74 7d 0a  3 98 16 nosort}.
3040: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e  do_test where-6.
3050: 36 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  6 {.  cksort {. 
3060: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
3070: 20 74 33 20 57 48 45 52 45 20 61 3e 30 20 4f 52   t3 WHERE a>0 OR
3080: 44 45 52 20 42 59 20 61 20 4c 49 4d 49 54 20 33  DER BY a LIMIT 3
3090: 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20  .  }.} {1 100 4 
30a0: 32 20 39 39 20 39 20 33 20 39 38 20 31 36 20 6e  2 99 9 3 98 16 n
30b0: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
30c0: 68 65 72 65 2d 36 2e 37 20 7b 0a 20 20 63 6b 73  here-6.7 {.  cks
30d0: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
30e0: 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45   * FROM t3 WHERE
30f0: 20 62 3e 30 20 4f 52 44 45 52 20 42 59 20 61 20   b>0 ORDER BY a 
3100: 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31  LIMIT 3.  }.} {1
3110: 20 31 30 30 20 34 20 32 20 39 39 20 39 20 33 20   100 4 2 99 9 3 
3120: 39 38 20 31 36 20 6e 6f 73 6f 72 74 7d 0a 69 66  98 16 nosort}.if
3130: 63 61 70 61 62 6c 65 20 73 75 62 71 75 65 72 79  capable subquery
3140: 20 7b 0a 20 20 64 6f 5f 74 65 73 74 20 77 68 65   {.  do_test whe
3150: 72 65 2d 36 2e 38 20 7b 0a 20 20 20 20 63 6b 73  re-6.8 {.    cks
3160: 6f 72 74 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  ort {.      SELE
3170: 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45  CT * FROM t3 WHE
3180: 52 45 20 61 20 49 4e 20 28 33 2c 35 2c 37 2c 31  RE a IN (3,5,7,1
3190: 2c 39 2c 34 2c 32 29 20 4f 52 44 45 52 20 42 59  ,9,4,2) ORDER BY
31a0: 20 61 20 4c 49 4d 49 54 20 33 0a 20 20 20 20 7d   a LIMIT 3.    }
31b0: 0a 20 20 7d 20 7b 31 20 31 30 30 20 34 20 32 20  .  } {1 100 4 2 
31c0: 39 39 20 39 20 33 20 39 38 20 31 36 20 73 6f 72  99 9 3 98 16 sor
31d0: 74 7d 0a 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  t}.}.do_test whe
31e0: 72 65 2d 36 2e 39 2e 31 20 7b 0a 20 20 63 6b 73  re-6.9.1 {.  cks
31f0: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
3200: 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45   * FROM t3 WHERE
3210: 20 61 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52 44   a=1 AND c>0 ORD
3220: 45 52 20 42 59 20 61 20 4c 49 4d 49 54 20 33 0a  ER BY a LIMIT 3.
3230: 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20 6e    }.} {1 100 4 n
3240: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
3250: 68 65 72 65 2d 36 2e 39 2e 31 2e 31 20 7b 0a 20  here-6.9.1.1 {. 
3260: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
3270: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57  LECT * FROM t3 W
3280: 48 45 52 45 20 61 3e 3d 31 20 41 4e 44 20 61 3d  HERE a>=1 AND a=
3290: 31 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20  1 AND c>0 ORDER 
32a0: 42 59 20 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d  BY a LIMIT 3.  }
32b0: 0a 7d 20 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f  .} {1 100 4 noso
32c0: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
32d0: 65 2d 36 2e 39 2e 31 2e 32 20 7b 0a 20 20 63 6b  e-6.9.1.2 {.  ck
32e0: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
32f0: 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52  T * FROM t3 WHER
3300: 45 20 61 3c 32 20 41 4e 44 20 61 3d 31 20 41 4e  E a<2 AND a=1 AN
3310: 44 20 63 3e 30 20 4f 52 44 45 52 20 42 59 20 61  D c>0 ORDER BY a
3320: 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b   LIMIT 3.  }.} {
3330: 31 20 31 30 30 20 34 20 6e 6f 73 6f 72 74 7d 0a  1 100 4 nosort}.
3340: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e  do_test where-6.
3350: 39 2e 32 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  9.2 {.  cksort {
3360: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
3370: 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d 31 20  OM t3 WHERE a=1 
3380: 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20 42 59  AND c>0 ORDER BY
3390: 20 61 2c 63 20 4c 49 4d 49 54 20 33 0a 20 20 7d   a,c LIMIT 3.  }
33a0: 0a 7d 20 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f  .} {1 100 4 noso
33b0: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
33c0: 65 2d 36 2e 39 2e 33 20 7b 0a 20 20 63 6b 73 6f  e-6.9.3 {.  ckso
33d0: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
33e0: 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20  * FROM t3 WHERE 
33f0: 61 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52 44 45  a=1 AND c>0 ORDE
3400: 52 20 42 59 20 63 20 4c 49 4d 49 54 20 33 0a 20  R BY c LIMIT 3. 
3410: 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20 6e 6f   }.} {1 100 4 no
3420: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
3430: 65 72 65 2d 36 2e 39 2e 34 20 7b 0a 20 20 63 6b  ere-6.9.4 {.  ck
3440: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
3450: 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52  T * FROM t3 WHER
3460: 45 20 61 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52  E a=1 AND c>0 OR
3470: 44 45 52 20 42 59 20 61 20 44 45 53 43 20 4c 49  DER BY a DESC LI
3480: 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31  MIT 3.  }.} {1 1
3490: 30 30 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f  00 4 nosort}.do_
34a0: 74 65 73 74 20 77 68 65 72 65 2d 36 2e 39 2e 35  test where-6.9.5
34b0: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
34c0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
34d0: 74 33 20 57 48 45 52 45 20 61 3d 31 20 41 4e 44  t3 WHERE a=1 AND
34e0: 20 63 3e 30 20 4f 52 44 45 52 20 42 59 20 61 20   c>0 ORDER BY a 
34f0: 44 45 53 43 2c 20 63 20 44 45 53 43 20 4c 49 4d  DESC, c DESC LIM
3500: 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30  IT 3.  }.} {1 10
3510: 30 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74  0 4 nosort}.do_t
3520: 65 73 74 20 77 68 65 72 65 2d 36 2e 39 2e 36 20  est where-6.9.6 
3530: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
3540: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
3550: 33 20 57 48 45 52 45 20 61 3d 31 20 41 4e 44 20  3 WHERE a=1 AND 
3560: 63 3e 30 20 4f 52 44 45 52 20 42 59 20 63 20 44  c>0 ORDER BY c D
3570: 45 53 43 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a  ESC LIMIT 3.  }.
3580: 7d 20 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f 72  } {1 100 4 nosor
3590: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
35a0: 2d 36 2e 39 2e 37 20 7b 0a 20 20 63 6b 73 6f 72  -6.9.7 {.  cksor
35b0: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t {.    SELECT *
35c0: 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61   FROM t3 WHERE a
35d0: 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52  =1 AND c>0 ORDER
35e0: 20 42 59 20 63 2c 61 20 4c 49 4d 49 54 20 33 0a   BY c,a LIMIT 3.
35f0: 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20 73    }.} {1 100 4 s
3600: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
3610: 72 65 2d 36 2e 39 2e 38 20 7b 0a 20 20 63 6b 73  re-6.9.8 {.  cks
3620: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
3630: 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45   * FROM t3 WHERE
3640: 20 61 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52 44   a=1 AND c>0 ORD
3650: 45 52 20 42 59 20 61 20 44 45 53 43 2c 20 63 20  ER BY a DESC, c 
3660: 41 53 43 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a  ASC LIMIT 3.  }.
3670: 7d 20 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f 72  } {1 100 4 nosor
3680: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
3690: 2d 36 2e 39 2e 39 20 7b 0a 20 20 63 6b 73 6f 72  -6.9.9 {.  cksor
36a0: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t {.    SELECT *
36b0: 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61   FROM t3 WHERE a
36c0: 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52  =1 AND c>0 ORDER
36d0: 20 42 59 20 61 20 41 53 43 2c 20 63 20 44 45 53   BY a ASC, c DES
36e0: 43 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20  C LIMIT 3.  }.} 
36f0: 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f 72 74 7d  {1 100 4 nosort}
3700: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36  .do_test where-6
3710: 2e 31 30 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  .10 {.  cksort {
3720: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
3730: 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d 31 20  OM t3 WHERE a=1 
3740: 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20 42 59  AND c>0 ORDER BY
3750: 20 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d   a LIMIT 3.  }.}
3760: 20 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f 72 74   {1 100 4 nosort
3770: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
3780: 36 2e 31 31 20 7b 0a 20 20 63 6b 73 6f 72 74 20  6.11 {.  cksort 
3790: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
37a0: 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d 31  ROM t3 WHERE a=1
37b0: 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20 42   AND c>0 ORDER B
37c0: 59 20 61 2c 63 20 4c 49 4d 49 54 20 33 0a 20 20  Y a,c LIMIT 3.  
37d0: 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20 6e 6f 73  }.} {1 100 4 nos
37e0: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
37f0: 72 65 2d 36 2e 31 32 20 7b 0a 20 20 63 6b 73 6f  re-6.12 {.  ckso
3800: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
3810: 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20  * FROM t3 WHERE 
3820: 61 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52 44 45  a=1 AND c>0 ORDE
3830: 52 20 42 59 20 61 2c 63 2c 62 20 4c 49 4d 49 54  R BY a,c,b LIMIT
3840: 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20   3.  }.} {1 100 
3850: 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  4 nosort}.do_tes
3860: 74 20 77 68 65 72 65 2d 36 2e 31 33 20 7b 0a 20  t where-6.13 {. 
3870: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
3880: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57  LECT * FROM t3 W
3890: 48 45 52 45 20 61 3e 30 20 4f 52 44 45 52 20 42  HERE a>0 ORDER B
38a0: 59 20 61 20 44 45 53 43 20 4c 49 4d 49 54 20 33  Y a DESC LIMIT 3
38b0: 0a 20 20 7d 0a 7d 20 7b 31 30 30 20 31 20 31 30  .  }.} {100 1 10
38c0: 32 30 31 20 39 39 20 32 20 31 30 30 30 30 20 39  201 99 2 10000 9
38d0: 38 20 33 20 39 38 30 31 20 6e 6f 73 6f 72 74 7d  8 3 9801 nosort}
38e0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36  .do_test where-6
38f0: 2e 31 33 2e 31 20 7b 0a 20 20 63 6b 73 6f 72 74  .13.1 {.  cksort
3900: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
3910: 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3e  FROM t3 WHERE a>
3920: 30 20 4f 52 44 45 52 20 42 59 20 2d 61 20 4c 49  0 ORDER BY -a LI
3930: 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 30 30  MIT 3.  }.} {100
3940: 20 31 20 31 30 32 30 31 20 39 39 20 32 20 31 30   1 10201 99 2 10
3950: 30 30 30 20 39 38 20 33 20 39 38 30 31 20 73 6f  000 98 3 9801 so
3960: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
3970: 65 2d 36 2e 31 34 20 7b 0a 20 20 63 6b 73 6f 72  e-6.14 {.  cksor
3980: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t {.    SELECT *
3990: 20 46 52 4f 4d 20 74 33 20 4f 52 44 45 52 20 42   FROM t3 ORDER B
39a0: 59 20 62 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a  Y b LIMIT 3.  }.
39b0: 7d 20 7b 31 30 30 20 31 20 31 30 32 30 31 20 39  } {100 1 10201 9
39c0: 39 20 32 20 31 30 30 30 30 20 39 38 20 33 20 39  9 2 10000 98 3 9
39d0: 38 30 31 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74  801 nosort}.do_t
39e0: 65 73 74 20 77 68 65 72 65 2d 36 2e 31 35 20 7b  est where-6.15 {
39f0: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
3a00: 53 45 4c 45 43 54 20 74 33 2e 61 2c 20 74 31 2e  SELECT t3.a, t1.
3a10: 78 20 46 52 4f 4d 20 74 33 2c 20 74 31 20 57 48  x FROM t3, t1 WH
3a20: 45 52 45 20 74 33 2e 61 3d 74 31 2e 77 20 4f 52  ERE t3.a=t1.w OR
3a30: 44 45 52 20 42 59 20 74 33 2e 61 20 4c 49 4d 49  DER BY t3.a LIMI
3a40: 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 30 20 32  T 3.  }.} {1 0 2
3a50: 20 31 20 33 20 31 20 6e 6f 73 6f 72 74 7d 0a 64   1 3 1 nosort}.d
3a60: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e 31  o_test where-6.1
3a70: 36 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  6 {.  cksort {. 
3a80: 20 20 20 53 45 4c 45 43 54 20 74 33 2e 61 2c 20     SELECT t3.a, 
3a90: 74 31 2e 78 20 46 52 4f 4d 20 74 33 2c 20 74 31  t1.x FROM t3, t1
3aa0: 20 57 48 45 52 45 20 74 33 2e 61 3d 74 31 2e 77   WHERE t3.a=t1.w
3ab0: 20 4f 52 44 45 52 20 42 59 20 74 31 2e 78 2c 20   ORDER BY t1.x, 
3ac0: 74 33 2e 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d  t3.a LIMIT 3.  }
3ad0: 0a 7d 20 7b 31 20 30 20 32 20 31 20 33 20 31 20  .} {1 0 2 1 3 1 
3ae0: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
3af0: 65 72 65 2d 36 2e 31 39 20 7b 0a 20 20 63 6b 73  ere-6.19 {.  cks
3b00: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
3b10: 20 79 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52   y FROM t1 ORDER
3b20: 20 42 59 20 77 20 4c 49 4d 49 54 20 33 3b 0a 20   BY w LIMIT 3;. 
3b30: 20 7d 0a 7d 20 7b 34 20 39 20 31 36 20 6e 6f 73   }.} {4 9 16 nos
3b40: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
3b50: 72 65 2d 36 2e 32 30 20 7b 0a 20 20 63 6b 73 6f  re-6.20 {.  ckso
3b60: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
3b70: 79 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20  y FROM t1 ORDER 
3b80: 42 59 20 72 6f 77 69 64 20 4c 49 4d 49 54 20 33  BY rowid LIMIT 3
3b90: 3b 0a 20 20 7d 0a 7d 20 7b 34 20 39 20 31 36 20  ;.  }.} {4 9 16 
3ba0: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
3bb0: 77 68 65 72 65 2d 36 2e 32 31 20 7b 0a 20 20 63  where-6.21 {.  c
3bc0: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
3bd0: 43 54 20 79 20 46 52 4f 4d 20 74 31 20 4f 52 44  CT y FROM t1 ORD
3be0: 45 52 20 42 59 20 72 6f 77 69 64 2c 20 79 20 4c  ER BY rowid, y L
3bf0: 49 4d 49 54 20 33 3b 0a 20 20 7d 0a 7d 20 7b 34  IMIT 3;.  }.} {4
3c00: 20 39 20 31 36 20 6e 6f 73 6f 72 74 7d 0a 64 6f   9 16 nosort}.do
3c10: 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e 32 32  _test where-6.22
3c20: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
3c30: 20 20 53 45 4c 45 43 54 20 79 20 46 52 4f 4d 20    SELECT y FROM 
3c40: 74 31 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69  t1 ORDER BY rowi
3c50: 64 2c 20 79 20 44 45 53 43 20 4c 49 4d 49 54 20  d, y DESC LIMIT 
3c60: 33 3b 0a 20 20 7d 0a 7d 20 7b 34 20 39 20 31 36  3;.  }.} {4 9 16
3c70: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
3c80: 20 77 68 65 72 65 2d 36 2e 32 33 20 7b 0a 20 20   where-6.23 {.  
3c90: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
3ca0: 45 43 54 20 79 20 46 52 4f 4d 20 74 31 20 57 48  ECT y FROM t1 WH
3cb0: 45 52 45 20 79 3e 34 20 4f 52 44 45 52 20 42 59  ERE y>4 ORDER BY
3cc0: 20 72 6f 77 69 64 2c 20 77 2c 20 78 20 4c 49 4d   rowid, w, x LIM
3cd0: 49 54 20 33 3b 0a 20 20 7d 0a 7d 20 7b 39 20 31  IT 3;.  }.} {9 1
3ce0: 36 20 32 35 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f  6 25 nosort}.do_
3cf0: 74 65 73 74 20 77 68 65 72 65 2d 36 2e 32 34 20  test where-6.24 
3d00: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
3d10: 20 53 45 4c 45 43 54 20 79 20 46 52 4f 4d 20 74   SELECT y FROM t
3d20: 31 20 57 48 45 52 45 20 79 3e 3d 39 20 4f 52 44  1 WHERE y>=9 ORD
3d30: 45 52 20 42 59 20 72 6f 77 69 64 2c 20 78 20 44  ER BY rowid, x D
3d40: 45 53 43 2c 20 77 20 4c 49 4d 49 54 20 33 3b 0a  ESC, w LIMIT 3;.
3d50: 20 20 7d 0a 7d 20 7b 39 20 31 36 20 32 35 20 6e    }.} {9 16 25 n
3d60: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
3d70: 68 65 72 65 2d 36 2e 32 35 20 7b 0a 20 20 63 6b  here-6.25 {.  ck
3d80: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
3d90: 54 20 79 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T y FROM t1 WHER
3da0: 45 20 79 3e 34 20 41 4e 44 20 79 3c 32 35 20 4f  E y>4 AND y<25 O
3db0: 52 44 45 52 20 42 59 20 72 6f 77 69 64 3b 0a 20  RDER BY rowid;. 
3dc0: 20 7d 0a 7d 20 7b 39 20 31 36 20 6e 6f 73 6f 72   }.} {9 16 nosor
3dd0: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
3de0: 2d 36 2e 32 36 20 7b 0a 20 20 63 6b 73 6f 72 74  -6.26 {.  cksort
3df0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 79 20   {.    SELECT y 
3e00: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3e  FROM t1 WHERE y>
3e10: 3d 34 20 41 4e 44 20 79 3c 3d 32 35 20 4f 52 44  =4 AND y<=25 ORD
3e20: 45 52 20 42 59 20 6f 69 64 3b 0a 20 20 7d 0a 7d  ER BY oid;.  }.}
3e30: 20 7b 34 20 39 20 31 36 20 32 35 20 6e 6f 73 6f   {4 9 16 25 noso
3e40: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
3e50: 65 2d 36 2e 32 37 20 7b 0a 20 20 63 6b 73 6f 72  e-6.27 {.  cksor
3e60: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 79  t {.    SELECT y
3e70: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79   FROM t1 WHERE y
3e80: 3c 3d 32 35 20 4f 52 44 45 52 20 42 59 20 5f 72  <=25 ORDER BY _r
3e90: 6f 77 69 64 5f 2c 20 77 2b 79 3b 0a 20 20 7d 0a  owid_, w+y;.  }.
3ea0: 7d 20 7b 34 20 39 20 31 36 20 32 35 20 6e 6f 73  } {4 9 16 25 nos
3eb0: 6f 72 74 7d 0a 0a 0a 23 20 54 65 73 74 73 20 66  ort}...# Tests f
3ec0: 6f 72 20 72 65 76 65 72 73 65 2d 6f 72 64 65 72  or reverse-order
3ed0: 20 73 6f 72 74 69 6e 67 2e 0a 23 0a 64 6f 5f 74   sorting..#.do_t
3ee0: 65 73 74 20 77 68 65 72 65 2d 37 2e 31 20 7b 0a  est where-7.1 {.
3ef0: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
3f00: 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20  ELECT w FROM t1 
3f10: 57 48 45 52 45 20 78 3d 33 20 4f 52 44 45 52 20  WHERE x=3 ORDER 
3f20: 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 38 20 39  BY y;.  }.} {8 9
3f30: 20 31 30 20 31 31 20 31 32 20 31 33 20 31 34 20   10 11 12 13 14 
3f40: 31 35 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  15 nosort}.do_te
3f50: 73 74 20 77 68 65 72 65 2d 37 2e 32 20 7b 0a 20  st where-7.2 {. 
3f60: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
3f70: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
3f80: 48 45 52 45 20 78 3d 33 20 4f 52 44 45 52 20 42  HERE x=3 ORDER B
3f90: 59 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20  Y y DESC;.  }.} 
3fa0: 7b 31 35 20 31 34 20 31 33 20 31 32 20 31 31 20  {15 14 13 12 11 
3fb0: 31 30 20 39 20 38 20 6e 6f 73 6f 72 74 7d 0a 64  10 9 8 nosort}.d
3fc0: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 33  o_test where-7.3
3fd0: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
3fe0: 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20    SELECT w FROM 
3ff0: 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44  t1 WHERE x=3 AND
4000: 20 79 3e 31 30 30 20 4f 52 44 45 52 20 42 59 20   y>100 ORDER BY 
4010: 79 20 4c 49 4d 49 54 20 33 3b 0a 20 20 7d 0a 7d  y LIMIT 3;.  }.}
4020: 20 7b 31 30 20 31 31 20 31 32 20 6e 6f 73 6f 72   {10 11 12 nosor
4030: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
4040: 2d 37 2e 34 20 7b 0a 20 20 63 6b 73 6f 72 74 20  -7.4 {.  cksort 
4050: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46  {.    SELECT w F
4060: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33  ROM t1 WHERE x=3
4070: 20 41 4e 44 20 79 3e 31 30 30 20 4f 52 44 45 52   AND y>100 ORDER
4080: 20 42 59 20 79 20 44 45 53 43 20 4c 49 4d 49 54   BY y DESC LIMIT
4090: 20 33 3b 0a 20 20 7d 0a 7d 20 7b 31 35 20 31 34   3;.  }.} {15 14
40a0: 20 31 33 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74   13 nosort}.do_t
40b0: 65 73 74 20 77 68 65 72 65 2d 37 2e 35 20 7b 0a  est where-7.5 {.
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: 31 32 31 20 4f 52 44 45 52 20 42 59 20 79 20 44  121 ORDER BY y D
4100: 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 35 20 31  ESC;.  }.} {15 1
4110: 34 20 31 33 20 31 32 20 31 31 20 6e 6f 73 6f 72  4 13 12 11 nosor
4120: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
4130: 2d 37 2e 36 20 7b 0a 20 20 63 6b 73 6f 72 74 20  -7.6 {.  cksort 
4140: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46  {.    SELECT w F
4150: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33  ROM t1 WHERE x=3
4160: 20 41 4e 44 20 79 3e 3d 31 32 31 20 4f 52 44 45   AND y>=121 ORDE
4170: 52 20 42 59 20 79 20 44 45 53 43 3b 0a 20 20 7d  R BY y DESC;.  }
4180: 0a 7d 20 7b 31 35 20 31 34 20 31 33 20 31 32 20  .} {15 14 13 12 
4190: 31 31 20 31 30 20 6e 6f 73 6f 72 74 7d 0a 64 6f  11 10 nosort}.do
41a0: 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 37 20  _test where-7.7 
41b0: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
41c0: 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74   SELECT w FROM t
41d0: 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20  1 WHERE x=3 AND 
41e0: 79 3e 3d 31 32 31 20 41 4e 44 20 79 3c 31 39 36  y>=121 AND y<196
41f0: 20 4f 52 44 45 52 20 42 59 20 79 20 44 45 53 43   ORDER BY y DESC
4200: 3b 0a 20 20 7d 0a 7d 20 7b 31 32 20 31 31 20 31  ;.  }.} {12 11 1
4210: 30 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  0 nosort}.do_tes
4220: 74 20 77 68 65 72 65 2d 37 2e 38 20 7b 0a 20 20  t where-7.8 {.  
4230: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
4240: 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48  ECT w FROM t1 WH
4250: 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e 3d 31  ERE x=3 AND y>=1
4260: 32 31 20 41 4e 44 20 79 3c 3d 31 39 36 20 4f 52  21 AND y<=196 OR
4270: 44 45 52 20 42 59 20 79 20 44 45 53 43 3b 0a 20  DER BY y DESC;. 
4280: 20 7d 0a 7d 20 7b 31 33 20 31 32 20 31 31 20 31   }.} {13 12 11 1
4290: 30 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  0 nosort}.do_tes
42a0: 74 20 77 68 65 72 65 2d 37 2e 39 20 7b 0a 20 20  t where-7.9 {.  
42b0: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
42c0: 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48  ECT w FROM t1 WH
42d0: 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e 31 32  ERE x=3 AND y>12
42e0: 31 20 41 4e 44 20 79 3c 3d 31 39 36 20 4f 52 44  1 AND y<=196 ORD
42f0: 45 52 20 42 59 20 79 20 44 45 53 43 3b 0a 20 20  ER BY y DESC;.  
4300: 7d 0a 7d 20 7b 31 33 20 31 32 20 31 31 20 6e 6f  }.} {13 12 11 no
4310: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
4320: 65 72 65 2d 37 2e 31 30 20 7b 0a 20 20 63 6b 73  ere-7.10 {.  cks
4330: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
4340: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
4350: 20 78 3d 33 20 41 4e 44 20 79 3e 31 30 30 20 41   x=3 AND y>100 A
4360: 4e 44 20 79 3c 31 39 36 20 4f 52 44 45 52 20 42  ND y<196 ORDER B
4370: 59 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20  Y y DESC;.  }.} 
4380: 7b 31 32 20 31 31 20 31 30 20 6e 6f 73 6f 72 74  {12 11 10 nosort
4390: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
43a0: 37 2e 31 31 20 7b 0a 20 20 63 6b 73 6f 72 74 20  7.11 {.  cksort 
43b0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46  {.    SELECT w F
43c0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33  ROM t1 WHERE x=3
43d0: 20 41 4e 44 20 79 3e 3d 31 32 31 20 41 4e 44 20   AND y>=121 AND 
43e0: 79 3c 31 39 36 20 4f 52 44 45 52 20 42 59 20 79  y<196 ORDER BY y
43f0: 3b 0a 20 20 7d 0a 7d 20 7b 31 30 20 31 31 20 31  ;.  }.} {10 11 1
4400: 32 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  2 nosort}.do_tes
4410: 74 20 77 68 65 72 65 2d 37 2e 31 32 20 7b 0a 20  t where-7.12 {. 
4420: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
4430: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
4440: 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e 3d  HERE x=3 AND y>=
4450: 31 32 31 20 41 4e 44 20 79 3c 3d 31 39 36 20 4f  121 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 31 33 20 6e 6f   {10 11 12 13 no
4480: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
4490: 65 72 65 2d 37 2e 31 33 20 7b 0a 20 20 63 6b 73  ere-7.13 {.  cks
44a0: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
44b0: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
44c0: 20 78 3d 33 20 41 4e 44 20 79 3e 31 32 31 20 41   x=3 AND y>121 A
44d0: 4e 44 20 79 3c 3d 31 39 36 20 4f 52 44 45 52 20  ND y<=196 ORDER 
44e0: 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20  BY y;.  }.} {11 
44f0: 31 32 20 31 33 20 6e 6f 73 6f 72 74 7d 0a 64 6f  12 13 nosort}.do
4500: 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 31 34  _test where-7.14
4510: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
4520: 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20    SELECT w FROM 
4530: 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44  t1 WHERE x=3 AND
4540: 20 79 3e 31 30 30 20 41 4e 44 20 79 3c 31 39 36   y>100 AND y<196
4550: 20 4f 52 44 45 52 20 42 59 20 79 3b 0a 20 20 7d   ORDER BY y;.  }
4560: 0a 7d 20 7b 31 30 20 31 31 20 31 32 20 6e 6f 73  .} {10 11 12 nos
4570: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
4580: 72 65 2d 37 2e 31 35 20 7b 0a 20 20 63 6b 73 6f  re-7.15 {.  ckso
4590: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
45a0: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
45b0: 78 3d 33 20 41 4e 44 20 79 3c 38 31 20 4f 52 44  x=3 AND y<81 ORD
45c0: 45 52 20 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b  ER BY y;.  }.} {
45d0: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
45e0: 77 68 65 72 65 2d 37 2e 31 36 20 7b 0a 20 20 63  where-7.16 {.  c
45f0: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
4600: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
4610: 52 45 20 78 3d 33 20 41 4e 44 20 79 3c 3d 38 31  RE x=3 AND y<=81
4620: 20 4f 52 44 45 52 20 42 59 20 79 3b 0a 20 20 7d   ORDER BY y;.  }
4630: 0a 7d 20 7b 38 20 6e 6f 73 6f 72 74 7d 0a 64 6f  .} {8 nosort}.do
4640: 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 31 37  _test where-7.17
4650: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
4660: 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20    SELECT w FROM 
4670: 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44  t1 WHERE x=3 AND
4680: 20 79 3e 32 35 36 20 4f 52 44 45 52 20 42 59 20   y>256 ORDER BY 
4690: 79 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74  y;.  }.} {nosort
46a0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
46b0: 37 2e 31 38 20 7b 0a 20 20 63 6b 73 6f 72 74 20  7.18 {.  cksort 
46c0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46  {.    SELECT w F
46d0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33  ROM t1 WHERE x=3
46e0: 20 41 4e 44 20 79 3e 3d 32 35 36 20 4f 52 44 45   AND y>=256 ORDE
46f0: 52 20 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 31  R BY y;.  }.} {1
4700: 35 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  5 nosort}.do_tes
4710: 74 20 77 68 65 72 65 2d 37 2e 31 39 20 7b 0a 20  t where-7.19 {. 
4720: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
4730: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
4740: 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3c 38  HERE x=3 AND y<8
4750: 31 20 4f 52 44 45 52 20 42 59 20 79 20 44 45 53  1 ORDER BY y DES
4760: 43 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74  C;.  }.} {nosort
4770: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
4780: 37 2e 32 30 20 7b 0a 20 20 63 6b 73 6f 72 74 20  7.20 {.  cksort 
4790: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46  {.    SELECT w F
47a0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33  ROM t1 WHERE x=3
47b0: 20 41 4e 44 20 79 3c 3d 38 31 20 4f 52 44 45 52   AND y<=81 ORDER
47c0: 20 42 59 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a   BY y DESC;.  }.
47d0: 7d 20 7b 38 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f  } {8 nosort}.do_
47e0: 74 65 73 74 20 77 68 65 72 65 2d 37 2e 32 31 20  test where-7.21 
47f0: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
4800: 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74   SELECT w FROM t
4810: 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20  1 WHERE x=3 AND 
4820: 79 3e 32 35 36 20 4f 52 44 45 52 20 42 59 20 79  y>256 ORDER BY y
4830: 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f   DESC;.  }.} {no
4840: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
4850: 65 72 65 2d 37 2e 32 32 20 7b 0a 20 20 63 6b 73  ere-7.22 {.  cks
4860: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
4870: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
4880: 20 78 3d 33 20 41 4e 44 20 79 3e 3d 32 35 36 20   x=3 AND y>=256 
4890: 4f 52 44 45 52 20 42 59 20 79 20 44 45 53 43 3b  ORDER BY y DESC;
48a0: 0a 20 20 7d 0a 7d 20 7b 31 35 20 6e 6f 73 6f 72  .  }.} {15 nosor
48b0: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
48c0: 2d 37 2e 32 33 20 7b 0a 20 20 63 6b 73 6f 72 74  -7.23 {.  cksort
48d0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20   {.    SELECT w 
48e0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d  FROM t1 WHERE x=
48f0: 30 20 41 4e 44 20 79 3c 34 20 4f 52 44 45 52 20  0 AND y<4 ORDER 
4900: 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f 73  BY y;.  }.} {nos
4910: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
4920: 72 65 2d 37 2e 32 34 20 7b 0a 20 20 63 6b 73 6f  re-7.24 {.  ckso
4930: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
4940: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
4950: 78 3d 30 20 41 4e 44 20 79 3c 3d 34 20 4f 52 44  x=0 AND y<=4 ORD
4960: 45 52 20 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b  ER BY y;.  }.} {
4970: 31 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  1 nosort}.do_tes
4980: 74 20 77 68 65 72 65 2d 37 2e 32 35 20 7b 0a 20  t where-7.25 {. 
4990: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
49a0: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
49b0: 48 45 52 45 20 78 3d 36 20 41 4e 44 20 79 3e 31  HERE x=6 AND y>1
49c0: 30 32 30 31 20 4f 52 44 45 52 20 42 59 20 79 3b  0201 ORDER BY y;
49d0: 0a 20 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a  .  }.} {nosort}.
49e0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e  do_test where-7.
49f0: 32 36 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  26 {.  cksort {.
4a00: 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f      SELECT w FRO
4a10: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 36 20 41  M t1 WHERE x=6 A
4a20: 4e 44 20 79 3e 3d 31 30 32 30 31 20 4f 52 44 45  ND y>=10201 ORDE
4a30: 52 20 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 31  R BY y;.  }.} {1
4a40: 30 30 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  00 nosort}.do_te
4a50: 73 74 20 77 68 65 72 65 2d 37 2e 32 37 20 7b 0a  st where-7.27 {.
4a60: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
4a70: 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20  ELECT w FROM t1 
4a80: 57 48 45 52 45 20 78 3d 30 20 41 4e 44 20 79 3c  WHERE x=0 AND y<
4a90: 34 20 4f 52 44 45 52 20 42 59 20 79 20 44 45 53  4 ORDER BY y DES
4aa0: 43 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74  C;.  }.} {nosort
4ab0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
4ac0: 37 2e 32 38 20 7b 0a 20 20 63 6b 73 6f 72 74 20  7.28 {.  cksort 
4ad0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46  {.    SELECT w F
4ae0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 30  ROM t1 WHERE x=0
4af0: 20 41 4e 44 20 79 3c 3d 34 20 4f 52 44 45 52 20   AND y<=4 ORDER 
4b00: 42 59 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d  BY y DESC;.  }.}
4b10: 20 7b 31 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74   {1 nosort}.do_t
4b20: 65 73 74 20 77 68 65 72 65 2d 37 2e 32 39 20 7b  est where-7.29 {
4b30: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
4b40: 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31  SELECT w FROM t1
4b50: 20 57 48 45 52 45 20 78 3d 36 20 41 4e 44 20 79   WHERE x=6 AND y
4b60: 3e 31 30 32 30 31 20 4f 52 44 45 52 20 42 59 20  >10201 ORDER BY 
4b70: 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 6e  y DESC;.  }.} {n
4b80: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
4b90: 68 65 72 65 2d 37 2e 33 30 20 7b 0a 20 20 63 6b  here-7.30 {.  ck
4ba0: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
4bb0: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
4bc0: 45 20 78 3d 36 20 41 4e 44 20 79 3e 3d 31 30 32  E x=6 AND y>=102
4bd0: 30 31 20 4f 52 44 45 52 20 42 59 20 79 20 44 45  01 ORDER BY y DE
4be0: 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 30 30 20 6e  SC;.  }.} {100 n
4bf0: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
4c00: 68 65 72 65 2d 37 2e 33 31 20 7b 0a 20 20 63 6b  here-7.31 {.  ck
4c10: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
4c20: 54 20 79 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  T y FROM t1 ORDE
4c30: 52 20 42 59 20 72 6f 77 69 64 20 44 45 53 43 20  R BY rowid DESC 
4c40: 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31  LIMIT 3.  }.} {1
4c50: 30 32 30 31 20 31 30 30 30 30 20 39 38 30 31 20  0201 10000 9801 
4c60: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
4c70: 77 68 65 72 65 2d 37 2e 33 32 20 7b 0a 20 20 63  where-7.32 {.  c
4c80: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
4c90: 43 54 20 79 20 46 52 4f 4d 20 74 31 20 57 48 45  CT y FROM t1 WHE
4ca0: 52 45 20 79 3c 32 35 20 4f 52 44 45 52 20 42 59  RE y<25 ORDER BY
4cb0: 20 72 6f 77 69 64 20 44 45 53 43 0a 20 20 7d 0a   rowid DESC.  }.
4cc0: 7d 20 7b 31 36 20 39 20 34 20 6e 6f 73 6f 72 74  } {16 9 4 nosort
4cd0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
4ce0: 37 2e 33 33 20 7b 0a 20 20 63 6b 73 6f 72 74 20  7.33 {.  cksort 
4cf0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 79 20 46  {.    SELECT y F
4d00: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3c 3d  ROM t1 WHERE y<=
4d10: 32 35 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69  25 ORDER BY rowi
4d20: 64 20 44 45 53 43 0a 20 20 7d 0a 7d 20 7b 32 35  d DESC.  }.} {25
4d30: 20 31 36 20 39 20 34 20 6e 6f 73 6f 72 74 7d 0a   16 9 4 nosort}.
4d40: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e  do_test where-7.
4d50: 33 34 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  34 {.  cksort {.
4d60: 20 20 20 20 53 45 4c 45 43 54 20 79 20 46 52 4f      SELECT y FRO
4d70: 4d 20 74 31 20 57 48 45 52 45 20 79 3c 32 35 20  M t1 WHERE y<25 
4d80: 41 4e 44 20 79 3e 34 20 4f 52 44 45 52 20 42 59  AND y>4 ORDER BY
4d90: 20 72 6f 77 69 64 20 44 45 53 43 2c 20 79 20 44   rowid DESC, y D
4da0: 45 53 43 0a 20 20 7d 0a 7d 20 7b 31 36 20 39 20  ESC.  }.} {16 9 
4db0: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
4dc0: 77 68 65 72 65 2d 37 2e 33 35 20 7b 0a 20 20 63  where-7.35 {.  c
4dd0: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
4de0: 43 54 20 79 20 46 52 4f 4d 20 74 31 20 57 48 45  CT y FROM t1 WHE
4df0: 52 45 20 79 3c 32 35 20 41 4e 44 20 79 3e 3d 34  RE y<25 AND y>=4
4e00: 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20   ORDER BY rowid 
4e10: 44 45 53 43 0a 20 20 7d 0a 7d 20 7b 31 36 20 39  DESC.  }.} {16 9
4e20: 20 34 20 6e 6f 73 6f 72 74 7d 0a 0a 64 6f 5f 74   4 nosort}..do_t
4e30: 65 73 74 20 77 68 65 72 65 2d 38 2e 31 20 7b 0a  est where-8.1 {.
4e40: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4e50: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34 20  CREATE TABLE t4 
4e60: 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  AS SELECT * FROM
4e70: 20 74 31 3b 0a 20 20 20 20 43 52 45 41 54 45 20   t1;.    CREATE 
4e80: 49 4e 44 45 58 20 69 34 78 79 20 4f 4e 20 74 34  INDEX i4xy ON t4
4e90: 28 78 2c 79 29 3b 0a 20 20 7d 0a 20 20 63 6b 73  (x,y);.  }.  cks
4ea0: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
4eb0: 20 77 20 46 52 4f 4d 20 74 34 20 57 48 45 52 45   w FROM t4 WHERE
4ec0: 20 78 3d 34 20 61 6e 64 20 79 3c 31 30 30 30 20   x=4 and y<1000 
4ed0: 4f 52 44 45 52 20 42 59 20 79 20 44 45 53 43 20  ORDER BY y DESC 
4ee0: 6c 69 6d 69 74 20 33 3b 0a 20 20 7d 0a 7d 20 7b  limit 3;.  }.} {
4ef0: 33 30 20 32 39 20 32 38 20 6e 6f 73 6f 72 74 7d  30 29 28 nosort}
4f00: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 38  .do_test where-8
4f10: 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .2 {.  execsql {
4f20: 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d  .    DELETE FROM
4f30: 20 74 34 3b 0a 20 20 7d 0a 20 20 63 6b 73 6f 72   t4;.  }.  cksor
4f40: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77  t {.    SELECT w
4f50: 20 46 52 4f 4d 20 74 34 20 57 48 45 52 45 20 78   FROM t4 WHERE x
4f60: 3d 34 20 61 6e 64 20 79 3c 31 30 30 30 20 4f 52  =4 and y<1000 OR
4f70: 44 45 52 20 42 59 20 79 20 44 45 53 43 20 6c 69  DER BY y DESC li
4f80: 6d 69 74 20 33 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f  mit 3;.  }.} {no
4f90: 73 6f 72 74 7d 0a 0a 23 20 4d 61 6b 65 20 73 75  sort}..# Make su
4fa0: 72 65 20 73 65 61 72 63 68 65 73 20 77 69 74 68  re searches with
4fb0: 20 61 6e 20 69 6e 64 65 78 20 77 6f 72 6b 20 77   an index work w
4fc0: 69 74 68 20 61 6e 20 65 6d 70 74 79 20 74 61 62  ith an empty tab
4fd0: 6c 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68  le..#.do_test wh
4fe0: 65 72 65 2d 39 2e 31 20 7b 0a 20 20 65 78 65 63  ere-9.1 {.  exec
4ff0: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
5000: 20 54 41 42 4c 45 20 74 35 28 78 20 50 52 49 4d   TABLE t5(x PRIM
5010: 41 52 59 20 4b 45 59 29 3b 0a 20 20 20 20 53 45  ARY KEY);.    SE
5020: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35 20 57  LECT * FROM t5 W
5030: 48 45 52 45 20 78 3c 31 30 3b 0a 20 20 7d 0a 7d  HERE x<10;.  }.}
5040: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   {}.do_test wher
5050: 65 2d 39 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  e-9.2 {.  execsq
5060: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  l {.    SELECT *
5070: 20 46 52 4f 4d 20 74 35 20 57 48 45 52 45 20 78   FROM t5 WHERE x
5080: 3c 31 30 20 4f 52 44 45 52 20 42 59 20 78 20 44  <10 ORDER BY x D
5090: 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  ESC;.  }.} {}.do
50a0: 5f 74 65 73 74 20 77 68 65 72 65 2d 39 2e 33 20  _test where-9.3 
50b0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
50c0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
50d0: 74 35 20 57 48 45 52 45 20 78 3d 31 30 3b 0a 20  t5 WHERE x=10;. 
50e0: 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74   }.} {}..do_test
50f0: 20 77 68 65 72 65 2d 31 30 2e 31 20 7b 0a 20 20   where-10.1 {.  
5100: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
5110: 4c 45 43 54 20 31 20 57 48 45 52 45 20 61 62 73  LECT 1 WHERE abs
5120: 28 72 61 6e 64 6f 6d 28 29 29 3c 30 0a 20 20 7d  (random())<0.  }
5130: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 68  .} {}.do_test wh
5140: 65 72 65 2d 31 30 2e 32 20 7b 0a 20 20 70 72 6f  ere-10.2 {.  pro
5150: 63 20 74 63 6c 76 61 72 5f 66 75 6e 63 20 7b 76  c tclvar_func {v
5160: 6e 61 6d 65 7d 20 7b 72 65 74 75 72 6e 20 5b 73  name} {return [s
5170: 65 74 20 3a 3a 24 76 6e 61 6d 65 5d 7d 0a 20 20  et ::$vname]}.  
5180: 64 62 20 66 75 6e 63 74 69 6f 6e 20 74 63 6c 76  db function tclv
5190: 61 72 20 74 63 6c 76 61 72 5f 66 75 6e 63 0a 20  ar tclvar_func. 
51a0: 20 73 65 74 20 3a 3a 76 31 20 30 0a 20 20 65 78   set ::v1 0.  ex
51b0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
51c0: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
51d0: 20 74 31 20 57 48 45 52 45 20 74 63 6c 76 61 72   t1 WHERE tclvar
51e0: 28 27 76 31 27 29 3b 0a 20 20 7d 0a 7d 20 7b 30  ('v1');.  }.} {0
51f0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
5200: 31 30 2e 33 20 7b 0a 20 20 73 65 74 20 3a 3a 76  10.3 {.  set ::v
5210: 31 20 31 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 1.  execsql {.
5220: 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74      SELECT count
5230: 28 2a 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  (*) FROM t1 WHER
5240: 45 20 74 63 6c 76 61 72 28 27 76 31 27 29 3b 0a  E tclvar('v1');.
5250: 20 20 7d 0a 7d 20 7b 31 30 30 7d 0a 64 6f 5f 74    }.} {100}.do_t
5260: 65 73 74 20 77 68 65 72 65 2d 31 30 2e 34 20 7b  est where-10.4 {
5270: 0a 20 20 73 65 74 20 3a 3a 76 31 20 31 0a 20 20  .  set ::v1 1.  
5280: 70 72 6f 63 20 74 63 6c 76 61 72 5f 66 75 6e 63  proc tclvar_func
5290: 20 7b 76 6e 61 6d 65 7d 20 7b 0a 20 20 20 20 75   {vname} {.    u
52a0: 70 76 61 72 20 23 30 20 24 76 6e 61 6d 65 20 76  pvar #0 $vname v
52b0: 0a 20 20 20 20 73 65 74 20 76 20 5b 65 78 70 72  .    set v [expr
52c0: 20 7b 21 24 76 7d 5d 0a 20 20 20 20 72 65 74 75   {!$v}].    retu
52d0: 72 6e 20 24 76 0a 20 20 7d 0a 20 20 65 78 65 63  rn $v.  }.  exec
52e0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
52f0: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
5300: 31 20 57 48 45 52 45 20 74 63 6c 76 61 72 28 27  1 WHERE tclvar('
5310: 76 31 27 29 3b 0a 20 20 7d 0a 7d 20 7b 35 30 7d  v1');.  }.} {50}
5320: 0a 0a 23 20 54 69 63 6b 65 74 20 23 31 33 37 36  ..# Ticket #1376
5330: 2e 20 20 54 68 65 20 71 75 65 72 79 20 62 65 6c  .  The query bel
5340: 6f 77 20 77 61 73 20 63 61 75 73 69 6e 67 20 61  ow was causing a
5350: 20 73 65 67 66 61 75 6c 74 2e 0a 23 20 54 68 65   segfault..# The
5360: 20 70 72 6f 62 6c 65 6d 20 77 61 73 20 74 68 65   problem was the
5370: 20 61 67 65 2d 6f 6c 64 20 65 72 72 6f 72 20 6f   age-old error o
5380: 66 20 63 61 6c 6c 69 6e 67 20 72 65 61 6c 6c 6f  f calling reallo
5390: 63 28 29 20 6f 6e 20 61 6e 0a 23 20 61 72 72 61  c() on an.# arra
53a0: 79 20 77 68 69 6c 65 20 74 68 65 72 65 20 61 72  y while there ar
53b0: 65 20 73 74 69 6c 6c 20 70 6f 69 6e 74 65 72 73  e still pointers
53c0: 20 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 20 65   to individual e
53d0: 6c 65 6d 65 6e 74 73 20 6f 66 0a 23 20 74 68 61  lements of.# tha
53e0: 74 20 61 72 72 61 79 2e 0a 23 0a 64 6f 5f 74 65  t array..#.do_te
53f0: 73 74 20 77 68 65 72 65 2d 31 31 2e 31 20 7b 0a  st where-11.1 {.
5400: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 43    execsql {.   C
5410: 52 45 41 54 45 20 54 41 42 4c 45 20 74 39 39 28  REATE TABLE t99(
5420: 44 74 65 20 49 4e 54 2c 20 58 20 49 4e 54 29 3b  Dte INT, X INT);
5430: 0a 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20  .   DELETE FROM 
5440: 74 39 39 20 57 48 45 52 45 20 28 44 74 65 20 3d  t99 WHERE (Dte =
5450: 20 32 34 35 31 33 33 37 29 20 4f 52 20 28 44 74   2451337) OR (Dt
5460: 65 20 3d 20 32 34 35 31 33 33 39 29 20 4f 52 0a  e = 2451339) OR.
5470: 20 20 20 20 20 28 44 74 65 20 42 45 54 57 45 45       (Dte BETWEE
5480: 4e 20 32 34 35 31 33 34 35 20 41 4e 44 20 32 34  N 2451345 AND 24
5490: 35 31 33 34 37 29 20 4f 52 20 28 44 74 65 20 3d  51347) OR (Dte =
54a0: 20 32 34 35 31 33 35 31 29 20 4f 52 20 0a 20 20   2451351) OR .  
54b0: 20 20 20 28 44 74 65 20 42 45 54 57 45 45 4e 20     (Dte BETWEEN 
54c0: 32 34 35 31 33 35 35 20 41 4e 44 20 32 34 35 31  2451355 AND 2451
54d0: 33 35 36 29 20 4f 52 20 28 44 74 65 20 3d 20 32  356) OR (Dte = 2
54e0: 34 35 31 33 35 38 29 20 4f 52 0a 20 20 20 20 20  451358) OR.     
54f0: 28 44 74 65 20 3d 20 32 34 35 31 33 36 32 29 20  (Dte = 2451362) 
5500: 4f 52 20 28 44 74 65 20 3d 20 32 34 35 31 33 36  OR (Dte = 245136
5510: 35 29 20 4f 52 20 28 44 74 65 20 3d 20 32 34 35  5) OR (Dte = 245
5520: 31 33 36 37 29 20 4f 52 0a 20 20 20 20 20 28 44  1367) OR.     (D
5530: 74 65 20 42 45 54 57 45 45 4e 20 32 34 35 31 33  te BETWEEN 24513
5540: 37 32 20 41 4e 44 20 32 34 35 31 33 37 36 29 20  72 AND 2451376) 
5550: 4f 52 20 28 44 74 65 20 42 45 54 57 45 45 4e 20  OR (Dte BETWEEN 
5560: 32 34 35 31 33 38 32 20 41 4e 44 20 32 34 35 31  2451382 AND 2451
5570: 33 38 34 29 20 4f 52 0a 20 20 20 20 20 28 44 74  384) OR.     (Dt
5580: 65 20 3d 20 32 34 35 31 33 38 37 29 20 4f 52 20  e = 2451387) OR 
5590: 28 44 74 65 20 42 45 54 57 45 45 4e 20 32 34 35  (Dte BETWEEN 245
55a0: 31 33 38 39 20 41 4e 44 20 32 34 35 31 33 39 31  1389 AND 2451391
55b0: 29 20 4f 52 20 0a 20 20 20 20 20 28 44 74 65 20  ) OR .     (Dte 
55c0: 42 45 54 57 45 45 4e 20 32 34 35 31 33 39 33 20  BETWEEN 2451393 
55d0: 41 4e 44 20 32 34 35 31 33 39 35 29 20 4f 52 20  AND 2451395) OR 
55e0: 28 44 74 65 20 3d 20 32 34 35 31 34 30 30 29 20  (Dte = 2451400) 
55f0: 4f 52 20 0a 20 20 20 20 20 28 44 74 65 20 3d 20  OR .     (Dte = 
5600: 32 34 35 31 34 30 32 29 20 4f 52 20 28 44 74 65  2451402) OR (Dte
5610: 20 3d 20 32 34 35 31 34 30 34 29 20 4f 52 20 28   = 2451404) OR (
5620: 44 74 65 20 42 45 54 57 45 45 4e 20 32 34 35 31  Dte BETWEEN 2451
5630: 34 31 36 20 41 4e 44 20 32 34 35 31 34 31 38 29  416 AND 2451418)
5640: 20 4f 52 20 0a 20 20 20 20 20 28 44 74 65 20 3d   OR .     (Dte =
5650: 20 32 34 35 31 34 32 32 29 20 4f 52 20 28 44 74   2451422) OR (Dt
5660: 65 20 3d 20 32 34 35 31 34 32 36 29 20 4f 52 20  e = 2451426) OR 
5670: 28 44 74 65 20 42 45 54 57 45 45 4e 20 32 34 35  (Dte BETWEEN 245
5680: 31 34 34 35 20 41 4e 44 20 32 34 35 31 34 34 36  1445 AND 2451446
5690: 29 20 4f 52 0a 20 20 20 20 20 28 44 74 65 20 3d  ) OR.     (Dte =
56a0: 20 32 34 35 31 34 35 36 29 20 4f 52 20 28 44 74   2451456) OR (Dt
56b0: 65 20 3d 20 32 34 35 31 34 35 38 29 20 4f 52 20  e = 2451458) OR 
56c0: 28 44 74 65 20 42 45 54 57 45 45 4e 20 32 34 35  (Dte BETWEEN 245
56d0: 31 34 36 35 20 41 4e 44 20 32 34 35 31 34 36 37  1465 AND 2451467
56e0: 29 20 4f 52 0a 20 20 20 20 20 28 44 74 65 20 42  ) OR.     (Dte B
56f0: 45 54 57 45 45 4e 20 32 34 35 31 34 36 39 20 41  ETWEEN 2451469 A
5700: 4e 44 20 32 34 35 31 34 37 31 29 20 4f 52 20 28  ND 2451471) OR (
5710: 44 74 65 20 3d 20 32 34 35 31 34 37 34 29 20 4f  Dte = 2451474) O
5720: 52 0a 20 20 20 20 20 28 44 74 65 20 42 45 54 57  R.     (Dte BETW
5730: 45 45 4e 20 32 34 35 31 34 37 37 20 41 4e 44 20  EEN 2451477 AND 
5740: 32 34 35 31 35 30 31 29 20 4f 52 20 28 44 74 65  2451501) OR (Dte
5750: 20 42 45 54 57 45 45 4e 20 32 34 35 31 35 30 33   BETWEEN 2451503
5760: 20 41 4e 44 20 32 34 35 31 35 30 39 29 20 4f 52   AND 2451509) OR
5770: 0a 20 20 20 20 20 28 44 74 65 20 42 45 54 57 45  .     (Dte BETWE
5780: 45 4e 20 32 34 35 31 35 31 31 20 41 4e 44 20 32  EN 2451511 AND 2
5790: 34 35 31 35 31 34 29 20 4f 52 20 28 44 74 65 20  451514) OR (Dte 
57a0: 42 45 54 57 45 45 4e 20 32 34 35 31 35 31 38 20  BETWEEN 2451518 
57b0: 41 4e 44 20 32 34 35 31 35 32 31 29 20 4f 52 0a  AND 2451521) OR.
57c0: 20 20 20 20 20 28 44 74 65 20 42 45 54 57 45 45       (Dte BETWEE
57d0: 4e 20 32 34 35 31 35 32 33 20 41 4e 44 20 32 34  N 2451523 AND 24
57e0: 35 31 35 33 31 29 20 4f 52 20 28 44 74 65 20 42  51531) OR (Dte B
57f0: 45 54 57 45 45 4e 20 32 34 35 31 35 33 33 20 41  ETWEEN 2451533 A
5800: 4e 44 20 32 34 35 31 35 33 37 29 20 4f 52 0a 20  ND 2451537) OR. 
5810: 20 20 20 20 28 44 74 65 20 42 45 54 57 45 45 4e      (Dte BETWEEN
5820: 20 32 34 35 31 35 33 39 20 41 4e 44 20 32 34 35   2451539 AND 245
5830: 31 35 34 34 29 20 4f 52 20 28 44 74 65 20 42 45  1544) OR (Dte BE
5840: 54 57 45 45 4e 20 32 34 35 31 35 34 36 20 41 4e  TWEEN 2451546 AN
5850: 44 20 32 34 35 31 35 35 31 29 20 4f 52 0a 20 20  D 2451551) OR.  
5860: 20 20 20 28 44 74 65 20 42 45 54 57 45 45 4e 20     (Dte BETWEEN 
5870: 32 34 35 31 35 35 33 20 41 4e 44 20 32 34 35 31  2451553 AND 2451
5880: 35 35 35 29 20 4f 52 20 28 44 74 65 20 3d 20 32  555) OR (Dte = 2
5890: 34 35 31 35 35 37 29 20 4f 52 0a 20 20 20 20 20  451557) OR.     
58a0: 28 44 74 65 20 42 45 54 57 45 45 4e 20 32 34 35  (Dte BETWEEN 245
58b0: 31 35 35 39 20 41 4e 44 20 32 34 35 31 35 36 31  1559 AND 2451561
58c0: 29 20 4f 52 20 28 44 74 65 20 3d 20 32 34 35 31  ) OR (Dte = 2451
58d0: 35 36 33 29 20 4f 52 0a 20 20 20 20 20 28 44 74  563) OR.     (Dt
58e0: 65 20 42 45 54 57 45 45 4e 20 32 34 35 31 35 36  e BETWEEN 245156
58f0: 35 20 41 4e 44 20 32 34 35 31 35 36 36 29 20 4f  5 AND 2451566) O
5900: 52 20 28 44 74 65 20 42 45 54 57 45 45 4e 20 32  R (Dte BETWEEN 2
5910: 34 35 31 35 36 39 20 41 4e 44 20 32 34 35 31 35  451569 AND 24515
5920: 37 31 29 20 4f 52 20 0a 20 20 20 20 20 28 44 74  71) OR .     (Dt
5930: 65 20 3d 20 32 34 35 31 35 37 33 29 20 4f 52 20  e = 2451573) OR 
5940: 28 44 74 65 20 3d 20 32 34 35 31 35 37 35 29 20  (Dte = 2451575) 
5950: 4f 52 20 28 44 74 65 20 3d 20 32 34 35 31 35 37  OR (Dte = 245157
5960: 37 29 20 4f 52 20 28 44 74 65 20 3d 20 32 34 35  7) OR (Dte = 245
5970: 31 35 38 31 29 20 4f 52 0a 20 20 20 20 20 28 44  1581) OR.     (D
5980: 74 65 20 42 45 54 57 45 45 4e 20 32 34 35 31 35  te BETWEEN 24515
5990: 38 33 20 41 4e 44 20 32 34 35 31 35 38 36 29 20  83 AND 2451586) 
59a0: 4f 52 20 28 44 74 65 20 42 45 54 57 45 45 4e 20  OR (Dte BETWEEN 
59b0: 32 34 35 31 35 38 38 20 41 4e 44 20 32 34 35 31  2451588 AND 2451
59c0: 35 39 32 29 20 4f 52 20 0a 20 20 20 20 20 28 44  592) OR .     (D
59d0: 74 65 20 42 45 54 57 45 45 4e 20 32 34 35 31 35  te BETWEEN 24515
59e0: 39 36 20 41 4e 44 20 32 34 35 31 35 39 38 29 20  96 AND 2451598) 
59f0: 4f 52 20 28 44 74 65 20 3d 20 32 34 35 31 36 30  OR (Dte = 245160
5a00: 30 29 20 4f 52 0a 20 20 20 20 20 28 44 74 65 20  0) OR.     (Dte 
5a10: 42 45 54 57 45 45 4e 20 32 34 35 31 36 30 32 20  BETWEEN 2451602 
5a20: 41 4e 44 20 32 34 35 31 36 30 33 29 20 4f 52 20  AND 2451603) OR 
5a30: 28 44 74 65 20 3d 20 32 34 35 31 36 30 36 29 20  (Dte = 2451606) 
5a40: 4f 52 20 28 44 74 65 20 3d 20 32 34 35 31 36 31  OR (Dte = 245161
5a50: 31 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20  1);.  }.} {}..# 
5a60: 54 69 63 6b 65 74 20 23 32 31 31 36 3a 20 20 4d  Ticket #2116:  M
5a70: 61 6b 65 20 73 75 72 65 20 73 6f 72 74 69 6e 67  ake sure sorting
5a80: 20 62 79 20 69 6e 64 65 78 20 77 6f 72 6b 73 20   by index works 
5a90: 77 65 6c 6c 20 77 69 74 68 20 6e 6e 20 49 4e 54  well with nn INT
5aa0: 45 47 45 52 20 50 52 49 4d 41 52 59 0a 23 20 4b  EGER PRIMARY.# K
5ab0: 45 59 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68  EY..#.do_test wh
5ac0: 65 72 65 2d 31 32 2e 31 20 7b 0a 20 20 65 78 65  ere-12.1 {.  exe
5ad0: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
5ae0: 45 20 54 41 42 4c 45 20 74 36 28 61 20 49 4e 54  E TABLE t6(a INT
5af0: 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
5b00: 2c 20 62 20 54 45 58 54 29 3b 0a 20 20 20 20 49  , b TEXT);.    I
5b10: 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56 41  NSERT INTO t6 VA
5b20: 4c 55 45 53 28 31 2c 27 6f 6e 65 27 29 3b 0a 20  LUES(1,'one');. 
5b30: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
5b40: 36 20 56 41 4c 55 45 53 28 34 2c 27 66 6f 75 72  6 VALUES(4,'four
5b50: 27 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49  ');.    CREATE I
5b60: 4e 44 45 58 20 74 36 69 31 20 4f 4e 20 74 36 28  NDEX t6i1 ON t6(
5b70: 62 29 3b 0a 20 20 7d 0a 20 20 63 6b 73 6f 72 74  b);.  }.  cksort
5b80: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
5b90: 46 52 4f 4d 20 74 36 20 4f 52 44 45 52 20 42 59  FROM t6 ORDER BY
5ba0: 20 62 3b 0a 20 20 7d 0a 7d 20 7b 34 20 66 6f 75   b;.  }.} {4 fou
5bb0: 72 20 31 20 6f 6e 65 20 6e 6f 73 6f 72 74 7d 0a  r 1 one nosort}.
5bc0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 32  do_test where-12
5bd0: 2e 32 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .2 {.  cksort {.
5be0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
5bf0: 4d 20 74 36 20 4f 52 44 45 52 20 42 59 20 62 2c  M t6 ORDER BY b,
5c00: 20 61 3b 0a 20 20 7d 0a 7d 20 7b 34 20 66 6f 75   a;.  }.} {4 fou
5c10: 72 20 31 20 6f 6e 65 20 6e 6f 73 6f 72 74 7d 0a  r 1 one nosort}.
5c20: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 32  do_test where-12
5c30: 2e 33 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .3 {.  cksort {.
5c40: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
5c50: 4d 20 74 36 20 4f 52 44 45 52 20 42 59 20 61 3b  M t6 ORDER BY a;
5c60: 0a 20 20 7d 0a 7d 20 7b 31 20 6f 6e 65 20 34 20  .  }.} {1 one 4 
5c70: 66 6f 75 72 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f  four nosort}.do_
5c80: 74 65 73 74 20 77 68 65 72 65 2d 31 32 2e 34 20  test where-12.4 
5c90: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
5ca0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
5cb0: 36 20 4f 52 44 45 52 20 42 59 20 61 2c 20 62 3b  6 ORDER BY a, b;
5cc0: 0a 20 20 7d 0a 7d 20 7b 31 20 6f 6e 65 20 34 20  .  }.} {1 one 4 
5cd0: 66 6f 75 72 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f  four nosort}.do_
5ce0: 74 65 73 74 20 77 68 65 72 65 2d 31 32 2e 35 20  test where-12.5 
5cf0: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
5d00: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
5d10: 36 20 4f 52 44 45 52 20 42 59 20 62 20 44 45 53  6 ORDER BY b DES
5d20: 43 3b 0a 20 20 7d 0a 7d 20 7b 31 20 6f 6e 65 20  C;.  }.} {1 one 
5d30: 34 20 66 6f 75 72 20 6e 6f 73 6f 72 74 7d 0a 64  4 four nosort}.d
5d40: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 32 2e  o_test where-12.
5d50: 36 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  6 {.  cksort {. 
5d60: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
5d70: 20 74 36 20 4f 52 44 45 52 20 42 59 20 62 20 44   t6 ORDER BY b D
5d80: 45 53 43 2c 20 61 20 44 45 53 43 3b 0a 20 20 7d  ESC, a DESC;.  }
5d90: 0a 7d 20 7b 31 20 6f 6e 65 20 34 20 66 6f 75 72  .} {1 one 4 four
5da0: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
5db0: 20 77 68 65 72 65 2d 31 32 2e 37 20 7b 0a 20 20   where-12.7 {.  
5dc0: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
5dd0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 36 20 4f 52  ECT * FROM t6 OR
5de0: 44 45 52 20 42 59 20 62 20 44 45 53 43 2c 20 61  DER BY b DESC, a
5df0: 20 41 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 20 6f   ASC;.  }.} {1 o
5e00: 6e 65 20 34 20 66 6f 75 72 20 73 6f 72 74 7d 0a  ne 4 four sort}.
5e10: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 32  do_test where-12
5e20: 2e 38 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .8 {.  cksort {.
5e30: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
5e40: 4d 20 74 36 20 4f 52 44 45 52 20 42 59 20 62 20  M t6 ORDER BY b 
5e50: 41 53 43 2c 20 61 20 44 45 53 43 3b 0a 20 20 7d  ASC, a DESC;.  }
5e60: 0a 7d 20 7b 34 20 66 6f 75 72 20 31 20 6f 6e 65  .} {4 four 1 one
5e70: 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77   sort}.do_test w
5e80: 68 65 72 65 2d 31 32 2e 39 20 7b 0a 20 20 63 6b  here-12.9 {.  ck
5e90: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
5ea0: 54 20 2a 20 46 52 4f 4d 20 74 36 20 4f 52 44 45  T * FROM t6 ORDE
5eb0: 52 20 42 59 20 61 20 44 45 53 43 3b 0a 20 20 7d  R BY a DESC;.  }
5ec0: 0a 7d 20 7b 34 20 66 6f 75 72 20 31 20 6f 6e 65  .} {4 four 1 one
5ed0: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
5ee0: 20 77 68 65 72 65 2d 31 32 2e 31 30 20 7b 0a 20   where-12.10 {. 
5ef0: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
5f00: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 36 20 4f  LECT * FROM t6 O
5f10: 52 44 45 52 20 42 59 20 61 20 44 45 53 43 2c 20  RDER BY a DESC, 
5f20: 62 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 34  b DESC;.  }.} {4
5f30: 20 66 6f 75 72 20 31 20 6f 6e 65 20 6e 6f 73 6f   four 1 one noso
5f40: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
5f50: 65 2d 31 32 2e 31 31 20 7b 0a 20 20 63 6b 73 6f  e-12.11 {.  ckso
5f60: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
5f70: 2a 20 46 52 4f 4d 20 74 36 20 4f 52 44 45 52 20  * FROM t6 ORDER 
5f80: 42 59 20 61 20 44 45 53 43 2c 20 62 20 41 53 43  BY a DESC, b ASC
5f90: 3b 0a 20 20 7d 0a 7d 20 7b 34 20 66 6f 75 72 20  ;.  }.} {4 four 
5fa0: 31 20 6f 6e 65 20 6e 6f 73 6f 72 74 7d 0a 64 6f  1 one nosort}.do
5fb0: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 32 2e 31  _test where-12.1
5fc0: 32 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  2 {.  cksort {. 
5fd0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
5fe0: 20 74 36 20 4f 52 44 45 52 20 42 59 20 61 20 41   t6 ORDER BY a A
5ff0: 53 43 2c 20 62 20 44 45 53 43 3b 0a 20 20 7d 0a  SC, b DESC;.  }.
6000: 7d 20 7b 31 20 6f 6e 65 20 34 20 66 6f 75 72 20  } {1 one 4 four 
6010: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
6020: 77 68 65 72 65 2d 31 33 2e 31 20 7b 0a 20 20 65  where-13.1 {.  e
6030: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45  xecsql {.    CRE
6040: 41 54 45 20 54 41 42 4c 45 20 74 37 28 61 20 49  ATE TABLE t7(a I
6050: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
6060: 45 59 2c 20 62 20 54 45 58 54 29 3b 0a 20 20 20  EY, b TEXT);.   
6070: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37 20   INSERT INTO t7 
6080: 56 41 4c 55 45 53 28 31 2c 27 6f 6e 65 27 29 3b  VALUES(1,'one');
6090: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
60a0: 20 74 37 20 56 41 4c 55 45 53 28 34 2c 27 66 6f   t7 VALUES(4,'fo
60b0: 75 72 27 29 3b 0a 20 20 20 20 43 52 45 41 54 45  ur');.    CREATE
60c0: 20 49 4e 44 45 58 20 74 37 69 31 20 4f 4e 20 74   INDEX t7i1 ON t
60d0: 37 28 62 29 3b 0a 20 20 7d 0a 20 20 63 6b 73 6f  7(b);.  }.  ckso
60e0: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
60f0: 2a 20 46 52 4f 4d 20 74 37 20 4f 52 44 45 52 20  * FROM t7 ORDER 
6100: 42 59 20 62 3b 0a 20 20 7d 0a 7d 20 7b 34 20 66  BY b;.  }.} {4 f
6110: 6f 75 72 20 31 20 6f 6e 65 20 6e 6f 73 6f 72 74  our 1 one nosort
6120: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
6130: 31 33 2e 32 20 7b 0a 20 20 63 6b 73 6f 72 74 20  13.2 {.  cksort 
6140: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
6150: 52 4f 4d 20 74 37 20 4f 52 44 45 52 20 42 59 20  ROM t7 ORDER BY 
6160: 62 2c 20 61 3b 0a 20 20 7d 0a 7d 20 7b 34 20 66  b, a;.  }.} {4 f
6170: 6f 75 72 20 31 20 6f 6e 65 20 6e 6f 73 6f 72 74  our 1 one nosort
6180: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
6190: 31 33 2e 33 20 7b 0a 20 20 63 6b 73 6f 72 74 20  13.3 {.  cksort 
61a0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
61b0: 52 4f 4d 20 74 37 20 4f 52 44 45 52 20 42 59 20  ROM t7 ORDER BY 
61c0: 61 3b 0a 20 20 7d 0a 7d 20 7b 31 20 6f 6e 65 20  a;.  }.} {1 one 
61d0: 34 20 66 6f 75 72 20 6e 6f 73 6f 72 74 7d 0a 64  4 four nosort}.d
61e0: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 33 2e  o_test where-13.
61f0: 34 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  4 {.  cksort {. 
6200: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
6210: 20 74 37 20 4f 52 44 45 52 20 42 59 20 61 2c 20   t7 ORDER BY a, 
6220: 62 3b 0a 20 20 7d 0a 7d 20 7b 31 20 6f 6e 65 20  b;.  }.} {1 one 
6230: 34 20 66 6f 75 72 20 6e 6f 73 6f 72 74 7d 0a 64  4 four nosort}.d
6240: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 33 2e  o_test where-13.
6250: 35 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  5 {.  cksort {. 
6260: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
6270: 20 74 37 20 4f 52 44 45 52 20 42 59 20 62 20 44   t7 ORDER BY b D
6280: 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 20 6f 6e  ESC;.  }.} {1 on
6290: 65 20 34 20 66 6f 75 72 20 6e 6f 73 6f 72 74 7d  e 4 four nosort}
62a0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31  .do_test where-1
62b0: 33 2e 36 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  3.6 {.  cksort {
62c0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
62d0: 4f 4d 20 74 37 20 4f 52 44 45 52 20 42 59 20 62  OM t7 ORDER BY b
62e0: 20 44 45 53 43 2c 20 61 20 44 45 53 43 3b 0a 20   DESC, a DESC;. 
62f0: 20 7d 0a 7d 20 7b 31 20 6f 6e 65 20 34 20 66 6f   }.} {1 one 4 fo
6300: 75 72 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  ur nosort}.do_te
6310: 73 74 20 77 68 65 72 65 2d 31 33 2e 37 20 7b 0a  st where-13.7 {.
6320: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
6330: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 37 20  ELECT * FROM t7 
6340: 4f 52 44 45 52 20 42 59 20 62 20 44 45 53 43 2c  ORDER BY b DESC,
6350: 20 61 20 41 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31   a ASC;.  }.} {1
6360: 20 6f 6e 65 20 34 20 66 6f 75 72 20 73 6f 72 74   one 4 four sort
6370: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
6380: 31 33 2e 38 20 7b 0a 20 20 63 6b 73 6f 72 74 20  13.8 {.  cksort 
6390: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
63a0: 52 4f 4d 20 74 37 20 4f 52 44 45 52 20 42 59 20  ROM t7 ORDER BY 
63b0: 62 20 41 53 43 2c 20 61 20 44 45 53 43 3b 0a 20  b ASC, a DESC;. 
63c0: 20 7d 0a 7d 20 7b 34 20 66 6f 75 72 20 31 20 6f   }.} {4 four 1 o
63d0: 6e 65 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74  ne sort}.do_test
63e0: 20 77 68 65 72 65 2d 31 33 2e 39 20 7b 0a 20 20   where-13.9 {.  
63f0: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
6400: 45 43 54 20 2a 20 46 52 4f 4d 20 74 37 20 4f 52  ECT * FROM t7 OR
6410: 44 45 52 20 42 59 20 61 20 44 45 53 43 3b 0a 20  DER BY a DESC;. 
6420: 20 7d 0a 7d 20 7b 34 20 66 6f 75 72 20 31 20 6f   }.} {4 four 1 o
6430: 6e 65 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  ne nosort}.do_te
6440: 73 74 20 77 68 65 72 65 2d 31 33 2e 31 30 20 7b  st where-13.10 {
6450: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
6460: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 37  SELECT * FROM t7
6470: 20 4f 52 44 45 52 20 42 59 20 61 20 44 45 53 43   ORDER BY a DESC
6480: 2c 20 62 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20  , b DESC;.  }.} 
6490: 7b 34 20 66 6f 75 72 20 31 20 6f 6e 65 20 6e 6f  {4 four 1 one no
64a0: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
64b0: 65 72 65 2d 31 33 2e 31 31 20 7b 0a 20 20 63 6b  ere-13.11 {.  ck
64c0: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
64d0: 54 20 2a 20 46 52 4f 4d 20 74 37 20 4f 52 44 45  T * FROM t7 ORDE
64e0: 52 20 42 59 20 61 20 44 45 53 43 2c 20 62 20 41  R BY a DESC, b A
64f0: 53 43 3b 0a 20 20 7d 0a 7d 20 7b 34 20 66 6f 75  SC;.  }.} {4 fou
6500: 72 20 31 20 6f 6e 65 20 6e 6f 73 6f 72 74 7d 0a  r 1 one nosort}.
6510: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 33  do_test where-13
6520: 2e 31 32 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  .12 {.  cksort {
6530: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
6540: 4f 4d 20 74 37 20 4f 52 44 45 52 20 42 59 20 61  OM t7 ORDER BY a
6550: 20 41 53 43 2c 20 62 20 44 45 53 43 3b 0a 20 20   ASC, b DESC;.  
6560: 7d 0a 7d 20 7b 31 20 6f 6e 65 20 34 20 66 6f 75  }.} {1 one 4 fou
6570: 72 20 6e 6f 73 6f 72 74 7d 0a 0a 23 20 54 69 63  r nosort}..# Tic
6580: 6b 65 74 20 23 32 32 31 31 2e 0a 23 0a 23 20 57  ket #2211..#.# W
6590: 68 65 6e 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f  hen optimizing o
65a0: 75 74 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  ut ORDER BY clau
65b0: 73 65 73 2c 20 6d 61 6b 65 20 73 75 72 65 20 74  ses, make sure t
65c0: 68 61 74 20 74 72 61 69 6c 69 6e 67 20 74 65 72  hat trailing ter
65d0: 6d 73 0a 23 20 6f 66 20 74 68 65 20 4f 52 44 45  ms.# of the ORDE
65e0: 52 20 42 59 20 63 6c 61 75 73 65 20 64 6f 20 6e  R BY clause do n
65f0: 6f 74 20 72 65 66 65 72 65 6e 63 65 20 6f 74 68  ot reference oth
6600: 65 72 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a  er tables in a j
6610: 6f 69 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77  oin..#.do_test w
6620: 68 65 72 65 2d 31 34 2e 31 20 7b 0a 20 20 65 78  here-14.1 {.  ex
6630: 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41  ecsql {.    CREA
6640: 54 45 20 54 41 42 4c 45 20 74 38 28 61 20 49 4e  TE TABLE t8(a IN
6650: 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45  TEGER PRIMARY KE
6660: 59 2c 20 62 20 54 45 58 54 20 55 4e 49 51 55 45  Y, b TEXT UNIQUE
6670: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
6680: 54 4f 20 74 38 20 56 41 4c 55 45 53 28 31 2c 27  TO t8 VALUES(1,'
6690: 6f 6e 65 27 29 3b 0a 20 20 20 20 49 4e 53 45 52  one');.    INSER
66a0: 54 20 49 4e 54 4f 20 74 38 20 56 41 4c 55 45 53  T INTO t8 VALUES
66b0: 28 34 2c 27 66 6f 75 72 27 29 3b 0a 20 20 7d 0a  (4,'four');.  }.
66c0: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
66d0: 45 4c 45 43 54 20 78 2e 61 20 7c 7c 20 27 2f 27  ELECT x.a || '/'
66e0: 20 7c 7c 20 79 2e 61 20 46 52 4f 4d 20 74 38 20   || y.a FROM t8 
66f0: 78 2c 20 74 38 20 79 20 4f 52 44 45 52 20 42 59  x, t8 y ORDER BY
6700: 20 78 2e 61 2c 20 79 2e 62 0a 20 20 7d 20 0a 7d   x.a, y.b.  } .}
6710: 20 7b 31 2f 34 20 31 2f 31 20 34 2f 34 20 34 2f   {1/4 1/1 4/4 4/
6720: 31 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  1 sort}.do_test 
6730: 77 68 65 72 65 2d 31 34 2e 32 20 7b 0a 20 20 63  where-14.2 {.  c
6740: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
6750: 43 54 20 78 2e 61 20 7c 7c 20 27 2f 27 20 7c 7c  CT x.a || '/' ||
6760: 20 79 2e 61 20 46 52 4f 4d 20 74 38 20 78 2c 20   y.a FROM t8 x, 
6770: 74 38 20 79 20 4f 52 44 45 52 20 42 59 20 78 2e  t8 y ORDER BY x.
6780: 61 2c 20 79 2e 62 20 44 45 53 43 0a 20 20 7d 20  a, y.b DESC.  } 
6790: 0a 7d 20 7b 31 2f 31 20 31 2f 34 20 34 2f 31 20  .} {1/1 1/4 4/1 
67a0: 34 2f 34 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  4/4 sort}.do_tes
67b0: 74 20 77 68 65 72 65 2d 31 34 2e 33 20 7b 0a 20  t where-14.3 {. 
67c0: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
67d0: 4c 45 43 54 20 78 2e 61 20 7c 7c 20 27 2f 27 20  LECT x.a || '/' 
67e0: 7c 7c 20 79 2e 61 20 46 52 4f 4d 20 74 38 20 78  || y.a FROM t8 x
67f0: 2c 20 74 38 20 79 20 4f 52 44 45 52 20 42 59 20  , t8 y ORDER BY 
6800: 78 2e 61 2c 20 78 2e 62 0a 20 20 7d 20 0a 7d 20  x.a, x.b.  } .} 
6810: 7b 31 2f 34 20 31 2f 31 20 34 2f 34 20 34 2f 31  {1/4 1/1 4/4 4/1
6820: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
6830: 20 77 68 65 72 65 2d 31 34 2e 34 20 7b 0a 20 20   where-14.4 {.  
6840: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
6850: 45 43 54 20 78 2e 61 20 7c 7c 20 27 2f 27 20 7c  ECT x.a || '/' |
6860: 7c 20 79 2e 61 20 46 52 4f 4d 20 74 38 20 78 2c  | y.a FROM t8 x,
6870: 20 74 38 20 79 20 4f 52 44 45 52 20 42 59 20 78   t8 y ORDER BY x
6880: 2e 61 2c 20 78 2e 62 20 44 45 53 43 0a 20 20 7d  .a, x.b DESC.  }
6890: 20 0a 7d 20 7b 31 2f 34 20 31 2f 31 20 34 2f 34   .} {1/4 1/1 4/4
68a0: 20 34 2f 31 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f   4/1 nosort}.do_
68b0: 74 65 73 74 20 77 68 65 72 65 2d 31 34 2e 35 20  test where-14.5 
68c0: 7b 0a 20 20 23 20 54 68 69 73 20 74 65 73 74 20  {.  # This test 
68d0: 63 61 73 65 20 63 68 61 6e 67 65 64 20 66 72 6f  case changed fro
68e0: 6d 20 22 6e 6f 73 6f 72 74 22 20 74 6f 20 22 73  m "nosort" to "s
68f0: 6f 72 74 22 2e 20 53 65 65 20 74 69 63 6b 65 74  ort". See ticket
6900: 20 32 61 35 36 32 39 32 30 32 66 2e 0a 20 20 63   2a5629202f..  c
6910: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
6920: 43 54 20 78 2e 61 20 7c 7c 20 27 2f 27 20 7c 7c  CT x.a || '/' ||
6930: 20 79 2e 61 20 46 52 4f 4d 20 74 38 20 78 2c 20   y.a FROM t8 x, 
6940: 74 38 20 79 20 4f 52 44 45 52 20 42 59 20 78 2e  t8 y ORDER BY x.
6950: 62 2c 20 78 2e 61 7c 7c 78 2e 62 0a 20 20 7d 20  b, x.a||x.b.  } 
6960: 0a 7d 20 7b 34 2f 34 20 34 2f 31 20 31 2f 34 20  .} {4/4 4/1 1/4 
6970: 31 2f 31 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  1/1 sort}.do_tes
6980: 74 20 77 68 65 72 65 2d 31 34 2e 36 20 7b 0a 20  t where-14.6 {. 
6990: 20 23 20 54 68 69 73 20 74 65 73 74 20 63 61 73   # This test cas
69a0: 65 20 63 68 61 6e 67 65 64 20 66 72 6f 6d 20 22  e changed from "
69b0: 6e 6f 73 6f 72 74 22 20 74 6f 20 22 73 6f 72 74  nosort" to "sort
69c0: 22 2e 20 53 65 65 20 74 69 63 6b 65 74 20 32 61  ". See ticket 2a
69d0: 35 36 32 39 32 30 32 66 2e 0a 20 20 63 6b 73 6f  5629202f..  ckso
69e0: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
69f0: 78 2e 61 20 7c 7c 20 27 2f 27 20 7c 7c 20 79 2e  x.a || '/' || y.
6a00: 61 20 46 52 4f 4d 20 74 38 20 78 2c 20 74 38 20  a FROM t8 x, t8 
6a10: 79 20 4f 52 44 45 52 20 42 59 20 78 2e 62 2c 20  y ORDER BY x.b, 
6a20: 78 2e 61 7c 7c 78 2e 62 20 44 45 53 43 0a 20 20  x.a||x.b DESC.  
6a30: 7d 20 0a 7d 20 7b 34 2f 34 20 34 2f 31 20 31 2f  } .} {4/4 4/1 1/
6a40: 34 20 31 2f 31 20 73 6f 72 74 7d 0a 64 6f 5f 74  4 1/1 sort}.do_t
6a50: 65 73 74 20 77 68 65 72 65 2d 31 34 2e 37 20 7b  est where-14.7 {
6a60: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
6a70: 53 45 4c 45 43 54 20 78 2e 61 20 7c 7c 20 27 2f  SELECT x.a || '/
6a80: 27 20 7c 7c 20 79 2e 61 20 46 52 4f 4d 20 74 38  ' || y.a FROM t8
6a90: 20 78 2c 20 74 38 20 79 20 4f 52 44 45 52 20 42   x, t8 y ORDER B
6aa0: 59 20 78 2e 62 2c 20 79 2e 61 7c 7c 79 2e 62 0a  Y x.b, y.a||y.b.
6ab0: 20 20 7d 20 0a 7d 20 7b 34 2f 31 20 34 2f 34 20    } .} {4/1 4/4 
6ac0: 31 2f 31 20 31 2f 34 20 73 6f 72 74 7d 0a 64 6f  1/1 1/4 sort}.do
6ad0: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 34 2e 37  _test where-14.7
6ae0: 2e 31 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .1 {.  cksort {.
6af0: 20 20 20 20 53 45 4c 45 43 54 20 78 2e 61 20 7c      SELECT x.a |
6b00: 7c 20 27 2f 27 20 7c 7c 20 79 2e 61 20 46 52 4f  | '/' || y.a FRO
6b10: 4d 20 74 38 20 78 2c 20 74 38 20 79 20 4f 52 44  M t8 x, t8 y ORD
6b20: 45 52 20 42 59 20 78 2e 62 2c 20 78 2e 61 2c 20  ER BY x.b, x.a, 
6b30: 79 2e 61 7c 7c 79 2e 62 0a 20 20 7d 20 0a 7d 20  y.a||y.b.  } .} 
6b40: 7b 34 2f 31 20 34 2f 34 20 31 2f 31 20 31 2f 34  {4/1 4/4 1/1 1/4
6b50: 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77   sort}.do_test w
6b60: 68 65 72 65 2d 31 34 2e 37 2e 32 20 7b 0a 20 20  here-14.7.2 {.  
6b70: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
6b80: 45 43 54 20 78 2e 61 20 7c 7c 20 27 2f 27 20 7c  ECT x.a || '/' |
6b90: 7c 20 79 2e 61 20 46 52 4f 4d 20 74 38 20 78 2c  | y.a FROM t8 x,
6ba0: 20 74 38 20 79 20 4f 52 44 45 52 20 42 59 20 78   t8 y ORDER BY x
6bb0: 2e 62 2c 20 78 2e 61 2c 20 78 2e 61 7c 7c 78 2e  .b, x.a, x.a||x.
6bc0: 62 0a 20 20 7d 20 0a 7d 20 7b 34 2f 34 20 34 2f  b.  } .} {4/4 4/
6bd0: 31 20 31 2f 34 20 31 2f 31 20 6e 6f 73 6f 72 74  1 1/4 1/1 nosort
6be0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
6bf0: 31 34 2e 38 20 7b 0a 20 20 63 6b 73 6f 72 74 20  14.8 {.  cksort 
6c00: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78 2e 61  {.    SELECT x.a
6c10: 20 7c 7c 20 27 2f 27 20 7c 7c 20 79 2e 61 20 46   || '/' || y.a F
6c20: 52 4f 4d 20 74 38 20 78 2c 20 74 38 20 79 20 4f  ROM t8 x, t8 y O
6c30: 52 44 45 52 20 42 59 20 78 2e 62 2c 20 79 2e 61  RDER BY x.b, y.a
6c40: 7c 7c 79 2e 62 20 44 45 53 43 0a 20 20 7d 20 0a  ||y.b DESC.  } .
6c50: 7d 20 7b 34 2f 34 20 34 2f 31 20 31 2f 34 20 31  } {4/4 4/1 1/4 1
6c60: 2f 31 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74  /1 sort}.do_test
6c70: 20 77 68 65 72 65 2d 31 34 2e 39 20 7b 0a 20 20   where-14.9 {.  
6c80: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
6c90: 45 43 54 20 78 2e 61 20 7c 7c 20 27 2f 27 20 7c  ECT x.a || '/' |
6ca0: 7c 20 79 2e 61 20 46 52 4f 4d 20 74 38 20 78 2c  | y.a FROM t8 x,
6cb0: 20 74 38 20 79 20 4f 52 44 45 52 20 42 59 20 78   t8 y ORDER BY x
6cc0: 2e 62 2c 20 78 2e 61 7c 7c 79 2e 62 0a 20 20 7d  .b, x.a||y.b.  }
6cd0: 20 0a 7d 20 7b 34 2f 34 20 34 2f 31 20 31 2f 34   .} {4/4 4/1 1/4
6ce0: 20 31 2f 31 20 73 6f 72 74 7d 0a 64 6f 5f 74 65   1/1 sort}.do_te
6cf0: 73 74 20 77 68 65 72 65 2d 31 34 2e 31 30 20 7b  st where-14.10 {
6d00: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
6d10: 53 45 4c 45 43 54 20 78 2e 61 20 7c 7c 20 27 2f  SELECT x.a || '/
6d20: 27 20 7c 7c 20 79 2e 61 20 46 52 4f 4d 20 74 38  ' || y.a FROM t8
6d30: 20 78 2c 20 74 38 20 79 20 4f 52 44 45 52 20 42   x, t8 y ORDER B
6d40: 59 20 78 2e 62 2c 20 78 2e 61 7c 7c 79 2e 62 20  Y x.b, x.a||y.b 
6d50: 44 45 53 43 0a 20 20 7d 20 0a 7d 20 7b 34 2f 31  DESC.  } .} {4/1
6d60: 20 34 2f 34 20 31 2f 31 20 31 2f 34 20 73 6f 72   4/4 1/1 1/4 sor
6d70: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
6d80: 2d 31 34 2e 31 31 20 7b 0a 20 20 63 6b 73 6f 72  -14.11 {.  cksor
6d90: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 78  t {.    SELECT x
6da0: 2e 61 20 7c 7c 20 27 2f 27 20 7c 7c 20 79 2e 61  .a || '/' || y.a
6db0: 20 46 52 4f 4d 20 74 38 20 78 2c 20 74 38 20 79   FROM t8 x, t8 y
6dc0: 20 4f 52 44 45 52 20 42 59 20 78 2e 62 2c 20 79   ORDER BY x.b, y
6dd0: 2e 61 7c 7c 78 2e 62 0a 20 20 7d 20 0a 7d 20 7b  .a||x.b.  } .} {
6de0: 34 2f 31 20 34 2f 34 20 31 2f 31 20 31 2f 34 20  4/1 4/4 1/1 1/4 
6df0: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
6e00: 65 72 65 2d 31 34 2e 31 32 20 7b 0a 20 20 63 6b  ere-14.12 {.  ck
6e10: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
6e20: 54 20 78 2e 61 20 7c 7c 20 27 2f 27 20 7c 7c 20  T x.a || '/' || 
6e30: 79 2e 61 20 46 52 4f 4d 20 74 38 20 78 2c 20 74  y.a FROM t8 x, t
6e40: 38 20 79 20 4f 52 44 45 52 20 42 59 20 78 2e 62  8 y ORDER BY x.b
6e50: 2c 20 79 2e 61 7c 7c 78 2e 62 20 44 45 53 43 0a  , y.a||x.b DESC.
6e60: 20 20 7d 20 0a 7d 20 7b 34 2f 34 20 34 2f 31 20    } .} {4/4 4/1 
6e70: 31 2f 34 20 31 2f 31 20 73 6f 72 74 7d 0a 0a 23  1/4 1/1 sort}..#
6e80: 20 54 69 63 6b 65 74 20 23 32 34 34 35 2e 0a 23   Ticket #2445..#
6e90: 0a 23 20 54 68 65 72 65 20 77 61 73 20 61 20 63  .# There was a c
6ea0: 72 61 73 68 20 74 68 61 74 20 63 6f 75 6c 64 20  rash that could 
6eb0: 6f 63 63 75 72 20 77 68 65 6e 20 61 20 77 68 65  occur when a whe
6ec0: 72 65 20 63 6c 61 75 73 65 20 63 6f 6e 74 61 69  re clause contai
6ed0: 6e 73 20 61 6e 0a 23 20 61 6c 69 61 73 20 66 6f  ns an.# alias fo
6ee0: 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
6ef0: 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  in the result se
6f00: 74 2c 20 61 6e 64 20 74 68 61 74 20 65 78 70 72  t, and that expr
6f10: 65 73 73 69 6f 6e 20 72 65 74 72 69 65 76 65 73  ession retrieves
6f20: 0a 23 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 74  .# a column of t
6f30: 68 65 20 73 65 63 6f 6e 64 20 6f 72 20 73 75 62  he second or sub
6f40: 73 65 71 75 65 6e 74 20 74 61 62 6c 65 20 69 6e  sequent table in
6f50: 20 61 20 6a 6f 69 6e 2e 0a 23 0a 64 6f 5f 74 65   a join..#.do_te
6f60: 73 74 20 77 68 65 72 65 2d 31 35 2e 31 20 7b 0a  st where-15.1 {.
6f70: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
6f80: 43 52 45 41 54 45 20 54 45 4d 50 20 54 41 42 4c  CREATE TEMP TABL
6f90: 45 20 74 31 20 28 61 2c 20 62 2c 20 63 2c 20 64  E t1 (a, b, c, d
6fa0: 2c 20 65 29 3b 0a 20 20 20 20 43 52 45 41 54 45  , e);.    CREATE
6fb0: 20 54 45 4d 50 20 54 41 42 4c 45 20 74 32 20 28   TEMP TABLE t2 (
6fc0: 66 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 74  f);.    SELECT t
6fd0: 31 2e 65 20 41 53 20 61 6c 69 61 73 20 46 52 4f  1.e AS alias FRO
6fe0: 4d 20 74 32 2c 20 74 31 20 57 48 45 52 45 20 61  M t2, t1 WHERE a
6ff0: 6c 69 61 73 20 3d 20 31 20 3b 0a 20 20 7d 0a 7d  lias = 1 ;.  }.}
7000: 20 7b 7d 0a 0a 23 20 54 69 63 6b 65 74 20 23 33   {}..# Ticket #3
7010: 34 30 38 2e 0a 23 20 0a 23 20 54 68 65 20 62 72  408..# .# The br
7020: 61 6e 63 68 20 6f 66 20 63 6f 64 65 20 69 6e 20  anch of code in 
7030: 77 68 65 72 65 2e 63 20 74 68 61 74 20 67 65 6e  where.c that gen
7040: 65 72 61 74 65 64 20 72 6f 77 69 64 20 6c 6f 6f  erated rowid loo
7050: 6b 75 70 73 20 77 61 73 0a 23 20 69 6e 63 6f 72  kups was.# incor
7060: 72 65 63 74 6c 79 20 64 65 61 6c 6c 6f 63 61 74  rectly deallocat
7070: 69 6e 67 20 61 20 63 6f 6e 73 74 61 6e 74 20 72  ing a constant r
7080: 65 67 69 73 74 65 72 2c 20 6d 65 61 6e 69 6e 67  egister, meaning
7090: 20 74 68 61 74 20 69 66 20 74 68 65 20 0a 23 20   that if the .# 
70a0: 76 64 62 65 20 63 6f 64 65 20 72 61 6e 20 6d 6f  vdbe code ran mo
70b0: 72 65 20 74 68 61 6e 20 6f 6e 63 65 2c 20 74 68  re than once, th
70c0: 65 20 73 65 63 6f 6e 64 20 74 69 6d 65 20 61 72  e second time ar
70d0: 6f 75 6e 64 20 74 68 65 20 63 6f 6e 73 74 61 6e  ound the constan
70e0: 74 0a 23 20 76 61 6c 75 65 20 6d 61 79 20 68 61  t.# value may ha
70f0: 76 65 20 62 65 65 6e 20 63 6c 6f 62 62 65 72 65  ve been clobbere
7100: 64 20 62 79 20 73 6f 6d 65 20 6f 74 68 65 72 20  d by some other 
7110: 76 61 6c 75 65 2e 0a 23 20 0a 64 6f 5f 74 65 73  value..# .do_tes
7120: 74 20 77 68 65 72 65 2d 31 36 2e 31 20 7b 0a 20  t where-16.1 {. 
7130: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
7140: 52 45 41 54 45 20 54 41 42 4c 45 20 61 31 28 69  REATE TABLE a1(i
7150: 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  d INTEGER PRIMAR
7160: 59 20 4b 45 59 2c 20 76 29 3b 0a 20 20 20 20 43  Y KEY, v);.    C
7170: 52 45 41 54 45 20 54 41 42 4c 45 20 61 32 28 69  REATE TABLE a2(i
7180: 64 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  d INTEGER PRIMAR
7190: 59 20 4b 45 59 2c 20 76 29 3b 0a 20 20 20 20 49  Y KEY, v);.    I
71a0: 4e 53 45 52 54 20 49 4e 54 4f 20 61 31 20 56 41  NSERT INTO a1 VA
71b0: 4c 55 45 53 28 31 2c 20 27 6f 6e 65 27 29 3b 0a  LUES(1, 'one');.
71c0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
71d0: 61 31 20 56 41 4c 55 45 53 28 32 2c 20 27 74 77  a1 VALUES(2, 'tw
71e0: 6f 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  o');.    INSERT 
71f0: 49 4e 54 4f 20 61 32 20 56 41 4c 55 45 53 28 31  INTO a2 VALUES(1
7200: 2c 20 27 6f 6e 65 27 29 3b 0a 20 20 20 20 49 4e  , 'one');.    IN
7210: 53 45 52 54 20 49 4e 54 4f 20 61 32 20 56 41 4c  SERT INTO a2 VAL
7220: 55 45 53 28 32 2c 20 27 74 77 6f 27 29 3b 0a 20  UES(2, 'two');. 
7230: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
7240: 77 68 65 72 65 2d 31 36 2e 32 20 7b 0a 20 20 65  where-16.2 {.  e
7250: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
7260: 45 43 54 20 2a 20 46 52 4f 4d 20 61 32 20 43 52  ECT * FROM a2 CR
7270: 4f 53 53 20 4a 4f 49 4e 20 61 31 20 57 48 45 52  OSS JOIN a1 WHER
7280: 45 20 61 31 2e 69 64 3d 31 20 41 4e 44 20 61 31  E a1.id=1 AND a1
7290: 2e 76 3d 27 6f 6e 65 27 3b 0a 20 20 7d 0a 7d 20  .v='one';.  }.} 
72a0: 7b 31 20 6f 6e 65 20 31 20 6f 6e 65 20 32 20 74  {1 one 1 one 2 t
72b0: 77 6f 20 31 20 6f 6e 65 7d 0a 0a 23 20 54 68 65  wo 1 one}..# The
72c0: 20 61 63 74 75 61 6c 20 70 72 6f 62 6c 65 6d 20   actual problem 
72d0: 72 65 70 6f 72 74 65 64 20 69 6e 20 23 33 34 30  reported in #340
72e0: 38 2e 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  8..do_test where
72f0: 2d 31 36 2e 33 20 7b 0a 20 20 65 78 65 63 73 71  -16.3 {.  execsq
7300: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
7310: 45 4d 50 20 54 41 42 4c 45 20 66 6f 6f 28 69 64  EMP TABLE foo(id
7320: 78 20 49 4e 54 45 47 45 52 29 3b 0a 20 20 20 20  x INTEGER);.    
7330: 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 6f 6f 20  INSERT INTO foo 
7340: 56 41 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 49  VALUES(1);.    I
7350: 4e 53 45 52 54 20 49 4e 54 4f 20 66 6f 6f 20 56  NSERT INTO foo V
7360: 41 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 49 4e  ALUES(1);.    IN
7370: 53 45 52 54 20 49 4e 54 4f 20 66 6f 6f 20 56 41  SERT INTO foo VA
7380: 4c 55 45 53 28 31 29 3b 0a 20 20 20 20 49 4e 53  LUES(1);.    INS
7390: 45 52 54 20 49 4e 54 4f 20 66 6f 6f 20 56 41 4c  ERT INTO foo VAL
73a0: 55 45 53 28 32 29 3b 0a 20 20 20 20 49 4e 53 45  UES(2);.    INSE
73b0: 52 54 20 49 4e 54 4f 20 66 6f 6f 20 56 41 4c 55  RT INTO foo VALU
73c0: 45 53 28 32 29 3b 0a 20 20 20 20 43 52 45 41 54  ES(2);.    CREAT
73d0: 45 20 54 45 4d 50 20 54 41 42 4c 45 20 62 61 72  E TEMP TABLE bar
73e0: 28 73 74 75 66 66 20 49 4e 54 45 47 45 52 29 3b  (stuff INTEGER);
73f0: 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
7400: 20 62 61 72 20 56 41 4c 55 45 53 28 31 30 30 29   bar VALUES(100)
7410: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
7420: 4f 20 62 61 72 20 56 41 4c 55 45 53 28 32 30 30  O bar VALUES(200
7430: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
7440: 54 4f 20 62 61 72 20 56 41 4c 55 45 53 28 33 30  TO bar VALUES(30
7450: 30 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  0);.  }.} {}.do_
7460: 74 65 73 74 20 77 68 65 72 65 2d 31 36 2e 34 20  test where-16.4 
7470: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
7480: 20 20 53 45 4c 45 43 54 20 62 61 72 2e 52 6f 77    SELECT bar.Row
7490: 49 44 20 69 64 20 46 52 4f 4d 20 66 6f 6f 2c 20  ID id FROM foo, 
74a0: 62 61 72 20 57 48 45 52 45 20 66 6f 6f 2e 69 64  bar WHERE foo.id
74b0: 78 20 3d 20 62 61 72 2e 52 6f 77 49 44 20 41 4e  x = bar.RowID AN
74c0: 44 20 69 64 20 3d 20 32 3b 0a 20 20 7d 0a 7d 20  D id = 2;.  }.} 
74d0: 7b 32 20 32 7d 0a 0a 69 6e 74 65 67 72 69 74 79  {2 2}..integrity
74e0: 5f 63 68 65 63 6b 20 7b 77 68 65 72 65 2d 39 39  _check {where-99
74f0: 2e 30 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .0}..#----------
7500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7530: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68  -----------.# Th
7540: 65 73 65 20 74 65 73 74 73 20 74 65 73 74 20 74  ese tests test t
7550: 68 61 74 20 61 20 62 75 67 20 73 75 72 72 6f 75  hat a bug surrou
7560: 6e 64 69 6e 67 20 74 68 65 20 75 73 65 20 6f 66  nding the use of
7570: 20 46 6f 72 63 65 49 6e 74 20 68 61 73 20 62 65   ForceInt has be
7580: 65 6e 0a 23 20 66 69 78 65 64 20 69 6e 20 77 68  en.# fixed in wh
7590: 65 72 65 2e 63 2e 0a 23 0a 64 6f 5f 74 65 73 74  ere.c..#.do_test
75a0: 20 77 68 65 72 65 2d 31 37 2e 31 20 7b 0a 20 20   where-17.1 {.  
75b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43 52  execsql {.    CR
75c0: 45 41 54 45 20 54 41 42 4c 45 20 74 62 6f 6f 6b  EATE TABLE tbook
75d0: 69 6e 67 20 28 0a 20 20 20 20 20 20 69 64 20 49  ing (.      id I
75e0: 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b  NTEGER PRIMARY K
75f0: 45 59 2c 0a 20 20 20 20 20 20 65 76 65 6e 74 74  EY,.      eventt
7600: 79 70 65 20 49 4e 54 45 47 45 52 20 4e 4f 54 20  ype INTEGER NOT 
7610: 4e 55 4c 4c 0a 20 20 20 20 29 3b 0a 20 20 20 20  NULL.    );.    
7620: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 62 6f 6f  INSERT INTO tboo
7630: 6b 69 6e 67 20 56 41 4c 55 45 53 28 34 32 2c 20  king VALUES(42, 
7640: 33 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  3);.    INSERT I
7650: 4e 54 4f 20 74 62 6f 6f 6b 69 6e 67 20 56 41 4c  NTO tbooking VAL
7660: 55 45 53 28 34 33 2c 20 34 29 3b 0a 20 20 7d 0a  UES(43, 4);.  }.
7670: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  } {}.do_test whe
7680: 72 65 2d 31 37 2e 32 20 7b 0a 20 20 65 78 65 63  re-17.2 {.  exec
7690: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
76a0: 20 61 2e 69 64 0a 20 20 20 20 46 52 4f 4d 20 74   a.id.    FROM t
76b0: 62 6f 6f 6b 69 6e 67 20 41 53 20 61 0a 20 20 20  booking AS a.   
76c0: 20 57 48 45 52 45 20 61 2e 65 76 65 6e 74 74 79   WHERE a.eventty
76d0: 70 65 3d 33 3b 0a 20 20 7d 0a 7d 20 7b 34 32 7d  pe=3;.  }.} {42}
76e0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31  .do_test where-1
76f0: 37 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  7.3 {.  execsql 
7700: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 2e 69  {.    SELECT a.i
7710: 64 2c 20 28 53 45 4c 45 43 54 20 62 2e 69 64 20  d, (SELECT b.id 
7720: 46 52 4f 4d 20 74 62 6f 6f 6b 69 6e 67 20 41 53  FROM tbooking AS
7730: 20 62 20 57 48 45 52 45 20 62 2e 69 64 3e 61 2e   b WHERE b.id>a.
7740: 69 64 29 0a 20 20 20 20 46 52 4f 4d 20 74 62 6f  id).    FROM tbo
7750: 6f 6b 69 6e 67 20 41 53 20 61 0a 20 20 20 20 57  oking AS a.    W
7760: 48 45 52 45 20 61 2e 65 76 65 6e 74 74 79 70 65  HERE a.eventtype
7770: 3d 33 3b 0a 20 20 7d 0a 7d 20 7b 34 32 20 34 33  =3;.  }.} {42 43
7780: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
7790: 31 37 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c  17.4 {.  execsql
77a0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 2e   {.    SELECT a.
77b0: 69 64 2c 20 28 53 45 4c 45 43 54 20 62 2e 69 64  id, (SELECT b.id
77c0: 20 46 52 4f 4d 20 74 62 6f 6f 6b 69 6e 67 20 41   FROM tbooking A
77d0: 53 20 62 20 57 48 45 52 45 20 62 2e 69 64 3e 61  S b WHERE b.id>a
77e0: 2e 69 64 29 0a 20 20 20 20 46 52 4f 4d 20 28 53  .id).    FROM (S
77f0: 45 4c 45 43 54 20 31 2e 35 20 41 53 20 69 64 29  ELECT 1.5 AS id)
7800: 20 41 53 20 61 0a 20 20 7d 0a 7d 20 7b 31 2e 35   AS a.  }.} {1.5
7810: 20 34 32 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65   42}.do_test whe
7820: 72 65 2d 31 37 2e 35 20 7b 0a 20 20 65 78 65 63  re-17.5 {.  exec
7830: 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45  sql {.    CREATE
7840: 20 54 41 42 4c 45 20 74 6f 74 68 65 72 28 61 2c   TABLE tother(a,
7850: 20 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   b);.    INSERT 
7860: 49 4e 54 4f 20 74 6f 74 68 65 72 20 56 41 4c 55  INTO tother VALU
7870: 45 53 28 31 2c 20 33 2e 37 29 3b 0a 20 20 20 20  ES(1, 3.7);.    
7880: 53 45 4c 45 43 54 20 69 64 2c 20 61 20 46 52 4f  SELECT id, a FRO
7890: 4d 20 74 62 6f 6f 6b 69 6e 67 2c 20 74 6f 74 68  M tbooking, toth
78a0: 65 72 20 57 48 45 52 45 20 69 64 3e 61 3b 0a 20  er WHERE id>a;. 
78b0: 20 7d 0a 7d 20 7b 34 32 20 31 20 34 33 20 31 7d   }.} {42 1 43 1}
78c0: 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a        ..finish_test.