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

Artifact fe720e8b37d59f4cef808b0bf4e1b391c2e56b6f:


0000: 23 20 32 30 30 36 20 4a 61 6e 75 61 72 79 20 30  # 2006 January 0
0010: 32 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  2.#.# The author
0020: 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72   disclaims copyr
0030: 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75  ight to this sou
0040: 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c  rce code.  In pl
0050: 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c  ace of.# a legal
0060: 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73   notice, here is
0070: 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23   a blessing:.#.#
0080: 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67      May you do g
0090: 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c  ood and not evil
00a0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66  ..#    May you f
00b0: 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20  ind forgiveness 
00c0: 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64  for yourself and
00d0: 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e   forgive others.
00e0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68  .#    May you sh
00f0: 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65  are freely, neve
0100: 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68  r taking more th
0110: 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23  an you give..#.#
0120: 2a 2a 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 73 63 72 69 70  us of this scrip
01c0: 74 20 69 73 20 64 65 73 63 65 6e 64 69 6e 67 20  t is descending 
01d0: 69 6e 64 69 63 65 73 2e 0a 23 0a 23 20 24 49 64  indices..#.# $Id
01e0: 3a 20 64 65 73 63 69 64 78 33 2e 74 65 73 74 2c  : descidx3.test,
01f0: 76 20 31 2e 36 20 32 30 30 38 2f 30 33 2f 31 39  v 1.6 2008/03/19
0200: 20 30 30 3a 32 31 3a 33 31 20 64 72 68 20 45 78   00:21:31 drh Ex
0210: 70 20 24 0a 23 0a 0a 73 65 74 20 74 65 73 74 64  p $.#..set testd
0220: 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  ir [file dirname
0230: 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20   $argv0].source 
0240: 24 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e  $testdir/tester.
0250: 74 63 6c 0a 0a 23 20 44 6f 20 6e 6f 74 20 75 73  tcl..# Do not us
0260: 65 20 61 20 63 6f 64 65 63 20 66 6f 72 20 74 65  e a codec for te
0270: 73 74 73 20 69 6e 20 74 68 69 73 20 66 69 6c 65  sts in this file
0280: 2c 20 61 73 20 74 68 65 20 64 61 74 61 62 61 73  , as the databas
0290: 65 20 66 69 6c 65 20 69 73 0a 23 20 6d 61 6e 69  e file is.# mani
02a0: 70 75 6c 61 74 65 64 20 64 69 72 65 63 74 6c 79  pulated directly
02b0: 20 75 73 69 6e 67 20 74 63 6c 20 73 63 72 69 70   using tcl scrip
02c0: 74 73 20 28 75 73 69 6e 67 20 74 68 65 20 5b 68  ts (using the [h
02d0: 65 78 69 6f 5f 77 72 69 74 65 5d 20 63 6f 6d 6d  exio_write] comm
02e0: 61 6e 64 29 2e 0a 23 0a 64 6f 5f 6e 6f 74 5f 75  and)..#.do_not_u
02f0: 73 65 5f 63 6f 64 65 63 0a 0a 69 66 63 61 70 61  se_codec..ifcapa
0300: 62 6c 65 20 21 62 6c 6f 62 6c 69 74 20 7b 0a 20  ble !bloblit {. 
0310: 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72   finish_test.  r
0320: 65 74 75 72 6e 0a 7d 0a 64 62 20 65 76 61 6c 20  eturn.}.db eval 
0330: 7b 50 52 41 47 4d 41 20 6c 65 67 61 63 79 5f 66  {PRAGMA legacy_f
0340: 69 6c 65 5f 66 6f 72 6d 61 74 3d 4f 46 46 7d 0a  ile_format=OFF}.
0350: 0a 23 20 54 68 69 73 20 70 72 6f 63 65 64 75 72  .# This procedur
0360: 65 20 73 65 74 73 20 74 68 65 20 76 61 6c 75 65  e sets the value
0370: 20 6f 66 20 74 68 65 20 66 69 6c 65 2d 66 6f 72   of the file-for
0380: 6d 61 74 20 69 6e 20 66 69 6c 65 20 27 74 65 73  mat in file 'tes
0390: 74 2e 64 62 27 0a 23 20 74 6f 20 24 6e 65 77 76  t.db'.# to $newv
03a0: 61 6c 2e 20 41 6c 73 6f 2c 20 74 68 65 20 73 63  al. Also, the sc
03b0: 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 73 20 69  hema cookie is i
03c0: 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 23 20 0a 70  ncremented..# .p
03d0: 72 6f 63 20 73 65 74 5f 66 69 6c 65 5f 66 6f 72  roc set_file_for
03e0: 6d 61 74 20 7b 6e 65 77 76 61 6c 7d 20 7b 0a 20  mat {newval} {. 
03f0: 20 68 65 78 69 6f 5f 77 72 69 74 65 20 74 65 73   hexio_write tes
0400: 74 2e 64 62 20 34 34 20 5b 68 65 78 69 6f 5f 72  t.db 44 [hexio_r
0410: 65 6e 64 65 72 5f 69 6e 74 33 32 20 24 6e 65 77  ender_int32 $new
0420: 76 61 6c 5d 0a 20 20 73 65 74 20 73 63 68 65 6d  val].  set schem
0430: 61 63 6f 6f 6b 69 65 20 5b 68 65 78 69 6f 5f 67  acookie [hexio_g
0440: 65 74 5f 69 6e 74 20 5b 68 65 78 69 6f 5f 72 65  et_int [hexio_re
0450: 61 64 20 74 65 73 74 2e 64 62 20 34 30 20 34 5d  ad test.db 40 4]
0460: 5d 0a 20 20 69 6e 63 72 20 73 63 68 65 6d 61 63  ].  incr schemac
0470: 6f 6f 6b 69 65 0a 20 20 68 65 78 69 6f 5f 77 72  ookie.  hexio_wr
0480: 69 74 65 20 74 65 73 74 2e 64 62 20 34 30 20 5b  ite test.db 40 [
0490: 68 65 78 69 6f 5f 72 65 6e 64 65 72 5f 69 6e 74  hexio_render_int
04a0: 33 32 20 24 73 63 68 65 6d 61 63 6f 6f 6b 69 65  32 $schemacookie
04b0: 5d 0a 20 20 72 65 74 75 72 6e 20 7b 7d 0a 7d 0a  ].  return {}.}.
04c0: 0a 23 20 54 68 69 73 20 70 72 6f 63 65 64 75 72  .# This procedur
04d0: 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 76 61  e returns the va
04e0: 6c 75 65 20 6f 66 20 74 68 65 20 66 69 6c 65 2d  lue of the file-
04f0: 66 6f 72 6d 61 74 20 69 6e 20 66 69 6c 65 20 27  format in file '
0500: 74 65 73 74 2e 64 62 27 2e 0a 23 20 0a 70 72 6f  test.db'..# .pro
0510: 63 20 67 65 74 5f 66 69 6c 65 5f 66 6f 72 6d 61  c get_file_forma
0520: 74 20 7b 7b 66 6e 61 6d 65 20 74 65 73 74 2e 64  t {{fname test.d
0530: 62 7d 7d 20 7b 0a 20 20 72 65 74 75 72 6e 20 5b  b}} {.  return [
0540: 68 65 78 69 6f 5f 67 65 74 5f 69 6e 74 20 5b 68  hexio_get_int [h
0550: 65 78 69 6f 5f 72 65 61 64 20 24 66 6e 61 6d 65  exio_read $fname
0560: 20 34 34 20 34 5d 5d 0a 7d 0a 0a 23 20 56 65 72   44 4]].}..# Ver
0570: 69 66 79 20 74 68 61 74 20 74 68 65 20 66 69 6c  ify that the fil
0580: 65 20 66 6f 72 6d 61 74 20 73 74 61 72 74 73 20  e format starts 
0590: 61 73 20 34 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  as 4..#.do_test 
05a0: 64 65 73 63 69 64 78 33 2d 31 2e 31 20 7b 0a 20  descidx3-1.1 {. 
05b0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
05c0: 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28 69  REATE TABLE t1(i
05d0: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
05e0: 20 4b 45 59 2c 61 2c 62 2c 63 2c 64 29 3b 0a 20   KEY,a,b,c,d);. 
05f0: 20 20 20 43 52 45 41 54 45 20 49 4e 44 45 58 20     CREATE INDEX 
0600: 74 31 69 31 20 4f 4e 20 74 31 28 61 20 44 45 53  t1i1 ON t1(a DES
0610: 43 2c 20 62 20 41 53 43 2c 20 63 20 44 45 53 43  C, b ASC, c DESC
0620: 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 49 4e  );.    CREATE IN
0630: 44 45 58 20 74 31 69 32 20 4f 4e 20 74 31 28 62  DEX t1i2 ON t1(b
0640: 20 44 45 53 43 2c 20 63 20 41 53 43 2c 20 64 20   DESC, c ASC, d 
0650: 44 45 53 43 29 3b 0a 20 20 7d 0a 20 20 67 65 74  DESC);.  }.  get
0660: 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 0a 7d 20 7b  _file_format.} {
0670: 34 7d 0a 0a 23 20 50 75 74 20 73 6f 6d 65 20 69  4}..# Put some i
0680: 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 74 68  nformation in th
0690: 65 20 74 61 62 6c 65 20 61 6e 64 20 76 65 72 69  e table and veri
06a0: 66 79 20 74 68 61 74 20 74 68 65 20 64 65 73 63  fy that the desc
06b0: 65 6e 64 69 6e 67 0a 23 20 69 6e 64 65 78 20 61  ending.# index a
06c0: 63 74 75 61 6c 6c 79 20 77 6f 72 6b 73 2e 0a 23  ctually works..#
06d0: 0a 64 6f 5f 74 65 73 74 20 64 65 73 63 69 64 78  .do_test descidx
06e0: 33 2d 32 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  3-2.1 {.  execsq
06f0: 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  l {.    INSERT I
0700: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 31 2c  NTO t1 VALUES(1,
0710: 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 4e 55 4c   NULL, NULL, NUL
0720: 4c 2c 20 4e 55 4c 4c 29 3b 0a 20 20 20 20 49 4e  L, NULL);.    IN
0730: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
0740: 55 45 53 28 32 2c 20 32 2c 20 32 2c 20 32 2c 20  UES(2, 2, 2, 2, 
0750: 32 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  2);.    INSERT I
0760: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 33 2c  NTO t1 VALUES(3,
0770: 20 33 2c 20 33 2c 20 33 2c 20 33 29 3b 0a 20 20   3, 3, 3, 3);.  
0780: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0790: 20 56 41 4c 55 45 53 28 34 2c 20 32 2e 35 2c 20   VALUES(4, 2.5, 
07a0: 32 2e 35 2c 20 32 2e 35 2c 20 32 2e 35 29 3b 0a  2.5, 2.5, 2.5);.
07b0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
07c0: 74 31 20 56 41 4c 55 45 53 28 35 2c 20 2d 35 2c  t1 VALUES(5, -5,
07d0: 20 2d 35 2c 20 2d 35 2c 20 2d 35 29 3b 0a 20 20   -5, -5, -5);.  
07e0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
07f0: 20 56 41 4c 55 45 53 28 36 2c 20 27 73 69 78 27   VALUES(6, 'six'
0800: 2c 20 27 73 69 78 27 2c 20 27 73 69 78 27 2c 20  , 'six', 'six', 
0810: 27 73 69 78 27 29 3b 0a 20 20 20 20 49 4e 53 45  'six');.    INSE
0820: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0830: 53 28 37 2c 20 78 27 37 37 27 2c 20 78 27 37 37  S(7, x'77', x'77
0840: 27 2c 20 78 27 37 37 27 2c 20 78 27 37 37 27 29  ', x'77', x'77')
0850: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0860: 4f 20 74 31 20 56 41 4c 55 45 53 28 38 2c 20 27  O t1 VALUES(8, '
0870: 65 69 67 68 74 27 2c 20 27 65 69 67 68 74 27 2c  eight', 'eight',
0880: 20 27 65 69 67 68 74 27 2c 20 27 65 69 67 68 74   'eight', 'eight
0890: 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ');.    INSERT I
08a0: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 39 2c  NTO t1 VALUES(9,
08b0: 20 78 27 37 39 37 39 27 2c 20 78 27 37 39 37 39   x'7979', x'7979
08c0: 27 2c 20 78 27 37 39 37 39 27 2c 20 78 27 37 39  ', x'7979', x'79
08d0: 37 39 27 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  79');.    SELECT
08e0: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
08f0: 31 3b 0a 20 20 7d 0a 7d 20 39 0a 64 6f 5f 74 65  1;.  }.} 9.do_te
0900: 73 74 20 64 65 73 63 69 64 78 33 2d 32 2e 32 20  st descidx3-2.2 
0910: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0920: 20 20 53 45 4c 45 43 54 20 69 20 46 52 4f 4d 20    SELECT i FROM 
0930: 74 31 20 4f 52 44 45 52 20 42 59 20 61 3b 0a 20  t1 ORDER BY a;. 
0940: 20 7d 0a 7d 20 7b 31 20 35 20 32 20 34 20 33 20   }.} {1 5 2 4 3 
0950: 38 20 36 20 37 20 39 7d 0a 64 6f 5f 74 65 73 74  8 6 7 9}.do_test
0960: 20 64 65 73 63 69 64 78 33 2d 32 2e 33 20 7b 0a   descidx3-2.3 {.
0970: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0980: 53 45 4c 45 43 54 20 69 20 46 52 4f 4d 20 74 31  SELECT i FROM t1
0990: 20 4f 52 44 45 52 20 42 59 20 61 20 44 45 53 43   ORDER BY a DESC
09a0: 3b 0a 20 20 7d 0a 7d 20 7b 39 20 37 20 36 20 38  ;.  }.} {9 7 6 8
09b0: 20 33 20 34 20 32 20 35 20 31 7d 0a 0a 23 20 54   3 4 2 5 1}..# T
09c0: 68 65 20 22 6e 61 74 75 72 61 6c 22 20 6f 72 64  he "natural" ord
09d0: 65 72 20 66 6f 72 20 74 68 65 20 69 6e 64 65 78  er for the index
09e0: 20 69 73 20 64 65 63 72 65 61 73 69 6e 67 0a 64   is decreasing.d
09f0: 6f 5f 74 65 73 74 20 64 65 73 63 69 64 78 33 2d  o_test descidx3-
0a00: 32 2e 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  2.4 {.  execsql 
0a10: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 69 20 46  {.    SELECT i F
0a20: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 3c 3d  ROM t1 WHERE a<=
0a30: 78 27 37 39 37 39 27 3b 0a 20 20 7d 0a 7d 20 7b  x'7979';.  }.} {
0a40: 39 20 37 20 36 20 38 20 33 20 34 20 32 20 35 7d  9 7 6 8 3 4 2 5}
0a50: 0a 64 6f 5f 74 65 73 74 20 64 65 73 63 69 64 78  .do_test descidx
0a60: 33 2d 32 2e 35 20 7b 0a 20 20 65 78 65 63 73 71  3-2.5 {.  execsq
0a70: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 69  l {.    SELECT i
0a80: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
0a90: 3e 2d 39 39 3b 0a 20 20 7d 0a 7d 20 7b 39 20 37  >-99;.  }.} {9 7
0aa0: 20 36 20 38 20 33 20 34 20 32 20 35 7d 0a 0a 23   6 8 3 4 2 5}..#
0ab0: 20 45 76 65 6e 20 77 68 65 6e 20 61 6c 6c 20 76   Even when all v
0ac0: 61 6c 75 65 73 20 6f 66 20 74 31 2e 61 20 61 72  alues of t1.a ar
0ad0: 65 20 74 68 65 20 73 61 6d 65 2c 20 73 6f 72 74  e the same, sort
0ae0: 69 6e 67 20 62 79 20 41 20 72 65 74 75 72 6e 73  ing by A returns
0af0: 0a 23 20 74 68 65 20 72 6f 77 73 20 69 6e 20 72  .# the rows in r
0b00: 65 76 65 72 73 65 20 6f 72 64 65 72 20 62 65 63  everse order bec
0b10: 61 75 73 65 20 74 68 69 73 20 74 68 65 20 6e 61  ause this the na
0b20: 74 75 72 61 6c 20 6f 72 64 65 72 20 6f 66 20 74  tural order of t
0b30: 68 65 0a 23 20 69 6e 64 65 78 2e 0a 23 0a 64 6f  he.# index..#.do
0b40: 5f 74 65 73 74 20 64 65 73 63 69 64 78 33 2d 33  _test descidx3-3
0b50: 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  .1 {.  execsql {
0b60: 0a 20 20 20 20 55 50 44 41 54 45 20 74 31 20 53  .    UPDATE t1 S
0b70: 45 54 20 61 3d 31 3b 0a 20 20 20 20 53 45 4c 45  ET a=1;.    SELE
0b80: 43 54 20 69 20 46 52 4f 4d 20 74 31 20 4f 52 44  CT i FROM t1 ORD
0b90: 45 52 20 42 59 20 61 3b 0a 20 20 7d 0a 7d 20 7b  ER BY a;.  }.} {
0ba0: 39 20 37 20 36 20 38 20 33 20 34 20 32 20 35 20  9 7 6 8 3 4 2 5 
0bb0: 31 7d 0a 64 6f 5f 74 65 73 74 20 64 65 73 63 69  1}.do_test desci
0bc0: 64 78 33 2d 33 2e 32 20 7b 0a 20 20 65 78 65 63  dx3-3.2 {.  exec
0bd0: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
0be0: 20 69 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   i FROM t1 WHERE
0bf0: 20 61 3d 31 20 41 4e 44 20 62 3e 30 20 41 4e 44   a=1 AND b>0 AND
0c00: 20 62 3c 27 7a 7a 7a 27 0a 20 20 7d 0a 7d 20 7b   b<'zzz'.  }.} {
0c10: 32 20 34 20 33 20 38 20 36 7d 0a 64 6f 5f 74 65  2 4 3 8 6}.do_te
0c20: 73 74 20 64 65 73 63 69 64 78 33 2d 33 2e 33 20  st descidx3-3.3 
0c30: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0c40: 20 20 53 45 4c 45 43 54 20 69 20 46 52 4f 4d 20    SELECT i FROM 
0c50: 74 31 20 57 48 45 52 45 20 62 3e 30 20 41 4e 44  t1 WHERE b>0 AND
0c60: 20 62 3c 27 7a 7a 7a 27 0a 20 20 7d 0a 7d 20 7b   b<'zzz'.  }.} {
0c70: 36 20 38 20 33 20 34 20 32 7d 0a 64 6f 5f 74 65  6 8 3 4 2}.do_te
0c80: 73 74 20 64 65 73 63 69 64 78 33 2d 33 2e 34 20  st descidx3-3.4 
0c90: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0ca0: 20 20 53 45 4c 45 43 54 20 69 20 46 52 4f 4d 20    SELECT i FROM 
0cb0: 74 31 20 57 48 45 52 45 20 61 3d 31 20 41 4e 44  t1 WHERE a=1 AND
0cc0: 20 62 3e 2d 39 39 39 39 20 41 4e 44 20 62 3c 78   b>-9999 AND b<x
0cd0: 27 66 66 66 66 66 66 66 66 27 0a 20 20 7d 0a 7d  'ffffffff'.  }.}
0ce0: 20 7b 35 20 32 20 34 20 33 20 38 20 36 20 37 20   {5 2 4 3 8 6 7 
0cf0: 39 7d 0a 64 6f 5f 74 65 73 74 20 64 65 73 63 69  9}.do_test desci
0d00: 64 78 33 2d 33 2e 35 20 7b 0a 20 20 65 78 65 63  dx3-3.5 {.  exec
0d10: 73 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  sql {.    SELECT
0d20: 20 69 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   i FROM t1 WHERE
0d30: 20 62 3e 2d 39 39 39 39 20 41 4e 44 20 62 3c 78   b>-9999 AND b<x
0d40: 27 66 66 66 66 66 66 66 66 27 0a 20 20 7d 0a 7d  'ffffffff'.  }.}
0d50: 20 7b 39 20 37 20 36 20 38 20 33 20 34 20 32 20   {9 7 6 8 3 4 2 
0d60: 35 7d 0a 0a 69 66 63 61 70 61 62 6c 65 20 73 75  5}..ifcapable su
0d70: 62 71 75 65 72 79 20 7b 0a 20 20 23 20 49 66 20  bquery {.  # If 
0d80: 74 68 65 20 73 75 62 71 75 65 72 79 20 63 61 70  the subquery cap
0d90: 61 62 69 6c 69 74 79 20 69 73 20 6e 6f 74 20 63  ability is not c
0da0: 6f 6d 70 69 6c 65 64 20 69 6e 20 74 6f 20 74 68  ompiled in to th
0db0: 65 20 62 69 6e 61 72 79 2c 20 74 68 65 6e 0a 20  e binary, then. 
0dc0: 20 23 20 74 68 65 20 49 4e 28 2e 2e 2e 29 20 6f   # the IN(...) o
0dd0: 70 65 72 61 74 6f 72 20 69 73 20 6e 6f 74 20 61  perator is not a
0de0: 76 61 69 6c 61 62 6c 65 2e 20 48 65 6e 63 65 20  vailable. Hence 
0df0: 74 68 65 73 65 20 74 65 73 74 73 20 63 61 6e 6e  these tests cann
0e00: 6f 74 20 62 65 20 0a 20 20 23 20 72 75 6e 2e 0a  ot be .  # run..
0e10: 20 20 64 6f 5f 74 65 73 74 20 64 65 73 63 69 64    do_test descid
0e20: 78 33 2d 34 2e 31 20 7b 0a 20 20 20 20 65 78 65  x3-4.1 {.    exe
0e30: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 55 50 44  csql {.      UPD
0e40: 41 54 45 20 74 31 20 53 45 54 20 61 3d 32 20 57  ATE t1 SET a=2 W
0e50: 48 45 52 45 20 69 3c 36 3b 0a 20 20 20 20 20 20  HERE i<6;.      
0e60: 53 45 4c 45 43 54 20 69 20 46 52 4f 4d 20 74 31  SELECT i FROM t1
0e70: 20 57 48 45 52 45 20 61 20 49 4e 20 28 31 2c 32   WHERE a IN (1,2
0e80: 29 20 41 4e 44 20 62 3e 30 20 41 4e 44 20 62 3c  ) AND b>0 AND b<
0e90: 27 7a 7a 7a 27 3b 0a 20 20 20 20 7d 0a 20 20 7d  'zzz';.    }.  }
0ea0: 20 7b 38 20 36 20 32 20 34 20 33 7d 0a 20 20 64   {8 6 2 4 3}.  d
0eb0: 6f 5f 74 65 73 74 20 64 65 73 63 69 64 78 33 2d  o_test descidx3-
0ec0: 34 2e 32 20 7b 0a 20 20 20 20 65 78 65 63 73 71  4.2 {.    execsq
0ed0: 6c 20 7b 0a 20 20 20 20 20 20 55 50 44 41 54 45  l {.      UPDATE
0ee0: 20 74 31 20 53 45 54 20 61 3d 31 3b 0a 20 20 20   t1 SET a=1;.   
0ef0: 20 20 20 53 45 4c 45 43 54 20 69 20 46 52 4f 4d     SELECT i FROM
0f00: 20 74 31 20 57 48 45 52 45 20 61 20 49 4e 20 28   t1 WHERE a IN (
0f10: 31 2c 32 29 20 41 4e 44 20 62 3e 30 20 41 4e 44  1,2) AND b>0 AND
0f20: 20 62 3c 27 7a 7a 7a 27 3b 0a 20 20 20 20 7d 0a   b<'zzz';.    }.
0f30: 20 20 7d 20 7b 32 20 34 20 33 20 38 20 36 7d 0a    } {2 4 3 8 6}.
0f40: 20 20 64 6f 5f 74 65 73 74 20 64 65 73 63 69 64    do_test descid
0f50: 78 33 2d 34 2e 33 20 7b 0a 20 20 20 20 65 78 65  x3-4.3 {.    exe
0f60: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 55 50 44  csql {.      UPD
0f70: 41 54 45 20 74 31 20 53 45 54 20 62 3d 32 3b 0a  ATE t1 SET b=2;.
0f80: 20 20 20 20 20 20 53 45 4c 45 43 54 20 69 20 46        SELECT i F
0f90: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61 20 49  ROM t1 WHERE a I
0fa0: 4e 20 28 31 2c 32 29 20 41 4e 44 20 62 3e 30 20  N (1,2) AND b>0 
0fb0: 41 4e 44 20 62 3c 27 7a 7a 7a 27 3b 0a 20 20 20  AND b<'zzz';.   
0fc0: 20 7d 0a 20 20 7d 20 7b 39 20 37 20 36 20 38 20   }.  } {9 7 6 8 
0fd0: 33 20 34 20 32 20 35 20 31 7d 0a 7d 0a 0a 66 69  3 4 2 5 1}.}..fi
0fe0: 6e 69 73 68 5f 74 65 73 74 0a                    nish_test.