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

Artifact 6fe3a56731d15978afbb74ae51b355fc9310f2ad:


0000: 23 20 32 30 31 34 20 4a 75 6e 65 20 31 37 0a 23  # 2014 June 17.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  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 0a 23 20 54 68 69 73 20 66 69  ******.# This fi
0170: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65  le implements re
0180: 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66  gression tests f
0190: 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  or SQLite librar
01a0: 79 2e 20 20 54 68 65 0a 23 20 66 6f 63 75 73 20  y.  The.# focus 
01b0: 6f 66 20 74 68 69 73 20 73 63 72 69 70 74 20 69  of this script i
01c0: 73 20 74 65 73 74 69 6e 67 20 74 68 65 20 46 54  s testing the FT
01d0: 53 35 20 6d 6f 64 75 6c 65 2e 0a 23 0a 23 0a 0a  S5 module..#.#..
01e0: 73 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69  source [file joi
01f0: 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  n [file dirname 
0200: 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 20 66  [info script]] f
0210: 74 73 35 5f 63 6f 6d 6d 6f 6e 2e 74 63 6c 5d 0a  ts5_common.tcl].
0220: 73 65 74 20 74 65 73 74 70 72 65 66 69 78 20 66  set testprefix f
0230: 74 73 35 61 62 0a 0a 23 20 49 66 20 53 51 4c 49  ts5ab..# If SQLI
0240: 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 35 20 69  TE_ENABLE_FTS5 i
0250: 73 20 64 65 66 69 6e 65 64 2c 20 6f 6d 69 74 20  s defined, omit 
0260: 74 68 69 73 20 66 69 6c 65 2e 0a 69 66 63 61 70  this file..ifcap
0270: 61 62 6c 65 20 21 66 74 73 35 20 7b 0a 20 20 66  able !fts5 {.  f
0280: 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74  inish_test.  ret
0290: 75 72 6e 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  urn.}..do_execsq
02a0: 6c 5f 74 65 73 74 20 31 2e 30 20 7b 0a 20 20 43  l_test 1.0 {.  C
02b0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
02c0: 42 4c 45 20 74 31 20 55 53 49 4e 47 20 66 74 73  BLE t1 USING fts
02d0: 35 28 61 2c 20 62 29 3b 0a 20 20 49 4e 53 45 52  5(a, b);.  INSER
02e0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
02f0: 28 27 68 65 6c 6c 6f 27 2c 20 27 77 6f 72 6c 64  ('hello', 'world
0300: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
0310: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 6f 6e 65  O t1 VALUES('one
0320: 20 74 77 6f 27 2c 20 27 74 68 72 65 65 20 66 6f   two', 'three fo
0330: 75 72 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  ur');.  INSERT I
0340: 4e 54 4f 20 74 31 28 72 6f 77 69 64 2c 20 61 2c  NTO t1(rowid, a,
0350: 20 62 29 20 56 41 4c 55 45 53 28 34 35 2c 20 27   b) VALUES(45, '
0360: 66 6f 72 74 79 27 2c 20 27 66 69 76 65 27 29 3b  forty', 'five');
0370: 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  .}..do_execsql_t
0380: 65 73 74 20 31 2e 31 20 7b 0a 20 20 53 45 4c 45  est 1.1 {.  SELE
0390: 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 4f 52 44  CT * FROM t1 ORD
03a0: 45 52 20 42 59 20 72 6f 77 69 64 20 44 45 53 43  ER BY rowid DESC
03b0: 3b 0a 7d 20 7b 20 66 6f 72 74 79 20 66 69 76 65  ;.} { forty five
03c0: 20 7b 6f 6e 65 20 74 77 6f 7d 20 7b 74 68 72 65   {one two} {thre
03d0: 65 20 66 6f 75 72 7d 20 68 65 6c 6c 6f 20 77 6f  e four} hello wo
03e0: 72 6c 64 20 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  rld }..do_execsq
03f0: 6c 5f 74 65 73 74 20 31 2e 32 20 7b 0a 20 20 53  l_test 1.2 {.  S
0400: 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d  ELECT rowid FROM
0410: 20 74 31 20 4f 52 44 45 52 20 42 59 20 72 6f 77   t1 ORDER BY row
0420: 69 64 20 44 45 53 43 3b 0a 7d 20 7b 34 35 20 32  id DESC;.} {45 2
0430: 20 31 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f   1}..do_execsql_
0440: 74 65 73 74 20 31 2e 33 20 7b 0a 20 20 53 45 4c  test 1.3 {.  SEL
0450: 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74  ECT rowid FROM t
0460: 31 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  1 ORDER BY rowid
0470: 20 41 53 43 3b 0a 7d 20 7b 31 20 32 20 34 35 7d   ASC;.} {1 2 45}
0480: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
0490: 74 20 31 2e 34 20 7b 0a 20 20 53 45 4c 45 43 54  t 1.4 {.  SELECT
04a0: 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45   * FROM t1 WHERE
04b0: 20 72 6f 77 69 64 3d 32 3b 0a 7d 20 7b 7b 6f 6e   rowid=2;.} {{on
04c0: 65 20 74 77 6f 7d 20 7b 74 68 72 65 65 20 66 6f  e two} {three fo
04d0: 75 72 7d 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c  ur}}..do_execsql
04e0: 5f 74 65 73 74 20 31 2e 35 20 7b 0a 20 20 53 45  _test 1.5 {.  SE
04f0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
0500: 48 45 52 45 20 72 6f 77 69 64 3d 32 2e 30 31 3b  HERE rowid=2.01;
0510: 0a 7d 20 7b 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  .} {}..do_execsq
0520: 6c 5f 74 65 73 74 20 31 2e 36 20 7b 0a 20 20 53  l_test 1.6 {.  S
0530: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
0540: 57 48 45 52 45 20 72 6f 77 69 64 3d 31 2e 39 39  WHERE rowid=1.99
0550: 3b 0a 7d 20 7b 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  ;.} {}..#-------
0560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
05a0: 2d 2d 0a 0a 72 65 73 65 74 5f 64 62 0a 64 6f 5f  --..reset_db.do_
05b0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 31  execsql_test 2.1
05c0: 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49 52 54   {.  CREATE VIRT
05d0: 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55 53 49  UAL TABLE t1 USI
05e0: 4e 47 20 66 74 73 35 28 78 29 3b 0a 20 20 49 4e  NG fts5(x);.  IN
05f0: 53 45 52 54 20 49 4e 54 4f 20 74 31 28 74 31 2c  SERT INTO t1(t1,
0600: 20 72 61 6e 6b 29 20 56 41 4c 55 45 53 28 27 70   rank) VALUES('p
0610: 67 73 7a 27 2c 20 33 32 29 3b 0a 20 20 49 4e 53  gsz', 32);.  INS
0620: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
0630: 45 53 28 27 6f 6e 65 27 29 3b 0a 20 20 49 4e 53  ES('one');.  INS
0640: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
0650: 45 53 28 27 74 77 6f 27 29 3b 0a 20 20 49 4e 53  ES('two');.  INS
0660: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
0670: 45 53 28 27 74 68 72 65 65 27 29 3b 0a 7d 0a 0a  ES('three');.}..
0680: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
0690: 20 32 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20   2.2 {.  SELECT 
06a0: 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31  rowid, * FROM t1
06b0: 20 57 48 45 52 45 20 74 31 20 4d 41 54 43 48 20   WHERE t1 MATCH 
06c0: 27 41 4e 44 20 41 4e 44 27 0a 7d 20 7b 31 20 7b  'AND AND'.} {1 {
06d0: 66 74 73 35 3a 20 73 79 6e 74 61 78 20 65 72 72  fts5: syntax err
06e0: 6f 72 20 6e 65 61 72 20 22 41 4e 44 22 7d 7d 0a  or near "AND"}}.
06f0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0700: 20 32 2e 33 20 7b 20 53 45 4c 45 43 54 20 72 6f   2.3 { SELECT ro
0710: 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31 20 57  wid, * FROM t1 W
0720: 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 27 74  HERE t1 MATCH 't
0730: 77 6f 27 20 7d 20 7b 32 20 74 77 6f 7d 0a 64 6f  wo' } {2 two}.do
0740: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e  _execsql_test 2.
0750: 34 20 7b 20 53 45 4c 45 43 54 20 72 6f 77 69 64  4 { SELECT rowid
0760: 2c 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  , * FROM t1 WHER
0770: 45 20 74 31 20 4d 41 54 43 48 20 27 74 68 72 65  E t1 MATCH 'thre
0780: 65 27 20 7d 20 7b 33 20 74 68 72 65 65 7d 0a 64  e' } {3 three}.d
0790: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32  o_execsql_test 2
07a0: 2e 35 20 7b 20 53 45 4c 45 43 54 20 72 6f 77 69  .5 { SELECT rowi
07b0: 64 2c 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45  d, * FROM t1 WHE
07c0: 52 45 20 74 31 20 4d 41 54 43 48 20 27 6f 6e 65  RE t1 MATCH 'one
07d0: 27 20 7d 20 7b 31 20 6f 6e 65 7d 0a 0a 64 6f 5f  ' } {1 one}..do_
07e0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 36  execsql_test 2.6
07f0: 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f   {.  INSERT INTO
0800: 20 74 31 20 56 41 4c 55 45 53 28 27 61 20 62 20   t1 VALUES('a b 
0810: 63 20 64 20 65 20 66 20 67 27 29 3b 0a 20 20 49  c d e f g');.  I
0820: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0830: 4c 55 45 53 28 27 62 20 64 20 65 20 61 20 61 20  LUES('b d e a a 
0840: 61 20 69 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  a i');.  INSERT 
0850: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
0860: 78 20 79 20 7a 20 62 20 63 20 63 20 63 27 29 3b  x y z b c c c');
0870: 0a 7d 0a 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20  .}..foreach {tn 
0880: 65 78 70 72 20 72 65 73 7d 20 7b 0a 20 20 31 20  expr res} {.  1 
0890: 20 61 20 20 20 20 7b 35 20 34 7d 0a 20 20 32 20   a    {5 4}.  2 
08a0: 20 62 20 20 20 20 7b 36 20 35 20 34 7d 0a 20 20   b    {6 5 4}.  
08b0: 33 20 20 63 20 20 20 20 7b 36 20 34 7d 0a 20 20  3  c    {6 4}.  
08c0: 34 20 20 64 20 20 20 20 7b 35 20 34 7d 0a 20 20  4  d    {5 4}.  
08d0: 35 20 20 65 20 20 20 20 7b 35 20 34 7d 0a 20 20  5  e    {5 4}.  
08e0: 36 20 20 66 20 20 20 20 7b 34 7d 0a 20 20 37 20  6  f    {4}.  7 
08f0: 20 67 20 20 20 20 7b 34 7d 0a 20 20 38 20 20 78   g    {4}.  8  x
0900: 20 20 20 20 7b 36 7d 0a 20 20 39 20 20 79 20 20      {6}.  9  y  
0910: 20 20 7b 36 7d 0a 20 20 31 30 20 7a 20 20 20 20    {6}.  10 z    
0920: 7b 36 7d 0a 7d 20 7b 0a 20 20 64 6f 5f 65 78 65  {6}.} {.  do_exe
0930: 63 73 71 6c 5f 74 65 73 74 20 32 2e 37 2e 24 74  csql_test 2.7.$t
0940: 6e 2e 31 20 7b 20 0a 20 20 20 20 53 45 4c 45 43  n.1 { .    SELEC
0950: 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 20  T rowid FROM t1 
0960: 57 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 24  WHERE t1 MATCH $
0970: 65 78 70 72 20 4f 52 44 45 52 20 42 59 20 72 6f  expr ORDER BY ro
0980: 77 69 64 20 44 45 53 43 0a 20 20 7d 20 24 72 65  wid DESC.  } $re
0990: 73 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74  s.  do_execsql_t
09a0: 65 73 74 20 32 2e 37 2e 24 74 6e 2e 32 20 7b 20  est 2.7.$tn.2 { 
09b0: 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69  .    SELECT rowi
09c0: 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  d FROM t1 WHERE 
09d0: 74 31 20 4d 41 54 43 48 20 24 65 78 70 72 20 4f  t1 MATCH $expr O
09e0: 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 41 53  RDER BY rowid AS
09f0: 43 0a 20 20 7d 20 5b 6c 73 6f 72 74 20 2d 69 6e  C.  } [lsort -in
0a00: 74 65 67 65 72 20 24 72 65 73 5d 0a 7d 0a 0a 23  teger $res].}..#
0a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 72 65 73 65  ---------.#.rese
0a60: 74 5f 64 62 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  t_db.do_execsql_
0a70: 74 65 73 74 20 33 2e 30 20 7b 0a 20 20 43 52 45  test 3.0 {.  CRE
0a80: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
0a90: 45 20 74 31 20 55 53 49 4e 47 20 66 74 73 35 28  E t1 USING fts5(
0aa0: 61 2c 62 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  a,b);.  INSERT I
0ab0: 4e 54 4f 20 74 31 28 74 31 2c 20 72 61 6e 6b 29  NTO t1(t1, rank)
0ac0: 20 56 41 4c 55 45 53 28 27 70 67 73 7a 27 2c 20   VALUES('pgsz', 
0ad0: 33 32 29 3b 0a 7d 0a 0a 66 6f 72 65 61 63 68 20  32);.}..foreach 
0ae0: 7b 74 6e 20 61 20 62 7d 20 7b 0a 20 20 20 31 20  {tn a b} {.   1 
0af0: 7b 61 62 61 73 68 65 64 20 61 62 61 6e 64 6f 6e  {abashed abandon
0b00: 73 20 61 62 61 73 65 20 61 62 61 73 68 20 61 62  s abase abash ab
0b10: 61 66 74 7d 20 7b 61 62 61 73 65 73 20 61 62 61  aft} {abases aba
0b20: 73 65 64 7d 0a 20 20 20 32 20 7b 61 62 61 73 69  sed}.   2 {abasi
0b30: 6e 67 20 61 62 61 73 65 73 20 61 62 61 66 74 20  ng abases abaft 
0b40: 61 62 61 74 65 64 20 61 62 61 6e 64 6f 6e 73 7d  abated abandons}
0b50: 20 7b 61 62 61 73 65 73 20 61 62 61 6e 64 6f 6e   {abases abandon
0b60: 65 64 7d 0a 20 20 20 33 20 7b 61 62 61 74 65 6d  ed}.   3 {abatem
0b70: 65 6e 74 20 61 62 61 73 68 20 61 62 61 73 68 20  ent abash abash 
0b80: 61 62 61 74 65 64 20 61 62 61 73 65 7d 20 7b 61  abated abase} {a
0b90: 62 61 73 65 6d 65 6e 74 73 20 61 62 61 73 68 69  basements abashi
0ba0: 6e 67 7d 0a 20 20 20 34 20 7b 61 62 61 66 74 20  ng}.   4 {abaft 
0bb0: 61 62 61 73 65 6d 65 6e 74 73 20 61 62 61 73 65  abasements abase
0bc0: 20 61 62 61 73 65 6d 65 6e 74 20 61 62 61 73 69   abasement abasi
0bd0: 6e 67 7d 20 7b 61 62 61 73 65 6d 65 6e 74 20 61  ng} {abasement a
0be0: 62 61 73 65 73 7d 0a 20 20 20 35 20 7b 61 62 61  bases}.   5 {aba
0bf0: 66 74 20 61 62 61 73 68 69 6e 67 20 61 62 61 74  ft abashing abat
0c00: 65 6d 65 6e 74 20 61 62 61 73 68 20 61 62 61 73  ement abash abas
0c10: 65 6d 65 6e 74 73 7d 20 7b 61 62 61 6e 64 6f 6e  ements} {abandon
0c20: 73 20 61 62 61 6e 64 6f 6e 69 6e 67 7d 0a 20 20  s abandoning}.  
0c30: 20 36 20 7b 61 62 61 63 6b 20 61 62 61 74 65 20   6 {aback abate 
0c40: 61 62 61 73 65 6d 65 6e 74 73 20 61 62 61 73 68  abasements abash
0c50: 65 73 20 61 62 61 6e 64 6f 6e 65 64 7d 20 7b 61  es abandoned} {a
0c60: 62 61 73 65 6d 65 6e 74 20 61 62 61 73 65 64 7d  basement abased}
0c70: 0a 20 20 20 37 20 7b 61 62 61 6e 64 6f 6e 73 20  .   7 {abandons 
0c80: 61 62 61 74 65 64 20 61 62 61 73 65 64 20 61 62  abated abased ab
0c90: 61 63 6b 20 61 62 61 6e 64 6f 6e 69 6e 67 7d 20  ack abandoning} 
0ca0: 7b 61 62 61 73 65 73 20 61 62 61 6e 64 6f 6e 65  {abases abandone
0cb0: 64 7d 0a 20 20 20 38 20 7b 61 62 61 73 68 69 6e  d}.   8 {abashin
0cc0: 67 20 61 62 61 73 65 73 20 61 62 61 73 65 6d 65  g abases abaseme
0cd0: 6e 74 20 61 62 61 66 74 20 61 62 61 73 68 69 6e  nt abaft abashin
0ce0: 67 7d 20 7b 61 62 61 73 68 65 64 20 61 62 61 74  g} {abashed abat
0cf0: 65 7d 0a 20 20 20 39 20 7b 61 62 61 73 68 20 61  e}.   9 {abash a
0d00: 62 61 73 65 20 61 62 61 74 65 20 61 62 61 73 68  base abate abash
0d10: 69 6e 67 20 61 62 61 73 68 65 64 7d 20 7b 61 62  ing abashed} {ab
0d20: 61 6e 64 6f 6e 20 61 62 61 6e 64 6f 6e 65 64 7d  andon abandoned}
0d30: 0a 20 20 20 31 30 20 7b 61 62 61 74 65 20 61 62  .   10 {abate ab
0d40: 61 6e 64 6f 6e 69 6e 67 20 61 62 61 6e 64 6f 6e  andoning abandon
0d50: 73 20 61 62 61 73 65 6d 65 6e 74 20 61 62 61 63  s abasement abac
0d60: 6b 7d 20 7b 61 62 61 6e 64 6f 6e 20 61 62 61 6e  k} {abandon aban
0d70: 64 6f 6e 69 6e 67 7d 0a 7d 20 7b 0a 20 20 64 6f  doning}.} {.  do
0d80: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33 2e  _execsql_test 3.
0d90: 31 2e 24 74 6e 2e 31 20 7b 20 49 4e 53 45 52 54  1.$tn.1 { INSERT
0da0: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0db0: 24 61 2c 20 24 62 29 20 7d 20 0a 20 20 64 6f 5f  $a, $b) } .  do_
0dc0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 31  execsql_test 3.1
0dd0: 2e 24 74 6e 2e 32 20 7b 20 49 4e 53 45 52 54 20  .$tn.2 { INSERT 
0de0: 49 4e 54 4f 20 74 31 28 74 31 29 20 56 41 4c 55  INTO t1(t1) VALU
0df0: 45 53 28 27 69 6e 74 65 67 72 69 74 79 2d 63 68  ES('integrity-ch
0e00: 65 63 6b 27 29 20 7d 0a 7d 0a 0a 66 6f 72 65 61  eck') }.}..forea
0e10: 63 68 20 7b 74 6e 20 65 78 70 72 20 72 65 73 7d  ch {tn expr res}
0e20: 20 7b 0a 20 20 31 20 7b 61 62 61 73 68 7d 20 7b   {.  1 {abash} {
0e30: 39 20 35 20 33 20 31 7d 0a 20 20 32 20 7b 61 62  9 5 3 1}.  2 {ab
0e40: 61 73 65 7d 20 7b 39 20 34 20 33 20 31 7d 0a 20  ase} {9 4 3 1}. 
0e50: 20 33 20 7b 61 62 61 73 65 20 2b 20 61 62 61 73   3 {abase + abas
0e60: 68 7d 20 7b 31 7d 0a 20 20 34 20 7b 61 62 61 73  h} {1}.  4 {abas
0e70: 68 20 2b 20 61 62 61 73 65 7d 20 7b 39 7d 0a 20  h + abase} {9}. 
0e80: 20 35 20 7b 61 62 61 66 74 20 2b 20 61 62 61 73   5 {abaft + abas
0e90: 68 69 6e 67 7d 20 7b 38 20 35 7d 0a 20 20 36 20  hing} {8 5}.  6 
0ea0: 7b 61 62 61 6e 64 6f 6e 20 2b 20 61 62 61 6e 64  {abandon + aband
0eb0: 6f 6e 69 6e 67 7d 20 7b 31 30 7d 0a 20 20 37 20  oning} {10}.  7 
0ec0: 7b 22 61 62 61 73 68 69 6e 67 20 61 62 61 73 65  {"abashing abase
0ed0: 73 20 61 62 61 73 65 6d 65 6e 74 20 61 62 61 66  s abasement abaf
0ee0: 74 20 61 62 61 73 68 69 6e 67 22 7d 20 7b 38 7d  t abashing"} {8}
0ef0: 0a 7d 20 7b 0a 20 20 64 6f 5f 65 78 65 63 73 71  .} {.  do_execsq
0f00: 6c 5f 74 65 73 74 20 33 2e 32 2e 24 74 6e 20 7b  l_test 3.2.$tn {
0f10: 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69  .    SELECT rowi
0f20: 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  d FROM t1 WHERE 
0f30: 74 31 20 4d 41 54 43 48 20 24 65 78 70 72 20 4f  t1 MATCH $expr O
0f40: 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45  RDER BY rowid DE
0f50: 53 43 0a 20 20 7d 20 24 72 65 73 0a 7d 0a 0a 64  SC.  } $res.}..d
0f60: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33  o_execsql_test 3
0f70: 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 72 6f  .3 {.  SELECT ro
0f80: 77 69 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52  wid FROM t1 WHER
0f90: 45 20 74 31 20 4d 41 54 43 48 20 27 4e 45 41 52  E t1 MATCH 'NEAR
0fa0: 28 61 62 61 63 6b 20 61 62 61 74 65 2c 20 32 29  (aback abate, 2)
0fb0: 27 0a 7d 20 7b 36 7d 0a 0a 66 6f 72 65 61 63 68  '.} {6}..foreach
0fc0: 20 7b 74 6e 20 65 78 70 72 20 72 65 73 7d 20 7b   {tn expr res} {
0fd0: 0a 20 20 31 20 7b 61 62 61 73 68 7d 20 7b 31 20  .  1 {abash} {1 
0fe0: 33 20 35 20 39 7d 0a 20 20 32 20 7b 61 62 61 73  3 5 9}.  2 {abas
0ff0: 65 7d 20 7b 31 20 33 20 34 20 39 7d 0a 20 20 33  e} {1 3 4 9}.  3
1000: 20 7b 61 62 61 73 65 20 2b 20 61 62 61 73 68 7d   {abase + abash}
1010: 20 7b 31 7d 0a 20 20 34 20 7b 61 62 61 73 68 20   {1}.  4 {abash 
1020: 2b 20 61 62 61 73 65 7d 20 7b 39 7d 0a 20 20 35  + abase} {9}.  5
1030: 20 7b 61 62 61 66 74 20 2b 20 61 62 61 73 68 69   {abaft + abashi
1040: 6e 67 7d 20 7b 35 20 38 7d 0a 20 20 36 20 7b 61  ng} {5 8}.  6 {a
1050: 62 61 6e 64 6f 6e 20 2b 20 61 62 61 6e 64 6f 6e  bandon + abandon
1060: 69 6e 67 7d 20 7b 31 30 7d 0a 20 20 37 20 7b 22  ing} {10}.  7 {"
1070: 61 62 61 73 68 69 6e 67 20 61 62 61 73 65 73 20  abashing abases 
1080: 61 62 61 73 65 6d 65 6e 74 20 61 62 61 66 74 20  abasement abaft 
1090: 61 62 61 73 68 69 6e 67 22 7d 20 7b 38 7d 0a 7d  abashing"} {8}.}
10a0: 20 7b 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f   {.  do_execsql_
10b0: 74 65 73 74 20 33 2e 34 2e 24 74 6e 20 7b 0a 20  test 3.4.$tn {. 
10c0: 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20     SELECT rowid 
10d0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31  FROM t1 WHERE t1
10e0: 20 4d 41 54 43 48 20 24 65 78 70 72 0a 20 20 7d   MATCH $expr.  }
10f0: 20 24 72 65 73 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d   $res.}..#------
1100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1130: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1140: 2d 2d 2d 0a 23 20 44 6f 63 75 6d 65 6e 74 73 20  ---.# Documents 
1150: 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 32  with more than 2
1160: 4d 20 74 6f 6b 65 6e 73 2e 0a 23 0a 0a 64 6f 5f  M tokens..#..do_
1170: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 30  execsql_test 4.0
1180: 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49 52 54   {.  CREATE VIRT
1190: 55 41 4c 20 54 41 42 4c 45 20 73 31 20 55 53 49  UAL TABLE s1 USI
11a0: 4e 47 20 66 74 73 35 28 78 29 3b 0a 7d 0a 66 6f  NG fts5(x);.}.fo
11b0: 72 65 61 63 68 20 7b 74 6e 20 64 6f 63 7d 20 5b  reach {tn doc} [
11c0: 6c 69 73 74 20 5c 0a 20 20 31 20 5b 73 74 72 69  list \.  1 [stri
11d0: 6e 67 20 72 65 70 65 61 74 20 7b 61 20 78 20 7d  ng repeat {a x }
11e0: 20 31 35 30 30 30 30 30 5d 20 20 20 20 20 20 20   1500000]       
11f0: 5c 0a 20 20 32 20 22 5b 73 74 72 69 6e 67 20 72  \.  2 "[string r
1200: 65 70 65 61 74 20 7b 61 20 61 20 7d 20 31 35 30  epeat {a a } 150
1210: 30 30 30 30 5d 20 78 22 20 20 20 5c 0a 5d 20 7b  0000] x"   \.] {
1220: 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .  do_execsql_te
1230: 73 74 20 34 2e 24 74 6e 20 7b 20 49 4e 53 45 52  st 4.$tn { INSER
1240: 54 20 49 4e 54 4f 20 73 31 20 56 41 4c 55 45 53  T INTO s1 VALUES
1250: 28 24 64 6f 63 29 20 7d 0a 7d 0a 0a 64 6f 5f 65  ($doc) }.}..do_e
1260: 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 33 20  xecsql_test 4.3 
1270: 7b 0a 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64  {.  SELECT rowid
1280: 20 46 52 4f 4d 20 73 31 20 57 48 45 52 45 20 73   FROM s1 WHERE s
1290: 31 20 4d 41 54 43 48 20 27 78 27 0a 7d 20 7b 31  1 MATCH 'x'.} {1
12a0: 20 32 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f   2}..do_execsql_
12b0: 74 65 73 74 20 34 2e 34 20 7b 0a 20 20 53 45 4c  test 4.4 {.  SEL
12c0: 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 73  ECT rowid FROM s
12d0: 31 20 57 48 45 52 45 20 73 31 20 4d 41 54 43 48  1 WHERE s1 MATCH
12e0: 20 27 22 61 20 78 22 27 0a 7d 20 7b 31 20 32 7d   '"a x"'.} {1 2}
12f0: 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..#-------------
1300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 43  ------------.# C
1340: 68 65 63 6b 20 74 68 61 74 20 61 20 73 70 65 63  heck that a spec
1350: 69 61 6c 20 63 61 73 65 20 6f 66 20 73 65 67 6d  ial case of segm
1360: 65 6e 74 20 70 72 6f 6d 6f 74 69 6f 6e 20 77 6f  ent promotion wo
1370: 72 6b 73 2e 20 54 68 65 20 63 61 73 65 20 69 73  rks. The case is
1380: 20 77 68 65 72 65 0a 23 20 61 20 6e 65 77 20 73   where.# a new s
1390: 65 67 6d 65 6e 74 20 69 73 20 77 72 69 74 74 65  egment is writte
13a0: 6e 20 74 6f 20 6c 65 76 65 6c 20 4c 2c 20 62 75  n to level L, bu
13b0: 74 20 74 68 65 20 6f 6c 64 65 73 74 20 73 65 67  t the oldest seg
13c0: 6d 65 6e 74 20 77 69 74 68 69 6e 20 6c 65 76 65  ment within leve
13d0: 6c 0a 23 20 28 4c 2d 32 29 20 69 73 20 6c 61 72  l.# (L-2) is lar
13e0: 67 65 72 20 74 68 61 6e 20 69 74 2e 0a 23 0a 64  ger than it..#.d
13f0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35  o_execsql_test 5
1400: 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49  .0 {.  CREATE VI
1410: 52 54 55 41 4c 20 54 41 42 4c 45 20 73 32 20 55  RTUAL TABLE s2 U
1420: 53 49 4e 47 20 66 74 73 35 28 78 29 3b 0a 20 20  SING fts5(x);.  
1430: 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 32 28 73  INSERT INTO s2(s
1440: 32 2c 20 72 61 6e 6b 29 20 56 41 4c 55 45 53 28  2, rank) VALUES(
1450: 27 70 67 73 7a 27 2c 20 33 32 29 3b 0a 20 20 49  'pgsz', 32);.  I
1460: 4e 53 45 52 54 20 49 4e 54 4f 20 73 32 28 73 32  NSERT INTO s2(s2
1470: 2c 20 72 61 6e 6b 29 20 56 41 4c 55 45 53 28 27  , rank) VALUES('
1480: 61 75 74 6f 6d 65 72 67 65 27 2c 20 30 29 3b 0a  automerge', 0);.
1490: 7d 0a 0a 70 72 6f 63 20 72 6e 64 64 6f 63 20 7b  }..proc rnddoc {
14a0: 6e 7d 20 7b 0a 20 20 73 65 74 20 6d 61 70 20 5b  n} {.  set map [
14b0: 6c 69 73 74 20 30 20 61 20 20 31 20 62 20 20 32  list 0 a  1 b  2
14c0: 20 63 20 20 33 20 64 20 20 34 20 65 20 20 35 20   c  3 d  4 e  5 
14d0: 66 20 20 36 20 67 20 20 37 20 68 20 20 38 20 69  f  6 g  7 h  8 i
14e0: 20 20 39 20 6a 5d 0a 20 20 73 65 74 20 64 6f 63    9 j].  set doc
14f0: 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 20 7b 73   [list].  for {s
1500: 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 6e  et i 0} {$i < $n
1510: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20  } {incr i} {.   
1520: 20 6c 61 70 70 65 6e 64 20 64 6f 63 20 5b 73 74   lappend doc [st
1530: 72 69 6e 67 20 6d 61 70 20 24 6d 61 70 20 5b 66  ring map $map [f
1540: 6f 72 6d 61 74 20 25 2e 33 64 20 5b 65 78 70 72  ormat %.3d [expr
1550: 20 69 6e 74 28 72 61 6e 64 28 29 2a 31 30 30 30   int(rand()*1000
1560: 29 5d 5d 5d 0a 20 20 7d 0a 20 20 73 65 74 20 64  )]]].  }.  set d
1570: 6f 63 0a 7d 0a 64 62 20 66 75 6e 63 20 72 6e 64  oc.}.db func rnd
1580: 64 6f 63 20 72 6e 64 64 6f 63 0a 0a 64 6f 5f 74  doc rnddoc..do_t
1590: 65 73 74 20 35 2e 31 20 7b 0a 20 20 66 6f 72 20  est 5.1 {.  for 
15a0: 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 20 3c 3d  {set i 1} {$i <=
15b0: 20 36 35 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a   65} {incr i} {.
15c0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e      execsql { IN
15d0: 53 45 52 54 20 49 4e 54 4f 20 73 32 20 56 41 4c  SERT INTO s2 VAL
15e0: 55 45 53 28 72 6e 64 64 6f 63 28 31 30 29 29 20  UES(rnddoc(10)) 
15f0: 7d 0a 20 20 7d 0a 20 20 66 6f 72 20 7b 73 65 74  }.  }.  for {set
1600: 20 69 20 31 7d 20 7b 24 69 20 3c 3d 20 36 33 7d   i 1} {$i <= 63}
1610: 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20   {incr i} {.    
1620: 65 78 65 63 73 71 6c 20 7b 20 44 45 4c 45 54 45  execsql { DELETE
1630: 20 46 52 4f 4d 20 73 32 20 57 48 45 52 45 20 72   FROM s2 WHERE r
1640: 6f 77 69 64 20 3d 20 24 69 20 7d 0a 20 20 7d 0a  owid = $i }.  }.
1650: 20 20 66 74 73 35 5f 6c 65 76 65 6c 5f 73 65 67    fts5_level_seg
1660: 73 20 73 32 0a 7d 20 7b 30 20 38 7d 0a 0a 64 6f  s s2.} {0 8}..do
1670: 5f 74 65 73 74 20 35 2e 32 20 7b 0a 20 20 65 78  _test 5.2 {.  ex
1680: 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45  ecsql {.    INSE
1690: 52 54 20 49 4e 54 4f 20 73 32 28 73 32 2c 20 72  RT INTO s2(s2, r
16a0: 61 6e 6b 29 20 56 41 4c 55 45 53 28 27 61 75 74  ank) VALUES('aut
16b0: 6f 6d 65 72 67 65 27 2c 20 38 29 3b 0a 20 20 7d  omerge', 8);.  }
16c0: 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d  .  for {set i 0}
16d0: 20 7b 24 69 20 3c 20 37 7d 20 7b 69 6e 63 72 20   {$i < 7} {incr 
16e0: 69 7d 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  i} {.    execsql
16f0: 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 73   { INSERT INTO s
1700: 32 20 56 41 4c 55 45 53 28 72 6e 64 64 6f 63 28  2 VALUES(rnddoc(
1710: 35 30 29 29 20 7d 0a 20 20 7d 0a 20 20 66 74 73  50)) }.  }.  fts
1720: 35 5f 6c 65 76 65 6c 5f 73 65 67 73 20 73 32 0a  5_level_segs s2.
1730: 7d 20 7b 38 20 30 20 30 7d 0a 0a 23 20 54 65 73  } {8 0 0}..# Tes
1740: 74 20 61 6c 73 6f 20 74 68 65 20 6f 74 68 65 72  t also the other
1750: 20 74 79 70 65 20 6f 66 20 73 65 67 6d 65 6e 74   type of segment
1760: 20 70 72 6f 6d 6f 74 69 6f 6e 20 2d 20 77 68 65   promotion - whe
1770: 6e 20 61 20 6e 65 77 20 73 65 67 6d 65 6e 74 20  n a new segment 
1780: 69 73 20 77 72 69 74 74 65 6e 0a 23 20 74 68 61  is written.# tha
1790: 74 20 69 73 20 6c 61 72 67 65 72 20 74 68 61 6e  t is larger than
17a0: 20 73 65 67 6d 65 6e 74 73 20 69 6d 6d 65 64 69   segments immedi
17b0: 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 69 6e 67 20  ately following 
17c0: 69 74 2e 0a 64 6f 5f 74 65 73 74 20 35 2e 33 20  it..do_test 5.3 
17d0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
17e0: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 73 32 3b    DROP TABLE s2;
17f0: 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54  .    CREATE VIRT
1800: 55 41 4c 20 54 41 42 4c 45 20 73 32 20 55 53 49  UAL TABLE s2 USI
1810: 4e 47 20 66 74 73 35 28 78 29 3b 0a 20 20 20 20  NG fts5(x);.    
1820: 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 32 28 73  INSERT INTO s2(s
1830: 32 2c 20 72 61 6e 6b 29 20 56 41 4c 55 45 53 28  2, rank) VALUES(
1840: 27 70 67 73 7a 27 2c 20 33 32 29 3b 0a 20 20 20  'pgsz', 32);.   
1850: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 32 28   INSERT INTO s2(
1860: 73 32 2c 20 72 61 6e 6b 29 20 56 41 4c 55 45 53  s2, rank) VALUES
1870: 28 27 61 75 74 6f 6d 65 72 67 65 27 2c 20 30 29  ('automerge', 0)
1880: 3b 0a 20 20 7d 0a 0a 20 20 66 6f 72 20 7b 73 65  ;.  }..  for {se
1890: 74 20 69 20 31 7d 20 7b 24 69 20 3c 3d 20 31 36  t i 1} {$i <= 16
18a0: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20  } {incr i} {.   
18b0: 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52   execsql { INSER
18c0: 54 20 49 4e 54 4f 20 73 32 20 56 41 4c 55 45 53  T INTO s2 VALUES
18d0: 28 72 6e 64 64 6f 63 28 35 29 29 20 7d 0a 20 20  (rnddoc(5)) }.  
18e0: 7d 0a 20 20 66 74 73 35 5f 6c 65 76 65 6c 5f 73  }.  fts5_level_s
18f0: 65 67 73 20 73 32 0a 7d 20 7b 30 20 31 7d 0a 0a  egs s2.} {0 1}..
1900: 64 6f 5f 74 65 73 74 20 35 2e 34 20 7b 0a 20 20  do_test 5.4 {.  
1910: 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54  execsql { INSERT
1920: 20 49 4e 54 4f 20 73 32 20 56 41 4c 55 45 53 28   INTO s2 VALUES(
1930: 72 6e 64 64 6f 63 28 31 36 30 29 29 20 7d 0a 20  rnddoc(160)) }. 
1940: 20 66 74 73 35 5f 6c 65 76 65 6c 5f 73 65 67 73   fts5_level_segs
1950: 20 73 32 0a 7d 20 7b 32 20 30 7d 0a 0a 23 2d 2d   s2.} {2 0}..#--
1960: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1990: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
19a0: 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 64 6f 5f 65 78 65  -------.#.do_exe
19b0: 63 73 71 6c 5f 74 65 73 74 20 36 2e 30 20 7b 0a  csql_test 6.0 {.
19c0: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
19d0: 20 54 41 42 4c 45 20 73 33 20 55 53 49 4e 47 20   TABLE s3 USING 
19e0: 66 74 73 35 28 78 29 3b 0a 20 20 42 45 47 49 4e  fts5(x);.  BEGIN
19f0: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
1a00: 4f 20 73 33 20 56 41 4c 55 45 53 28 27 61 20 62  O s3 VALUES('a b
1a10: 20 63 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54   c');.    INSERT
1a20: 20 49 4e 54 4f 20 73 33 20 56 41 4c 55 45 53 28   INTO s3 VALUES(
1a30: 27 41 20 42 20 43 27 29 3b 0a 7d 0a 0a 64 6f 5f  'A B C');.}..do_
1a40: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 36 2e 31  execsql_test 6.1
1a50: 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 72 6f  .1 {.  SELECT ro
1a60: 77 69 64 20 46 52 4f 4d 20 73 33 20 57 48 45 52  wid FROM s3 WHER
1a70: 45 20 73 33 20 4d 41 54 43 48 20 27 61 27 0a 7d  E s3 MATCH 'a'.}
1a80: 20 7b 31 20 32 7d 0a 0a 64 6f 5f 65 78 65 63 73   {1 2}..do_execs
1a90: 71 6c 5f 74 65 73 74 20 36 2e 31 2e 32 20 7b 0a  ql_test 6.1.2 {.
1aa0: 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46    SELECT rowid F
1ab0: 52 4f 4d 20 73 33 20 57 48 45 52 45 20 73 33 20  ROM s3 WHERE s3 
1ac0: 4d 41 54 43 48 20 27 61 27 20 4f 52 44 45 52 20  MATCH 'a' ORDER 
1ad0: 42 59 20 72 6f 77 69 64 20 44 45 53 43 0a 7d 20  BY rowid DESC.} 
1ae0: 7b 32 20 31 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  {2 1}..do_execsq
1af0: 6c 5f 74 65 73 74 20 36 2e 32 20 7b 0a 20 20 43  l_test 6.2 {.  C
1b00: 4f 4d 4d 49 54 3b 0a 7d 0a 0a 64 6f 5f 65 78 65  OMMIT;.}..do_exe
1b10: 63 73 71 6c 5f 74 65 73 74 20 36 2e 33 20 7b 0a  csql_test 6.3 {.
1b20: 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46    SELECT rowid F
1b30: 52 4f 4d 20 73 33 20 57 48 45 52 45 20 73 33 20  ROM s3 WHERE s3 
1b40: 4d 41 54 43 48 20 27 61 27 0a 7d 20 7b 31 20 32  MATCH 'a'.} {1 2
1b50: 7d 0a 0a 64 6f 5f 74 65 73 74 20 36 2e 34 20 7b  }..do_test 6.4 {
1b60: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20 73 71  .  db close.  sq
1b70: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
1b80: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
1b90: 20 42 45 47 49 4e 3b 0a 20 20 20 20 20 20 49 4e   BEGIN;.      IN
1ba0: 53 45 52 54 20 49 4e 54 4f 20 73 33 28 73 33 29  SERT INTO s3(s3)
1bb0: 20 56 41 4c 55 45 53 28 27 6f 70 74 69 6d 69 7a   VALUES('optimiz
1bc0: 65 27 29 3b 0a 20 20 20 20 52 4f 4c 4c 42 41 43  e');.    ROLLBAC
1bd0: 4b 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 2d 2d  K;.  }.} {}..#--
1be0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1bf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c20: 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 73 65 74 20 64 6f  -------.#.set do
1c30: 63 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74  c [string repeat
1c40: 20 22 61 20 62 20 63 20 22 20 35 30 30 5d 0a 62   "a b c " 500].b
1c50: 72 65 61 6b 70 6f 69 6e 74 0a 64 6f 5f 65 78 65  reakpoint.do_exe
1c60: 63 73 71 6c 5f 74 65 73 74 20 37 2e 30 20 7b 0a  csql_test 7.0 {.
1c70: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
1c80: 20 54 41 42 4c 45 20 78 31 20 55 53 49 4e 47 20   TABLE x1 USING 
1c90: 66 74 73 35 28 78 29 3b 0a 20 20 49 4e 53 45 52  fts5(x);.  INSER
1ca0: 54 20 49 4e 54 4f 20 78 31 28 78 31 2c 20 72 61  T INTO x1(x1, ra
1cb0: 6e 6b 29 20 56 41 4c 55 45 53 28 27 70 67 73 7a  nk) VALUES('pgsz
1cc0: 27 2c 20 33 32 29 3b 0a 20 20 49 4e 53 45 52 54  ', 32);.  INSERT
1cd0: 20 49 4e 54 4f 20 78 31 20 56 41 4c 55 45 53 28   INTO x1 VALUES(
1ce0: 24 64 6f 63 29 3b 0a 7d 0a 0a 0a 0a 66 69 6e 69  $doc);.}....fini
1cf0: 73 68 5f 74 65 73 74 0a 0a                       sh_test..