/ Hex Artifact Content
Login

Artifact 9c5752b807b78078fab8da6f52e689832579ca20:


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 32 31 20 32 30 30 34 2f 30  st,v 1.21 2004/0
0210: 35 2f 32 31 20 30 33 3a 30 31 3a 35 39 20 64 72  5/21 03:01:59 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 20 24 70 72  [regexp Sort $pr
2370: 6f 67 5d 7d 20 7b 73 65 74 20 78 20 73 6f 72 74  og]} {set x sort
2380: 7d 20 7b 73 65 74 20 78 20 6e 6f 73 6f 72 74 7d  } {set x nosort}
2390: 0a 20 20 6c 61 70 70 65 6e 64 20 64 61 74 61 20  .  lappend data 
23a0: 24 78 0a 20 20 72 65 74 75 72 6e 20 24 64 61 74  $x.  return $dat
23b0: 61 0a 7d 0a 23 20 43 68 65 63 6b 20 6f 75 74 20  a.}.# Check out 
23c0: 74 68 65 20 6c 6f 67 69 63 20 74 68 61 74 20 61  the logic that a
23d0: 74 74 65 6d 70 74 73 20 74 6f 20 69 6d 70 6c 65  ttempts to imple
23e0: 6d 65 6e 74 20 74 68 65 20 4f 52 44 45 52 20 42  ment the ORDER B
23f0: 59 20 63 6c 61 75 73 65 0a 23 20 75 73 69 6e 67  Y clause.# using
2400: 20 61 6e 20 69 6e 64 65 78 20 72 61 74 68 65 72   an index rather
2410: 20 74 68 61 6e 20 62 79 20 73 6f 72 74 69 6e 67   than by sorting
2420: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  ..#.do_test wher
2430: 65 2d 36 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  e-6.1 {.  execsq
2440: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
2450: 41 42 4c 45 20 74 33 28 61 2c 62 2c 63 29 3b 0a  ABLE t3(a,b,c);.
2460: 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58      CREATE INDEX
2470: 20 74 33 61 20 4f 4e 20 74 33 28 61 29 3b 0a 20   t3a ON t3(a);. 
2480: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
2490: 74 33 62 63 20 4f 4e 20 74 33 28 62 2c 63 29 3b  t3bc ON t3(b,c);
24a0: 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e 44 45  .    CREATE INDE
24b0: 58 20 74 33 61 63 62 20 4f 4e 20 74 33 28 61 2c  X t3acb ON t3(a,
24c0: 63 2c 62 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  c,b);.    INSERT
24d0: 20 49 4e 54 4f 20 74 33 20 53 45 4c 45 43 54 20   INTO t3 SELECT 
24e0: 77 2c 20 31 30 31 2d 77 2c 20 79 20 46 52 4f 4d  w, 101-w, y FROM
24f0: 20 74 31 3b 0a 20 20 20 20 53 45 4c 45 43 54 20   t1;.    SELECT 
2500: 63 6f 75 6e 74 28 2a 29 2c 20 73 75 6d 28 61 29  count(*), sum(a)
2510: 2c 20 73 75 6d 28 62 29 2c 20 73 75 6d 28 63 29  , sum(b), sum(c)
2520: 20 46 52 4f 4d 20 74 33 3b 0a 20 20 7d 0a 7d 20   FROM t3;.  }.} 
2530: 7b 31 30 30 20 35 30 35 30 20 35 30 35 30 20 33  {100 5050 5050 3
2540: 34 38 35 35 30 7d 0a 64 6f 5f 74 65 73 74 20 77  48550}.do_test w
2550: 68 65 72 65 2d 36 2e 32 20 7b 0a 20 20 63 6b 73  here-6.2 {.  cks
2560: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
2570: 20 2a 20 46 52 4f 4d 20 74 33 20 4f 52 44 45 52   * FROM t3 ORDER
2580: 20 42 59 20 61 20 4c 49 4d 49 54 20 33 0a 20 20   BY a LIMIT 3.  
2590: 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20 32 20 39  }.} {1 100 4 2 9
25a0: 39 20 39 20 33 20 39 38 20 31 36 20 6e 6f 73 6f  9 9 3 98 16 noso
25b0: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
25c0: 65 2d 36 2e 33 20 7b 0a 20 20 63 6b 73 6f 72 74  e-6.3 {.  cksort
25d0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
25e0: 46 52 4f 4d 20 74 33 20 4f 52 44 45 52 20 42 59  FROM t3 ORDER BY
25f0: 20 61 2b 31 20 4c 49 4d 49 54 20 33 0a 20 20 7d   a+1 LIMIT 3.  }
2600: 0a 7d 20 7b 31 20 31 30 30 20 34 20 32 20 39 39  .} {1 100 4 2 99
2610: 20 39 20 33 20 39 38 20 31 36 20 73 6f 72 74 7d   9 3 98 16 sort}
2620: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36  .do_test where-6
2630: 2e 34 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .4 {.  cksort {.
2640: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2650: 4d 20 74 33 20 57 48 45 52 45 20 61 3c 31 30 20  M t3 WHERE a<10 
2660: 4f 52 44 45 52 20 42 59 20 61 20 4c 49 4d 49 54  ORDER BY a LIMIT
2670: 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20   3.  }.} {1 100 
2680: 34 20 32 20 39 39 20 39 20 33 20 39 38 20 31 36  4 2 99 9 3 98 16
2690: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
26a0: 20 77 68 65 72 65 2d 36 2e 35 20 7b 0a 20 20 63   where-6.5 {.  c
26b0: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
26c0: 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45  CT * FROM t3 WHE
26d0: 52 45 20 61 3e 30 20 41 4e 44 20 61 3c 31 30 20  RE a>0 AND a<10 
26e0: 4f 52 44 45 52 20 42 59 20 61 20 4c 49 4d 49 54  ORDER BY a LIMIT
26f0: 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20   3.  }.} {1 100 
2700: 34 20 32 20 39 39 20 39 20 33 20 39 38 20 31 36  4 2 99 9 3 98 16
2710: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
2720: 20 77 68 65 72 65 2d 36 2e 36 20 7b 0a 20 20 63   where-6.6 {.  c
2730: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
2740: 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45  CT * FROM t3 WHE
2750: 52 45 20 61 3e 30 20 4f 52 44 45 52 20 42 59 20  RE a>0 ORDER BY 
2760: 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20  a LIMIT 3.  }.} 
2770: 7b 31 20 31 30 30 20 34 20 32 20 39 39 20 39 20  {1 100 4 2 99 9 
2780: 33 20 39 38 20 31 36 20 6e 6f 73 6f 72 74 7d 0a  3 98 16 nosort}.
2790: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e  do_test where-6.
27a0: 37 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  7 {.  cksort {. 
27b0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
27c0: 20 74 33 20 57 48 45 52 45 20 62 3e 30 20 4f 52   t3 WHERE b>0 OR
27d0: 44 45 52 20 42 59 20 61 20 4c 49 4d 49 54 20 33  DER BY a LIMIT 3
27e0: 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20  .  }.} {1 100 4 
27f0: 32 20 39 39 20 39 20 33 20 39 38 20 31 36 20 73  2 99 9 3 98 16 s
2800: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
2810: 72 65 2d 36 2e 38 20 7b 0a 20 20 63 6b 73 6f 72  re-6.8 {.  cksor
2820: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t {.    SELECT *
2830: 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61   FROM t3 WHERE a
2840: 20 49 4e 20 28 33 2c 35 2c 37 2c 31 2c 39 2c 34   IN (3,5,7,1,9,4
2850: 2c 32 29 20 4f 52 44 45 52 20 42 59 20 61 20 4c  ,2) ORDER BY a L
2860: 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20  IMIT 3.  }.} {1 
2870: 31 30 30 20 34 20 32 20 39 39 20 39 20 33 20 39  100 4 2 99 9 3 9
2880: 38 20 31 36 20 73 6f 72 74 7d 0a 64 6f 5f 74 65  8 16 sort}.do_te
2890: 73 74 20 77 68 65 72 65 2d 36 2e 39 2e 31 20 7b  st where-6.9.1 {
28a0: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
28b0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
28c0: 20 57 48 45 52 45 20 61 3d 31 20 41 4e 44 20 63   WHERE a=1 AND c
28d0: 3e 30 20 4f 52 44 45 52 20 42 59 20 61 20 4c 49  >0 ORDER BY a LI
28e0: 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31  MIT 3.  }.} {1 1
28f0: 30 30 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f  00 4 nosort}.do_
2900: 74 65 73 74 20 77 68 65 72 65 2d 36 2e 39 2e 32  test where-6.9.2
2910: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
2920: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
2930: 74 33 20 57 48 45 52 45 20 61 3d 31 20 41 4e 44  t3 WHERE a=1 AND
2940: 20 63 3e 30 20 4f 52 44 45 52 20 42 59 20 61 2c   c>0 ORDER BY a,
2950: 63 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20  c LIMIT 3.  }.} 
2960: 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f 72 74 7d  {1 100 4 nosort}
2970: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36  .do_test where-6
2980: 2e 39 2e 33 20 7b 0a 20 20 63 6b 73 6f 72 74 20  .9.3 {.  cksort 
2990: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
29a0: 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d 31  ROM t3 WHERE a=1
29b0: 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20 42   AND c>0 ORDER B
29c0: 59 20 63 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a  Y c LIMIT 3.  }.
29d0: 7d 20 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f 72  } {1 100 4 nosor
29e0: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
29f0: 2d 36 2e 39 2e 34 20 7b 0a 20 20 63 6b 73 6f 72  -6.9.4 {.  cksor
2a00: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t {.    SELECT *
2a10: 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61   FROM t3 WHERE a
2a20: 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52  =1 AND c>0 ORDER
2a30: 20 42 59 20 61 20 44 45 53 43 20 4c 49 4d 49 54   BY a DESC LIMIT
2a40: 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20   3.  }.} {1 100 
2a50: 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  4 nosort}.do_tes
2a60: 74 20 77 68 65 72 65 2d 36 2e 39 2e 35 20 7b 0a  t where-6.9.5 {.
2a70: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
2a80: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
2a90: 57 48 45 52 45 20 61 3d 31 20 41 4e 44 20 63 3e  WHERE a=1 AND c>
2aa0: 30 20 4f 52 44 45 52 20 42 59 20 61 20 44 45 53  0 ORDER BY a DES
2ab0: 43 2c 20 63 20 44 45 53 43 20 4c 49 4d 49 54 20  C, c DESC LIMIT 
2ac0: 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34  3.  }.} {1 100 4
2ad0: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
2ae0: 20 77 68 65 72 65 2d 36 2e 39 2e 36 20 7b 0a 20   where-6.9.6 {. 
2af0: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
2b00: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57  LECT * FROM t3 W
2b10: 48 45 52 45 20 61 3d 31 20 41 4e 44 20 63 3e 30  HERE a=1 AND c>0
2b20: 20 4f 52 44 45 52 20 42 59 20 63 20 44 45 53 43   ORDER BY c DESC
2b30: 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b   LIMIT 3.  }.} {
2b40: 31 20 31 30 30 20 34 20 6e 6f 73 6f 72 74 7d 0a  1 100 4 nosort}.
2b50: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e  do_test where-6.
2b60: 39 2e 37 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  9.7 {.  cksort {
2b70: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
2b80: 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d 31 20  OM t3 WHERE a=1 
2b90: 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20 42 59  AND c>0 ORDER BY
2ba0: 20 63 2c 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d   c,a LIMIT 3.  }
2bb0: 0a 7d 20 7b 31 20 31 30 30 20 34 20 73 6f 72 74  .} {1 100 4 sort
2bc0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
2bd0: 36 2e 39 2e 38 20 7b 0a 20 20 63 6b 73 6f 72 74  6.9.8 {.  cksort
2be0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
2bf0: 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d  FROM t3 WHERE a=
2c00: 31 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20  1 AND c>0 ORDER 
2c10: 42 59 20 61 20 44 45 53 43 2c 20 63 20 41 53 43  BY a DESC, c ASC
2c20: 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b   LIMIT 3.  }.} {
2c30: 31 20 31 30 30 20 34 20 73 6f 72 74 7d 0a 64 6f  1 100 4 sort}.do
2c40: 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e 39 2e  _test where-6.9.
2c50: 39 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  9 {.  cksort {. 
2c60: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
2c70: 20 74 33 20 57 48 45 52 45 20 61 3d 31 20 41 4e   t3 WHERE a=1 AN
2c80: 44 20 63 3e 30 20 4f 52 44 45 52 20 42 59 20 61  D c>0 ORDER BY a
2c90: 20 41 53 43 2c 20 63 20 44 45 53 43 20 4c 49 4d   ASC, c DESC LIM
2ca0: 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30  IT 3.  }.} {1 10
2cb0: 30 20 34 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  0 4 sort}.do_tes
2cc0: 74 20 77 68 65 72 65 2d 36 2e 31 30 20 7b 0a 20  t where-6.10 {. 
2cd0: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
2ce0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57  LECT * FROM t3 W
2cf0: 48 45 52 45 20 61 3d 31 20 41 4e 44 20 63 3e 30  HERE a=1 AND c>0
2d00: 20 4f 52 44 45 52 20 42 59 20 61 20 4c 49 4d 49   ORDER BY a LIMI
2d10: 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30  T 3.  }.} {1 100
2d20: 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65   4 nosort}.do_te
2d30: 73 74 20 77 68 65 72 65 2d 36 2e 31 31 20 7b 0a  st where-6.11 {.
2d40: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
2d50: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
2d60: 57 48 45 52 45 20 61 3d 31 20 41 4e 44 20 63 3e  WHERE a=1 AND c>
2d70: 30 20 4f 52 44 45 52 20 42 59 20 61 2c 63 20 4c  0 ORDER BY a,c L
2d80: 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20  IMIT 3.  }.} {1 
2d90: 31 30 30 20 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f  100 4 nosort}.do
2da0: 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e 31 32  _test where-6.12
2db0: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
2dc0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
2dd0: 74 33 20 57 48 45 52 45 20 61 3d 31 20 41 4e 44  t3 WHERE a=1 AND
2de0: 20 63 3e 30 20 4f 52 44 45 52 20 42 59 20 61 2c   c>0 ORDER BY a,
2df0: 63 2c 62 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a  c,b LIMIT 3.  }.
2e00: 7d 20 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f 72  } {1 100 4 nosor
2e10: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
2e20: 2d 36 2e 31 33 20 7b 0a 20 20 63 6b 73 6f 72 74  -6.13 {.  cksort
2e30: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
2e40: 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3e  FROM t3 WHERE a>
2e50: 30 20 4f 52 44 45 52 20 42 59 20 61 20 44 45 53  0 ORDER BY a DES
2e60: 43 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20  C LIMIT 3.  }.} 
2e70: 7b 31 30 30 20 31 20 31 30 32 30 31 20 39 39 20  {100 1 10201 99 
2e80: 32 20 31 30 30 30 30 20 39 38 20 33 20 39 38 30  2 10000 98 3 980
2e90: 31 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  1 nosort}.do_tes
2ea0: 74 20 77 68 65 72 65 2d 36 2e 31 33 2e 31 20 7b  t where-6.13.1 {
2eb0: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
2ec0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
2ed0: 20 57 48 45 52 45 20 61 3e 30 20 4f 52 44 45 52   WHERE a>0 ORDER
2ee0: 20 42 59 20 2d 61 20 4c 49 4d 49 54 20 33 0a 20   BY -a LIMIT 3. 
2ef0: 20 7d 0a 7d 20 7b 31 30 30 20 31 20 31 30 32 30   }.} {100 1 1020
2f00: 31 20 39 39 20 32 20 31 30 30 30 30 20 39 38 20  1 99 2 10000 98 
2f10: 33 20 39 38 30 31 20 73 6f 72 74 7d 0a 64 6f 5f  3 9801 sort}.do_
2f20: 74 65 73 74 20 77 68 65 72 65 2d 36 2e 31 34 20  test where-6.14 
2f30: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
2f40: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2f50: 33 20 4f 52 44 45 52 20 42 59 20 62 20 4c 49 4d  3 ORDER BY b LIM
2f60: 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 30 30 20  IT 3.  }.} {100 
2f70: 31 20 31 30 32 30 31 20 39 39 20 32 20 31 30 30  1 10201 99 2 100
2f80: 30 30 20 39 38 20 33 20 39 38 30 31 20 6e 6f 73  00 98 3 9801 nos
2f90: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
2fa0: 72 65 2d 36 2e 31 35 20 7b 0a 20 20 63 6b 73 6f  re-6.15 {.  ckso
2fb0: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
2fc0: 74 33 2e 61 2c 20 74 31 2e 78 20 46 52 4f 4d 20  t3.a, t1.x FROM 
2fd0: 74 33 2c 20 74 31 20 57 48 45 52 45 20 74 33 2e  t3, t1 WHERE t3.
2fe0: 61 3d 74 31 2e 77 20 4f 52 44 45 52 20 42 59 20  a=t1.w ORDER BY 
2ff0: 74 33 2e 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d  t3.a LIMIT 3.  }
3000: 0a 7d 20 7b 31 20 30 20 32 20 31 20 33 20 31 20  .} {1 0 2 1 3 1 
3010: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
3020: 77 68 65 72 65 2d 36 2e 31 36 20 7b 0a 20 20 63  where-6.16 {.  c
3030: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
3040: 43 54 20 74 33 2e 61 2c 20 74 31 2e 78 20 46 52  CT t3.a, t1.x FR
3050: 4f 4d 20 74 33 2c 20 74 31 20 57 48 45 52 45 20  OM t3, t1 WHERE 
3060: 74 33 2e 61 3d 74 31 2e 77 20 4f 52 44 45 52 20  t3.a=t1.w ORDER 
3070: 42 59 20 74 31 2e 78 2c 20 74 33 2e 61 20 4c 49  BY t1.x, t3.a LI
3080: 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 30  MIT 3.  }.} {1 0
3090: 20 32 20 31 20 33 20 31 20 73 6f 72 74 7d 0a 23   2 1 3 1 sort}.#
30a0: 23 23 23 20 56 65 72 73 69 6f 6e 20 33 20 64 6f  ### Version 3 do
30b0: 65 73 20 6e 6f 74 20 77 6f 72 6b 20 74 68 69 73  es not work this
30c0: 20 77 61 79 3a 0a 23 64 6f 5f 74 65 73 74 20 77   way:.#do_test w
30d0: 68 65 72 65 2d 36 2e 31 37 20 7b 0a 23 20 20 63  here-6.17 {.#  c
30e0: 6b 73 6f 72 74 20 7b 0a 23 20 20 20 20 53 45 4c  ksort {.#    SEL
30f0: 45 43 54 20 79 20 46 52 4f 4d 20 74 31 20 4f 52  ECT y FROM t1 OR
3100: 44 45 52 20 42 59 20 77 20 43 4f 4c 4c 41 54 45  DER BY w COLLATE
3110: 20 74 65 78 74 20 4c 49 4d 49 54 20 33 3b 0a 23   text LIMIT 3;.#
3120: 20 20 7d 0a 23 7d 20 7b 34 20 31 32 31 20 31 30    }.#} {4 121 10
3130: 32 30 31 20 73 6f 72 74 7d 0a 23 64 6f 5f 74 65  201 sort}.#do_te
3140: 73 74 20 77 68 65 72 65 2d 36 2e 31 38 20 7b 0a  st where-6.18 {.
3150: 23 20 20 63 6b 73 6f 72 74 20 7b 0a 23 20 20 20  #  cksort {.#   
3160: 20 53 45 4c 45 43 54 20 79 20 46 52 4f 4d 20 74   SELECT y FROM t
3170: 31 20 4f 52 44 45 52 20 42 59 20 77 20 43 4f 4c  1 ORDER BY w COL
3180: 4c 41 54 45 20 6e 75 6d 65 72 69 63 20 4c 49 4d  LATE numeric LIM
3190: 49 54 20 33 3b 0a 23 20 20 7d 0a 23 7d 20 7b 34  IT 3;.#  }.#} {4
31a0: 20 39 20 31 36 20 73 6f 72 74 7d 0a 64 6f 5f 74   9 16 sort}.do_t
31b0: 65 73 74 20 77 68 65 72 65 2d 36 2e 31 39 20 7b  est where-6.19 {
31c0: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
31d0: 53 45 4c 45 43 54 20 79 20 46 52 4f 4d 20 74 31  SELECT y FROM t1
31e0: 20 4f 52 44 45 52 20 42 59 20 77 20 4c 49 4d 49   ORDER BY w LIMI
31f0: 54 20 33 3b 0a 20 20 7d 0a 7d 20 7b 34 20 39 20  T 3;.  }.} {4 9 
3200: 31 36 20 6e 6f 73 6f 72 74 7d 0a 0a 23 20 54 65  16 nosort}..# Te
3210: 73 74 73 20 66 6f 72 20 72 65 76 65 72 73 65 2d  sts for reverse-
3220: 6f 72 64 65 72 20 73 6f 72 74 69 6e 67 2e 0a 23  order sorting..#
3230: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37  .do_test where-7
3240: 2e 31 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .1 {.  cksort {.
3250: 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f      SELECT w FRO
3260: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 4f  M t1 WHERE x=3 O
3270: 52 44 45 52 20 42 59 20 79 3b 0a 20 20 7d 0a 7d  RDER BY y;.  }.}
3280: 20 7b 38 20 39 20 31 30 20 31 31 20 31 32 20 31   {8 9 10 11 12 1
3290: 33 20 31 34 20 31 35 20 6e 6f 73 6f 72 74 7d 0a  3 14 15 nosort}.
32a0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e  do_test where-7.
32b0: 32 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  2 {.  cksort {. 
32c0: 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d     SELECT w FROM
32d0: 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 4f 52   t1 WHERE x=3 OR
32e0: 44 45 52 20 42 59 20 79 20 44 45 53 43 3b 0a 20  DER BY y DESC;. 
32f0: 20 7d 0a 7d 20 7b 31 35 20 31 34 20 31 33 20 31   }.} {15 14 13 1
3300: 32 20 31 31 20 31 30 20 39 20 38 20 6e 6f 73 6f  2 11 10 9 8 noso
3310: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
3320: 65 2d 37 2e 33 20 7b 0a 20 20 63 6b 73 6f 72 74  e-7.3 {.  cksort
3330: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20   {.    SELECT w 
3340: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d  FROM t1 WHERE x=
3350: 33 20 41 4e 44 20 79 3e 31 30 30 20 4f 52 44 45  3 AND y>100 ORDE
3360: 52 20 42 59 20 79 20 4c 49 4d 49 54 20 33 3b 0a  R BY y LIMIT 3;.
3370: 20 20 7d 0a 7d 20 7b 31 30 20 31 31 20 31 32 20    }.} {10 11 12 
3380: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
3390: 77 68 65 72 65 2d 37 2e 34 20 7b 0a 20 20 63 6b  where-7.4 {.  ck
33a0: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
33b0: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
33c0: 45 20 78 3d 33 20 41 4e 44 20 79 3e 31 30 30 20  E x=3 AND y>100 
33d0: 4f 52 44 45 52 20 42 59 20 79 20 44 45 53 43 20  ORDER BY y DESC 
33e0: 4c 49 4d 49 54 20 33 3b 0a 20 20 7d 0a 7d 20 7b  LIMIT 3;.  }.} {
33f0: 31 35 20 31 34 20 31 33 20 6e 6f 73 6f 72 74 7d  15 14 13 nosort}
3400: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37  .do_test where-7
3410: 2e 35 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  .5 {.  cksort {.
3420: 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f      SELECT w FRO
3430: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41  M t1 WHERE x=3 A
3440: 4e 44 20 79 3e 31 32 31 20 4f 52 44 45 52 20 42  ND y>121 ORDER B
3450: 59 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20  Y y DESC;.  }.} 
3460: 7b 31 35 20 31 34 20 31 33 20 31 32 20 31 31 20  {15 14 13 12 11 
3470: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
3480: 77 68 65 72 65 2d 37 2e 36 20 7b 0a 20 20 63 6b  where-7.6 {.  ck
3490: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
34a0: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
34b0: 45 20 78 3d 33 20 41 4e 44 20 79 3e 3d 31 32 31  E x=3 AND y>=121
34c0: 20 4f 52 44 45 52 20 42 59 20 79 20 44 45 53 43   ORDER BY y DESC
34d0: 3b 0a 20 20 7d 0a 7d 20 7b 31 35 20 31 34 20 31  ;.  }.} {15 14 1
34e0: 33 20 31 32 20 31 31 20 31 30 20 6e 6f 73 6f 72  3 12 11 10 nosor
34f0: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
3500: 2d 37 2e 37 20 7b 0a 20 20 63 6b 73 6f 72 74 20  -7.7 {.  cksort 
3510: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46  {.    SELECT w F
3520: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33  ROM t1 WHERE x=3
3530: 20 41 4e 44 20 79 3e 3d 31 32 31 20 41 4e 44 20   AND y>=121 AND 
3540: 79 3c 31 39 36 20 4f 52 44 45 52 20 42 59 20 79  y<196 ORDER BY y
3550: 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 32   DESC;.  }.} {12
3560: 20 31 31 20 31 30 20 6e 6f 73 6f 72 74 7d 0a 64   11 10 nosort}.d
3570: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 38  o_test where-7.8
3580: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
3590: 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20    SELECT w FROM 
35a0: 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44  t1 WHERE x=3 AND
35b0: 20 79 3e 3d 31 32 31 20 41 4e 44 20 79 3c 3d 31   y>=121 AND y<=1
35c0: 39 36 20 4f 52 44 45 52 20 42 59 20 79 20 44 45  96 ORDER BY y DE
35d0: 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 33 20 31 32  SC;.  }.} {13 12
35e0: 20 31 31 20 31 30 20 6e 6f 73 6f 72 74 7d 0a 64   11 10 nosort}.d
35f0: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 39  o_test where-7.9
3600: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
3610: 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20    SELECT w FROM 
3620: 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44  t1 WHERE x=3 AND
3630: 20 79 3e 31 32 31 20 41 4e 44 20 79 3c 3d 31 39   y>121 AND y<=19
3640: 36 20 4f 52 44 45 52 20 42 59 20 79 20 44 45 53  6 ORDER BY y DES
3650: 43 3b 0a 20 20 7d 0a 7d 20 7b 31 33 20 31 32 20  C;.  }.} {13 12 
3660: 31 31 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  11 nosort}.do_te
3670: 73 74 20 77 68 65 72 65 2d 37 2e 31 30 20 7b 0a  st where-7.10 {.
3680: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
3690: 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20  ELECT w FROM t1 
36a0: 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e  WHERE x=3 AND y>
36b0: 31 30 30 20 41 4e 44 20 79 3c 31 39 36 20 4f 52  100 AND y<196 OR
36c0: 44 45 52 20 42 59 20 79 20 44 45 53 43 3b 0a 20  DER BY y DESC;. 
36d0: 20 7d 0a 7d 20 7b 31 32 20 31 31 20 31 30 20 6e   }.} {12 11 10 n
36e0: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
36f0: 68 65 72 65 2d 37 2e 31 31 20 7b 0a 20 20 63 6b  here-7.11 {.  ck
3700: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
3710: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
3720: 45 20 78 3d 33 20 41 4e 44 20 79 3e 3d 31 32 31  E x=3 AND y>=121
3730: 20 41 4e 44 20 79 3c 31 39 36 20 4f 52 44 45 52   AND y<196 ORDER
3740: 20 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 31 30   BY y;.  }.} {10
3750: 20 31 31 20 31 32 20 6e 6f 73 6f 72 74 7d 0a 64   11 12 nosort}.d
3760: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 31  o_test where-7.1
3770: 32 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  2 {.  cksort {. 
3780: 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d     SELECT w FROM
3790: 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e   t1 WHERE x=3 AN
37a0: 44 20 79 3e 3d 31 32 31 20 41 4e 44 20 79 3c 3d  D y>=121 AND y<=
37b0: 31 39 36 20 4f 52 44 45 52 20 42 59 20 79 3b 0a  196 ORDER BY y;.
37c0: 20 20 7d 0a 7d 20 7b 31 30 20 31 31 20 31 32 20    }.} {10 11 12 
37d0: 31 33 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  13 nosort}.do_te
37e0: 73 74 20 77 68 65 72 65 2d 37 2e 31 33 20 7b 0a  st where-7.13 {.
37f0: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
3800: 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20  ELECT w FROM t1 
3810: 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e  WHERE x=3 AND y>
3820: 31 32 31 20 41 4e 44 20 79 3c 3d 31 39 36 20 4f  121 AND y<=196 O
3830: 52 44 45 52 20 42 59 20 79 3b 0a 20 20 7d 0a 7d  RDER BY y;.  }.}
3840: 20 7b 31 31 20 31 32 20 31 33 20 6e 6f 73 6f 72   {11 12 13 nosor
3850: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
3860: 2d 37 2e 31 34 20 7b 0a 20 20 63 6b 73 6f 72 74  -7.14 {.  cksort
3870: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20   {.    SELECT w 
3880: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d  FROM t1 WHERE x=
3890: 33 20 41 4e 44 20 79 3e 31 30 30 20 41 4e 44 20  3 AND y>100 AND 
38a0: 79 3c 31 39 36 20 4f 52 44 45 52 20 42 59 20 79  y<196 ORDER BY y
38b0: 3b 0a 20 20 7d 0a 7d 20 7b 31 30 20 31 31 20 31  ;.  }.} {10 11 1
38c0: 32 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  2 nosort}.do_tes
38d0: 74 20 77 68 65 72 65 2d 37 2e 31 35 20 7b 0a 20  t where-7.15 {. 
38e0: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
38f0: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
3900: 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3c 38  HERE x=3 AND y<8
3910: 31 20 4f 52 44 45 52 20 42 59 20 79 3b 0a 20 20  1 ORDER BY y;.  
3920: 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a 64 6f 5f  }.} {nosort}.do_
3930: 74 65 73 74 20 77 68 65 72 65 2d 37 2e 31 36 20  test where-7.16 
3940: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
3950: 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74   SELECT w FROM t
3960: 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20  1 WHERE x=3 AND 
3970: 79 3c 3d 38 31 20 4f 52 44 45 52 20 42 59 20 79  y<=81 ORDER BY y
3980: 3b 0a 20 20 7d 0a 7d 20 7b 38 20 6e 6f 73 6f 72  ;.  }.} {8 nosor
3990: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
39a0: 2d 37 2e 31 37 20 7b 0a 20 20 63 6b 73 6f 72 74  -7.17 {.  cksort
39b0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20   {.    SELECT w 
39c0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d  FROM t1 WHERE x=
39d0: 33 20 41 4e 44 20 79 3e 32 35 36 20 4f 52 44 45  3 AND y>256 ORDE
39e0: 52 20 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 6e  R BY y;.  }.} {n
39f0: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
3a00: 68 65 72 65 2d 37 2e 31 38 20 7b 0a 20 20 63 6b  here-7.18 {.  ck
3a10: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
3a20: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
3a30: 45 20 78 3d 33 20 41 4e 44 20 79 3e 3d 32 35 36  E x=3 AND y>=256
3a40: 20 4f 52 44 45 52 20 42 59 20 79 3b 0a 20 20 7d   ORDER BY y;.  }
3a50: 0a 7d 20 7b 31 35 20 6e 6f 73 6f 72 74 7d 0a 64  .} {15 nosort}.d
3a60: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 31  o_test where-7.1
3a70: 39 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  9 {.  cksort {. 
3a80: 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d     SELECT w FROM
3a90: 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e   t1 WHERE x=3 AN
3aa0: 44 20 79 3c 38 31 20 4f 52 44 45 52 20 42 59 20  D y<81 ORDER BY 
3ab0: 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 6e  y DESC;.  }.} {n
3ac0: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
3ad0: 68 65 72 65 2d 37 2e 32 30 20 7b 0a 20 20 63 6b  here-7.20 {.  ck
3ae0: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
3af0: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
3b00: 45 20 78 3d 33 20 41 4e 44 20 79 3c 3d 38 31 20  E x=3 AND y<=81 
3b10: 4f 52 44 45 52 20 42 59 20 79 20 44 45 53 43 3b  ORDER BY y DESC;
3b20: 0a 20 20 7d 0a 7d 20 7b 38 20 6e 6f 73 6f 72 74  .  }.} {8 nosort
3b30: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
3b40: 37 2e 32 31 20 7b 0a 20 20 63 6b 73 6f 72 74 20  7.21 {.  cksort 
3b50: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46  {.    SELECT w F
3b60: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33  ROM t1 WHERE x=3
3b70: 20 41 4e 44 20 79 3e 32 35 36 20 4f 52 44 45 52   AND y>256 ORDER
3b80: 20 42 59 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a   BY y DESC;.  }.
3b90: 7d 20 7b 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  } {nosort}.do_te
3ba0: 73 74 20 77 68 65 72 65 2d 37 2e 32 32 20 7b 0a  st where-7.22 {.
3bb0: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
3bc0: 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20  ELECT w FROM t1 
3bd0: 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e  WHERE x=3 AND y>
3be0: 3d 32 35 36 20 4f 52 44 45 52 20 42 59 20 79 20  =256 ORDER BY y 
3bf0: 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 35 20  DESC;.  }.} {15 
3c00: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
3c10: 77 68 65 72 65 2d 37 2e 32 33 20 7b 0a 20 20 63  where-7.23 {.  c
3c20: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
3c30: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
3c40: 52 45 20 78 3d 30 20 41 4e 44 20 79 3c 34 20 4f  RE x=0 AND y<4 O
3c50: 52 44 45 52 20 42 59 20 79 3b 0a 20 20 7d 0a 7d  RDER BY y;.  }.}
3c60: 20 7b 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73   {nosort}.do_tes
3c70: 74 20 77 68 65 72 65 2d 37 2e 32 34 20 7b 0a 20  t where-7.24 {. 
3c80: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
3c90: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
3ca0: 48 45 52 45 20 78 3d 30 20 41 4e 44 20 79 3c 3d  HERE x=0 AND y<=
3cb0: 34 20 4f 52 44 45 52 20 42 59 20 79 3b 0a 20 20  4 ORDER BY y;.  
3cc0: 7d 0a 7d 20 7b 31 20 6e 6f 73 6f 72 74 7d 0a 64  }.} {1 nosort}.d
3cd0: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 32  o_test where-7.2
3ce0: 35 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  5 {.  cksort {. 
3cf0: 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d     SELECT w FROM
3d00: 20 74 31 20 57 48 45 52 45 20 78 3d 36 20 41 4e   t1 WHERE x=6 AN
3d10: 44 20 79 3e 31 30 32 30 31 20 4f 52 44 45 52 20  D y>10201 ORDER 
3d20: 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f 73  BY y;.  }.} {nos
3d30: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
3d40: 72 65 2d 37 2e 32 36 20 7b 0a 20 20 63 6b 73 6f  re-7.26 {.  ckso
3d50: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
3d60: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
3d70: 78 3d 36 20 41 4e 44 20 79 3e 3d 31 30 32 30 31  x=6 AND y>=10201
3d80: 20 4f 52 44 45 52 20 42 59 20 79 3b 0a 20 20 7d   ORDER BY y;.  }
3d90: 0a 7d 20 7b 31 30 30 20 6e 6f 73 6f 72 74 7d 0a  .} {100 nosort}.
3da0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e  do_test where-7.
3db0: 32 37 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  27 {.  cksort {.
3dc0: 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f      SELECT w FRO
3dd0: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 30 20 41  M t1 WHERE x=0 A
3de0: 4e 44 20 79 3c 34 20 4f 52 44 45 52 20 42 59 20  ND y<4 ORDER BY 
3df0: 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 6e  y DESC;.  }.} {n
3e00: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
3e10: 68 65 72 65 2d 37 2e 32 38 20 7b 0a 20 20 63 6b  here-7.28 {.  ck
3e20: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
3e30: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
3e40: 45 20 78 3d 30 20 41 4e 44 20 79 3c 3d 34 20 4f  E x=0 AND y<=4 O
3e50: 52 44 45 52 20 42 59 20 79 20 44 45 53 43 3b 0a  RDER BY y DESC;.
3e60: 20 20 7d 0a 7d 20 7b 31 20 6e 6f 73 6f 72 74 7d    }.} {1 nosort}
3e70: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37  .do_test where-7
3e80: 2e 32 39 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  .29 {.  cksort {
3e90: 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52  .    SELECT w FR
3ea0: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 36 20  OM t1 WHERE x=6 
3eb0: 41 4e 44 20 79 3e 31 30 32 30 31 20 4f 52 44 45  AND y>10201 ORDE
3ec0: 52 20 42 59 20 79 20 44 45 53 43 3b 0a 20 20 7d  R BY y DESC;.  }
3ed0: 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74  .} {nosort}.do_t
3ee0: 65 73 74 20 77 68 65 72 65 2d 37 2e 33 30 20 7b  est where-7.30 {
3ef0: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
3f00: 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31  SELECT w FROM t1
3f10: 20 57 48 45 52 45 20 78 3d 36 20 41 4e 44 20 79   WHERE x=6 AND y
3f20: 3e 3d 31 30 32 30 31 20 4f 52 44 45 52 20 42 59  >=10201 ORDER BY
3f30: 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b   y DESC;.  }.} {
3f40: 31 30 30 20 6e 6f 73 6f 72 74 7d 0a 0a 64 6f 5f  100 nosort}..do_
3f50: 74 65 73 74 20 77 68 65 72 65 2d 38 2e 31 20 7b  test where-8.1 {
3f60: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
3f70: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 34   CREATE TABLE t4
3f80: 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   AS SELECT * FRO
3f90: 4d 20 74 31 3b 0a 20 20 20 20 43 52 45 41 54 45  M t1;.    CREATE
3fa0: 20 49 4e 44 45 58 20 69 34 78 79 20 4f 4e 20 74   INDEX i4xy ON t
3fb0: 34 28 78 2c 79 29 3b 0a 20 20 7d 0a 20 20 63 6b  4(x,y);.  }.  ck
3fc0: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
3fd0: 54 20 77 20 46 52 4f 4d 20 74 34 20 57 48 45 52  T w FROM t4 WHER
3fe0: 45 20 78 3d 34 20 61 6e 64 20 79 3c 31 30 30 30  E x=4 and y<1000
3ff0: 20 4f 52 44 45 52 20 42 59 20 79 20 44 45 53 43   ORDER BY y DESC
4000: 20 6c 69 6d 69 74 20 33 3b 0a 20 20 7d 0a 7d 20   limit 3;.  }.} 
4010: 7b 33 30 20 32 39 20 32 38 20 6e 6f 73 6f 72 74  {30 29 28 nosort
4020: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
4030: 38 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  8.2 {.  execsql 
4040: 7b 0a 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f  {.    DELETE FRO
4050: 4d 20 74 34 3b 0a 20 20 7d 0a 20 20 63 6b 73 6f  M t4;.  }.  ckso
4060: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
4070: 77 20 46 52 4f 4d 20 74 34 20 57 48 45 52 45 20  w FROM t4 WHERE 
4080: 78 3d 34 20 61 6e 64 20 79 3c 31 30 30 30 20 4f  x=4 and y<1000 O
4090: 52 44 45 52 20 42 59 20 79 20 44 45 53 43 20 6c  RDER BY y DESC l
40a0: 69 6d 69 74 20 33 3b 0a 20 20 7d 0a 7d 20 7b 6e  imit 3;.  }.} {n
40b0: 6f 73 6f 72 74 7d 0a 0a 23 20 4d 61 6b 65 20 73  osort}..# Make s
40c0: 75 72 65 20 73 65 61 72 63 68 65 73 20 77 69 74  ure searches wit
40d0: 68 20 61 6e 20 69 6e 64 65 78 20 77 6f 72 6b 20  h an index work 
40e0: 77 69 74 68 20 61 6e 20 65 6d 70 74 79 20 74 61  with an empty ta
40f0: 62 6c 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77  ble..#.do_test w
4100: 68 65 72 65 2d 39 2e 31 20 7b 0a 20 20 65 78 65  here-9.1 {.  exe
4110: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
4120: 45 20 54 41 42 4c 45 20 74 35 28 78 20 50 52 49  E TABLE t5(x PRI
4130: 4d 41 52 59 20 4b 45 59 29 3b 0a 20 20 20 20 53  MARY KEY);.    S
4140: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35 20  ELECT * FROM t5 
4150: 57 48 45 52 45 20 78 3c 31 30 3b 0a 20 20 7d 0a  WHERE x<10;.  }.
4160: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  } {}.do_test whe
4170: 72 65 2d 39 2e 32 20 7b 0a 20 20 65 78 65 63 73  re-9.2 {.  execs
4180: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
4190: 2a 20 46 52 4f 4d 20 74 35 20 57 48 45 52 45 20  * FROM t5 WHERE 
41a0: 78 3c 31 30 20 4f 52 44 45 52 20 42 59 20 78 20  x<10 ORDER BY x 
41b0: 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  DESC;.  }.} {}.d
41c0: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 39 2e 33  o_test where-9.3
41d0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
41e0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
41f0: 20 74 35 20 57 48 45 52 45 20 78 3d 31 30 3b 0a   t5 WHERE x=10;.
4200: 20 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73    }.} {}..do_tes
4210: 74 20 77 68 65 72 65 2d 31 30 2e 31 20 7b 0a 20  t where-10.1 {. 
4220: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
4230: 45 4c 45 43 54 20 31 20 57 48 45 52 45 20 61 62  ELECT 1 WHERE ab
4240: 73 28 72 61 6e 64 6f 6d 28 29 29 3c 30 0a 20 20  s(random())<0.  
4250: 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77  }.} {}.do_test w
4260: 68 65 72 65 2d 31 30 2e 32 20 7b 0a 20 20 70 72  here-10.2 {.  pr
4270: 6f 63 20 74 63 6c 76 61 72 5f 66 75 6e 63 20 7b  oc tclvar_func {
4280: 76 6e 61 6d 65 7d 20 7b 72 65 74 75 72 6e 20 5b  vname} {return [
4290: 73 65 74 20 3a 3a 24 76 6e 61 6d 65 5d 7d 0a 20  set ::$vname]}. 
42a0: 20 64 62 20 66 75 6e 63 74 69 6f 6e 20 74 63 6c   db function tcl
42b0: 76 61 72 20 74 63 6c 76 61 72 5f 66 75 6e 63 0a  var tclvar_func.
42c0: 20 20 73 65 74 20 3a 3a 76 31 20 30 0a 20 20 65    set ::v1 0.  e
42d0: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
42e0: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
42f0: 4d 20 74 31 20 57 48 45 52 45 20 74 63 6c 76 61  M t1 WHERE tclva
4300: 72 28 27 76 31 27 29 3b 0a 20 20 7d 0a 7d 20 7b  r('v1');.  }.} {
4310: 30 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  0}.do_test where
4320: 2d 31 30 2e 33 20 7b 0a 20 20 73 65 74 20 3a 3a  -10.3 {.  set ::
4330: 76 31 20 31 0a 20 20 65 78 65 63 73 71 6c 20 7b  v1 1.  execsql {
4340: 0a 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e  .    SELECT coun
4350: 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 57 48 45  t(*) FROM t1 WHE
4360: 52 45 20 74 63 6c 76 61 72 28 27 76 31 27 29 3b  RE tclvar('v1');
4370: 0a 20 20 7d 0a 7d 20 7b 31 30 30 7d 0a 64 6f 5f  .  }.} {100}.do_
4380: 74 65 73 74 20 77 68 65 72 65 2d 31 30 2e 34 20  test where-10.4 
4390: 7b 0a 20 20 73 65 74 20 3a 3a 76 31 20 31 0a 20  {.  set ::v1 1. 
43a0: 20 70 72 6f 63 20 74 63 6c 76 61 72 5f 66 75 6e   proc tclvar_fun
43b0: 63 20 7b 76 6e 61 6d 65 7d 20 7b 0a 20 20 20 20  c {vname} {.    
43c0: 75 70 76 61 72 20 23 30 20 24 76 6e 61 6d 65 20  upvar #0 $vname 
43d0: 76 0a 20 20 20 20 73 65 74 20 76 20 5b 65 78 70  v.    set v [exp
43e0: 72 20 7b 21 24 76 7d 5d 0a 20 20 20 20 72 65 74  r {!$v}].    ret
43f0: 75 72 6e 20 24 76 0a 20 20 7d 0a 20 20 65 78 65  urn $v.  }.  exe
4400: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
4410: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
4420: 74 31 20 57 48 45 52 45 20 74 63 6c 76 61 72 28  t1 WHERE tclvar(
4430: 27 76 31 27 29 3b 0a 20 20 7d 0a 7d 20 7b 35 30  'v1');.  }.} {50
4440: 7d 0a 0a 69 6e 74 65 67 72 69 74 79 5f 63 68 65  }..integrity_che
4450: 63 6b 20 7b 77 68 65 72 65 2d 39 39 2e 30 7d 0a  ck {where-99.0}.
4460: 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a           .finish_test.