/ Hex Artifact Content
Login

Artifact d719129a052280fe245a2ddcbd09bcc0b8c17ce4:


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 36 20 32 30 30 33 2f 30  st,v 1.16 2003/0
0210: 34 2f 31 39 20 31 37 3a 32 37 3a 32 35 20 64 72  4/19 17:27:25 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 64 6f 5f 74 65 73 74 20 77 68 65 72  17}.do_test wher
1010: 65 2d 31 2e 32 38 20 7b 0a 20 20 63 6f 75 6e 74  e-1.28 {.  count
1020: 20 7b 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20   {SELECT w FROM 
1030: 74 31 20 57 48 45 52 45 20 78 2b 31 3d 34 20 41  t1 WHERE x+1=4 A
1040: 4e 44 20 79 2b 31 3d 3d 31 32 32 7d 0a 7d 20 7b  ND y+1==122}.} {
1050: 31 30 20 39 39 7d 0a 64 6f 5f 74 65 73 74 20 77  10 99}.do_test w
1060: 68 65 72 65 2d 31 2e 32 39 20 7b 0a 20 20 63 6f  here-1.29 {.  co
1070: 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52  unt {SELECT w FR
1080: 4f 4d 20 74 31 20 57 48 45 52 45 20 79 3d 3d 31  OM t1 WHERE y==1
1090: 32 31 7d 0a 7d 20 7b 31 30 20 39 39 7d 0a 0a 0a  21}.} {10 99}...
10a0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e  do_test where-1.
10b0: 33 30 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45  30 {.  count {SE
10c0: 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57  LECT w FROM t1 W
10d0: 48 45 52 45 20 77 3e 39 37 7d 0a 7d 20 7b 39 38  HERE w>97}.} {98
10e0: 20 39 39 20 31 30 30 20 36 7d 0a 64 6f 5f 74 65   99 100 6}.do_te
10f0: 73 74 20 77 68 65 72 65 2d 31 2e 33 31 20 7b 0a  st where-1.31 {.
1100: 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20    count {SELECT 
1110: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
1120: 77 3e 3d 39 37 7d 0a 7d 20 7b 39 37 20 39 38 20  w>=97}.} {97 98 
1130: 39 39 20 31 30 30 20 38 7d 0a 64 6f 5f 74 65 73  99 100 8}.do_tes
1140: 74 20 77 68 65 72 65 2d 31 2e 33 33 20 7b 0a 20  t where-1.33 {. 
1150: 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 77   count {SELECT w
1160: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77   FROM t1 WHERE w
1170: 3d 3d 39 37 7d 0a 7d 20 7b 39 37 20 33 7d 0a 64  ==97}.} {97 3}.d
1180: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 33  o_test where-1.3
1190: 34 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c  4 {.  count {SEL
11a0: 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48  ECT w FROM t1 WH
11b0: 45 52 45 20 77 2b 31 3d 3d 39 38 7d 0a 7d 20 7b  ERE w+1==98}.} {
11c0: 39 37 20 39 39 7d 0a 64 6f 5f 74 65 73 74 20 77  97 99}.do_test w
11d0: 68 65 72 65 2d 31 2e 33 35 20 7b 0a 20 20 63 6f  here-1.35 {.  co
11e0: 75 6e 74 20 7b 53 45 4c 45 43 54 20 77 20 46 52  unt {SELECT w FR
11f0: 4f 4d 20 74 31 20 57 48 45 52 45 20 77 3c 33 7d  OM t1 WHERE w<3}
1200: 0a 7d 20 7b 31 20 32 20 34 7d 0a 64 6f 5f 74 65  .} {1 2 4}.do_te
1210: 73 74 20 77 68 65 72 65 2d 31 2e 33 36 20 7b 0a  st where-1.36 {.
1220: 20 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20    count {SELECT 
1230: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
1240: 77 3c 3d 33 7d 0a 7d 20 7b 31 20 32 20 33 20 36  w<=3}.} {1 2 3 6
1250: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
1260: 31 2e 33 37 20 7b 0a 20 20 63 6f 75 6e 74 20 7b  1.37 {.  count {
1270: 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31  SELECT w FROM t1
1280: 20 57 48 45 52 45 20 77 2b 31 3c 3d 34 20 4f 52   WHERE w+1<=4 OR
1290: 44 45 52 20 42 59 20 77 7d 0a 7d 20 7b 31 20 32  DER BY w}.} {1 2
12a0: 20 33 20 31 39 39 7d 0a 0a 64 6f 5f 74 65 73 74   3 199}..do_test
12b0: 20 77 68 65 72 65 2d 31 2e 33 38 20 7b 0a 20 20   where-1.38 {.  
12c0: 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 28 77  count {SELECT (w
12d0: 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  ) FROM t1 WHERE 
12e0: 28 77 29 3e 28 39 37 29 7d 0a 7d 20 7b 39 38 20  (w)>(97)}.} {98 
12f0: 39 39 20 31 30 30 20 36 7d 0a 64 6f 5f 74 65 73  99 100 6}.do_tes
1300: 74 20 77 68 65 72 65 2d 31 2e 33 39 20 7b 0a 20  t where-1.39 {. 
1310: 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 28   count {SELECT (
1320: 77 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  w) FROM t1 WHERE
1330: 20 28 77 29 3e 3d 28 39 37 29 7d 0a 7d 20 7b 39   (w)>=(97)}.} {9
1340: 37 20 39 38 20 39 39 20 31 30 30 20 38 7d 0a 64  7 98 99 100 8}.d
1350: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 2e 34  o_test where-1.4
1360: 30 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 53 45 4c  0 {.  count {SEL
1370: 45 43 54 20 28 77 29 20 46 52 4f 4d 20 74 31 20  ECT (w) FROM t1 
1380: 57 48 45 52 45 20 28 77 29 3d 3d 28 39 37 29 7d  WHERE (w)==(97)}
1390: 0a 7d 20 7b 39 37 20 33 7d 0a 64 6f 5f 74 65 73  .} {97 3}.do_tes
13a0: 74 20 77 68 65 72 65 2d 31 2e 34 31 20 7b 0a 20  t where-1.41 {. 
13b0: 20 63 6f 75 6e 74 20 7b 53 45 4c 45 43 54 20 28   count {SELECT (
13c0: 77 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  w) FROM t1 WHERE
13d0: 20 28 28 77 29 2b 28 31 29 29 3d 3d 28 39 38 29   ((w)+(1))==(98)
13e0: 7d 0a 7d 20 7b 39 37 20 39 39 7d 0a 0a 0a 23 20  }.} {97 99}...# 
13f0: 44 6f 20 74 68 65 20 73 61 6d 65 20 6b 69 6e 64  Do the same kind
1400: 20 6f 66 20 74 68 69 6e 67 20 65 78 63 65 70 74   of thing except
1410: 20 75 73 65 20 61 20 6a 6f 69 6e 20 61 73 20 74   use a join as t
1420: 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 2e 0a  he data source..
1430: 23 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  #.do_test where-
1440: 32 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a  2.1 {.  count {.
1450: 20 20 20 20 53 45 4c 45 43 54 20 77 2c 20 70 20      SELECT w, p 
1460: 46 52 4f 4d 20 74 32 2c 20 74 31 0a 20 20 20 20  FROM t2, t1.    
1470: 57 48 45 52 45 20 78 3d 71 20 41 4e 44 20 79 3d  WHERE x=q AND y=
1480: 73 20 41 4e 44 20 72 3d 38 39 37 37 0a 20 20 7d  s AND r=8977.  }
1490: 0a 7d 20 7b 33 34 20 36 37 20 36 7d 0a 64 6f 5f  .} {34 67 6}.do_
14a0: 74 65 73 74 20 77 68 65 72 65 2d 32 2e 32 20 7b  test where-2.2 {
14b0: 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53  .  count {.    S
14c0: 45 4c 45 43 54 20 77 2c 20 70 20 46 52 4f 4d 20  ELECT w, p FROM 
14d0: 74 32 2c 20 74 31 0a 20 20 20 20 57 48 45 52 45  t2, t1.    WHERE
14e0: 20 78 3d 71 20 41 4e 44 20 73 3d 79 20 41 4e 44   x=q AND s=y AND
14f0: 20 72 3d 38 39 37 37 0a 20 20 7d 0a 7d 20 7b 33   r=8977.  }.} {3
1500: 34 20 36 37 20 36 7d 0a 64 6f 5f 74 65 73 74 20  4 67 6}.do_test 
1510: 77 68 65 72 65 2d 32 2e 33 20 7b 0a 20 20 63 6f  where-2.3 {.  co
1520: 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  unt {.    SELECT
1530: 20 77 2c 20 70 20 46 52 4f 4d 20 74 32 2c 20 74   w, p FROM t2, t
1540: 31 0a 20 20 20 20 57 48 45 52 45 20 78 3d 71 20  1.    WHERE x=q 
1550: 41 4e 44 20 73 3d 79 20 41 4e 44 20 72 3d 38 39  AND s=y AND r=89
1560: 37 37 20 41 4e 44 20 77 3e 31 30 0a 20 20 7d 0a  77 AND w>10.  }.
1570: 7d 20 7b 33 34 20 36 37 20 36 7d 0a 64 6f 5f 74  } {34 67 6}.do_t
1580: 65 73 74 20 77 68 65 72 65 2d 32 2e 34 20 7b 0a  est where-2.4 {.
1590: 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45    count {.    SE
15a0: 4c 45 43 54 20 77 2c 20 70 20 46 52 4f 4d 20 74  LECT w, p FROM t
15b0: 32 2c 20 74 31 0a 20 20 20 20 57 48 45 52 45 20  2, t1.    WHERE 
15c0: 70 3c 38 30 20 41 4e 44 20 78 3d 71 20 41 4e 44  p<80 AND x=q AND
15d0: 20 73 3d 79 20 41 4e 44 20 72 3d 38 39 37 37 20   s=y AND r=8977 
15e0: 41 4e 44 20 77 3e 31 30 0a 20 20 7d 0a 7d 20 7b  AND w>10.  }.} {
15f0: 33 34 20 36 37 20 36 7d 0a 64 6f 5f 74 65 73 74  34 67 6}.do_test
1600: 20 77 68 65 72 65 2d 32 2e 35 20 7b 0a 20 20 63   where-2.5 {.  c
1610: 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  ount {.    SELEC
1620: 54 20 77 2c 20 70 20 46 52 4f 4d 20 74 32 2c 20  T w, p FROM t2, 
1630: 74 31 0a 20 20 20 20 57 48 45 52 45 20 70 3c 38  t1.    WHERE p<8
1640: 30 20 41 4e 44 20 78 3d 71 20 41 4e 44 20 38 39  0 AND x=q AND 89
1650: 37 37 3d 72 20 41 4e 44 20 73 3d 79 20 41 4e 44  77=r AND s=y AND
1660: 20 77 3e 31 30 0a 20 20 7d 0a 7d 20 7b 33 34 20   w>10.  }.} {34 
1670: 36 37 20 36 7d 0a 64 6f 5f 74 65 73 74 20 77 68  67 6}.do_test wh
1680: 65 72 65 2d 32 2e 36 20 7b 0a 20 20 63 6f 75 6e  ere-2.6 {.  coun
1690: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77  t {.    SELECT w
16a0: 2c 20 70 20 46 52 4f 4d 20 74 32 2c 20 74 31 0a  , p FROM t2, t1.
16b0: 20 20 20 20 57 48 45 52 45 20 78 3d 71 20 41 4e      WHERE x=q AN
16c0: 44 20 70 3d 37 37 20 41 4e 44 20 73 3d 79 20 41  D p=77 AND s=y A
16d0: 4e 44 20 77 3e 35 0a 20 20 7d 0a 7d 20 7b 32 34  ND w>5.  }.} {24
16e0: 20 37 37 20 36 7d 0a 64 6f 5f 74 65 73 74 20 77   77 6}.do_test w
16f0: 68 65 72 65 2d 32 2e 37 20 7b 0a 20 20 63 6f 75  here-2.7 {.  cou
1700: 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  nt {.    SELECT 
1710: 77 2c 20 70 20 46 52 4f 4d 20 74 31 2c 20 74 32  w, p FROM t1, t2
1720: 0a 20 20 20 20 57 48 45 52 45 20 78 3d 71 20 41  .    WHERE x=q A
1730: 4e 44 20 70 3e 37 37 20 41 4e 44 20 73 3d 79 20  ND p>77 AND s=y 
1740: 41 4e 44 20 77 3d 35 0a 20 20 7d 0a 7d 20 7b 35  AND w=5.  }.} {5
1750: 20 39 36 20 36 7d 0a 0a 23 20 4c 65 74 73 20 64   96 6}..# Lets d
1760: 6f 20 61 20 33 2d 77 61 79 20 6a 6f 69 6e 2e 0a  o a 3-way join..
1770: 23 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  #.do_test where-
1780: 33 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a  3.1 {.  count {.
1790: 20 20 20 20 53 45 4c 45 43 54 20 41 2e 77 2c 20      SELECT A.w, 
17a0: 42 2e 70 2c 20 43 2e 77 20 46 52 4f 4d 20 74 31  B.p, C.w FROM t1
17b0: 20 61 73 20 41 2c 20 74 32 20 61 73 20 42 2c 20   as A, t2 as B, 
17c0: 74 31 20 61 73 20 43 0a 20 20 20 20 57 48 45 52  t1 as C.    WHER
17d0: 45 20 43 2e 77 3d 31 30 31 2d 42 2e 70 20 41 4e  E C.w=101-B.p AN
17e0: 44 20 42 2e 72 3d 31 30 32 30 32 2d 41 2e 79 20  D B.r=10202-A.y 
17f0: 41 4e 44 20 41 2e 77 3d 31 31 0a 20 20 7d 0a 7d  AND A.w=11.  }.}
1800: 20 7b 31 31 20 39 30 20 31 31 20 39 7d 0a 64 6f   {11 90 11 9}.do
1810: 5f 74 65 73 74 20 77 68 65 72 65 2d 33 2e 32 20  _test where-3.2 
1820: 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20  {.  count {.    
1830: 53 45 4c 45 43 54 20 41 2e 77 2c 20 42 2e 70 2c  SELECT A.w, B.p,
1840: 20 43 2e 77 20 46 52 4f 4d 20 74 31 20 61 73 20   C.w FROM t1 as 
1850: 41 2c 20 74 32 20 61 73 20 42 2c 20 74 31 20 61  A, t2 as B, t1 a
1860: 73 20 43 0a 20 20 20 20 57 48 45 52 45 20 43 2e  s C.    WHERE C.
1870: 77 3d 31 30 31 2d 42 2e 70 20 41 4e 44 20 42 2e  w=101-B.p AND B.
1880: 72 3d 31 30 32 30 32 2d 41 2e 79 20 41 4e 44 20  r=10202-A.y AND 
1890: 41 2e 77 3d 31 32 0a 20 20 7d 0a 7d 20 7b 31 32  A.w=12.  }.} {12
18a0: 20 38 39 20 31 32 20 39 7d 0a 64 6f 5f 74 65 73   89 12 9}.do_tes
18b0: 74 20 77 68 65 72 65 2d 33 2e 33 20 7b 0a 20 20  t where-3.3 {.  
18c0: 63 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45  count {.    SELE
18d0: 43 54 20 41 2e 77 2c 20 42 2e 70 2c 20 43 2e 77  CT A.w, B.p, C.w
18e0: 20 46 52 4f 4d 20 74 31 20 61 73 20 41 2c 20 74   FROM t1 as A, t
18f0: 32 20 61 73 20 42 2c 20 74 31 20 61 73 20 43 0a  2 as B, t1 as C.
1900: 20 20 20 20 57 48 45 52 45 20 41 2e 77 3d 31 35      WHERE A.w=15
1910: 20 41 4e 44 20 42 2e 70 3d 43 2e 77 20 41 4e 44   AND B.p=C.w AND
1920: 20 42 2e 72 3d 31 30 32 30 32 2d 41 2e 79 0a 20   B.r=10202-A.y. 
1930: 20 7d 0a 7d 20 7b 31 35 20 38 36 20 38 36 20 39   }.} {15 86 86 9
1940: 7d 0a 0a 23 20 54 65 73 74 20 74 6f 20 73 65 65  }..# Test to see
1950: 20 74 68 61 74 20 74 68 65 20 73 70 65 63 69 61   that the specia
1960: 6c 20 63 61 73 65 20 6f 66 20 61 20 63 6f 6e 73  l case of a cons
1970: 74 61 6e 74 20 57 48 45 52 45 20 63 6c 61 75 73  tant WHERE claus
1980: 65 20 69 73 0a 23 20 68 61 6e 64 6c 65 64 2e 0a  e is.# handled..
1990: 23 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  #.do_test where-
19a0: 34 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a  4.1 {.  count {.
19b0: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
19c0: 4d 20 74 31 20 57 48 45 52 45 20 30 0a 20 20 7d  M t1 WHERE 0.  }
19d0: 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74 20 77  .} {0}.do_test w
19e0: 68 65 72 65 2d 34 2e 32 20 7b 0a 20 20 63 6f 75  here-4.2 {.  cou
19f0: 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  nt {.    SELECT 
1a00: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
1a10: 31 20 4c 49 4d 49 54 20 31 0a 20 20 7d 0a 7d 20  1 LIMIT 1.  }.} 
1a20: 7b 31 20 30 20 34 20 31 7d 0a 64 6f 5f 74 65 73  {1 0 4 1}.do_tes
1a30: 74 20 77 68 65 72 65 2d 34 2e 33 20 7b 0a 20 20  t where-4.3 {.  
1a40: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45  execsql {.    SE
1a50: 4c 45 43 54 20 39 39 20 57 48 45 52 45 20 30 0a  LECT 99 WHERE 0.
1a60: 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74    }.} {}.do_test
1a70: 20 77 68 65 72 65 2d 34 2e 34 20 7b 0a 20 20 65   where-4.4 {.  e
1a80: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c  xecsql {.    SEL
1a90: 45 43 54 20 39 39 20 57 48 45 52 45 20 31 0a 20  ECT 99 WHERE 1. 
1aa0: 20 7d 0a 7d 20 7b 39 39 7d 0a 0a 23 20 56 65 72   }.} {99}..# Ver
1ab0: 69 66 79 20 74 68 61 74 20 49 4e 20 6f 70 65 72  ify that IN oper
1ac0: 61 74 6f 72 73 20 69 6e 20 61 20 57 48 45 52 45  ators in a WHERE
1ad0: 20 63 6c 61 75 73 65 20 61 72 65 20 68 61 6e 64   clause are hand
1ae0: 6c 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a 23  led correctly..#
1af0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 35  .do_test where-5
1b00: 2e 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20  .1 {.  count {. 
1b10: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
1b20: 20 74 31 20 57 48 45 52 45 20 72 6f 77 69 64 20   t1 WHERE rowid 
1b30: 49 4e 20 28 31 2c 32 2c 33 2c 31 32 33 34 29 20  IN (1,2,3,1234) 
1b40: 6f 72 64 65 72 20 62 79 20 31 3b 0a 20 20 7d 0a  order by 1;.  }.
1b50: 7d 20 7b 31 20 30 20 34 20 32 20 31 20 39 20 33  } {1 0 4 2 1 9 3
1b60: 20 31 20 31 36 20 30 7d 0a 64 6f 5f 74 65 73 74   1 16 0}.do_test
1b70: 20 77 68 65 72 65 2d 35 2e 32 20 7b 0a 20 20 63   where-5.2 {.  c
1b80: 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  ount {.    SELEC
1b90: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
1ba0: 45 20 72 6f 77 69 64 2b 30 20 49 4e 20 28 31 2c  E rowid+0 IN (1,
1bb0: 32 2c 33 2c 31 32 33 34 29 20 6f 72 64 65 72 20  2,3,1234) order 
1bc0: 62 79 20 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 30  by 1;.  }.} {1 0
1bd0: 20 34 20 32 20 31 20 39 20 33 20 31 20 31 36 20   4 2 1 9 3 1 16 
1be0: 31 39 39 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  199}.do_test whe
1bf0: 72 65 2d 35 2e 33 20 7b 0a 20 20 63 6f 75 6e 74  re-5.3 {.  count
1c00: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
1c10: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77 20  FROM t1 WHERE w 
1c20: 49 4e 20 28 2d 31 2c 31 2c 32 2c 33 29 20 6f 72  IN (-1,1,2,3) or
1c30: 64 65 72 20 62 79 20 31 3b 0a 20 20 7d 0a 7d 20  der by 1;.  }.} 
1c40: 7b 31 20 30 20 34 20 32 20 31 20 39 20 33 20 31  {1 0 4 2 1 9 3 1
1c50: 20 31 36 20 31 30 7d 0a 64 6f 5f 74 65 73 74 20   16 10}.do_test 
1c60: 77 68 65 72 65 2d 35 2e 34 20 7b 0a 20 20 63 6f  where-5.4 {.  co
1c70: 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  unt {.    SELECT
1c80: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
1c90: 20 77 2b 30 20 49 4e 20 28 2d 31 2c 31 2c 32 2c   w+0 IN (-1,1,2,
1ca0: 33 29 20 6f 72 64 65 72 20 62 79 20 31 3b 0a 20  3) order by 1;. 
1cb0: 20 7d 0a 7d 20 7b 31 20 30 20 34 20 32 20 31 20   }.} {1 0 4 2 1 
1cc0: 39 20 33 20 31 20 31 36 20 31 39 39 7d 0a 64 6f  9 3 1 16 199}.do
1cd0: 5f 74 65 73 74 20 77 68 65 72 65 2d 35 2e 35 20  _test where-5.5 
1ce0: 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20  {.  count {.    
1cf0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
1d00: 20 57 48 45 52 45 20 72 6f 77 69 64 20 49 4e 20   WHERE rowid IN 
1d10: 0a 20 20 20 20 20 20 20 28 73 65 6c 65 63 74 20  .       (select 
1d20: 72 6f 77 69 64 20 66 72 6f 6d 20 74 31 20 77 68  rowid from t1 wh
1d30: 65 72 65 20 72 6f 77 69 64 20 49 4e 20 28 2d 31  ere rowid IN (-1
1d40: 2c 32 2c 34 29 29 0a 20 20 20 20 4f 52 44 45 52  ,2,4)).    ORDER
1d50: 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 32 20   BY 1;.  }.} {2 
1d60: 31 20 39 20 34 20 32 20 32 35 20 31 7d 0a 64 6f  1 9 4 2 25 1}.do
1d70: 5f 74 65 73 74 20 77 68 65 72 65 2d 35 2e 36 20  _test where-5.6 
1d80: 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20  {.  count {.    
1d90: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
1da0: 20 57 48 45 52 45 20 72 6f 77 69 64 2b 30 20 49   WHERE rowid+0 I
1db0: 4e 20 0a 20 20 20 20 20 20 20 28 73 65 6c 65 63  N .       (selec
1dc0: 74 20 72 6f 77 69 64 20 66 72 6f 6d 20 74 31 20  t rowid from t1 
1dd0: 77 68 65 72 65 20 72 6f 77 69 64 20 49 4e 20 28  where rowid IN (
1de0: 2d 31 2c 32 2c 34 29 29 0a 20 20 20 20 4f 52 44  -1,2,4)).    ORD
1df0: 45 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b  ER BY 1;.  }.} {
1e00: 32 20 31 20 39 20 34 20 32 20 32 35 20 31 39 39  2 1 9 4 2 25 199
1e10: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
1e20: 35 2e 37 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a  5.7 {.  count {.
1e30: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
1e40: 4d 20 74 31 20 57 48 45 52 45 20 77 20 49 4e 20  M t1 WHERE w IN 
1e50: 0a 20 20 20 20 20 20 20 28 73 65 6c 65 63 74 20  .       (select 
1e60: 72 6f 77 69 64 20 66 72 6f 6d 20 74 31 20 77 68  rowid from t1 wh
1e70: 65 72 65 20 72 6f 77 69 64 20 49 4e 20 28 2d 31  ere rowid IN (-1
1e80: 2c 32 2c 34 29 29 0a 20 20 20 20 4f 52 44 45 52  ,2,4)).    ORDER
1e90: 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 32 20   BY 1;.  }.} {2 
1ea0: 31 20 39 20 34 20 32 20 32 35 20 37 7d 0a 64 6f  1 9 4 2 25 7}.do
1eb0: 5f 74 65 73 74 20 77 68 65 72 65 2d 35 2e 38 20  _test where-5.8 
1ec0: 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20  {.  count {.    
1ed0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
1ee0: 20 57 48 45 52 45 20 77 2b 30 20 49 4e 20 0a 20   WHERE w+0 IN . 
1ef0: 20 20 20 20 20 20 28 73 65 6c 65 63 74 20 72 6f        (select ro
1f00: 77 69 64 20 66 72 6f 6d 20 74 31 20 77 68 65 72  wid from t1 wher
1f10: 65 20 72 6f 77 69 64 20 49 4e 20 28 2d 31 2c 32  e rowid IN (-1,2
1f20: 2c 34 29 29 0a 20 20 20 20 4f 52 44 45 52 20 42  ,4)).    ORDER B
1f30: 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 32 20 31 20  Y 1;.  }.} {2 1 
1f40: 39 20 34 20 32 20 32 35 20 31 39 39 7d 0a 64 6f  9 4 2 25 199}.do
1f50: 5f 74 65 73 74 20 77 68 65 72 65 2d 35 2e 39 20  _test where-5.9 
1f60: 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a 20 20 20 20  {.  count {.    
1f70: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
1f80: 20 57 48 45 52 45 20 78 20 49 4e 20 28 31 2c 37   WHERE x IN (1,7
1f90: 29 20 4f 52 44 45 52 20 42 59 20 31 3b 0a 20 20  ) ORDER BY 1;.  
1fa0: 7d 0a 7d 20 7b 32 20 31 20 39 20 33 20 31 20 31  }.} {2 1 9 3 1 1
1fb0: 36 20 36 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  6 6}.do_test whe
1fc0: 72 65 2d 35 2e 31 30 20 7b 0a 20 20 63 6f 75 6e  re-5.10 {.  coun
1fd0: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t {.    SELECT *
1fe0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
1ff0: 2b 30 20 49 4e 20 28 31 2c 37 29 20 4f 52 44 45  +0 IN (1,7) ORDE
2000: 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 32  R BY 1;.  }.} {2
2010: 20 31 20 39 20 33 20 31 20 31 36 20 31 39 39 7d   1 9 3 1 16 199}
2020: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 35  .do_test where-5
2030: 2e 31 31 20 7b 0a 20 20 63 6f 75 6e 74 20 7b 0a  .11 {.  count {.
2040: 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f      SELECT * FRO
2050: 4d 20 74 31 20 57 48 45 52 45 20 79 20 49 4e 20  M t1 WHERE y IN 
2060: 28 36 34 30 30 2c 38 31 30 30 29 20 4f 52 44 45  (6400,8100) ORDE
2070: 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 37  R BY 1;.  }.} {7
2080: 39 20 36 20 36 34 30 30 20 38 39 20 36 20 38 31  9 6 6400 89 6 81
2090: 30 30 20 31 39 39 7d 0a 64 6f 5f 74 65 73 74 20  00 199}.do_test 
20a0: 77 68 65 72 65 2d 35 2e 31 32 20 7b 0a 20 20 63  where-5.12 {.  c
20b0: 6f 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  ount {.    SELEC
20c0: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
20d0: 45 20 78 3d 36 20 41 4e 44 20 79 20 49 4e 20 28  E x=6 AND y IN (
20e0: 36 34 30 30 2c 38 31 30 30 29 20 4f 52 44 45 52  6400,8100) ORDER
20f0: 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 37 39   BY 1;.  }.} {79
2100: 20 36 20 36 34 30 30 20 38 39 20 36 20 38 31 30   6 6400 89 6 810
2110: 30 20 37 34 7d 0a 64 6f 5f 74 65 73 74 20 77 68  0 74}.do_test wh
2120: 65 72 65 2d 35 2e 31 33 20 7b 0a 20 20 63 6f 75  ere-5.13 {.  cou
2130: 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  nt {.    SELECT 
2140: 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  * FROM t1 WHERE 
2150: 78 20 49 4e 20 28 31 2c 37 29 20 41 4e 44 20 79  x IN (1,7) AND y
2160: 20 4e 4f 54 20 49 4e 20 28 36 34 30 30 2c 38 31   NOT IN (6400,81
2170: 30 30 29 20 4f 52 44 45 52 20 42 59 20 31 3b 0a  00) ORDER BY 1;.
2180: 20 20 7d 0a 7d 20 7b 32 20 31 20 39 20 33 20 31    }.} {2 1 9 3 1
2190: 20 31 36 20 36 7d 0a 64 6f 5f 74 65 73 74 20 77   16 6}.do_test w
21a0: 68 65 72 65 2d 35 2e 31 34 20 7b 0a 20 20 63 6f  here-5.14 {.  co
21b0: 75 6e 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  unt {.    SELECT
21c0: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
21d0: 20 78 20 49 4e 20 28 31 2c 37 29 20 41 4e 44 20   x IN (1,7) AND 
21e0: 79 20 49 4e 20 28 39 2c 31 30 29 20 4f 52 44 45  y IN (9,10) ORDE
21f0: 52 20 42 59 20 31 3b 0a 20 20 7d 0a 7d 20 7b 32  R BY 1;.  }.} {2
2200: 20 31 20 39 20 36 7d 0a 0a 23 20 54 68 69 73 20   1 9 6}..# This 
2210: 70 72 6f 63 65 64 75 72 65 20 65 78 65 63 75 74  procedure execut
2220: 65 73 20 74 68 65 20 53 51 4c 2e 20 20 54 68 65  es the SQL.  The
2230: 6e 20 69 74 20 63 68 65 63 6b 73 20 74 68 65 20  n it checks the 
2240: 67 65 6e 65 72 61 74 65 64 20 70 72 6f 67 72 61  generated progra
2250: 6d 0a 23 20 66 6f 72 20 74 68 65 20 53 51 4c 20  m.# for the SQL 
2260: 61 6e 64 20 61 70 70 65 6e 64 73 20 61 20 22 6e  and appends a "n
2270: 6f 73 6f 72 74 22 20 74 6f 20 74 68 65 20 72 65  osort" to the re
2280: 73 75 6c 74 20 69 66 20 74 68 65 20 70 72 6f 67  sult if the prog
2290: 72 61 6d 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  ram contains the
22a0: 0a 23 20 53 6f 72 74 43 61 6c 6c 62 61 63 6b 20  .# SortCallback 
22b0: 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 20  opcode.  If the 
22c0: 70 72 6f 67 72 61 6d 20 64 6f 65 73 20 6e 6f 74  program does not
22d0: 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 53 6f 72   contain the Sor
22e0: 74 43 61 6c 6c 62 61 63 6b 0a 23 20 6f 70 63 6f  tCallback.# opco
22f0: 64 65 20 69 74 20 61 70 70 65 6e 64 73 20 22 73  de it appends "s
2300: 6f 72 74 22 0a 23 0a 70 72 6f 63 20 63 6b 73 6f  ort".#.proc ckso
2310: 72 74 20 7b 73 71 6c 7d 20 7b 0a 20 20 73 65 74  rt {sql} {.  set
2320: 20 64 61 74 61 20 5b 65 78 65 63 73 71 6c 20 24   data [execsql $
2330: 73 71 6c 5d 0a 20 20 73 65 74 20 70 72 6f 67 20  sql].  set prog 
2340: 5b 65 78 65 63 73 71 6c 20 22 45 58 50 4c 41 49  [execsql "EXPLAI
2350: 4e 20 24 73 71 6c 22 5d 0a 20 20 69 66 20 7b 5b  N $sql"].  if {[
2360: 72 65 67 65 78 70 20 53 6f 72 74 43 61 6c 6c 62  regexp SortCallb
2370: 61 63 6b 20 24 70 72 6f 67 5d 7d 20 7b 73 65 74  ack $prog]} {set
2380: 20 78 20 73 6f 72 74 7d 20 7b 73 65 74 20 78 20   x sort} {set x 
2390: 6e 6f 73 6f 72 74 7d 0a 20 20 6c 61 70 70 65 6e  nosort}.  lappen
23a0: 64 20 64 61 74 61 20 24 78 0a 20 20 72 65 74 75  d data $x.  retu
23b0: 72 6e 20 24 64 61 74 61 0a 7d 0a 23 20 43 68 65  rn $data.}.# Che
23c0: 63 6b 20 6f 75 74 20 74 68 65 20 6c 6f 67 69 63  ck out the logic
23d0: 20 74 68 61 74 20 61 74 74 65 6d 70 74 73 20 74   that attempts t
23e0: 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  o implement the 
23f0: 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 0a  ORDER BY clause.
2400: 23 20 75 73 69 6e 67 20 61 6e 20 69 6e 64 65 78  # using an index
2410: 20 72 61 74 68 65 72 20 74 68 61 6e 20 62 79 20   rather than by 
2420: 73 6f 72 74 69 6e 67 2e 0a 23 0a 64 6f 5f 74 65  sorting..#.do_te
2430: 73 74 20 77 68 65 72 65 2d 36 2e 31 20 7b 0a 20  st where-6.1 {. 
2440: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
2450: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61  REATE TABLE t3(a
2460: 2c 62 2c 63 29 3b 0a 20 20 20 20 43 52 45 41 54  ,b,c);.    CREAT
2470: 45 20 49 4e 44 45 58 20 74 33 61 20 4f 4e 20 74  E INDEX t3a ON t
2480: 33 28 61 29 3b 0a 20 20 20 20 43 52 45 41 54 45  3(a);.    CREATE
2490: 20 49 4e 44 45 58 20 74 33 62 63 20 4f 4e 20 74   INDEX t3bc ON t
24a0: 33 28 62 2c 63 29 3b 0a 20 20 20 20 43 52 45 41  3(b,c);.    CREA
24b0: 54 45 20 49 4e 44 45 58 20 74 33 61 63 62 20 4f  TE INDEX t3acb O
24c0: 4e 20 74 33 28 61 2c 63 2c 62 29 3b 0a 20 20 20  N t3(a,c,b);.   
24d0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20   INSERT INTO t3 
24e0: 53 45 4c 45 43 54 20 77 2c 20 31 30 31 2d 77 2c  SELECT w, 101-w,
24f0: 20 79 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20   y FROM t1;.    
2500: 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 2c  SELECT count(*),
2510: 20 73 75 6d 28 61 29 2c 20 73 75 6d 28 62 29 2c   sum(a), sum(b),
2520: 20 73 75 6d 28 63 29 20 46 52 4f 4d 20 74 33 3b   sum(c) FROM t3;
2530: 0a 20 20 7d 0a 7d 20 7b 31 30 30 20 35 30 35 30  .  }.} {100 5050
2540: 20 35 30 35 30 20 33 34 38 35 35 30 7d 0a 64 6f   5050 348550}.do
2550: 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e 32 20  _test where-6.2 
2560: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
2570: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2580: 33 20 4f 52 44 45 52 20 42 59 20 61 20 4c 49 4d  3 ORDER BY a LIM
2590: 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30  IT 3.  }.} {1 10
25a0: 30 20 34 20 32 20 39 39 20 39 20 33 20 39 38 20  0 4 2 99 9 3 98 
25b0: 31 36 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  16 nosort}.do_te
25c0: 73 74 20 77 68 65 72 65 2d 36 2e 33 20 7b 0a 20  st where-6.3 {. 
25d0: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
25e0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 4f  LECT * FROM t3 O
25f0: 52 44 45 52 20 42 59 20 61 2b 31 20 4c 49 4d 49  RDER BY a+1 LIMI
2600: 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30  T 3.  }.} {1 100
2610: 20 34 20 32 20 39 39 20 39 20 33 20 39 38 20 31   4 2 99 9 3 98 1
2620: 36 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  6 sort}.do_test 
2630: 77 68 65 72 65 2d 36 2e 34 20 7b 0a 20 20 63 6b  where-6.4 {.  ck
2640: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
2650: 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52  T * FROM t3 WHER
2660: 45 20 61 3c 31 30 20 4f 52 44 45 52 20 42 59 20  E a<10 ORDER BY 
2670: 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20  a LIMIT 3.  }.} 
2680: 7b 31 20 31 30 30 20 34 20 32 20 39 39 20 39 20  {1 100 4 2 99 9 
2690: 33 20 39 38 20 31 36 20 6e 6f 73 6f 72 74 7d 0a  3 98 16 nosort}.
26a0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e  do_test where-6.
26b0: 35 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  5 {.  cksort {. 
26c0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
26d0: 20 74 33 20 57 48 45 52 45 20 61 3e 30 20 41 4e   t3 WHERE a>0 AN
26e0: 44 20 61 3c 31 30 20 4f 52 44 45 52 20 42 59 20  D a<10 ORDER BY 
26f0: 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20  a LIMIT 3.  }.} 
2700: 7b 31 20 31 30 30 20 34 20 32 20 39 39 20 39 20  {1 100 4 2 99 9 
2710: 33 20 39 38 20 31 36 20 6e 6f 73 6f 72 74 7d 0a  3 98 16 nosort}.
2720: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e  do_test where-6.
2730: 36 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  6 {.  cksort {. 
2740: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
2750: 20 74 33 20 57 48 45 52 45 20 61 3e 30 20 4f 52   t3 WHERE a>0 OR
2760: 44 45 52 20 42 59 20 61 20 4c 49 4d 49 54 20 33  DER BY a LIMIT 3
2770: 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20  .  }.} {1 100 4 
2780: 32 20 39 39 20 39 20 33 20 39 38 20 31 36 20 6e  2 99 9 3 98 16 n
2790: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
27a0: 68 65 72 65 2d 36 2e 37 20 7b 0a 20 20 63 6b 73  here-6.7 {.  cks
27b0: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
27c0: 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45   * FROM t3 WHERE
27d0: 20 62 3e 30 20 4f 52 44 45 52 20 42 59 20 61 20   b>0 ORDER BY a 
27e0: 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31  LIMIT 3.  }.} {1
27f0: 20 31 30 30 20 34 20 32 20 39 39 20 39 20 33 20   100 4 2 99 9 3 
2800: 39 38 20 31 36 20 73 6f 72 74 7d 0a 64 6f 5f 74  98 16 sort}.do_t
2810: 65 73 74 20 77 68 65 72 65 2d 36 2e 38 20 7b 0a  est where-6.8 {.
2820: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
2830: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
2840: 57 48 45 52 45 20 61 20 49 4e 20 28 33 2c 35 2c  WHERE a IN (3,5,
2850: 37 2c 31 2c 39 2c 34 2c 32 29 20 4f 52 44 45 52  7,1,9,4,2) ORDER
2860: 20 42 59 20 61 20 4c 49 4d 49 54 20 33 0a 20 20   BY a LIMIT 3.  
2870: 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20 32 20 39  }.} {1 100 4 2 9
2880: 39 20 39 20 33 20 39 38 20 31 36 20 73 6f 72 74  9 9 3 98 16 sort
2890: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
28a0: 36 2e 39 2e 31 20 7b 0a 20 20 63 6b 73 6f 72 74  6.9.1 {.  cksort
28b0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
28c0: 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d  FROM t3 WHERE a=
28d0: 31 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20  1 AND c>0 ORDER 
28e0: 42 59 20 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d  BY a LIMIT 3.  }
28f0: 0a 7d 20 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f  .} {1 100 4 noso
2900: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
2910: 65 2d 36 2e 39 2e 32 20 7b 0a 20 20 63 6b 73 6f  e-6.9.2 {.  ckso
2920: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
2930: 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20  * FROM t3 WHERE 
2940: 61 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52 44 45  a=1 AND c>0 ORDE
2950: 52 20 42 59 20 61 2c 63 20 4c 49 4d 49 54 20 33  R BY a,c LIMIT 3
2960: 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20  .  }.} {1 100 4 
2970: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
2980: 77 68 65 72 65 2d 36 2e 39 2e 33 20 7b 0a 20 20  where-6.9.3 {.  
2990: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
29a0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48  ECT * FROM t3 WH
29b0: 45 52 45 20 61 3d 31 20 41 4e 44 20 63 3e 30 20  ERE a=1 AND c>0 
29c0: 4f 52 44 45 52 20 42 59 20 63 20 4c 49 4d 49 54  ORDER BY c LIMIT
29d0: 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20   3.  }.} {1 100 
29e0: 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  4 nosort}.do_tes
29f0: 74 20 77 68 65 72 65 2d 36 2e 39 2e 34 20 7b 0a  t where-6.9.4 {.
2a00: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
2a10: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20  ELECT * FROM t3 
2a20: 57 48 45 52 45 20 61 3d 31 20 41 4e 44 20 63 3e  WHERE a=1 AND c>
2a30: 30 20 4f 52 44 45 52 20 42 59 20 61 20 44 45 53  0 ORDER BY a DES
2a40: 43 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20  C LIMIT 3.  }.} 
2a50: 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f 72 74 7d  {1 100 4 nosort}
2a60: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36  .do_test where-6
2a70: 2e 39 2e 35 20 7b 0a 20 20 63 6b 73 6f 72 74 20  .9.5 {.  cksort 
2a80: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
2a90: 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d 31  ROM t3 WHERE a=1
2aa0: 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20 42   AND c>0 ORDER B
2ab0: 59 20 61 20 44 45 53 43 2c 20 63 20 44 45 53 43  Y a DESC, c DESC
2ac0: 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b   LIMIT 3.  }.} {
2ad0: 31 20 31 30 30 20 34 20 6e 6f 73 6f 72 74 7d 0a  1 100 4 nosort}.
2ae0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e  do_test where-6.
2af0: 39 2e 36 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  9.6 {.  cksort {
2b00: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
2b10: 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d 31 20  OM t3 WHERE a=1 
2b20: 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20 42 59  AND c>0 ORDER BY
2b30: 20 63 20 44 45 53 43 20 4c 49 4d 49 54 20 33 0a   c DESC LIMIT 3.
2b40: 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20 6e    }.} {1 100 4 n
2b50: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
2b60: 68 65 72 65 2d 36 2e 39 2e 37 20 7b 0a 20 20 63  here-6.9.7 {.  c
2b70: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
2b80: 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45  CT * FROM t3 WHE
2b90: 52 45 20 61 3d 31 20 41 4e 44 20 63 3e 30 20 4f  RE a=1 AND c>0 O
2ba0: 52 44 45 52 20 42 59 20 63 2c 61 20 4c 49 4d 49  RDER BY c,a LIMI
2bb0: 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30  T 3.  }.} {1 100
2bc0: 20 34 20 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   4 sort}.do_test
2bd0: 20 77 68 65 72 65 2d 36 2e 39 2e 38 20 7b 0a 20   where-6.9.8 {. 
2be0: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
2bf0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57  LECT * FROM t3 W
2c00: 48 45 52 45 20 61 3d 31 20 41 4e 44 20 63 3e 30  HERE a=1 AND c>0
2c10: 20 4f 52 44 45 52 20 42 59 20 61 20 44 45 53 43   ORDER BY a DESC
2c20: 2c 20 63 20 41 53 43 20 4c 49 4d 49 54 20 33 0a  , c ASC LIMIT 3.
2c30: 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20 73    }.} {1 100 4 s
2c40: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
2c50: 72 65 2d 36 2e 39 2e 39 20 7b 0a 20 20 63 6b 73  re-6.9.9 {.  cks
2c60: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
2c70: 20 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45   * FROM t3 WHERE
2c80: 20 61 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52 44   a=1 AND c>0 ORD
2c90: 45 52 20 42 59 20 61 20 41 53 43 2c 20 63 20 44  ER BY a ASC, c D
2ca0: 45 53 43 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a  ESC LIMIT 3.  }.
2cb0: 7d 20 7b 31 20 31 30 30 20 34 20 73 6f 72 74 7d  } {1 100 4 sort}
2cc0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36  .do_test where-6
2cd0: 2e 31 30 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  .10 {.  cksort {
2ce0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
2cf0: 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d 31 20  OM t3 WHERE a=1 
2d00: 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20 42 59  AND c>0 ORDER BY
2d10: 20 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a 7d   a LIMIT 3.  }.}
2d20: 20 7b 31 20 31 30 30 20 34 20 6e 6f 73 6f 72 74   {1 100 4 nosort
2d30: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
2d40: 36 2e 31 31 20 7b 0a 20 20 63 6b 73 6f 72 74 20  6.11 {.  cksort 
2d50: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
2d60: 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3d 31  ROM t3 WHERE a=1
2d70: 20 41 4e 44 20 63 3e 30 20 4f 52 44 45 52 20 42   AND c>0 ORDER B
2d80: 59 20 61 2c 63 20 4c 49 4d 49 54 20 33 0a 20 20  Y a,c LIMIT 3.  
2d90: 7d 0a 7d 20 7b 31 20 31 30 30 20 34 20 6e 6f 73  }.} {1 100 4 nos
2da0: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
2db0: 72 65 2d 36 2e 31 32 20 7b 0a 20 20 63 6b 73 6f  re-6.12 {.  ckso
2dc0: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
2dd0: 2a 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20  * FROM t3 WHERE 
2de0: 61 3d 31 20 41 4e 44 20 63 3e 30 20 4f 52 44 45  a=1 AND c>0 ORDE
2df0: 52 20 42 59 20 61 2c 63 2c 62 20 4c 49 4d 49 54  R BY a,c,b LIMIT
2e00: 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 31 30 30 20   3.  }.} {1 100 
2e10: 34 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  4 nosort}.do_tes
2e20: 74 20 77 68 65 72 65 2d 36 2e 31 33 20 7b 0a 20  t where-6.13 {. 
2e30: 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45   cksort {.    SE
2e40: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 57  LECT * FROM t3 W
2e50: 48 45 52 45 20 61 3e 30 20 4f 52 44 45 52 20 42  HERE a>0 ORDER B
2e60: 59 20 61 20 44 45 53 43 20 4c 49 4d 49 54 20 33  Y a DESC LIMIT 3
2e70: 0a 20 20 7d 0a 7d 20 7b 31 30 30 20 31 20 31 30  .  }.} {100 1 10
2e80: 32 30 31 20 39 39 20 32 20 31 30 30 30 30 20 39  201 99 2 10000 9
2e90: 38 20 33 20 39 38 30 31 20 6e 6f 73 6f 72 74 7d  8 3 9801 nosort}
2ea0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36  .do_test where-6
2eb0: 2e 31 33 2e 31 20 7b 0a 20 20 63 6b 73 6f 72 74  .13.1 {.  cksort
2ec0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
2ed0: 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 61 3e  FROM t3 WHERE a>
2ee0: 30 20 4f 52 44 45 52 20 42 59 20 2d 61 20 4c 49  0 ORDER BY -a LI
2ef0: 4d 49 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 30 30  MIT 3.  }.} {100
2f00: 20 31 20 31 30 32 30 31 20 39 39 20 32 20 31 30   1 10201 99 2 10
2f10: 30 30 30 20 39 38 20 33 20 39 38 30 31 20 73 6f  000 98 3 9801 so
2f20: 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72  rt}.do_test wher
2f30: 65 2d 36 2e 31 34 20 7b 0a 20 20 63 6b 73 6f 72  e-6.14 {.  cksor
2f40: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  t {.    SELECT *
2f50: 20 46 52 4f 4d 20 74 33 20 4f 52 44 45 52 20 42   FROM t3 ORDER B
2f60: 59 20 62 20 4c 49 4d 49 54 20 33 0a 20 20 7d 0a  Y b LIMIT 3.  }.
2f70: 7d 20 7b 31 30 30 20 31 20 31 30 32 30 31 20 39  } {100 1 10201 9
2f80: 39 20 32 20 31 30 30 30 30 20 39 38 20 33 20 39  9 2 10000 98 3 9
2f90: 38 30 31 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74  801 nosort}.do_t
2fa0: 65 73 74 20 77 68 65 72 65 2d 36 2e 31 35 20 7b  est where-6.15 {
2fb0: 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20  .  cksort {.    
2fc0: 53 45 4c 45 43 54 20 74 33 2e 61 2c 20 74 31 2e  SELECT t3.a, t1.
2fd0: 78 20 46 52 4f 4d 20 74 33 2c 20 74 31 20 57 48  x FROM t3, t1 WH
2fe0: 45 52 45 20 74 33 2e 61 3d 74 31 2e 77 20 4f 52  ERE t3.a=t1.w OR
2ff0: 44 45 52 20 42 59 20 74 33 2e 61 20 4c 49 4d 49  DER BY t3.a LIMI
3000: 54 20 33 0a 20 20 7d 0a 7d 20 7b 31 20 30 20 32  T 3.  }.} {1 0 2
3010: 20 31 20 33 20 31 20 6e 6f 73 6f 72 74 7d 0a 64   1 3 1 nosort}.d
3020: 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 36 2e 31  o_test where-6.1
3030: 36 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20  6 {.  cksort {. 
3040: 20 20 20 53 45 4c 45 43 54 20 74 33 2e 61 2c 20     SELECT t3.a, 
3050: 74 31 2e 78 20 46 52 4f 4d 20 74 33 2c 20 74 31  t1.x FROM t3, t1
3060: 20 57 48 45 52 45 20 74 33 2e 61 3d 74 31 2e 77   WHERE t3.a=t1.w
3070: 20 4f 52 44 45 52 20 42 59 20 74 31 2e 78 2c 20   ORDER BY t1.x, 
3080: 74 33 2e 61 20 4c 49 4d 49 54 20 33 0a 20 20 7d  t3.a LIMIT 3.  }
3090: 0a 7d 20 7b 31 20 30 20 32 20 31 20 33 20 31 20  .} {1 0 2 1 3 1 
30a0: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
30b0: 65 72 65 2d 36 2e 31 37 20 7b 0a 20 20 63 6b 73  ere-6.17 {.  cks
30c0: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
30d0: 20 79 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52   y FROM t1 ORDER
30e0: 20 42 59 20 77 20 43 4f 4c 4c 41 54 45 20 74 65   BY w COLLATE te
30f0: 78 74 20 4c 49 4d 49 54 20 33 3b 0a 20 20 7d 0a  xt LIMIT 3;.  }.
3100: 7d 20 7b 34 20 31 32 31 20 31 30 32 30 31 20 73  } {4 121 10201 s
3110: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
3120: 72 65 2d 36 2e 31 38 20 7b 0a 20 20 63 6b 73 6f  re-6.18 {.  ckso
3130: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
3140: 79 20 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20  y FROM t1 ORDER 
3150: 42 59 20 77 20 43 4f 4c 4c 41 54 45 20 6e 75 6d  BY w COLLATE num
3160: 65 72 69 63 20 4c 49 4d 49 54 20 33 3b 0a 20 20  eric LIMIT 3;.  
3170: 7d 0a 7d 20 7b 34 20 39 20 31 36 20 73 6f 72 74  }.} {4 9 16 sort
3180: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
3190: 36 2e 31 39 20 7b 0a 20 20 63 6b 73 6f 72 74 20  6.19 {.  cksort 
31a0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 79 20 46  {.    SELECT y F
31b0: 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20  ROM t1 ORDER BY 
31c0: 77 20 4c 49 4d 49 54 20 33 3b 0a 20 20 7d 0a 7d  w LIMIT 3;.  }.}
31d0: 20 7b 34 20 39 20 31 36 20 6e 6f 73 6f 72 74 7d   {4 9 16 nosort}
31e0: 0a 0a 23 20 54 65 73 74 73 20 66 6f 72 20 72 65  ..# Tests for re
31f0: 76 65 72 73 65 2d 6f 72 64 65 72 20 73 6f 72 74  verse-order sort
3200: 69 6e 67 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 77  ing..#.do_test w
3210: 68 65 72 65 2d 37 2e 31 20 7b 0a 20 20 63 6b 73  here-7.1 {.  cks
3220: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
3230: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
3240: 20 78 3d 33 20 4f 52 44 45 52 20 42 59 20 79 3b   x=3 ORDER BY y;
3250: 0a 20 20 7d 0a 7d 20 7b 38 20 39 20 31 30 20 31  .  }.} {8 9 10 1
3260: 31 20 31 32 20 31 33 20 31 34 20 31 35 20 6e 6f  1 12 13 14 15 no
3270: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
3280: 65 72 65 2d 37 2e 32 20 7b 0a 20 20 63 6b 73 6f  ere-7.2 {.  ckso
3290: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
32a0: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
32b0: 78 3d 33 20 4f 52 44 45 52 20 42 59 20 79 20 44  x=3 ORDER BY y D
32c0: 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 35 20 31  ESC;.  }.} {15 1
32d0: 34 20 31 33 20 31 32 20 31 31 20 31 30 20 39 20  4 13 12 11 10 9 
32e0: 38 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73  8 nosort}.do_tes
32f0: 74 20 77 68 65 72 65 2d 37 2e 33 20 7b 0a 20 20  t where-7.3 {.  
3300: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
3310: 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48  ECT w FROM t1 WH
3320: 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e 31 30  ERE x=3 AND y>10
3330: 30 20 4f 52 44 45 52 20 42 59 20 79 20 4c 49 4d  0 ORDER BY y LIM
3340: 49 54 20 33 3b 0a 20 20 7d 0a 7d 20 7b 31 30 20  IT 3;.  }.} {10 
3350: 31 31 20 31 32 20 6e 6f 73 6f 72 74 7d 0a 64 6f  11 12 nosort}.do
3360: 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 34 20  _test where-7.4 
3370: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
3380: 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74   SELECT w FROM t
3390: 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20  1 WHERE x=3 AND 
33a0: 79 3e 31 30 30 20 4f 52 44 45 52 20 42 59 20 79  y>100 ORDER BY y
33b0: 20 44 45 53 43 20 4c 49 4d 49 54 20 33 3b 0a 20   DESC LIMIT 3;. 
33c0: 20 7d 0a 7d 20 7b 31 35 20 31 34 20 31 33 20 6e   }.} {15 14 13 n
33d0: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
33e0: 68 65 72 65 2d 37 2e 35 20 7b 0a 20 20 63 6b 73  here-7.5 {.  cks
33f0: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
3400: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
3410: 20 78 3d 33 20 41 4e 44 20 79 3e 31 32 31 20 4f   x=3 AND y>121 O
3420: 52 44 45 52 20 42 59 20 79 20 44 45 53 43 3b 0a  RDER BY y DESC;.
3430: 20 20 7d 0a 7d 20 7b 31 35 20 31 34 20 31 33 20    }.} {15 14 13 
3440: 31 32 20 31 31 20 6e 6f 73 6f 72 74 7d 0a 64 6f  12 11 nosort}.do
3450: 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 36 20  _test where-7.6 
3460: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
3470: 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74   SELECT w FROM t
3480: 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20  1 WHERE x=3 AND 
3490: 79 3e 3d 31 32 31 20 4f 52 44 45 52 20 42 59 20  y>=121 ORDER BY 
34a0: 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31  y DESC;.  }.} {1
34b0: 35 20 31 34 20 31 33 20 31 32 20 31 31 20 31 30  5 14 13 12 11 10
34c0: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
34d0: 20 77 68 65 72 65 2d 37 2e 37 20 7b 0a 20 20 63   where-7.7 {.  c
34e0: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
34f0: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
3500: 52 45 20 78 3d 33 20 41 4e 44 20 79 3e 3d 31 32  RE x=3 AND y>=12
3510: 31 20 41 4e 44 20 79 3c 31 39 36 20 4f 52 44 45  1 AND y<196 ORDE
3520: 52 20 42 59 20 79 20 44 45 53 43 3b 0a 20 20 7d  R BY y DESC;.  }
3530: 0a 7d 20 7b 31 32 20 31 31 20 31 30 20 6e 6f 73  .} {12 11 10 nos
3540: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
3550: 72 65 2d 37 2e 38 20 7b 0a 20 20 63 6b 73 6f 72  re-7.8 {.  cksor
3560: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77  t {.    SELECT w
3570: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
3580: 3d 33 20 41 4e 44 20 79 3e 3d 31 32 31 20 41 4e  =3 AND y>=121 AN
3590: 44 20 79 3c 3d 31 39 36 20 4f 52 44 45 52 20 42  D y<=196 ORDER B
35a0: 59 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20  Y y DESC;.  }.} 
35b0: 7b 31 33 20 31 32 20 31 31 20 31 30 20 6e 6f 73  {13 12 11 10 nos
35c0: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
35d0: 72 65 2d 37 2e 39 20 7b 0a 20 20 63 6b 73 6f 72  re-7.9 {.  cksor
35e0: 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77  t {.    SELECT w
35f0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78   FROM t1 WHERE x
3600: 3d 33 20 41 4e 44 20 79 3e 31 32 31 20 41 4e 44  =3 AND y>121 AND
3610: 20 79 3c 3d 31 39 36 20 4f 52 44 45 52 20 42 59   y<=196 ORDER BY
3620: 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b   y DESC;.  }.} {
3630: 31 33 20 31 32 20 31 31 20 6e 6f 73 6f 72 74 7d  13 12 11 nosort}
3640: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37  .do_test where-7
3650: 2e 31 30 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  .10 {.  cksort {
3660: 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52  .    SELECT w FR
3670: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20  OM t1 WHERE x=3 
3680: 41 4e 44 20 79 3e 31 30 30 20 41 4e 44 20 79 3c  AND y>100 AND y<
3690: 31 39 36 20 4f 52 44 45 52 20 42 59 20 79 20 44  196 ORDER BY y D
36a0: 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 32 20 31  ESC;.  }.} {12 1
36b0: 31 20 31 30 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f  1 10 nosort}.do_
36c0: 74 65 73 74 20 77 68 65 72 65 2d 37 2e 31 31 20  test where-7.11 
36d0: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
36e0: 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74   SELECT w FROM t
36f0: 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20  1 WHERE x=3 AND 
3700: 79 3e 3d 31 32 31 20 41 4e 44 20 79 3c 31 39 36  y>=121 AND y<196
3710: 20 4f 52 44 45 52 20 42 59 20 79 3b 0a 20 20 7d   ORDER BY y;.  }
3720: 0a 7d 20 7b 31 30 20 31 31 20 31 32 20 6e 6f 73  .} {10 11 12 nos
3730: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
3740: 72 65 2d 37 2e 31 32 20 7b 0a 20 20 63 6b 73 6f  re-7.12 {.  ckso
3750: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
3760: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
3770: 78 3d 33 20 41 4e 44 20 79 3e 3d 31 32 31 20 41  x=3 AND y>=121 A
3780: 4e 44 20 79 3c 3d 31 39 36 20 4f 52 44 45 52 20  ND y<=196 ORDER 
3790: 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 31 30 20  BY y;.  }.} {10 
37a0: 31 31 20 31 32 20 31 33 20 6e 6f 73 6f 72 74 7d  11 12 13 nosort}
37b0: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37  .do_test where-7
37c0: 2e 31 33 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  .13 {.  cksort {
37d0: 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52  .    SELECT w FR
37e0: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20  OM t1 WHERE x=3 
37f0: 41 4e 44 20 79 3e 31 32 31 20 41 4e 44 20 79 3c  AND y>121 AND y<
3800: 3d 31 39 36 20 4f 52 44 45 52 20 42 59 20 79 3b  =196 ORDER BY y;
3810: 0a 20 20 7d 0a 7d 20 7b 31 31 20 31 32 20 31 33  .  }.} {11 12 13
3820: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
3830: 20 77 68 65 72 65 2d 37 2e 31 34 20 7b 0a 20 20   where-7.14 {.  
3840: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
3850: 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48  ECT w FROM t1 WH
3860: 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e 31 30  ERE x=3 AND y>10
3870: 30 20 41 4e 44 20 79 3c 31 39 36 20 4f 52 44 45  0 AND y<196 ORDE
3880: 52 20 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 31  R BY y;.  }.} {1
3890: 30 20 31 31 20 31 32 20 6e 6f 73 6f 72 74 7d 0a  0 11 12 nosort}.
38a0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e  do_test where-7.
38b0: 31 35 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  15 {.  cksort {.
38c0: 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f      SELECT w FRO
38d0: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20 41  M t1 WHERE x=3 A
38e0: 4e 44 20 79 3c 38 31 20 4f 52 44 45 52 20 42 59  ND y<81 ORDER BY
38f0: 20 79 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f 73 6f 72   y;.  }.} {nosor
3900: 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  t}.do_test where
3910: 2d 37 2e 31 36 20 7b 0a 20 20 63 6b 73 6f 72 74  -7.16 {.  cksort
3920: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20   {.    SELECT w 
3930: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d  FROM t1 WHERE x=
3940: 33 20 41 4e 44 20 79 3c 3d 38 31 20 4f 52 44 45  3 AND y<=81 ORDE
3950: 52 20 42 59 20 79 3b 0a 20 20 7d 0a 7d 20 7b 38  R BY y;.  }.} {8
3960: 20 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74   nosort}.do_test
3970: 20 77 68 65 72 65 2d 37 2e 31 37 20 7b 0a 20 20   where-7.17 {.  
3980: 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c  cksort {.    SEL
3990: 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48  ECT w FROM t1 WH
39a0: 45 52 45 20 78 3d 33 20 41 4e 44 20 79 3e 32 35  ERE x=3 AND y>25
39b0: 36 20 4f 52 44 45 52 20 42 59 20 79 3b 0a 20 20  6 ORDER BY y;.  
39c0: 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a 64 6f 5f  }.} {nosort}.do_
39d0: 74 65 73 74 20 77 68 65 72 65 2d 37 2e 31 38 20  test where-7.18 
39e0: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
39f0: 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74   SELECT w FROM t
3a00: 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20  1 WHERE x=3 AND 
3a10: 79 3e 3d 32 35 36 20 4f 52 44 45 52 20 42 59 20  y>=256 ORDER BY 
3a20: 79 3b 0a 20 20 7d 0a 7d 20 7b 31 35 20 6e 6f 73  y;.  }.} {15 nos
3a30: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
3a40: 72 65 2d 37 2e 31 39 20 7b 0a 20 20 63 6b 73 6f  re-7.19 {.  ckso
3a50: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
3a60: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
3a70: 78 3d 33 20 41 4e 44 20 79 3c 38 31 20 4f 52 44  x=3 AND y<81 ORD
3a80: 45 52 20 42 59 20 79 20 44 45 53 43 3b 0a 20 20  ER BY y DESC;.  
3a90: 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a 64 6f 5f  }.} {nosort}.do_
3aa0: 74 65 73 74 20 77 68 65 72 65 2d 37 2e 32 30 20  test where-7.20 
3ab0: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
3ac0: 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74   SELECT w FROM t
3ad0: 31 20 57 48 45 52 45 20 78 3d 33 20 41 4e 44 20  1 WHERE x=3 AND 
3ae0: 79 3c 3d 38 31 20 4f 52 44 45 52 20 42 59 20 79  y<=81 ORDER BY y
3af0: 20 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 38 20   DESC;.  }.} {8 
3b00: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
3b10: 77 68 65 72 65 2d 37 2e 32 31 20 7b 0a 20 20 63  where-7.21 {.  c
3b20: 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45  ksort {.    SELE
3b30: 43 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45  CT w FROM t1 WHE
3b40: 52 45 20 78 3d 33 20 41 4e 44 20 79 3e 32 35 36  RE x=3 AND y>256
3b50: 20 4f 52 44 45 52 20 42 59 20 79 20 44 45 53 43   ORDER BY y DESC
3b60: 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d  ;.  }.} {nosort}
3b70: 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37  .do_test where-7
3b80: 2e 32 32 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b  .22 {.  cksort {
3b90: 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52  .    SELECT w FR
3ba0: 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 33 20  OM t1 WHERE x=3 
3bb0: 41 4e 44 20 79 3e 3d 32 35 36 20 4f 52 44 45 52  AND y>=256 ORDER
3bc0: 20 42 59 20 79 20 44 45 53 43 3b 0a 20 20 7d 0a   BY y DESC;.  }.
3bd0: 7d 20 7b 31 35 20 6e 6f 73 6f 72 74 7d 0a 64 6f  } {15 nosort}.do
3be0: 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e 32 33  _test where-7.23
3bf0: 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20   {.  cksort {.  
3c00: 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20    SELECT w FROM 
3c10: 74 31 20 57 48 45 52 45 20 78 3d 30 20 41 4e 44  t1 WHERE x=0 AND
3c20: 20 79 3c 34 20 4f 52 44 45 52 20 42 59 20 79 3b   y<4 ORDER BY y;
3c30: 0a 20 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a  .  }.} {nosort}.
3c40: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 37 2e  do_test where-7.
3c50: 32 34 20 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a  24 {.  cksort {.
3c60: 20 20 20 20 53 45 4c 45 43 54 20 77 20 46 52 4f      SELECT w FRO
3c70: 4d 20 74 31 20 57 48 45 52 45 20 78 3d 30 20 41  M t1 WHERE x=0 A
3c80: 4e 44 20 79 3c 3d 34 20 4f 52 44 45 52 20 42 59  ND y<=4 ORDER BY
3c90: 20 79 3b 0a 20 20 7d 0a 7d 20 7b 31 20 6e 6f 73   y;.  }.} {1 nos
3ca0: 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  ort}.do_test whe
3cb0: 72 65 2d 37 2e 32 35 20 7b 0a 20 20 63 6b 73 6f  re-7.25 {.  ckso
3cc0: 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  rt {.    SELECT 
3cd0: 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  w FROM t1 WHERE 
3ce0: 78 3d 36 20 41 4e 44 20 79 3e 31 30 32 30 31 20  x=6 AND y>10201 
3cf0: 4f 52 44 45 52 20 42 59 20 79 3b 0a 20 20 7d 0a  ORDER BY y;.  }.
3d00: 7d 20 7b 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65  } {nosort}.do_te
3d10: 73 74 20 77 68 65 72 65 2d 37 2e 32 36 20 7b 0a  st where-7.26 {.
3d20: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
3d30: 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 31 20  ELECT w FROM t1 
3d40: 57 48 45 52 45 20 78 3d 36 20 41 4e 44 20 79 3e  WHERE x=6 AND y>
3d50: 3d 31 30 32 30 31 20 4f 52 44 45 52 20 42 59 20  =10201 ORDER BY 
3d60: 79 3b 0a 20 20 7d 0a 7d 20 7b 31 30 30 20 6e 6f  y;.  }.} {100 no
3d70: 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77 68  sort}.do_test wh
3d80: 65 72 65 2d 37 2e 32 37 20 7b 0a 20 20 63 6b 73  ere-7.27 {.  cks
3d90: 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  ort {.    SELECT
3da0: 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   w FROM t1 WHERE
3db0: 20 78 3d 30 20 41 4e 44 20 79 3c 34 20 4f 52 44   x=0 AND y<4 ORD
3dc0: 45 52 20 42 59 20 79 20 44 45 53 43 3b 0a 20 20  ER BY y DESC;.  
3dd0: 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a 64 6f 5f  }.} {nosort}.do_
3de0: 74 65 73 74 20 77 68 65 72 65 2d 37 2e 32 38 20  test where-7.28 
3df0: 7b 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  {.  cksort {.   
3e00: 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74   SELECT w FROM t
3e10: 31 20 57 48 45 52 45 20 78 3d 30 20 41 4e 44 20  1 WHERE x=0 AND 
3e20: 79 3c 3d 34 20 4f 52 44 45 52 20 42 59 20 79 20  y<=4 ORDER BY y 
3e30: 44 45 53 43 3b 0a 20 20 7d 0a 7d 20 7b 31 20 6e  DESC;.  }.} {1 n
3e40: 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20 77  osort}.do_test w
3e50: 68 65 72 65 2d 37 2e 32 39 20 7b 0a 20 20 63 6b  here-7.29 {.  ck
3e60: 73 6f 72 74 20 7b 0a 20 20 20 20 53 45 4c 45 43  sort {.    SELEC
3e70: 54 20 77 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T w FROM t1 WHER
3e80: 45 20 78 3d 36 20 41 4e 44 20 79 3e 31 30 32 30  E x=6 AND y>1020
3e90: 31 20 4f 52 44 45 52 20 42 59 20 79 20 44 45 53  1 ORDER BY y DES
3ea0: 43 3b 0a 20 20 7d 0a 7d 20 7b 6e 6f 73 6f 72 74  C;.  }.} {nosort
3eb0: 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d  }.do_test where-
3ec0: 37 2e 33 30 20 7b 0a 20 20 63 6b 73 6f 72 74 20  7.30 {.  cksort 
3ed0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 77 20 46  {.    SELECT w F
3ee0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 78 3d 36  ROM t1 WHERE x=6
3ef0: 20 41 4e 44 20 79 3e 3d 31 30 32 30 31 20 4f 52   AND y>=10201 OR
3f00: 44 45 52 20 42 59 20 79 20 44 45 53 43 3b 0a 20  DER BY y DESC;. 
3f10: 20 7d 0a 7d 20 7b 31 30 30 20 6e 6f 73 6f 72 74   }.} {100 nosort
3f20: 7d 0a 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  }..do_test where
3f30: 2d 38 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -8.1 {.  execsql
3f40: 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54 41   {.    CREATE TA
3f50: 42 4c 45 20 74 34 20 41 53 20 53 45 4c 45 43 54  BLE t4 AS SELECT
3f60: 20 2a 20 46 52 4f 4d 20 74 31 3b 0a 20 20 20 20   * FROM t1;.    
3f70: 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 34 78  CREATE INDEX i4x
3f80: 79 20 4f 4e 20 74 34 28 78 2c 79 29 3b 0a 20 20  y ON t4(x,y);.  
3f90: 7d 0a 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20  }.  cksort {.   
3fa0: 20 53 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74   SELECT w FROM t
3fb0: 34 20 57 48 45 52 45 20 78 3d 34 20 61 6e 64 20  4 WHERE x=4 and 
3fc0: 79 3c 31 30 30 30 20 4f 52 44 45 52 20 42 59 20  y<1000 ORDER BY 
3fd0: 79 20 44 45 53 43 20 6c 69 6d 69 74 20 33 3b 0a  y DESC limit 3;.
3fe0: 20 20 7d 0a 7d 20 7b 33 30 20 32 39 20 32 38 20    }.} {30 29 28 
3ff0: 6e 6f 73 6f 72 74 7d 0a 64 6f 5f 74 65 73 74 20  nosort}.do_test 
4000: 77 68 65 72 65 2d 38 2e 32 20 7b 0a 20 20 65 78  where-8.2 {.  ex
4010: 65 63 73 71 6c 20 7b 0a 20 20 20 20 44 45 4c 45  ecsql {.    DELE
4020: 54 45 20 46 52 4f 4d 20 74 34 3b 0a 20 20 7d 0a  TE FROM t4;.  }.
4030: 20 20 63 6b 73 6f 72 74 20 7b 0a 20 20 20 20 53    cksort {.    S
4040: 45 4c 45 43 54 20 77 20 46 52 4f 4d 20 74 34 20  ELECT w FROM t4 
4050: 57 48 45 52 45 20 78 3d 34 20 61 6e 64 20 79 3c  WHERE x=4 and y<
4060: 31 30 30 30 20 4f 52 44 45 52 20 42 59 20 79 20  1000 ORDER BY y 
4070: 44 45 53 43 20 6c 69 6d 69 74 20 33 3b 0a 20 20  DESC limit 3;.  
4080: 7d 0a 7d 20 7b 6e 6f 73 6f 72 74 7d 0a 0a 23 20  }.} {nosort}..# 
4090: 4d 61 6b 65 20 73 75 72 65 20 73 65 61 72 63 68  Make sure search
40a0: 65 73 20 77 69 74 68 20 61 6e 20 69 6e 64 65 78  es with an index
40b0: 20 77 6f 72 6b 20 77 69 74 68 20 61 6e 20 65 6d   work with an em
40c0: 70 74 79 20 74 61 62 6c 65 2e 0a 23 0a 64 6f 5f  pty table..#.do_
40d0: 74 65 73 74 20 77 68 65 72 65 2d 39 2e 31 20 7b  test where-9.1 {
40e0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
40f0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 35   CREATE TABLE t5
4100: 28 78 20 50 52 49 4d 41 52 59 20 4b 45 59 29 3b  (x PRIMARY KEY);
4110: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
4120: 4f 4d 20 74 35 20 57 48 45 52 45 20 78 3c 31 30  OM t5 WHERE x<10
4130: 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65  ;.  }.} {}.do_te
4140: 73 74 20 77 68 65 72 65 2d 39 2e 32 20 7b 0a 20  st where-9.2 {. 
4150: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
4160: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35 20  ELECT * FROM t5 
4170: 57 48 45 52 45 20 78 3c 31 30 20 4f 52 44 45 52  WHERE x<10 ORDER
4180: 20 42 59 20 78 20 44 45 53 43 3b 0a 20 20 7d 0a   BY x DESC;.  }.
4190: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65  } {}.do_test whe
41a0: 72 65 2d 39 2e 33 20 7b 0a 20 20 65 78 65 63 73  re-9.3 {.  execs
41b0: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
41c0: 2a 20 46 52 4f 4d 20 74 35 20 57 48 45 52 45 20  * FROM t5 WHERE 
41d0: 78 3d 31 30 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a  x=10;.  }.} {}..
41e0: 64 6f 5f 74 65 73 74 20 77 68 65 72 65 2d 31 30  do_test where-10
41f0: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
4200: 0a 20 20 20 20 53 45 4c 45 43 54 20 31 20 57 48  .    SELECT 1 WH
4210: 45 52 45 20 61 62 73 28 72 61 6e 64 6f 6d 28 29  ERE abs(random()
4220: 29 3c 30 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f  )<0.  }.} {}.do_
4230: 74 65 73 74 20 77 68 65 72 65 2d 31 30 2e 32 20  test where-10.2 
4240: 7b 0a 20 20 70 72 6f 63 20 74 63 6c 76 61 72 5f  {.  proc tclvar_
4250: 66 75 6e 63 20 7b 76 6e 61 6d 65 7d 20 7b 72 65  func {vname} {re
4260: 74 75 72 6e 20 5b 73 65 74 20 3a 3a 24 76 6e 61  turn [set ::$vna
4270: 6d 65 5d 7d 0a 20 20 64 62 20 66 75 6e 63 74 69  me]}.  db functi
4280: 6f 6e 20 74 63 6c 76 61 72 20 74 63 6c 76 61 72  on tclvar tclvar
4290: 5f 66 75 6e 63 0a 20 20 73 65 74 20 3a 3a 76 31  _func.  set ::v1
42a0: 20 30 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   0.  execsql {. 
42b0: 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28     SELECT count(
42c0: 2a 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  *) FROM t1 WHERE
42d0: 20 74 63 6c 76 61 72 28 27 76 31 27 29 3b 0a 20   tclvar('v1');. 
42e0: 20 7d 0a 7d 20 7b 30 7d 0a 64 6f 5f 74 65 73 74   }.} {0}.do_test
42f0: 20 77 68 65 72 65 2d 31 30 2e 33 20 7b 0a 20 20   where-10.3 {.  
4300: 73 65 74 20 3a 3a 76 31 20 31 0a 20 20 65 78 65  set ::v1 1.  exe
4310: 63 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43  csql {.    SELEC
4320: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
4330: 74 31 20 57 48 45 52 45 20 74 63 6c 76 61 72 28  t1 WHERE tclvar(
4340: 27 76 31 27 29 3b 0a 20 20 7d 0a 7d 20 7b 31 30  'v1');.  }.} {10
4350: 30 7d 0a 64 6f 5f 74 65 73 74 20 77 68 65 72 65  0}.do_test where
4360: 2d 31 30 2e 34 20 7b 0a 20 20 73 65 74 20 3a 3a  -10.4 {.  set ::
4370: 76 31 20 31 0a 20 20 70 72 6f 63 20 74 63 6c 76  v1 1.  proc tclv
4380: 61 72 5f 66 75 6e 63 20 7b 76 6e 61 6d 65 7d 20  ar_func {vname} 
4390: 7b 0a 20 20 20 20 75 70 76 61 72 20 23 30 20 24  {.    upvar #0 $
43a0: 76 6e 61 6d 65 20 76 0a 20 20 20 20 73 65 74 20  vname v.    set 
43b0: 76 20 5b 65 78 70 72 20 7b 21 24 76 7d 5d 0a 20  v [expr {!$v}]. 
43c0: 20 20 20 72 65 74 75 72 6e 20 24 76 0a 20 20 7d     return $v.  }
43d0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
43e0: 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29   SELECT count(*)
43f0: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74   FROM t1 WHERE t
4400: 63 6c 76 61 72 28 27 76 31 27 29 3b 0a 20 20 7d  clvar('v1');.  }
4410: 0a 7d 20 7b 35 30 7d 0a 0a 0a 66 69 6e 69 73 68  .} {50}...finish
4420: 5f 74 65 73 74 0a                                _test.