/ Hex Artifact Content
Login

Artifact 32135ef3fe2bd427a94ad4982c35565c46abafe2:


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 31 39 20 32 30 30 34 2f 30  st,v 1.19 2004/0
0210: 35 2f 31 39 20 31 34 3a 35 36 3a 35 37 20 64 72  5/19 14:56:57 dr
0220: 68 20 45 78 70 20 24 0a 0a 73 65 74 20 74 65 73  h Exp $..set tes
0230: 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61  tdir [file dirna
0240: 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63  me $argv0].sourc
0250: 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65  e $testdir/teste
0260: 72 2e 74 63 6c 0a 0a 23 20 42 75 69 6c 64 20 73  r.tcl..# Build s
0270: 6f 6d 65 20 74 65 73 74 20 64 61 74 61 0a 23 0a  ome test data.#.
0280: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e  do_test where-1.
0290: 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  0 {.  execsql {.
02a0: 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
02b0: 20 74 31 28 77 20 69 6e 74 2c 20 78 20 69 6e 74   t1(w int, x int
02c0: 2c 20 79 20 69 6e 74 29 3b 0a 20 20 20 20 43 52  , y int);.    CR
02d0: 45 41 54 45 20 54 41 42 4c 45 20 74 32 28 70 20  EATE TABLE t2(p 
02e0: 69 6e 74 2c 20 71 20 69 6e 74 2c 20 72 20 69 6e  int, q int, r in
02f0: 74 2c 20 73 20 69 6e 74 29 3b 0a 20 20 7d 0a 20  t, s int);.  }. 
0300: 20 66 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b   for {set i 1} {
0310: 24 69 3c 3d 31 30 30 7d 20 7b 69 6e 63 72 20 69  $i<=100} {incr i
0320: 7d 20 7b 0a 20 20 20 20 73 65 74 20 77 20 24 69  } {.    set w $i
0330: 0a 20 20 20 20 73 65 74 20 78 20 5b 65 78 70 72  .    set x [expr
0340: 20 7b 69 6e 74 28 6c 6f 67 28 24 69 29 2f 6c 6f   {int(log($i)/lo
0350: 67 28 32 29 29 7d 5d 0a 20 20 20 20 73 65 74 20  g(2))}].    set 
0360: 79 20 5b 65 78 70 72 20 7b 24 69 2a 24 69 20 2b  y [expr {$i*$i +
0370: 20 32 2a 24 69 20 2b 20 31 7d 5d 0a 20 20 20 20   2*$i + 1}].    
0380: 65 78 65 63 73 71 6c 20 22 49 4e 53 45 52 54 20  execsql "INSERT 
0390: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 24  INTO t1 VALUES($
03a0: 77 2c 24 78 2c 24 79 29 22 0a 20 20 7d 0a 20 20  w,$x,$y)".  }.  
03b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
03c0: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53 45 4c  SERT INTO t2 SEL
03d0: 45 43 54 20 31 30 31 2d 77 2c 20 78 2c 20 28 53  ECT 101-w, x, (S
03e0: 45 4c 45 43 54 20 6d 61 78 28 79 29 20 46 52 4f  ELECT max(y) FRO
03f0: 4d 20 74 31 29 2b 31 2d 79 2c 20 79 20 46 52 4f  M t1)+1-y, y FRO
0400: 4d 20 74 31 3b 0a 20 20 20 20 43 52 45 41 54 45  M t1;.    CREATE
0410: 20 49 4e 44 45 58 20 69 31 77 20 4f 4e 20 74 31   INDEX i1w ON t1
0420: 28 77 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  (w);.    CREATE 
0430: 49 4e 44 45 58 20 69 31 78 79 20 4f 4e 20 74 31  INDEX i1xy ON t1
0440: 28 78 2c 79 29 3b 0a 20 20 20 20 43 52 45 41 54  (x,y);.    CREAT
0450: 45 20 49 4e 44 45 58 20 69 32 70 20 4f 4e 20 74  E INDEX i2p ON t
0460: 32 28 70 29 3b 0a 20 20 20 20 43 52 45 41 54 45  2(p);.    CREATE
0470: 20 49 4e 44 45 58 20 69 32 72 20 4f 4e 20 74 32   INDEX i2r ON t2
0480: 28 72 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20  (r);.    CREATE 
0490: 49 4e 44 45 58 20 69 32 71 73 20 4f 4e 20 74 32  INDEX i2qs ON t2
04a0: 28 71 2c 20 73 29 3b 0a 20 20 7d 0a 7d 20 7b 7d  (q, s);.  }.} {}
04b0: 0a 0a 23 20 44 6f 20 61 6e 20 53 51 4c 20 73 74  ..# Do an SQL st
04c0: 61 74 65 6d 65 6e 74 2e 20 20 41 70 70 65 6e 64  atement.  Append
04d0: 20 74 68 65 20 73 65 61 72 63 68 20 63 6f 75 6e   the search coun
04e0: 74 20 74 6f 20 74 68 65 20 65 6e 64 20 6f 66 20  t to the end of 
04f0: 74 68 65 20 72 65 73 75 6c 74 2e 0a 23 0a 70 72  the result..#.pr
0500: 6f 63 20 63 6f 75 6e 74 20 73 71 6c 20 7b 0a 20  oc count sql {. 
0510: 20 73 65 74 20 3a 3a 73 71 6c 69 74 65 5f 73 65   set ::sqlite_se
0520: 61 72 63 68 5f 63 6f 75 6e 74 20 30 0a 20 20 72  arch_count 0.  r
0530: 65 74 75 72 6e 20 5b 63 6f 6e 63 61 74 20 5b 65  eturn [concat [e
0540: 78 65 63 73 71 6c 20 24 73 71 6c 5d 20 24 3a 3a  xecsql $sql] $::
0550: 73 71 6c 69 74 65 5f 73 65 61 72 63 68 5f 63 6f  sqlite_search_co
0560: 75 6e 74 5d 0a 7d 0a 0a 23 20 56 65 72 69 66 79  unt].}..# Verify
0570: 20 74 68 61 74 20 71 75 65 72 69 65 73 20 75 73   that queries us
0580: 65 20 61 6e 20 69 6e 64 65 78 2e 20 20 57 65 20  e an index.  We 
0590: 61 72 65 20 75 73 69 6e 67 20 74 68 65 20 73 70  are using the sp
05a0: 65 63 69 61 6c 20 76 61 72 69 61 62 6c 65 0a 23  ecial variable.#
05b0: 20 22 73 71 6c 69 74 65 5f 73 65 61 72 63 68 5f   "sqlite_search_
05c0: 63 6f 75 6e 74 22 20 77 68 69 63 68 20 74 61 6c  count" which tal
05d0: 6c 79 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  lys the number o
05e0: 66 20 65 78 65 63 75 74 69 6f 6e 73 20 6f 66 20  f executions of 
05f0: 4d 6f 76 65 54 6f 0a 23 20 61 6e 64 20 4e 65 78  MoveTo.# and Nex
0600: 74 20 6f 70 65 72 61 74 6f 72 73 20 69 6e 20 74  t operators in t
0610: 68 65 20 56 44 42 45 2e 20 20 42 79 20 76 65 72  he VDBE.  By ver
0620: 69 66 69 6e 67 20 74 68 61 74 20 74 68 65 20 73  ifing that the s
0630: 65 61 72 63 68 20 63 6f 75 6e 74 20 69 73 0a 23  earch count is.#
0640: 20 73 6d 61 6c 6c 20 77 65 20 63 61 6e 20 62 65   small we can be
0650: 20 61 73 73 75 72 65 64 20 74 68 61 74 20 69 6e   assured that in
0660: 64 69 63 65 73 20 61 72 65 20 62 65 69 6e 67 20  dices are being 
0670: 75 73 65 64 20 70 72 6f 70 65 72 6c 79 2e 0a 23  used properly..#
0680: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31  .do_test where-1
0690: 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45  .1 {.  count {SE
06a0: 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20 74  LECT x, y FROM t
06b0: 31 20 57 48 45 52 45 20 77 3d 31 30 7d 0a 7d 20  1 WHERE w=10}.} 
06c0: 7b 33 20 31 32 31 20 33 7d 0a 64 6f 5f 74 65 73  {3 121 3}.do_tes
06d0: 74 20 77 68 65 72 65 2d 31 2e 32 20 7b 0a 20 20  t where-1.2 {.  
06e0: 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 78 2c  count {SELECT x,
06f0: 20 79 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   y FROM t1 WHERE
0700: 20 77 3d 31 31 7d 0a 7d 20 7b 33 20 31 34 34 20   w=11}.} {3 144 
0710: 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  3}.do_test where
0720: 2d 31 2e 33 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  -1.3 {.  count {
0730: 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d  SELECT x, y FROM
0740: 20 74 31 20 57 48 45 52 45 20 31 31 3d 77 7d 0a   t1 WHERE 11=w}.
0750: 7d 20 7b 33 20 31 34 34 20 33 7d 0a 64 6f 5f 74  } {3 144 3}.do_t
0760: 65 73 74 20 77 68 65 72 65 2d 31 2e 34 20 7b 0a  est where-1.4 {.
0770: 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20    count {SELECT 
0780: 78 2c 20 79 20 46 52 4f 4d 20 74 31 20 57 48 45  x, y FROM t1 WHE
0790: 52 45 20 31 31 3d 77 20 41 4e 44 20 78 3e 32 7d  RE 11=w AND x>2}
07a0: 0a 7d 20 7b 33 20 31 34 34 20 33 7d 0a 64 6f 5f  .} {3 144 3}.do_
07b0: 74 65 73 74 20 77 68 65 72 65 2d 31 2e 35 20 7b  test where-1.5 {
07c0: 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54  .  count {SELECT
07d0: 20 78 2c 20 79 20 46 52 4f 4d 20 74 31 20 57 48   x, y FROM t1 WH
07e0: 45 52 45 20 79 3c 32 30 30 20 41 4e 44 20 77 3d  ERE y<200 AND w=
07f0: 31 31 20 41 4e 44 20 78 3e 32 7d 0a 7d 20 7b 33  11 AND x>2}.} {3
0800: 20 31 34 34 20 33 7d 0a 64 6f 5f 74 65 73 74 20   144 3}.do_test 
0810: 77 68 65 72 65 2d 31 2e 36 20 7b 0a 20 20 63 6f  where-1.6 {.  co
0820: 75 6e 74 20 7b 53 45 4c 45 43 54 20 78 2c 20 79  unt {SELECT x, y
0830: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79   FROM t1 WHERE y
0840: 3c 32 30 30 20 41 4e 44 20 78 3e 32 20 41 4e 44  <200 AND x>2 AND
0850: 20 77 3d 31 31 7d 0a 7d 20 7b 33 20 31 34 34 20   w=11}.} {3 144 
0860: 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  3}.do_test where
0870: 2d 31 2e 37 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  -1.7 {.  count {
0880: 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d  SELECT x, y FROM
0890: 20 74 31 20 57 48 45 52 45 20 77 3d 31 31 20 41   t1 WHERE w=11 A
08a0: 4e 44 20 79 3c 32 30 30 20 41 4e 44 20 78 3e 32  ND y<200 AND x>2
08b0: 7d 0a 7d 20 7b 33 20 31 34 34 20 33 7d 0a 64 6f  }.} {3 144 3}.do
08c0: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 38 20  _test where-1.8 
08d0: 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43  {.  count {SELEC
08e0: 54 20 78 2c 20 79 20 46 52 4f 4d 20 74 31 20 57  T x, y FROM t1 W
08f0: 48 45 52 45 20 77 3e 31 30 20 41 4e 44 20 79 3d  HERE w>10 AND y=
0900: 31 34 34 20 41 4e 44 20 78 3d 33 7d 0a 7d 20 7b  144 AND x=3}.} {
0910: 33 20 31 34 34 20 33 7d 0a 64 6f 5f 74 65 73 74  3 144 3}.do_test
0920: 20 77 68 65 72 65 2d 31 2e 39 20 7b 0a 20 20 63   where-1.9 {.  c
0930: 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 78 2c 20  ount {SELECT x, 
0940: 79 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  y FROM t1 WHERE 
0950: 79 3d 31 34 34 20 41 4e 44 20 77 3e 31 30 20 41  y=144 AND w>10 A
0960: 4e 44 20 78 3d 33 7d 0a 7d 20 7b 33 20 31 34 34  ND x=3}.} {3 144
0970: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   3}.do_test wher
0980: 65 2d 31 2e 31 30 20 7b 0a 20 20 63 6f 75 6e 74  e-1.10 {.  count
0990: 20 7b 53 45 4c 45 43 54 20 78 2c 20 79 20 46 52   {SELECT x, y FR
09a0: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20  OM t1 WHERE x=3 
09b0: 41 4e 44 20 77 3e 3d 31 30 20 41 4e 44 20 79 3d  AND w>=10 AND y=
09c0: 31 32 31 7d 0a 7d 20 7b 33 20 31 32 31 20 33 7d  121}.} {3 121 3}
09d0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31  .do_test where-1
09e0: 2e 31 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53  .11 {.  count {S
09f0: 45 4c 45 43 54 20 78 2c 20 79 20 46 52 4f 4d 20  ELECT x, y FROM 
0a00: 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44  t1 WHERE x=3 AND
0a10: 20 79 3d 31 30 30 20 41 4e 44 20 77 3c 31 30 7d   y=100 AND w<10}
0a20: 0a 7d 20 7b 33 20 31 30 30 20 33 7d 0a 0a 23 20  .} {3 100 3}..# 
0a30: 4e 65 77 20 66 6f 72 20 53 51 4c 69 74 65 20 76  New for SQLite v
0a40: 65 72 73 69 6f 6e 20 32 2e 31 3a 20 56 65 72 69  ersion 2.1: Veri
0a50: 66 79 20 74 68 61 74 20 74 68 61 74 20 69 6e 65  fy that that ine
0a60: 71 75 61 6c 69 74 79 20 63 6f 6e 73 74 72 61 69  quality constrai
0a70: 6e 74 73 0a 23 20 61 72 65 20 75 73 65 64 20 63  nts.# are used c
0a80: 6f 72 72 65 63 74 6c 79 2e 0a 23 0a 64 6f 5f 74  orrectly..#.do_t
0a90: 65 73 74 20 77 68 65 72 65 2d 31 2e 31 32 20 7b  est where-1.12 {
0aa0: 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54  .  count {SELECT
0ab0: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
0ac0: 20 78 3d 33 20 41 4e 44 20 79 3c 31 30 30 7d 0a   x=3 AND y<100}.
0ad0: 7d 20 7b 38 20 33 7d 0a 64 6f 5f 74 65 73 74 20  } {8 3}.do_test 
0ae0: 77 68 65 72 65 2d 31 2e 31 33 20 7b 0a 20 20 63  where-1.13 {.  c
0af0: 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46  ount {SELECT w F
0b00: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33  ROM t1 WHERE x=3
0b10: 20 41 4e 44 20 31 30 30 3e 79 7d 0a 7d 20 7b 38   AND 100>y}.} {8
0b20: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   3}.do_test wher
0b30: 65 2d 31 2e 31 34 20 7b 0a 20 20 63 6f 75 6e 74  e-1.14 {.  count
0b40: 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20   {SELECT w FROM 
0b50: 74 31 20 57 48 45 52 45 20 33 3d 78 20 41 4e 44  t1 WHERE 3=x AND
0b60: 20 79 3c 31 30 30 7d 0a 7d 20 7b 38 20 33 7d 0a   y<100}.} {8 3}.
0b70: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e  do_test where-1.
0b80: 31 35 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45  15 {.  count {SE
0b90: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
0ba0: 48 45 52 45 20 33 3d 78 20 41 4e 44 20 31 30 30  HERE 3=x AND 100
0bb0: 3e 79 7d 0a 7d 20 7b 38 20 33 7d 0a 64 6f 5f 74  >y}.} {8 3}.do_t
0bc0: 65 73 74 20 77 68 65 72 65 2d 31 2e 31 36 20 7b  est where-1.16 {
0bd0: 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54  .  count {SELECT
0be0: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
0bf0: 20 78 3d 33 20 41 4e 44 20 79 3c 3d 31 30 30 7d   x=3 AND y<=100}
0c00: 0a 7d 20 7b 38 20 39 20 35 7d 0a 64 6f 5f 74 65  .} {8 9 5}.do_te
0c10: 73 74 20 77 68 65 72 65 2d 31 2e 31 37 20 7b 0a  st where-1.17 {.
0c20: 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20    count {SELECT 
0c30: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
0c40: 78 3d 33 20 41 4e 44 20 31 30 30 3e 3d 79 7d 0a  x=3 AND 100>=y}.
0c50: 7d 20 7b 38 20 39 20 35 7d 0a 64 6f 5f 74 65 73  } {8 9 5}.do_tes
0c60: 74 20 77 68 65 72 65 2d 31 2e 31 38 20 7b 0a 20  t where-1.18 {. 
0c70: 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77   count {SELECT w
0c80: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
0c90: 3d 33 20 41 4e 44 20 79 3e 32 32 35 7d 0a 7d 20  =3 AND y>225}.} 
0ca0: 7b 31 35 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77  {15 3}.do_test w
0cb0: 68 65 72 65 2d 31 2e 31 39 20 7b 0a 20 20 63 6f  here-1.19 {.  co
0cc0: 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52  unt {SELECT w FR
0cd0: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20  OM t1 WHERE x=3 
0ce0: 41 4e 44 20 32 32 35 3c 79 7d 0a 7d 20 7b 31 35  AND 225<y}.} {15
0cf0: 20 33 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72   3}.do_test wher
0d00: 65 2d 31 2e 32 30 20 7b 0a 20 20 63 6f 75 6e 74  e-1.20 {.  count
0d10: 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20   {SELECT w FROM 
0d20: 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44  t1 WHERE x=3 AND
0d30: 20 79 3e 3d 32 32 35 7d 0a 7d 20 7b 31 34 20 31   y>=225}.} {14 1
0d40: 35 20 35 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  5 5}.do_test whe
0d50: 72 65 2d 31 2e 32 31 20 7b 0a 20 20 63 6f 75 6e  re-1.21 {.  coun
0d60: 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d  t {SELECT w FROM
0d70: 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e   t1 WHERE x=3 AN
0d80: 44 20 32 32 35 3c 3d 79 7d 0a 7d 20 7b 31 34 20  D 225<=y}.} {14 
0d90: 31 35 20 35 7d 0a 64 6f 5f 74 65 73 74 20 77 68  15 5}.do_test wh
0da0: 65 72 65 2d 31 2e 32 32 20 7b 0a 20 20 63 6f 75  ere-1.22 {.  cou
0db0: 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f  nt {SELECT w FRO
0dc0: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41  M t1 WHERE x=3 A
0dd0: 4e 44 20 79 3e 31 32 31 20 41 4e 44 20 79 3c 31  ND y>121 AND y<1
0de0: 39 36 7d 0a 7d 20 7b 31 31 20 31 32 20 35 7d 0a  96}.} {11 12 5}.
0df0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e  do_test where-1.
0e00: 32 33 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45  23 {.  count {SE
0e10: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
0e20: 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e 3d  HERE x=3 AND y>=
0e30: 31 32 31 20 41 4e 44 20 79 3c 3d 31 39 36 7d 0a  121 AND y<=196}.
0e40: 7d 20 7b 31 30 20 31 31 20 31 32 20 31 33 20 39  } {10 11 12 13 9
0e50: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
0e60: 31 2e 32 34 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  1.24 {.  count {
0e70: 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31  SELECT w FROM t1
0e80: 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20 31   WHERE x=3 AND 1
0e90: 32 31 3c 79 20 41 4e 44 20 31 39 36 3e 79 7d 0a  21<y AND 196>y}.
0ea0: 7d 20 7b 31 31 20 31 32 20 35 7d 0a 64 6f 5f 74  } {11 12 5}.do_t
0eb0: 65 73 74 20 77 68 65 72 65 2d 31 2e 32 35 20 7b  est where-1.25 {
0ec0: 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54  .  count {SELECT
0ed0: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
0ee0: 20 78 3d 33 20 41 4e 44 20 31 32 31 3c 3d 79 20   x=3 AND 121<=y 
0ef0: 41 4e 44 20 31 39 36 3e 3d 79 7d 0a 7d 20 7b 31  AND 196>=y}.} {1
0f00: 30 20 31 31 20 31 32 20 31 33 20 39 7d 0a 0a 23  0 11 12 13 9}..#
0f10: 20 4e 65 65 64 20 74 6f 20 77 6f 72 6b 20 6f 6e   Need to work on
0f20: 20 6f 70 74 69 6d 69 7a 69 6e 67 20 74 68 65 20   optimizing the 
0f30: 42 45 54 57 45 45 4e 20 6f 70 65 72 61 74 6f 72  BETWEEN operator
0f40: 2e 20 20 0a 23 0a 23 20 64 6f 5f 74 65 73 74 20  .  .#.# do_test 
0f50: 77 68 65 72 65 2d 31 2e 32 36 20 7b 0a 23 20 20  where-1.26 {.#  
0f60: 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77   count {SELECT w
0f70: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
0f80: 3d 33 20 41 4e 44 20 79 20 42 45 54 57 45 45 4e  =3 AND y BETWEEN
0f90: 20 31 32 31 20 41 4e 44 20 31 39 36 7d 0a 23 20   121 AND 196}.# 
0fa0: 7d 20 7b 31 30 20 31 31 20 31 32 20 31 33 20 39  } {10 11 12 13 9
0fb0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  }..do_test where
0fc0: 2d 31 2e 32 37 20 7b 0a 20 20 63 6f 75 6e 74 20  -1.27 {.  count 
0fd0: 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74  {SELECT w FROM t
0fe0: 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20  1 WHERE x=3 AND 
0ff0: 79 2b 31 3d 3d 31 32 32 7d 0a 7d 20 7b 31 30 20  y+1==122}.} {10 
1000: 31 37 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65  17}..do_test whe
1010: 72 65 2d 31 2e 32 38 20 7b 0a 20 20 63 6f 75 6e  re-1.28 {.  coun
1020: 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d  t {SELECT w FROM
1030: 20 74 31 20 57 48 45 52 45 20 78 2b 31 3d 34 20   t1 WHERE x+1=4 
1040: 41 4e 44 20 79 2b 31 3d 3d 31 32 32 7d 0a 7d 20  AND y+1==122}.} 
1050: 7b 31 30 20 39 39 7d 0a 64 6f 5f 74 65 73 74 20  {10 99}.do_test 
1060: 77 68 65 72 65 2d 31 2e 32 39 20 7b 0a 20 20 63  where-1.29 {.  c
1070: 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46  ount {SELECT w F
1080: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3d 3d  ROM t1 WHERE y==
1090: 31 32 31 7d 0a 7d 20 7b 31 30 20 39 39 7d 0a 0a  121}.} {10 99}..
10a0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31  .do_test where-1
10b0: 2e 33 30 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53  .30 {.  count {S
10c0: 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20  ELECT w FROM t1 
10d0: 57 48 45 52 45 20 77 3e 39 37 7d 0a 7d 20 7b 39  WHERE w>97}.} {9
10e0: 38 20 39 39 20 31 30 30 20 36 7d 0a 64 6f 5f 74  8 99 100 6}.do_t
10f0: 65 73 74 20 77 68 65 72 65 2d 31 2e 33 31 20 7b  est where-1.31 {
1100: 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54  .  count {SELECT
1110: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
1120: 20 77 3e 3d 39 37 7d 0a 7d 20 7b 39 37 20 39 38   w>=97}.} {97 98
1130: 20 39 39 20 31 30 30 20 38 7d 0a 64 6f 5f 74 65   99 100 8}.do_te
1140: 73 74 20 77 68 65 72 65 2d 31 2e 33 33 20 7b 0a  st where-1.33 {.
1150: 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20    count {SELECT 
1160: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
1170: 77 3d 3d 39 37 7d 0a 7d 20 7b 39 37 20 33 7d 0a  w==97}.} {97 3}.
1180: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e  do_test where-1.
1190: 33 34 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45  34 {.  count {SE
11a0: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
11b0: 48 45 52 45 20 77 2b 31 3d 3d 39 38 7d 0a 7d 20  HERE w+1==98}.} 
11c0: 7b 39 37 20 39 39 7d 0a 64 6f 5f 74 65 73 74 20  {97 99}.do_test 
11d0: 77 68 65 72 65 2d 31 2e 33 35 20 7b 0a 20 20 63  where-1.35 {.  c
11e0: 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46  ount {SELECT w F
11f0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77 3c 33  ROM t1 WHERE w<3
1200: 7d 0a 7d 20 7b 31 20 32 20 34 7d 0a 64 6f 5f 74  }.} {1 2 4}.do_t
1210: 65 73 74 20 77 68 65 72 65 2d 31 2e 33 36 20 7b  est where-1.36 {
1220: 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54  .  count {SELECT
1230: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
1240: 20 77 3c 3d 33 7d 0a 7d 20 7b 31 20 32 20 33 20   w<=3}.} {1 2 3 
1250: 36 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  6}.do_test where
1260: 2d 31 2e 33 37 20 7b 0a 20 20 63 6f 75 6e 74 20  -1.37 {.  count 
1270: 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74  {SELECT w FROM t
1280: 31 20 57 48 45 52 45 20 77 2b 31 3c 3d 34 20 4f  1 WHERE w+1<=4 O
1290: 52 44 45 52 20 42 59 20 77 7d 0a 7d 20 7b 31 20  RDER BY w}.} {1 
12a0: 32 20 33 20 31 39 39 7d 0a 0a 64 6f 5f 74 65 73  2 3 199}..do_tes
12b0: 74 20 77 68 65 72 65 2d 31 2e 33 38 20 7b 0a 20  t where-1.38 {. 
12c0: 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 28   count {SELECT (
12d0: 77 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  w) FROM t1 WHERE
12e0: 20 28 77 29 3e 28 39 37 29 7d 0a 7d 20 7b 39 38   (w)>(97)}.} {98
12f0: 20 39 39 20 31 30 30 20 36 7d 0a 64 6f 5f 74 65   99 100 6}.do_te
1300: 73 74 20 77 68 65 72 65 2d 31 2e 33 39 20 7b 0a  st where-1.39 {.
1310: 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20    count {SELECT 
1320: 28 77 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  (w) FROM t1 WHER
1330: 45 20 28 77 29 3e 3d 28 39 37 29 7d 0a 7d 20 7b  E (w)>=(97)}.} {
1340: 39 37 20 39 38 20 39 39 20 31 30 30 20 38 7d 0a  97 98 99 100 8}.
1350: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e  do_test where-1.
1360: 34 30 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45  40 {.  count {SE
1370: 4c 45 43 54 20 28 77 29 20 46 52 4f 4d 20 74 31  LECT (w) FROM t1
1380: 20 57 48 45 52 45 20 28 77 29 3d 3d 28 39 37 29   WHERE (w)==(97)
1390: 7d 0a 7d 20 7b 39 37 20 33 7d 0a 64 6f 5f 74 65  }.} {97 3}.do_te
13a0: 73 74 20 77 68 65 72 65 2d 31 2e 34 31 20 7b 0a  st where-1.41 {.
13b0: 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20    count {SELECT 
13c0: 28 77 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  (w) FROM t1 WHER
13d0: 45 20 28 28 77 29 2b 28 31 29 29 3d 3d 28 39 38  E ((w)+(1))==(98
13e0: 29 7d 0a 7d 20 7b 39 37 20 39 39 7d 0a 0a 0a 23  )}.} {97 99}...#
13f0: 20 44 6f 20 74 68 65 20 73 61 6d 65 20 6b 69 6e   Do the same kin
1400: 64 20 6f 66 20 74 68 69 6e 67 20 65 78 63 65 70  d of thing excep
1410: 74 20 75 73 65 20 61 20 6a 6f 69 6e 20 61 73 20  t use a join as 
1420: 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 2e  the data source.
1430: 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  .#.do_test where
1440: 2d 32 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  -2.1 {.  count {
1450: 0a 20 20 20 20 53 45 4c 45 43 54 20 77 2c 20 70  .    SELECT w, p
1460: 20 46 52 4f 4d 20 74 32 2c 20 74 31 0a 20 20 20   FROM t2, t1.   
1470: 20 57 48 45 52 45 20 78 3d 71 20 41 4e 44 20 79   WHERE x=q AND y
1480: 3d 73 20 41 4e 44 20 72 3d 38 39 37 37 0a 20 20  =s AND r=8977.  
1490: 7d 0a 7d 20 7b 33 34 20 36 37 20 36 7d 0a 64 6f  }.} {34 67 6}.do
14a0: 5f 74 65 73 74 20 77 68 65 72 65 2d 32 2e 32 20  _test where-2.2 
14b0: 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20  {.  count {.    
14c0: 53 45 4c 45 43 54 20 77 2c 20 70 20 46 52 4f 4d  SELECT w, p FROM
14d0: 20 74 32 2c 20 74 31 0a 20 20 20 20 57 48 45 52   t2, t1.    WHER
14e0: 45 20 78 3d 71 20 41 4e 44 20 73 3d 79 20 41 4e  E x=q AND s=y AN
14f0: 44 20 72 3d 38 39 37 37 0a 20 20 7d 0a 7d 20 7b  D r=8977.  }.} {
1500: 33 34 20 36 37 20 36 7d 0a 64 6f 5f 74 65 73 74  34 67 6}.do_test
1510: 20 77 68 65 72 65 2d 32 2e 33 20 7b 0a 20 20 63   where-2.3 {.  c
1520: 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  ount {.    SELEC
1530: 54 20 77 2c 20 70 20 46 52 4f 4d 20 74 32 2c 20  T w, p FROM t2, 
1540: 74 31 0a 20 20 20 20 57 48 45 52 45 20 78 3d 71  t1.    WHERE x=q
1550: 20 41 4e 44 20 73 3d 79 20 41 4e 44 20 72 3d 38   AND s=y AND r=8
1560: 39 37 37 20 41 4e 44 20 77 3e 31 30 0a 20 20 7d  977 AND w>10.  }
1570: 0a 7d 20 7b 33 34 20 36 37 20 36 7d 0a 64 6f 5f  .} {34 67 6}.do_
1580: 74 65 73 74 20 77 68 65 72 65 2d 32 2e 34 20 7b  test where-2.4 {
1590: 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53  .  count {.    S
15a0: 45 4c 45 43 54 20 77 2c 20 70 20 46 52 4f 4d 20  ELECT w, p FROM 
15b0: 74 32 2c 20 74 31 0a 20 20 20 20 57 48 45 52 45  t2, t1.    WHERE
15c0: 20 70 3c 38 30 20 41 4e 44 20 78 3d 71 20 41 4e   p<80 AND x=q AN
15d0: 44 20 73 3d 79 20 41 4e 44 20 72 3d 38 39 37 37  D s=y AND r=8977
15e0: 20 41 4e 44 20 77 3e 31 30 0a 20 20 7d 0a 7d 20   AND w>10.  }.} 
15f0: 7b 33 34 20 36 37 20 36 7d 0a 64 6f 5f 74 65 73  {34 67 6}.do_tes
1600: 74 20 77 68 65 72 65 2d 32 2e 35 20 7b 0a 20 20  t where-2.5 {.  
1610: 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45  count {.    SELE
1620: 43 54 20 77 2c 20 70 20 46 52 4f 4d 20 74 32 2c  CT w, p FROM t2,
1630: 20 74 31 0a 20 20 20 20 57 48 45 52 45 20 70 3c   t1.    WHERE p<
1640: 38 30 20 41 4e 44 20 78 3d 71 20 41 4e 44 20 38  80 AND x=q AND 8
1650: 39 37 37 3d 72 20 41 4e 44 20 73 3d 79 20 41 4e  977=r AND s=y AN
1660: 44 20 77 3e 31 30 0a 20 20 7d 0a 7d 20 7b 33 34  D w>10.  }.} {34
1670: 20 36 37 20 36 7d 0a 64 6f 5f 74 65 73 74 20 77   67 6}.do_test w
1680: 68 65 72 65 2d 32 2e 36 20 7b 0a 20 20 63 6f 75  here-2.6 {.  cou
1690: 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  nt {.    SELECT 
16a0: 77 2c 20 70 20 46 52 4f 4d 20 74 32 2c 20 74 31  w, p FROM t2, t1
16b0: 0a 20 20 20 20 57 48 45 52 45 20 78 3d 71 20 41  .    WHERE x=q A
16c0: 4e 44 20 70 3d 37 37 20 41 4e 44 20 73 3d 79 20  ND p=77 AND s=y 
16d0: 41 4e 44 20 77 3e 35 0a 20 20 7d 0a 7d 20 7b 32  AND w>5.  }.} {2
16e0: 34 20 37 37 20 36 7d 0a 64 6f 5f 74 65 73 74 20  4 77 6}.do_test 
16f0: 77 68 65 72 65 2d 32 2e 37 20 7b 0a 20 20 63 6f  where-2.7 {.  co
1700: 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  unt {.    SELECT
1710: 20 77 2c 20 70 20 46 52 4f 4d 20 74 31 2c 20 74   w, p FROM t1, t
1720: 32 0a 20 20 20 20 57 48 45 52 45 20 78 3d 71 20  2.    WHERE x=q 
1730: 41 4e 44 20 70 3e 37 37 20 41 4e 44 20 73 3d 79  AND p>77 AND s=y
1740: 20 41 4e 44 20 77 3d 35 0a 20 20 7d 0a 7d 20 7b   AND w=5.  }.} {
1750: 35 20 39 36 20 36 7d 0a 0a 23 20 4c 65 74 73 20  5 96 6}..# Lets 
1760: 64 6f 20 61 20 33 2d 77 61 79 20 6a 6f 69 6e 2e  do a 3-way join.
1770: 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  .#.do_test where
1780: 2d 33 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  -3.1 {.  count {
1790: 0a 20 20 20 20 53 45 4c 45 43 54 20 41 2e 77 2c  .    SELECT A.w,
17a0: 20 42 2e 70 2c 20 43 2e 77 20 46 52 4f 4d 20 74   B.p, C.w FROM t
17b0: 31 20 61 73 20 41 2c 20 74 32 20 61 73 20 42 2c  1 as A, t2 as B,
17c0: 20 74 31 20 61 73 20 43 0a 20 20 20 20 57 48 45   t1 as C.    WHE
17d0: 52 45 20 43 2e 77 3d 31 30 31 2d 42 2e 70 20 41  RE C.w=101-B.p A
17e0: 4e 44 20 42 2e 72 3d 31 30 32 30 32 2d 41 2e 79  ND B.r=10202-A.y
17f0: 20 41 4e 44 20 41 2e 77 3d 31 31 0a 20 20 7d 0a   AND A.w=11.  }.
1800: 7d 20 7b 31 31 20 39 30 20 31 31 20 39 7d 0a 64  } {11 90 11 9}.d
1810: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 33 2e 32  o_test where-3.2
1820: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20   {.  count {.   
1830: 20 53 45 4c 45 43 54 20 41 2e 77 2c 20 42 2e 70   SELECT A.w, B.p
1840: 2c 20 43 2e 77 20 46 52 4f 4d 20 74 31 20 61 73  , C.w FROM t1 as
1850: 20 41 2c 20 74 32 20 61 73 20 42 2c 20 74 31 20   A, t2 as B, t1 
1860: 61 73 20 43 0a 20 20 20 20 57 48 45 52 45 20 43  as C.    WHERE C
1870: 2e 77 3d 31 30 31 2d 42 2e 70 20 41 4e 44 20 42  .w=101-B.p AND B
1880: 2e 72 3d 31 30 32 30 32 2d 41 2e 79 20 41 4e 44  .r=10202-A.y AND
1890: 20 41 2e 77 3d 31 32 0a 20 20 7d 0a 7d 20 7b 31   A.w=12.  }.} {1
18a0: 32 20 38 39 20 31 32 20 39 7d 0a 64 6f 5f 74 65  2 89 12 9}.do_te
18b0: 73 74 20 77 68 65 72 65 2d 33 2e 33 20 7b 0a 20  st where-3.3 {. 
18c0: 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c   count {.    SEL
18d0: 45 43 54 20 41 2e 77 2c 20 42 2e 70 2c 20 43 2e  ECT A.w, B.p, C.
18e0: 77 20 46 52 4f 4d 20 74 31 20 61 73 20 41 2c 20  w FROM t1 as A, 
18f0: 74 32 20 61 73 20 42 2c 20 74 31 20 61 73 20 43  t2 as B, t1 as C
1900: 0a 20 20 20 20 57 48 45 52 45 20 41 2e 77 3d 31  .    WHERE A.w=1
1910: 35 20 41 4e 44 20 42 2e 70 3d 43 2e 77 20 41 4e  5 AND B.p=C.w AN
1920: 44 20 42 2e 72 3d 31 30 32 30 32 2d 41 2e 79 0a  D B.r=10202-A.y.
1930: 20 20 7d 0a 7d 20 7b 31 35 20 38 36 20 38 36 20    }.} {15 86 86 
1940: 39 7d 0a 0a 23 20 54 65 73 74 20 74 6f 20 73 65  9}..# Test to se
1950: 65 20 74 68 61 74 20 74 68 65 20 73 70 65 63 69  e that the speci
1960: 61 6c 20 63 61 73 65 20 6f 66 20 61 20 63 6f 6e  al case of a con
1970: 73 74 61 6e 74 20 57 48 45 52 45 20 63 6c 61 75  stant WHERE clau
1980: 73 65 20 69 73 0a 23 20 68 61 6e 64 6c 65 64 2e  se is.# handled.
1990: 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  .#.do_test where
19a0: 2d 34 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  -4.1 {.  count {
19b0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
19c0: 4f 4d 20 74 31 20 57 48 45 52 45 20 30 0a 20 20  OM t1 WHERE 0.  
19d0: 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20  }.} {0}.do_test 
19e0: 77 68 65 72 65 2d 34 2e 32 20 7b 0a 20 20 63 6f  where-4.2 {.  co
19f0: 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  unt {.    SELECT
1a00: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
1a10: 20 31 20 4c 49 4d 49 54 20 31 0a 20 20 7d 0a 7d   1 LIMIT 1.  }.}
1a20: 20 7b 31 20 30 20 34 20 31 7d 0a 64 6f 5f 74 65   {1 0 4 1}.do_te
1a30: 73 74 20 77 68 65 72 65 2d 34 2e 33 20 7b 0a 20  st where-4.3 {. 
1a40: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
1a50: 45 4c 45 43 54 20 39 39 20 57 48 45 52 45 20 30  ELECT 99 WHERE 0
1a60: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
1a70: 74 20 77 68 65 72 65 2d 34 2e 34 20 7b 0a 20 20  t where-4.4 {.  
1a80: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
1a90: 4c 45 43 54 20 39 39 20 57 48 45 52 45 20 31 0a  LECT 99 WHERE 1.
1aa0: 20 20 7d 0a 7d 20 7b 39 39 7d 0a 0a 23 20 56 65    }.} {99}..# Ve
1ab0: 72 69 66 79 20 74 68 61 74 20 49 4e 20 6f 70 65  rify that IN ope
1ac0: 72 61 74 6f 72 73 20 69 6e 20 61 20 57 48 45 52  rators in a WHER
1ad0: 45 20 63 6c 61 75 73 65 20 61 72 65 20 68 61 6e  E clause are han
1ae0: 64 6c 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a  dled correctly..
1af0: 23 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  #.do_test where-
1b00: 35 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a  5.1 {.  count {.
1b10: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1b20: 4d 20 74 31 20 57 48 45 52 45 20 72 6f 77 69 64  M t1 WHERE rowid
1b30: 20 49 4e 20 28 31 2c 32 2c 33 2c 31 32 33 34 29   IN (1,2,3,1234)
1b40: 20 6f 72 64 65 72 20 62 79 20 31 3b 0a 20 20 7d   order by 1;.  }
1b50: 0a 7d 20 7b 31 20 30 20 34 20 32 20 31 20 39 20  .} {1 0 4 2 1 9 
1b60: 33 20 31 20 31 36 20 33 7d 0a 64 6f 5f 74 65 73  3 1 16 3}.do_tes
1b70: 74 20 77 68 65 72 65 2d 35 2e 32 20 7b 0a 20 20  t where-5.2 {.  
1b80: 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45  count {.    SELE
1b90: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
1ba0: 52 45 20 72 6f 77 69 64 2b 30 20 49 4e 20 28 31  RE rowid+0 IN (1
1bb0: 2c 32 2c 33 2c 31 32 33 34 29 20 6f 72 64 65 72  ,2,3,1234) order
1bc0: 20 62 79 20 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20   by 1;.  }.} {1 
1bd0: 30 20 34 20 32 20 31 20 39 20 33 20 31 20 31 36  0 4 2 1 9 3 1 16
1be0: 20 31 39 39 7d 0a 64 6f 5f 74 65 73 74 20 77 68   199}.do_test wh
1bf0: 65 72 65 2d 35 2e 33 20 7b 0a 20 20 63 6f 75 6e  ere-5.3 {.  coun
1c00: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t {.    SELECT *
1c10: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77   FROM t1 WHERE w
1c20: 20 49 4e 20 28 2d 31 2c 31 2c 32 2c 33 29 20 6f   IN (-1,1,2,3) o
1c30: 72 64 65 72 20 62 79 20 31 3b 0a 20 20 7d 0a 7d  rder by 1;.  }.}
1c40: 20 7b 31 20 30 20 34 20 32 20 31 20 39 20 33 20   {1 0 4 2 1 9 3 
1c50: 31 20 31 36 20 31 33 7d 0a 64 6f 5f 74 65 73 74  1 16 13}.do_test
1c60: 20 77 68 65 72 65 2d 35 2e 34 20 7b 0a 20 20 63   where-5.4 {.  c
1c70: 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  ount {.    SELEC
1c80: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
1c90: 45 20 77 2b 30 20 49 4e 20 28 2d 31 2c 31 2c 32  E w+0 IN (-1,1,2
1ca0: 2c 33 29 20 6f 72 64 65 72 20 62 79 20 31 3b 0a  ,3) order by 1;.
1cb0: 20 20 7d 0a 7d 20 7b 31 20 30 20 34 20 32 20 31    }.} {1 0 4 2 1
1cc0: 20 39 20 33 20 31 20 31 36 20 31 39 39 7d 0a 64   9 3 1 16 199}.d
1cd0: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 35 2e 35  o_test where-5.5
1ce0: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20   {.  count {.   
1cf0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1d00: 31 20 57 48 45 52 45 20 72 6f 77 69 64 20 49 4e  1 WHERE rowid IN
1d10: 20 0a 20 20 20 20 20 20 20 28 73 65 6c 65 63 74   .       (select
1d20: 20 72 6f 77 69 64 20 66 72 6f 6d 20 74 31 20 77   rowid from t1 w
1d30: 68 65 72 65 20 72 6f 77 69 64 20 49 4e 20 28 2d  here rowid IN (-
1d40: 31 2c 32 2c 34 29 29 0a 20 20 20 20 4f 52 44 45  1,2,4)).    ORDE
1d50: 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 32  R BY 1;.  }.} {2
1d60: 20 31 20 39 20 34 20 32 20 32 35 20 33 7d 0a 64   1 9 4 2 25 3}.d
1d70: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 35 2e 36  o_test where-5.6
1d80: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20   {.  count {.   
1d90: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1da0: 31 20 57 48 45 52 45 20 72 6f 77 69 64 2b 30 20  1 WHERE rowid+0 
1db0: 49 4e 20 0a 20 20 20 20 20 20 20 28 73 65 6c 65  IN .       (sele
1dc0: 63 74 20 72 6f 77 69 64 20 66 72 6f 6d 20 74 31  ct rowid from t1
1dd0: 20 77 68 65 72 65 20 72 6f 77 69 64 20 49 4e 20   where rowid IN 
1de0: 28 2d 31 2c 32 2c 34 29 29 0a 20 20 20 20 4f 52  (-1,2,4)).    OR
1df0: 44 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20  DER BY 1;.  }.} 
1e00: 7b 32 20 31 20 39 20 34 20 32 20 32 35 20 32 30  {2 1 9 4 2 25 20
1e10: 31 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  1}.do_test where
1e20: 2d 35 2e 37 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  -5.7 {.  count {
1e30: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
1e40: 4f 4d 20 74 31 20 57 48 45 52 45 20 77 20 49 4e  OM t1 WHERE w IN
1e50: 20 0a 20 20 20 20 20 20 20 28 73 65 6c 65 63 74   .       (select
1e60: 20 72 6f 77 69 64 20 66 72 6f 6d 20 74 31 20 77   rowid from t1 w
1e70: 68 65 72 65 20 72 6f 77 69 64 20 49 4e 20 28 2d  here rowid IN (-
1e80: 31 2c 32 2c 34 29 29 0a 20 20 20 20 4f 52 44 45  1,2,4)).    ORDE
1e90: 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 32  R BY 1;.  }.} {2
1ea0: 20 31 20 39 20 34 20 32 20 32 35 20 39 7d 0a 64   1 9 4 2 25 9}.d
1eb0: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 35 2e 38  o_test where-5.8
1ec0: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20   {.  count {.   
1ed0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1ee0: 31 20 57 48 45 52 45 20 77 2b 30 20 49 4e 20 0a  1 WHERE w+0 IN .
1ef0: 20 20 20 20 20 20 20 28 73 65 6c 65 63 74 20 72         (select r
1f00: 6f 77 69 64 20 66 72 6f 6d 20 74 31 20 77 68 65  owid from t1 whe
1f10: 72 65 20 72 6f 77 69 64 20 49 4e 20 28 2d 31 2c  re rowid IN (-1,
1f20: 32 2c 34 29 29 0a 20 20 20 20 4f 52 44 45 52 20  2,4)).    ORDER 
1f30: 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 32 20 31  BY 1;.  }.} {2 1
1f40: 20 39 20 34 20 32 20 32 35 20 32 30 31 7d 0a 64   9 4 2 25 201}.d
1f50: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 35 2e 39  o_test where-5.9
1f60: 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20   {.  count {.   
1f70: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
1f80: 31 20 57 48 45 52 45 20 78 20 49 4e 20 28 31 2c  1 WHERE x IN (1,
1f90: 37 29 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20  7) ORDER BY 1;. 
1fa0: 20 7d 0a 7d 20 7b 32 20 31 20 39 20 33 20 31 20   }.} {2 1 9 3 1 
1fb0: 31 36 20 37 7d 0a 64 6f 5f 74 65 73 74 20 77 68  16 7}.do_test wh
1fc0: 65 72 65 2d 35 2e 31 30 20 7b 0a 20 20 63 6f 75  ere-5.10 {.  cou
1fd0: 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  nt {.    SELECT 
1fe0: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
1ff0: 78 2b 30 20 49 4e 20 28 31 2c 37 29 20 4f 52 44  x+0 IN (1,7) ORD
2000: 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b  ER BY 1;.  }.} {
2010: 32 20 31 20 39 20 33 20 31 20 31 36 20 31 39 39  2 1 9 3 1 16 199
2020: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
2030: 35 2e 31 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  5.11 {.  count {
2040: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
2050: 4f 4d 20 74 31 20 57 48 45 52 45 20 79 20 49 4e  OM t1 WHERE y IN
2060: 20 28 36 34 30 30 2c 38 31 30 30 29 20 4f 52 44   (6400,8100) ORD
2070: 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b  ER BY 1;.  }.} {
2080: 37 39 20 36 20 36 34 30 30 20 38 39 20 36 20 38  79 6 6400 89 6 8
2090: 31 30 30 20 31 39 39 7d 0a 64 6f 5f 74 65 73 74  100 199}.do_test
20a0: 20 77 68 65 72 65 2d 35 2e 31 32 20 7b 0a 20 20   where-5.12 {.  
20b0: 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45  count {.    SELE
20c0: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  CT * FROM t1 WHE
20d0: 52 45 20 78 3d 36 20 41 4e 44 20 79 20 49 4e 20  RE x=6 AND y IN 
20e0: 28 36 34 30 30 2c 38 31 30 30 29 20 4f 52 44 45  (6400,8100) ORDE
20f0: 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 37  R BY 1;.  }.} {7
2100: 39 20 36 20 36 34 30 30 20 38 39 20 36 20 38 31  9 6 6400 89 6 81
2110: 30 30 20 37 34 7d 0a 64 6f 5f 74 65 73 74 20 77  00 74}.do_test w
2120: 68 65 72 65 2d 35 2e 31 33 20 7b 0a 20 20 63 6f  here-5.13 {.  co
2130: 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  unt {.    SELECT
2140: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
2150: 20 78 20 49 4e 20 28 31 2c 37 29 20 41 4e 44 20   x IN (1,7) AND 
2160: 79 20 4e 4f 54 20 49 4e 20 28 36 34 30 30 2c 38  y NOT IN (6400,8
2170: 31 30 30 29 20 4f 52 44 45 52 20 42 59 20 31 3b  100) ORDER BY 1;
2180: 0a 20 20 7d 0a 7d 20 7b 32 20 31 20 39 20 33 20  .  }.} {2 1 9 3 
2190: 31 20 31 36 20 37 7d 0a 64 6f 5f 74 65 73 74 20  1 16 7}.do_test 
21a0: 77 68 65 72 65 2d 35 2e 31 34 20 7b 0a 20 20 63  where-5.14 {.  c
21b0: 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  ount {.    SELEC
21c0: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
21d0: 45 20 78 20 49 4e 20 28 31 2c 37 29 20 41 4e 44  E x IN (1,7) AND
21e0: 20 79 20 49 4e 20 28 39 2c 31 30 29 20 4f 52 44   y IN (9,10) ORD
21f0: 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b  ER BY 1;.  }.} {
2200: 32 20 31 20 39 20 37 7d 0a 0a 23 20 54 68 69 73  2 1 9 7}..# This
2210: 20 70 72 6f 63 65 64 75 72 65 20 65 78 65 63 75   procedure execu
2220: 74 65 73 20 74 68 65 20 53 51 4c 2e 20 20 54 68  tes the SQL.  Th
2230: 65 6e 20 69 74 20 63 68 65 63 6b 73 20 74 68 65  en it checks the
2240: 20 67 65 6e 65 72 61 74 65 64 20 70 72 6f 67 72   generated progr
2250: 61 6d 0a 23 20 66 6f 72 20 74 68 65 20 53 51 4c  am.# for the SQL
2260: 20 61 6e 64 20 61 70 70 65 6e 64 73 20 61 20 22   and appends a "
2270: 6e 6f 73 6f 72 74 22 20 74 6f 20 74 68 65 20 72  nosort" to the r
2280: 65 73 75 6c 74 20 69 66 20 74 68 65 20 70 72 6f  esult if the pro
2290: 67 72 61 6d 20 63 6f 6e 74 61 69 6e 73 20 74 68  gram contains th
22a0: 65 0a 23 20 53 6f 72 74 43 61 6c 6c 62 61 63 6b  e.# SortCallback
22b0: 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65   opcode.  If the
22c0: 20 70 72 6f 67 72 61 6d 20 64 6f 65 73 20 6e 6f   program does no
22d0: 74 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 53 6f  t contain the So
22e0: 72 74 43 61 6c 6c 62 61 63 6b 0a 23 20 6f 70 63  rtCallback.# opc
22f0: 6f 64 65 20 69 74 20 61 70 70 65 6e 64 73 20 22  ode it appends "
2300: 73 6f 72 74 22 0a 23 0a 70 72 6f 63 20 63 6b 73  sort".#.proc cks
2310: 6f 72 74 20 7b 73 71 6c 7d 20 7b 0a 20 20 73 65  ort {sql} {.  se
2320: 74 20 64 61 74 61 20 5b 65 78 65 63 73 71 6c 20  t data [execsql 
2330: 24 73 71 6c 5d 0a 20 20 73 65 74 20 70 72 6f 67  $sql].  set prog
2340: 20 5b 65 78 65 63 73 71 6c 20 22 45 58 50 4c 41   [execsql "EXPLA
2350: 49 4e 20 24 73 71 6c 22 5d 0a 20 20 69 66 20 7b  IN $sql"].  if {
2360: 5b 72 65 67 65 78 70 20 53 6f 72 74 43 61 6c 6c  [regexp SortCall
2370: 62 61 63 6b 20 24 70 72 6f 67 5d 7d 20 7b 73 65  back $prog]} {se
2380: 74 20 78 20 73 6f 72 74 7d 20 7b 73 65 74 20 78  t x sort} {set x
2390: 20 6e 6f 73 6f 72 74 7d 0a 20 20 6c 61 70 70 65   nosort}.  lappe
23a0: 6e 64 20 64 61 74 61 20 24 78 0a 20 20 72 65 74  nd data $x.  ret
23b0: 75 72 6e 20 24 64 61 74 61 0a 7d 0a 23 20 43 68  urn $data.}.# Ch
23c0: 65 63 6b 20 6f 75 74 20 74 68 65 20 6c 6f 67 69  eck out the logi
23d0: 63 20 74 68 61 74 20 61 74 74 65 6d 70 74 73 20  c that attempts 
23e0: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
23f0: 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65   ORDER BY clause
2400: 0a 23 20 75 73 69 6e 67 20 61 6e 20 69 6e 64 65  .# using an inde
2410: 78 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 79  x rather than by
2420: 20 73 6f 72 74 69 6e 67 2e 0a 23 0a 64 6f 5f 74   sorting..#.do_t
2430: 65 73 74 20 77 68 65 72 65 2d 36 2e 31 20 7b 0a  est where-6.1 {.
2440: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
2450: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28  CREATE TABLE t3(
2460: 61 2c 62 2c 63 29 3b 0a 20 20 20 20 43 52 45 41  a,b,c);.    CREA
2470: 54 45 20 49 4e 44 45 58 20 74 33 61 20 4f 4e 20  TE INDEX t3a ON 
2480: 74 33 28 61 29 3b 0a 20 20 20 20 43 52 45 41 54  t3(a);.    CREAT
2490: 45 20 49 4e 44 45 58 20 74 33 62 63 20 4f 4e 20  E INDEX t3bc ON 
24a0: 74 33 28 62 2c 63 29 3b 0a 20 20 20 20 43 52 45  t3(b,c);.    CRE
24b0: 41 54 45 20 49 4e 44 45 58 20 74 33 61 63 62 20  ATE INDEX t3acb 
24c0: 4f 4e 20 74 33 28 61 2c 63 2c 62 29 3b 0a 20 20  ON t3(a,c,b);.  
24d0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33    INSERT INTO t3
24e0: 20 53 45 4c 45 43 54 20 77 2c 20 31 30 31 2d 77   SELECT w, 101-w
24f0: 2c 20 79 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20  , y FROM t1;.   
2500: 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29   SELECT count(*)
2510: 2c 20 73 75 6d 28 61 29 2c 20 73 75 6d 28 62 29  , sum(a), sum(b)
2520: 2c 20 73 75 6d 28 63 29 20 46 52 4f 4d 20 74 33  , sum(c) FROM t3
2530: 3b 0a 20 20 7d 0a 7d 20 7b 31 30 30 20 35 30 35  ;.  }.} {100 505
2540: 30 20 35 30 35 30 20 33 34 38 35 35 30 7d 0a 64  0 5050 348550}.d
2550: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e 32  o_test where-6.2
2560: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
2570: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
2580: 74 33 20 4f 52 44 45 52 20 42 59 20 61 20 4c 49  t3 ORDER BY a LI
2590: 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31  MIT 3.  }.} {1 1
25a0: 30 30 20 34 20 32 20 39 39 20 39 20 33 20 39 38  00 4 2 99 9 3 98
25b0: 20 31 36 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74   16 nosort}.do_t
25c0: 65 73 74 20 77 68 65 72 65 2d 36 2e 33 20 7b 0a  est where-6.3 {.
25d0: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
25e0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
25f0: 4f 52 44 45 52 20 42 59 20 61 2b 31 20 4c 49 4d  ORDER BY a+1 LIM
2600: 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30  IT 3.  }.} {1 10
2610: 30 20 34 20 32 20 39 39 20 39 20 33 20 39 38 20  0 4 2 99 9 3 98 
2620: 31 36 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74  16 sort}.do_test
2630: 20 77 68 65 72 65 2d 36 2e 34 20 7b 0a 20 20 63   where-6.4 {.  c
2640: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
2650: 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45  CT * FROM t3 WHE
2660: 52 45 20 61 3c 31 30 20 4f 52 44 45 52 20 42 59  RE a<10 ORDER BY
2670: 20 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d   a LIMIT 3.  }.}
2680: 20 7b 31 20 31 30 30 20 34 20 32 20 39 39 20 39   {1 100 4 2 99 9
2690: 20 33 20 39 38 20 31 36 20 6e 6f 73 6f 72 74 7d   3 98 16 nosort}
26a0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36  .do_test where-6
26b0: 2e 35 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .5 {.  cksort {.
26c0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
26d0: 4d 20 74 33 20 57 48 45 52 45 20 61 3e 30 20 41  M t3 WHERE a>0 A
26e0: 4e 44 20 61 3c 31 30 20 4f 52 44 45 52 20 42 59  ND a<10 ORDER BY
26f0: 20 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d   a LIMIT 3.  }.}
2700: 20 7b 31 20 31 30 30 20 34 20 32 20 39 39 20 39   {1 100 4 2 99 9
2710: 20 33 20 39 38 20 31 36 20 6e 6f 73 6f 72 74 7d   3 98 16 nosort}
2720: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36  .do_test where-6
2730: 2e 36 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .6 {.  cksort {.
2740: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2750: 4d 20 74 33 20 57 48 45 52 45 20 61 3e 30 20 4f  M t3 WHERE a>0 O
2760: 52 44 45 52 20 42 59 20 61 20 4c 49 4d 49 54 20  RDER BY a LIMIT 
2770: 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34  3.  }.} {1 100 4
2780: 20 32 20 39 39 20 39 20 33 20 39 38 20 31 36 20   2 99 9 3 98 16 
2790: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
27a0: 77 68 65 72 65 2d 36 2e 37 20 7b 0a 20 20 63 6b  where-6.7 {.  ck
27b0: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
27c0: 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52  T * FROM t3 WHER
27d0: 45 20 62 3e 30 20 4f 52 44 45 52 20 42 59 20 61  E b>0 ORDER BY a
27e0: 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b   LIMIT 3.  }.} {
27f0: 31 20 31 30 30 20 34 20 32 20 39 39 20 39 20 33  1 100 4 2 99 9 3
2800: 20 39 38 20 31 36 20 73 6f 72 74 7d 0a 64 6f 5f   98 16 sort}.do_
2810: 74 65 73 74 20 77 68 65 72 65 2d 36 2e 38 20 7b  test where-6.8 {
2820: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
2830: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
2840: 20 57 48 45 52 45 20 61 20 49 4e 20 28 33 2c 35   WHERE a IN (3,5
2850: 2c 37 2c 31 2c 39 2c 34 2c 32 29 20 4f 52 44 45  ,7,1,9,4,2) ORDE
2860: 52 20 42 59 20 61 20 4c 49 4d 49 54 20 33 0a 20  R BY a LIMIT 3. 
2870: 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20 32 20   }.} {1 100 4 2 
2880: 39 39 20 39 20 33 20 39 38 20 31 36 20 73 6f 72  99 9 3 98 16 sor
2890: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
28a0: 2d 36 2e 39 2e 31 20 7b 0a 20 20 63 6b 73 6f 72  -6.9.1 {.  cksor
28b0: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t {.    SELECT *
28c0: 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61   FROM t3 WHERE a
28d0: 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52  =1 AND c>0 ORDER
28e0: 20 42 59 20 61 20 4c 49 4d 49 54 20 33 0a 20 20   BY a LIMIT 3.  
28f0: 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20 6e 6f 73  }.} {1 100 4 nos
2900: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
2910: 72 65 2d 36 2e 39 2e 32 20 7b 0a 20 20 63 6b 73  re-6.9.2 {.  cks
2920: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
2930: 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45   * FROM t3 WHERE
2940: 20 61 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52 44   a=1 AND c>0 ORD
2950: 45 52 20 42 59 20 61 2c 63 20 4c 49 4d 49 54 20  ER BY a,c LIMIT 
2960: 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34  3.  }.} {1 100 4
2970: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
2980: 20 77 68 65 72 65 2d 36 2e 39 2e 33 20 7b 0a 20   where-6.9.3 {. 
2990: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
29a0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57  LECT * FROM t3 W
29b0: 48 45 52 45 20 61 3d 31 20 41 4e 44 20 63 3e 30  HERE a=1 AND c>0
29c0: 20 4f 52 44 45 52 20 42 59 20 63 20 4c 49 4d 49   ORDER BY c LIMI
29d0: 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30  T 3.  }.} {1 100
29e0: 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65   4 nosort}.do_te
29f0: 73 74 20 77 68 65 72 65 2d 36 2e 39 2e 34 20 7b  st where-6.9.4 {
2a00: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
2a10: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
2a20: 20 57 48 45 52 45 20 61 3d 31 20 41 4e 44 20 63   WHERE a=1 AND c
2a30: 3e 30 20 4f 52 44 45 52 20 42 59 20 61 20 44 45  >0 ORDER BY a DE
2a40: 53 43 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d  SC LIMIT 3.  }.}
2a50: 20 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f 72 74   {1 100 4 nosort
2a60: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
2a70: 36 2e 39 2e 35 20 7b 0a 20 20 63 6b 73 6f 72 74  6.9.5 {.  cksort
2a80: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
2a90: 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d  FROM t3 WHERE a=
2aa0: 31 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20  1 AND c>0 ORDER 
2ab0: 42 59 20 61 20 44 45 53 43 2c 20 63 20 44 45 53  BY a DESC, c DES
2ac0: 43 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20  C LIMIT 3.  }.} 
2ad0: 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f 72 74 7d  {1 100 4 nosort}
2ae0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36  .do_test where-6
2af0: 2e 39 2e 36 20 7b 0a 20 20 63 6b 73 6f 72 74 20  .9.6 {.  cksort 
2b00: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
2b10: 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d 31  ROM t3 WHERE a=1
2b20: 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20 42   AND c>0 ORDER B
2b30: 59 20 63 20 44 45 53 43 20 4c 49 4d 49 54 20 33  Y c DESC LIMIT 3
2b40: 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20  .  }.} {1 100 4 
2b50: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
2b60: 77 68 65 72 65 2d 36 2e 39 2e 37 20 7b 0a 20 20  where-6.9.7 {.  
2b70: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
2b80: 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48  ECT * FROM t3 WH
2b90: 45 52 45 20 61 3d 31 20 41 4e 44 20 63 3e 30 20  ERE a=1 AND c>0 
2ba0: 4f 52 44 45 52 20 42 59 20 63 2c 61 20 4c 49 4d  ORDER BY c,a LIM
2bb0: 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30  IT 3.  }.} {1 10
2bc0: 30 20 34 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  0 4 sort}.do_tes
2bd0: 74 20 77 68 65 72 65 2d 36 2e 39 2e 38 20 7b 0a  t where-6.9.8 {.
2be0: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
2bf0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
2c00: 57 48 45 52 45 20 61 3d 31 20 41 4e 44 20 63 3e  WHERE a=1 AND c>
2c10: 30 20 4f 52 44 45 52 20 42 59 20 61 20 44 45 53  0 ORDER BY a DES
2c20: 43 2c 20 63 20 41 53 43 20 4c 49 4d 49 54 20 33  C, c ASC LIMIT 3
2c30: 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20  .  }.} {1 100 4 
2c40: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
2c50: 65 72 65 2d 36 2e 39 2e 39 20 7b 0a 20 20 63 6b  ere-6.9.9 {.  ck
2c60: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
2c70: 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52  T * FROM t3 WHER
2c80: 45 20 61 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52  E a=1 AND c>0 OR
2c90: 44 45 52 20 42 59 20 61 20 41 53 43 2c 20 63 20  DER BY a ASC, c 
2ca0: 44 45 53 43 20 4c 49 4d 49 54 20 33 0a 20 20 7d  DESC LIMIT 3.  }
2cb0: 0a 7d 20 7b 31 20 31 30 30 20 34 20 73 6f 72 74  .} {1 100 4 sort
2cc0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
2cd0: 36 2e 31 30 20 7b 0a 20 20 63 6b 73 6f 72 74 20  6.10 {.  cksort 
2ce0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
2cf0: 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d 31  ROM t3 WHERE a=1
2d00: 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20 42   AND c>0 ORDER B
2d10: 59 20 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a  Y a LIMIT 3.  }.
2d20: 7d 20 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f 72  } {1 100 4 nosor
2d30: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
2d40: 2d 36 2e 31 31 20 7b 0a 20 20 63 6b 73 6f 72 74  -6.11 {.  cksort
2d50: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
2d60: 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d  FROM t3 WHERE a=
2d70: 31 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20  1 AND c>0 ORDER 
2d80: 42 59 20 61 2c 63 20 4c 49 4d 49 54 20 33 0a 20  BY a,c LIMIT 3. 
2d90: 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20 6e 6f   }.} {1 100 4 no
2da0: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
2db0: 65 72 65 2d 36 2e 31 32 20 7b 0a 20 20 63 6b 73  ere-6.12 {.  cks
2dc0: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
2dd0: 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45   * FROM t3 WHERE
2de0: 20 61 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52 44   a=1 AND c>0 ORD
2df0: 45 52 20 42 59 20 61 2c 63 2c 62 20 4c 49 4d 49  ER BY a,c,b LIMI
2e00: 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30  T 3.  }.} {1 100
2e10: 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65   4 nosort}.do_te
2e20: 73 74 20 77 68 65 72 65 2d 36 2e 31 33 20 7b 0a  st where-6.13 {.
2e30: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
2e40: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
2e50: 57 48 45 52 45 20 61 3e 30 20 4f 52 44 45 52 20  WHERE a>0 ORDER 
2e60: 42 59 20 61 20 44 45 53 43 20 4c 49 4d 49 54 20  BY a DESC LIMIT 
2e70: 33 0a 20 20 7d 0a 7d 20 7b 31 30 30 20 31 20 31  3.  }.} {100 1 1
2e80: 30 32 30 31 20 39 39 20 32 20 31 30 30 30 30 20  0201 99 2 10000 
2e90: 39 38 20 33 20 39 38 30 31 20 6e 6f 73 6f 72 74  98 3 9801 nosort
2ea0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
2eb0: 36 2e 31 33 2e 31 20 7b 0a 20 20 63 6b 73 6f 72  6.13.1 {.  cksor
2ec0: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t {.    SELECT *
2ed0: 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61   FROM t3 WHERE a
2ee0: 3e 30 20 4f 52 44 45 52 20 42 59 20 2d 61 20 4c  >0 ORDER BY -a L
2ef0: 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 30  IMIT 3.  }.} {10
2f00: 30 20 31 20 31 30 32 30 31 20 39 39 20 32 20 31  0 1 10201 99 2 1
2f10: 30 30 30 30 20 39 38 20 33 20 39 38 30 31 20 73  0000 98 3 9801 s
2f20: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
2f30: 72 65 2d 36 2e 31 34 20 7b 0a 20 20 63 6b 73 6f  re-6.14 {.  ckso
2f40: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
2f50: 2a 20 46 52 4f 4d 20 74 33 20 4f 52 44 45 52 20  * FROM t3 ORDER 
2f60: 42 59 20 62 20 4c 49 4d 49 54 20 33 0a 20 20 7d  BY b LIMIT 3.  }
2f70: 0a 7d 20 7b 31 30 30 20 31 20 31 30 32 30 31 20  .} {100 1 10201 
2f80: 39 39 20 32 20 31 30 30 30 30 20 39 38 20 33 20  99 2 10000 98 3 
2f90: 39 38 30 31 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f  9801 nosort}.do_
2fa0: 74 65 73 74 20 77 68 65 72 65 2d 36 2e 31 35 20  test where-6.15 
2fb0: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
2fc0: 20 53 45 4c 45 43 54 20 74 33 2e 61 2c 20 74 31   SELECT t3.a, t1
2fd0: 2e 78 20 46 52 4f 4d 20 74 33 2c 20 74 31 20 57  .x FROM t3, t1 W
2fe0: 48 45 52 45 20 74 33 2e 61 3d 74 31 2e 77 20 4f  HERE t3.a=t1.w O
2ff0: 52 44 45 52 20 42 59 20 74 33 2e 61 20 4c 49 4d  RDER BY t3.a LIM
3000: 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 30 20  IT 3.  }.} {1 0 
3010: 32 20 31 20 33 20 31 20 6e 6f 73 6f 72 74 7d 0a  2 1 3 1 nosort}.
3020: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e  do_test where-6.
3030: 31 36 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  16 {.  cksort {.
3040: 20 20 20 20 53 45 4c 45 43 54 20 74 33 2e 61 2c      SELECT t3.a,
3050: 20 74 31 2e 78 20 46 52 4f 4d 20 74 33 2c 20 74   t1.x FROM t3, t
3060: 31 20 57 48 45 52 45 20 74 33 2e 61 3d 74 31 2e  1 WHERE t3.a=t1.
3070: 77 20 4f 52 44 45 52 20 42 59 20 74 31 2e 78 2c  w ORDER BY t1.x,
3080: 20 74 33 2e 61 20 4c 49 4d 49 54 20 33 0a 20 20   t3.a LIMIT 3.  
3090: 7d 0a 7d 20 7b 31 20 30 20 32 20 31 20 33 20 31  }.} {1 0 2 1 3 1
30a0: 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77   sort}.do_test w
30b0: 68 65 72 65 2d 36 2e 31 37 20 7b 0a 20 20 63 6b  here-6.17 {.  ck
30c0: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
30d0: 54 20 79 20 46 52 4f 4d 20 74 31 20 4f 52 44 45  T y FROM t1 ORDE
30e0: 52 20 42 59 20 77 20 43 4f 4c 4c 41 54 45 20 74  R BY w COLLATE t
30f0: 65 78 74 20 4c 49 4d 49 54 20 33 3b 0a 20 20 7d  ext LIMIT 3;.  }
3100: 0a 7d 20 7b 34 20 31 32 31 20 31 30 32 30 31 20  .} {4 121 10201 
3110: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
3120: 65 72 65 2d 36 2e 31 38 20 7b 0a 20 20 63 6b 73  ere-6.18 {.  cks
3130: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
3140: 20 79 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52   y FROM t1 ORDER
3150: 20 42 59 20 77 20 43 4f 4c 4c 41 54 45 20 6e 75   BY w COLLATE nu
3160: 6d 65 72 69 63 20 4c 49 4d 49 54 20 33 3b 0a 20  meric LIMIT 3;. 
3170: 20 7d 0a 7d 20 7b 34 20 39 20 31 36 20 73 6f 72   }.} {4 9 16 sor
3180: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
3190: 2d 36 2e 31 39 20 7b 0a 20 20 63 6b 73 6f 72 74  -6.19 {.  cksort
31a0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 79 20   {.    SELECT y 
31b0: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
31c0: 20 77 20 4c 49 4d 49 54 20 33 3b 0a 20 20 7d 0a   w LIMIT 3;.  }.
31d0: 7d 20 7b 34 20 39 20 31 36 20 6e 6f 73 6f 72 74  } {4 9 16 nosort
31e0: 7d 0a 0a 23 20 54 65 73 74 73 20 66 6f 72 20 72  }..# Tests for r
31f0: 65 76 65 72 73 65 2d 6f 72 64 65 72 20 73 6f 72  everse-order sor
3200: 74 69 6e 67 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  ting..#.do_test 
3210: 77 68 65 72 65 2d 37 2e 31 20 7b 0a 20 20 63 6b  where-7.1 {.  ck
3220: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
3230: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
3240: 45 20 78 3d 33 20 4f 52 44 45 52 20 42 59 20 79  E x=3 ORDER BY y
3250: 3b 0a 20 20 7d 0a 7d 20 7b 38 20 39 20 31 30 20  ;.  }.} {8 9 10 
3260: 31 31 20 31 32 20 31 33 20 31 34 20 31 35 20 6e  11 12 13 14 15 n
3270: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
3280: 68 65 72 65 2d 37 2e 32 20 7b 0a 20 20 63 6b 73  here-7.2 {.  cks
3290: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
32a0: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
32b0: 20 78 3d 33 20 4f 52 44 45 52 20 42 59 20 79 20   x=3 ORDER BY y 
32c0: 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 35 20  DESC;.  }.} {15 
32d0: 31 34 20 31 33 20 31 32 20 31 31 20 31 30 20 39  14 13 12 11 10 9
32e0: 20 38 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65   8 nosort}.do_te
32f0: 73 74 20 77 68 65 72 65 2d 37 2e 33 20 7b 0a 20  st where-7.3 {. 
3300: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
3310: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
3320: 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e 31  HERE x=3 AND y>1
3330: 30 30 20 4f 52 44 45 52 20 42 59 20 79 20 4c 49  00 ORDER BY y LI
3340: 4d 49 54 20 33 3b 0a 20 20 7d 0a 7d 20 7b 31 30  MIT 3;.  }.} {10
3350: 20 31 31 20 31 32 20 6e 6f 73 6f 72 74 7d 0a 64   11 12 nosort}.d
3360: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 34  o_test where-7.4
3370: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
3380: 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20    SELECT w FROM 
3390: 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44  t1 WHERE x=3 AND
33a0: 20 79 3e 31 30 30 20 4f 52 44 45 52 20 42 59 20   y>100 ORDER BY 
33b0: 79 20 44 45 53 43 20 4c 49 4d 49 54 20 33 3b 0a  y DESC LIMIT 3;.
33c0: 20 20 7d 0a 7d 20 7b 31 35 20 31 34 20 31 33 20    }.} {15 14 13 
33d0: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
33e0: 77 68 65 72 65 2d 37 2e 35 20 7b 0a 20 20 63 6b  where-7.5 {.  ck
33f0: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
3400: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
3410: 45 20 78 3d 33 20 41 4e 44 20 79 3e 31 32 31 20  E x=3 AND y>121 
3420: 4f 52 44 45 52 20 42 59 20 79 20 44 45 53 43 3b  ORDER BY y DESC;
3430: 0a 20 20 7d 0a 7d 20 7b 31 35 20 31 34 20 31 33  .  }.} {15 14 13
3440: 20 31 32 20 31 31 20 6e 6f 73 6f 72 74 7d 0a 64   12 11 nosort}.d
3450: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 36  o_test where-7.6
3460: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
3470: 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20    SELECT w FROM 
3480: 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44  t1 WHERE x=3 AND
3490: 20 79 3e 3d 31 32 31 20 4f 52 44 45 52 20 42 59   y>=121 ORDER BY
34a0: 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b   y DESC;.  }.} {
34b0: 31 35 20 31 34 20 31 33 20 31 32 20 31 31 20 31  15 14 13 12 11 1
34c0: 30 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  0 nosort}.do_tes
34d0: 74 20 77 68 65 72 65 2d 37 2e 37 20 7b 0a 20 20  t where-7.7 {.  
34e0: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
34f0: 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48  ECT w FROM t1 WH
3500: 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e 3d 31  ERE x=3 AND y>=1
3510: 32 31 20 41 4e 44 20 79 3c 31 39 36 20 4f 52 44  21 AND y<196 ORD
3520: 45 52 20 42 59 20 79 20 44 45 53 43 3b 0a 20 20  ER BY y DESC;.  
3530: 7d 0a 7d 20 7b 31 32 20 31 31 20 31 30 20 6e 6f  }.} {12 11 10 no
3540: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
3550: 65 72 65 2d 37 2e 38 20 7b 0a 20 20 63 6b 73 6f  ere-7.8 {.  ckso
3560: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
3570: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
3580: 78 3d 33 20 41 4e 44 20 79 3e 3d 31 32 31 20 41  x=3 AND y>=121 A
3590: 4e 44 20 79 3c 3d 31 39 36 20 4f 52 44 45 52 20  ND y<=196 ORDER 
35a0: 42 59 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d  BY y DESC;.  }.}
35b0: 20 7b 31 33 20 31 32 20 31 31 20 31 30 20 6e 6f   {13 12 11 10 no
35c0: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
35d0: 65 72 65 2d 37 2e 39 20 7b 0a 20 20 63 6b 73 6f  ere-7.9 {.  ckso
35e0: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
35f0: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
3600: 78 3d 33 20 41 4e 44 20 79 3e 31 32 31 20 41 4e  x=3 AND y>121 AN
3610: 44 20 79 3c 3d 31 39 36 20 4f 52 44 45 52 20 42  D y<=196 ORDER B
3620: 59 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20  Y y DESC;.  }.} 
3630: 7b 31 33 20 31 32 20 31 31 20 6e 6f 73 6f 72 74  {13 12 11 nosort
3640: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
3650: 37 2e 31 30 20 7b 0a 20 20 63 6b 73 6f 72 74 20  7.10 {.  cksort 
3660: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46  {.    SELECT w F
3670: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33  ROM t1 WHERE x=3
3680: 20 41 4e 44 20 79 3e 31 30 30 20 41 4e 44 20 79   AND y>100 AND y
3690: 3c 31 39 36 20 4f 52 44 45 52 20 42 59 20 79 20  <196 ORDER BY y 
36a0: 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 32 20  DESC;.  }.} {12 
36b0: 31 31 20 31 30 20 6e 6f 73 6f 72 74 7d 0a 64 6f  11 10 nosort}.do
36c0: 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 31 31  _test where-7.11
36d0: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
36e0: 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20    SELECT w FROM 
36f0: 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44  t1 WHERE x=3 AND
3700: 20 79 3e 3d 31 32 31 20 41 4e 44 20 79 3c 31 39   y>=121 AND y<19
3710: 36 20 4f 52 44 45 52 20 42 59 20 79 3b 0a 20 20  6 ORDER BY y;.  
3720: 7d 0a 7d 20 7b 31 30 20 31 31 20 31 32 20 6e 6f  }.} {10 11 12 no
3730: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
3740: 65 72 65 2d 37 2e 31 32 20 7b 0a 20 20 63 6b 73  ere-7.12 {.  cks
3750: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
3760: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
3770: 20 78 3d 33 20 41 4e 44 20 79 3e 3d 31 32 31 20   x=3 AND y>=121 
3780: 41 4e 44 20 79 3c 3d 31 39 36 20 4f 52 44 45 52  AND y<=196 ORDER
3790: 20 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 31 30   BY y;.  }.} {10
37a0: 20 31 31 20 31 32 20 31 33 20 6e 6f 73 6f 72 74   11 12 13 nosort
37b0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
37c0: 37 2e 31 33 20 7b 0a 20 20 63 6b 73 6f 72 74 20  7.13 {.  cksort 
37d0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46  {.    SELECT w F
37e0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33  ROM t1 WHERE x=3
37f0: 20 41 4e 44 20 79 3e 31 32 31 20 41 4e 44 20 79   AND y>121 AND y
3800: 3c 3d 31 39 36 20 4f 52 44 45 52 20 42 59 20 79  <=196 ORDER BY y
3810: 3b 0a 20 20 7d 0a 7d 20 7b 31 31 20 31 32 20 31  ;.  }.} {11 12 1
3820: 33 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  3 nosort}.do_tes
3830: 74 20 77 68 65 72 65 2d 37 2e 31 34 20 7b 0a 20  t where-7.14 {. 
3840: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
3850: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
3860: 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e 31  HERE x=3 AND y>1
3870: 30 30 20 41 4e 44 20 79 3c 31 39 36 20 4f 52 44  00 AND y<196 ORD
3880: 45 52 20 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b  ER BY y;.  }.} {
3890: 31 30 20 31 31 20 31 32 20 6e 6f 73 6f 72 74 7d  10 11 12 nosort}
38a0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37  .do_test where-7
38b0: 2e 31 35 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  .15 {.  cksort {
38c0: 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52  .    SELECT w FR
38d0: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20  OM t1 WHERE x=3 
38e0: 41 4e 44 20 79 3c 38 31 20 4f 52 44 45 52 20 42  AND y<81 ORDER B
38f0: 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f 73 6f  Y y;.  }.} {noso
3900: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
3910: 65 2d 37 2e 31 36 20 7b 0a 20 20 63 6b 73 6f 72  e-7.16 {.  cksor
3920: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77  t {.    SELECT w
3930: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
3940: 3d 33 20 41 4e 44 20 79 3c 3d 38 31 20 4f 52 44  =3 AND y<=81 ORD
3950: 45 52 20 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b  ER BY y;.  }.} {
3960: 38 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  8 nosort}.do_tes
3970: 74 20 77 68 65 72 65 2d 37 2e 31 37 20 7b 0a 20  t where-7.17 {. 
3980: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
3990: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
39a0: 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e 32  HERE x=3 AND y>2
39b0: 35 36 20 4f 52 44 45 52 20 42 59 20 79 3b 0a 20  56 ORDER BY y;. 
39c0: 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a 64 6f   }.} {nosort}.do
39d0: 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 31 38  _test where-7.18
39e0: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
39f0: 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20    SELECT w FROM 
3a00: 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44  t1 WHERE x=3 AND
3a10: 20 79 3e 3d 32 35 36 20 4f 52 44 45 52 20 42 59   y>=256 ORDER BY
3a20: 20 79 3b 0a 20 20 7d 0a 7d 20 7b 31 35 20 6e 6f   y;.  }.} {15 no
3a30: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
3a40: 65 72 65 2d 37 2e 31 39 20 7b 0a 20 20 63 6b 73  ere-7.19 {.  cks
3a50: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
3a60: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
3a70: 20 78 3d 33 20 41 4e 44 20 79 3c 38 31 20 4f 52   x=3 AND y<81 OR
3a80: 44 45 52 20 42 59 20 79 20 44 45 53 43 3b 0a 20  DER BY y DESC;. 
3a90: 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a 64 6f   }.} {nosort}.do
3aa0: 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 32 30  _test where-7.20
3ab0: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
3ac0: 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20    SELECT w FROM 
3ad0: 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44  t1 WHERE x=3 AND
3ae0: 20 79 3c 3d 38 31 20 4f 52 44 45 52 20 42 59 20   y<=81 ORDER BY 
3af0: 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 38  y DESC;.  }.} {8
3b00: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
3b10: 20 77 68 65 72 65 2d 37 2e 32 31 20 7b 0a 20 20   where-7.21 {.  
3b20: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
3b30: 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48  ECT w FROM t1 WH
3b40: 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e 32 35  ERE x=3 AND y>25
3b50: 36 20 4f 52 44 45 52 20 42 59 20 79 20 44 45 53  6 ORDER BY y DES
3b60: 43 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74  C;.  }.} {nosort
3b70: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
3b80: 37 2e 32 32 20 7b 0a 20 20 63 6b 73 6f 72 74 20  7.22 {.  cksort 
3b90: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46  {.    SELECT w F
3ba0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33  ROM t1 WHERE x=3
3bb0: 20 41 4e 44 20 79 3e 3d 32 35 36 20 4f 52 44 45   AND y>=256 ORDE
3bc0: 52 20 42 59 20 79 20 44 45 53 43 3b 0a 20 20 7d  R BY y DESC;.  }
3bd0: 0a 7d 20 7b 31 35 20 6e 6f 73 6f 72 74 7d 0a 64  .} {15 nosort}.d
3be0: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 32  o_test where-7.2
3bf0: 33 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  3 {.  cksort {. 
3c00: 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d     SELECT w FROM
3c10: 20 74 31 20 57 48 45 52 45 20 78 3d 30 20 41 4e   t1 WHERE x=0 AN
3c20: 44 20 79 3c 34 20 4f 52 44 45 52 20 42 59 20 79  D y<4 ORDER BY y
3c30: 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d  ;.  }.} {nosort}
3c40: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37  .do_test where-7
3c50: 2e 32 34 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  .24 {.  cksort {
3c60: 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52  .    SELECT w FR
3c70: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 30 20  OM t1 WHERE x=0 
3c80: 41 4e 44 20 79 3c 3d 34 20 4f 52 44 45 52 20 42  AND y<=4 ORDER B
3c90: 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 31 20 6e 6f  Y y;.  }.} {1 no
3ca0: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
3cb0: 65 72 65 2d 37 2e 32 35 20 7b 0a 20 20 63 6b 73  ere-7.25 {.  cks
3cc0: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
3cd0: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
3ce0: 20 78 3d 36 20 41 4e 44 20 79 3e 31 30 32 30 31   x=6 AND y>10201
3cf0: 20 4f 52 44 45 52 20 42 59 20 79 3b 0a 20 20 7d   ORDER BY y;.  }
3d00: 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74  .} {nosort}.do_t
3d10: 65 73 74 20 77 68 65 72 65 2d 37 2e 32 36 20 7b  est where-7.26 {
3d20: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
3d30: 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31  SELECT w FROM t1
3d40: 20 57 48 45 52 45 20 78 3d 36 20 41 4e 44 20 79   WHERE x=6 AND y
3d50: 3e 3d 31 30 32 30 31 20 4f 52 44 45 52 20 42 59  >=10201 ORDER BY
3d60: 20 79 3b 0a 20 20 7d 0a 7d 20 7b 31 30 30 20 6e   y;.  }.} {100 n
3d70: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
3d80: 68 65 72 65 2d 37 2e 32 37 20 7b 0a 20 20 63 6b  here-7.27 {.  ck
3d90: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
3da0: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
3db0: 45 20 78 3d 30 20 41 4e 44 20 79 3c 34 20 4f 52  E x=0 AND y<4 OR
3dc0: 44 45 52 20 42 59 20 79 20 44 45 53 43 3b 0a 20  DER BY y DESC;. 
3dd0: 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a 64 6f   }.} {nosort}.do
3de0: 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 32 38  _test where-7.28
3df0: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
3e00: 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20    SELECT w FROM 
3e10: 74 31 20 57 48 45 52 45 20 78 3d 30 20 41 4e 44  t1 WHERE x=0 AND
3e20: 20 79 3c 3d 34 20 4f 52 44 45 52 20 42 59 20 79   y<=4 ORDER BY y
3e30: 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 20   DESC;.  }.} {1 
3e40: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
3e50: 77 68 65 72 65 2d 37 2e 32 39 20 7b 0a 20 20 63  where-7.29 {.  c
3e60: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
3e70: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
3e80: 52 45 20 78 3d 36 20 41 4e 44 20 79 3e 31 30 32  RE x=6 AND y>102
3e90: 30 31 20 4f 52 44 45 52 20 42 59 20 79 20 44 45  01 ORDER BY y DE
3ea0: 53 43 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f 73 6f 72  SC;.  }.} {nosor
3eb0: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
3ec0: 2d 37 2e 33 30 20 7b 0a 20 20 63 6b 73 6f 72 74  -7.30 {.  cksort
3ed0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20   {.    SELECT w 
3ee0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d  FROM t1 WHERE x=
3ef0: 36 20 41 4e 44 20 79 3e 3d 31 30 32 30 31 20 4f  6 AND y>=10201 O
3f00: 52 44 45 52 20 42 59 20 79 20 44 45 53 43 3b 0a  RDER BY y DESC;.
3f10: 20 20 7d 0a 7d 20 7b 31 30 30 20 6e 6f 73 6f 72    }.} {100 nosor
3f20: 74 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  t}..do_test wher
3f30: 65 2d 38 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  e-8.1 {.  execsq
3f40: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
3f50: 41 42 4c 45 20 74 34 20 41 53 20 53 45 4c 45 43  ABLE t4 AS SELEC
3f60: 54 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20  T * FROM t1;.   
3f70: 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 34   CREATE INDEX i4
3f80: 78 79 20 4f 4e 20 74 34 28 78 2c 79 29 3b 0a 20  xy ON t4(x,y);. 
3f90: 20 7d 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   }.  cksort {.  
3fa0: 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20    SELECT w FROM 
3fb0: 74 34 20 57 48 45 52 45 20 78 3d 34 20 61 6e 64  t4 WHERE x=4 and
3fc0: 20 79 3c 31 30 30 30 20 4f 52 44 45 52 20 42 59   y<1000 ORDER BY
3fd0: 20 79 20 44 45 53 43 20 6c 69 6d 69 74 20 33 3b   y DESC limit 3;
3fe0: 0a 20 20 7d 0a 7d 20 7b 33 30 20 32 39 20 32 38  .  }.} {30 29 28
3ff0: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
4000: 20 77 68 65 72 65 2d 38 2e 32 20 7b 0a 20 20 65   where-8.2 {.  e
4010: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c  xecsql {.    DEL
4020: 45 54 45 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d  ETE FROM t4;.  }
4030: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
4040: 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 34  SELECT w FROM t4
4050: 20 57 48 45 52 45 20 78 3d 34 20 61 6e 64 20 79   WHERE x=4 and y
4060: 3c 31 30 30 30 20 4f 52 44 45 52 20 42 59 20 79  <1000 ORDER BY y
4070: 20 44 45 53 43 20 6c 69 6d 69 74 20 33 3b 0a 20   DESC limit 3;. 
4080: 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a 0a 23   }.} {nosort}..#
4090: 20 4d 61 6b 65 20 73 75 72 65 20 73 65 61 72 63   Make sure searc
40a0: 68 65 73 20 77 69 74 68 20 61 6e 20 69 6e 64 65  hes with an inde
40b0: 78 20 77 6f 72 6b 20 77 69 74 68 20 61 6e 20 65  x work with an e
40c0: 6d 70 74 79 20 74 61 62 6c 65 2e 0a 23 0a 64 6f  mpty table..#.do
40d0: 5f 74 65 73 74 20 77 68 65 72 65 2d 39 2e 31 20  _test where-9.1 
40e0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
40f0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
4100: 35 28 78 20 50 52 49 4d 41 52 59 20 4b 45 59 29  5(x PRIMARY KEY)
4110: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
4120: 52 4f 4d 20 74 35 20 57 48 45 52 45 20 78 3c 31  ROM t5 WHERE x<1
4130: 30 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  0;.  }.} {}.do_t
4140: 65 73 74 20 77 68 65 72 65 2d 39 2e 32 20 7b 0a  est where-9.2 {.
4150: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
4160: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35  SELECT * FROM t5
4170: 20 57 48 45 52 45 20 78 3c 31 30 20 4f 52 44 45   WHERE x<10 ORDE
4180: 52 20 42 59 20 78 20 44 45 53 43 3b 0a 20 20 7d  R BY x DESC;.  }
4190: 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 68  .} {}.do_test wh
41a0: 65 72 65 2d 39 2e 33 20 7b 0a 20 20 65 78 65 63  ere-9.3 {.  exec
41b0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
41c0: 20 2a 20 46 52 4f 4d 20 74 35 20 57 48 45 52 45   * FROM t5 WHERE
41d0: 20 78 3d 31 30 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a   x=10;.  }.} {}.
41e0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31  .do_test where-1
41f0: 30 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  0.1 {.  execsql 
4200: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 31 20 57  {.    SELECT 1 W
4210: 48 45 52 45 20 61 62 73 28 72 61 6e 64 6f 6d 28  HERE abs(random(
4220: 29 29 3c 30 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f  ))<0.  }.} {}.do
4230: 5f 74 65 73 74 20 77 68 65 72 65 2d 31 30 2e 32  _test where-10.2
4240: 20 7b 0a 20 20 70 72 6f 63 20 74 63 6c 76 61 72   {.  proc tclvar
4250: 5f 66 75 6e 63 20 7b 76 6e 61 6d 65 7d 20 7b 72  _func {vname} {r
4260: 65 74 75 72 6e 20 5b 73 65 74 20 3a 3a 24 76 6e  eturn [set ::$vn
4270: 61 6d 65 5d 7d 0a 20 20 64 62 20 66 75 6e 63 74  ame]}.  db funct
4280: 69 6f 6e 20 74 63 6c 76 61 72 20 74 63 6c 76 61  ion tclvar tclva
4290: 72 5f 66 75 6e 63 0a 20 20 73 65 74 20 3a 3a 76  r_func.  set ::v
42a0: 31 20 30 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 0.  execsql {.
42b0: 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74      SELECT count
42c0: 28 2a 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  (*) FROM t1 WHER
42d0: 45 20 74 63 6c 76 61 72 28 27 76 31 27 29 3b 0a  E tclvar('v1');.
42e0: 20 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73    }.} {0}.do_tes
42f0: 74 20 77 68 65 72 65 2d 31 30 2e 33 20 7b 0a 20  t where-10.3 {. 
4300: 20 73 65 74 20 3a 3a 76 31 20 31 0a 20 20 65 78   set ::v1 1.  ex
4310: 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45  ecsql {.    SELE
4320: 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d  CT count(*) FROM
4330: 20 74 31 20 57 48 45 52 45 20 74 63 6c 76 61 72   t1 WHERE tclvar
4340: 28 27 76 31 27 29 3b 0a 20 20 7d 0a 7d 20 7b 31  ('v1');.  }.} {1
4350: 30 30 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  00}.do_test wher
4360: 65 2d 31 30 2e 34 20 7b 0a 20 20 73 65 74 20 3a  e-10.4 {.  set :
4370: 3a 76 31 20 31 0a 20 20 70 72 6f 63 20 74 63 6c  :v1 1.  proc tcl
4380: 76 61 72 5f 66 75 6e 63 20 7b 76 6e 61 6d 65 7d  var_func {vname}
4390: 20 7b 0a 20 20 20 20 75 70 76 61 72 20 23 30 20   {.    upvar #0 
43a0: 24 76 6e 61 6d 65 20 76 0a 20 20 20 20 73 65 74  $vname v.    set
43b0: 20 76 20 5b 65 78 70 72 20 7b 21 24 76 7d 5d 0a   v [expr {!$v}].
43c0: 20 20 20 20 72 65 74 75 72 6e 20 24 76 0a 20 20      return $v.  
43d0: 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  }.  execsql {.  
43e0: 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a    SELECT count(*
43f0: 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  ) FROM t1 WHERE 
4400: 74 63 6c 76 61 72 28 27 76 31 27 29 3b 0a 20 20  tclvar('v1');.  
4410: 7d 0a 7d 20 7b 35 30 7d 0a 0a 69 6e 74 65 67 72  }.} {50}..integr
4420: 69 74 79 5f 63 68 65 63 6b 20 7b 77 68 65 72 65  ity_check {where
4430: 2d 39 39 2e 30 7d 0a 0a 66 69 6e 69 73 68 5f 74  -99.0}..finish_t
4440: 65 73 74 0a                                      est.