/ Hex Artifact Content
Login

Artifact 9205c839332c908aaad2b01ab8670ece8b161e8f2ec8a9fabf18ca9385880bb7:


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 66 6f 72 65 61 63 68 5f 64  urn.}..foreach_d
02a0: 65 74 61 69 6c 5f 6d 6f 64 65 20 24 74 65 73 74  etail_mode $test
02b0: 70 72 65 66 69 78 20 7b 0a 0a 64 6f 5f 65 78 65  prefix {..do_exe
02c0: 63 73 71 6c 5f 74 65 73 74 20 31 2e 30 20 7b 0a  csql_test 1.0 {.
02d0: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
02e0: 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20   TABLE t1 USING 
02f0: 66 74 73 35 28 61 2c 20 62 2c 20 64 65 74 61 69  fts5(a, b, detai
0300: 6c 3d 25 44 45 54 41 49 4c 25 29 3b 0a 20 20 49  l=%DETAIL%);.  I
0310: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0320: 4c 55 45 53 28 27 68 65 6c 6c 6f 27 2c 20 27 77  LUES('hello', 'w
0330: 6f 72 6c 64 27 29 3b 0a 20 20 49 4e 53 45 52 54  orld');.  INSERT
0340: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0350: 27 6f 6e 65 20 74 77 6f 27 2c 20 27 74 68 72 65  'one two', 'thre
0360: 65 20 66 6f 75 72 27 29 3b 0a 20 20 49 4e 53 45  e four');.  INSE
0370: 52 54 20 49 4e 54 4f 20 74 31 28 72 6f 77 69 64  RT INTO t1(rowid
0380: 2c 20 61 2c 20 62 29 20 56 41 4c 55 45 53 28 34  , a, b) VALUES(4
0390: 35 2c 20 27 66 6f 72 74 79 27 2c 20 27 66 69 76  5, 'forty', 'fiv
03a0: 65 27 29 3b 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73  e');.}..do_execs
03b0: 71 6c 5f 74 65 73 74 20 31 2e 31 20 7b 0a 20 20  ql_test 1.1 {.  
03c0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
03d0: 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20   ORDER BY rowid 
03e0: 44 45 53 43 3b 0a 7d 20 7b 20 66 6f 72 74 79 20  DESC;.} { forty 
03f0: 66 69 76 65 20 7b 6f 6e 65 20 74 77 6f 7d 20 7b  five {one two} {
0400: 74 68 72 65 65 20 66 6f 75 72 7d 20 68 65 6c 6c  three four} hell
0410: 6f 20 77 6f 72 6c 64 20 7d 0a 0a 64 6f 5f 65 78  o world }..do_ex
0420: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 32 20 7b  ecsql_test 1.2 {
0430: 0a 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20  .  SELECT rowid 
0440: 46 52 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59  FROM t1 ORDER BY
0450: 20 72 6f 77 69 64 20 44 45 53 43 3b 0a 7d 20 7b   rowid DESC;.} {
0460: 34 35 20 32 20 31 7d 0a 0a 64 6f 5f 65 78 65 63  45 2 1}..do_exec
0470: 73 71 6c 5f 74 65 73 74 20 31 2e 33 20 7b 0a 20  sql_test 1.3 {. 
0480: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52   SELECT rowid FR
0490: 4f 4d 20 74 31 20 4f 52 44 45 52 20 42 59 20 72  OM t1 ORDER BY r
04a0: 6f 77 69 64 20 41 53 43 3b 0a 7d 20 7b 31 20 32  owid ASC;.} {1 2
04b0: 20 34 35 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c   45}..do_execsql
04c0: 5f 74 65 73 74 20 31 2e 34 20 7b 0a 20 20 53 45  _test 1.4 {.  SE
04d0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20 57  LECT * FROM t1 W
04e0: 48 45 52 45 20 72 6f 77 69 64 3d 32 3b 0a 7d 20  HERE rowid=2;.} 
04f0: 7b 7b 6f 6e 65 20 74 77 6f 7d 20 7b 74 68 72 65  {{one two} {thre
0500: 65 20 66 6f 75 72 7d 7d 0a 0a 64 6f 5f 65 78 65  e four}}..do_exe
0510: 63 73 71 6c 5f 74 65 73 74 20 31 2e 35 20 7b 0a  csql_test 1.5 {.
0520: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
0530: 74 31 20 57 48 45 52 45 20 72 6f 77 69 64 3d 32  t1 WHERE rowid=2
0540: 2e 30 31 3b 0a 7d 20 7b 7d 0a 0a 64 6f 5f 65 78  .01;.} {}..do_ex
0550: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 36 20 7b  ecsql_test 1.6 {
0560: 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  .  SELECT * FROM
0570: 20 74 31 20 57 48 45 52 45 20 72 6f 77 69 64 3d   t1 WHERE rowid=
0580: 31 2e 39 39 3b 0a 7d 20 7b 7d 0a 0a 23 2d 2d 2d  1.99;.} {}..#---
0590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
05a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
05b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
05c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
05d0: 2d 2d 2d 2d 2d 2d 0a 0a 72 65 73 65 74 5f 64 62  ------..reset_db
05e0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
05f0: 20 32 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20   2.1 {.  CREATE 
0600: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 31  VIRTUAL TABLE t1
0610: 20 55 53 49 4e 47 20 66 74 73 35 28 78 2c 20 64   USING fts5(x, d
0620: 65 74 61 69 6c 3d 25 44 45 54 41 49 4c 25 29 3b  etail=%DETAIL%);
0630: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
0640: 31 28 74 31 2c 20 72 61 6e 6b 29 20 56 41 4c 55  1(t1, rank) VALU
0650: 45 53 28 27 70 67 73 7a 27 2c 20 33 32 29 3b 0a  ES('pgsz', 32);.
0660: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0670: 20 56 41 4c 55 45 53 28 27 6f 6e 65 27 29 3b 0a   VALUES('one');.
0680: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0690: 20 56 41 4c 55 45 53 28 27 74 77 6f 27 29 3b 0a   VALUES('two');.
06a0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
06b0: 20 56 41 4c 55 45 53 28 27 74 68 72 65 65 27 29   VALUES('three')
06c0: 3b 0a 7d 0a 0a 64 6f 5f 63 61 74 63 68 73 71 6c  ;.}..do_catchsql
06d0: 5f 74 65 73 74 20 32 2e 32 20 7b 0a 20 20 53 45  _test 2.2 {.  SE
06e0: 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52  LECT rowid, * FR
06f0: 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 20 4d  OM t1 WHERE t1 M
0700: 41 54 43 48 20 27 41 4e 44 20 41 4e 44 27 0a 7d  ATCH 'AND AND'.}
0710: 20 7b 31 20 7b 66 74 73 35 3a 20 73 79 6e 74 61   {1 {fts5: synta
0720: 78 20 65 72 72 6f 72 20 6e 65 61 72 20 22 41 4e  x error near "AN
0730: 44 22 7d 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c  D"}}..do_execsql
0740: 5f 74 65 73 74 20 32 2e 33 20 7b 20 53 45 4c 45  _test 2.3 { SELE
0750: 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d  CT rowid, * FROM
0760: 20 74 31 20 57 48 45 52 45 20 74 31 20 4d 41 54   t1 WHERE t1 MAT
0770: 43 48 20 27 74 77 6f 27 20 7d 20 7b 32 20 74 77  CH 'two' } {2 tw
0780: 6f 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  o}.do_execsql_te
0790: 73 74 20 32 2e 34 20 7b 20 53 45 4c 45 43 54 20  st 2.4 { SELECT 
07a0: 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74 31  rowid, * FROM t1
07b0: 20 57 48 45 52 45 20 74 31 20 4d 41 54 43 48 20   WHERE t1 MATCH 
07c0: 27 74 68 72 65 65 27 20 7d 20 7b 33 20 74 68 72  'three' } {3 thr
07d0: 65 65 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ee}.do_execsql_t
07e0: 65 73 74 20 32 2e 35 20 7b 20 53 45 4c 45 43 54  est 2.5 { SELECT
07f0: 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 74   rowid, * FROM t
0800: 31 20 57 48 45 52 45 20 74 31 20 4d 41 54 43 48  1 WHERE t1 MATCH
0810: 20 27 6f 6e 65 27 20 7d 20 7b 31 20 6f 6e 65 7d   'one' } {1 one}
0820: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
0830: 74 20 32 2e 36 20 7b 0a 20 20 49 4e 53 45 52 54  t 2.6 {.  INSERT
0840: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0850: 27 61 20 62 20 63 20 64 20 65 20 66 20 67 27 29  'a b c d e f g')
0860: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
0870: 74 31 20 56 41 4c 55 45 53 28 27 62 20 64 20 65  t1 VALUES('b d e
0880: 20 61 20 61 20 61 20 69 27 29 3b 0a 20 20 49 4e   a a a i');.  IN
0890: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
08a0: 55 45 53 28 27 78 20 79 20 7a 20 62 20 63 20 63  UES('x y z b c c
08b0: 20 63 27 29 3b 0a 7d 0a 0a 66 6f 72 65 61 63 68   c');.}..foreach
08c0: 20 7b 74 6e 20 65 78 70 72 20 72 65 73 7d 20 7b   {tn expr res} {
08d0: 0a 20 20 31 20 20 61 20 20 20 20 7b 35 20 34 7d  .  1  a    {5 4}
08e0: 0a 20 20 32 20 20 62 20 20 20 20 7b 36 20 35 20  .  2  b    {6 5 
08f0: 34 7d 0a 20 20 33 20 20 63 20 20 20 20 7b 36 20  4}.  3  c    {6 
0900: 34 7d 0a 20 20 34 20 20 64 20 20 20 20 7b 35 20  4}.  4  d    {5 
0910: 34 7d 0a 20 20 35 20 20 65 20 20 20 20 7b 35 20  4}.  5  e    {5 
0920: 34 7d 0a 20 20 36 20 20 66 20 20 20 20 7b 34 7d  4}.  6  f    {4}
0930: 0a 20 20 37 20 20 67 20 20 20 20 7b 34 7d 0a 20  .  7  g    {4}. 
0940: 20 38 20 20 78 20 20 20 20 7b 36 7d 0a 20 20 39   8  x    {6}.  9
0950: 20 20 79 20 20 20 20 7b 36 7d 0a 20 20 31 30 20    y    {6}.  10 
0960: 7a 20 20 20 20 7b 36 7d 0a 7d 20 7b 0a 20 20 64  z    {6}.} {.  d
0970: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32  o_execsql_test 2
0980: 2e 37 2e 24 74 6e 2e 31 20 7b 20 0a 20 20 20 20  .7.$tn.1 { .    
0990: 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f  SELECT rowid FRO
09a0: 4d 20 74 31 20 57 48 45 52 45 20 74 31 20 4d 41  M t1 WHERE t1 MA
09b0: 54 43 48 20 24 65 78 70 72 20 4f 52 44 45 52 20  TCH $expr ORDER 
09c0: 42 59 20 72 6f 77 69 64 20 44 45 53 43 0a 20 20  BY rowid DESC.  
09d0: 7d 20 24 72 65 73 0a 20 20 64 6f 5f 65 78 65 63  } $res.  do_exec
09e0: 73 71 6c 5f 74 65 73 74 20 32 2e 37 2e 24 74 6e  sql_test 2.7.$tn
09f0: 2e 32 20 7b 20 0a 20 20 20 20 53 45 4c 45 43 54  .2 { .    SELECT
0a00: 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 20 57   rowid FROM t1 W
0a10: 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 24 65  HERE t1 MATCH $e
0a20: 78 70 72 20 4f 52 44 45 52 20 42 59 20 72 6f 77  xpr ORDER BY row
0a30: 69 64 20 41 53 43 0a 20 20 7d 20 5b 6c 73 6f 72  id ASC.  } [lsor
0a40: 74 20 2d 69 6e 74 65 67 65 72 20 24 72 65 73 5d  t -integer $res]
0a50: 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .}..#-----------
0a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
0aa0: 0a 72 65 73 65 74 5f 64 62 0a 64 6f 5f 65 78 65  .reset_db.do_exe
0ab0: 63 73 71 6c 5f 74 65 73 74 20 33 2e 30 20 7b 0a  csql_test 3.0 {.
0ac0: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
0ad0: 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20   TABLE t1 USING 
0ae0: 66 74 73 35 28 61 2c 62 29 3b 0a 20 20 49 4e 53  fts5(a,b);.  INS
0af0: 45 52 54 20 49 4e 54 4f 20 74 31 28 74 31 2c 20  ERT INTO t1(t1, 
0b00: 72 61 6e 6b 29 20 56 41 4c 55 45 53 28 27 70 67  rank) VALUES('pg
0b10: 73 7a 27 2c 20 33 32 29 3b 0a 7d 0a 0a 66 6f 72  sz', 32);.}..for
0b20: 65 61 63 68 20 7b 74 6e 20 61 20 62 7d 20 7b 0a  each {tn a b} {.
0b30: 20 20 20 31 20 7b 61 62 61 73 68 65 64 20 61 62     1 {abashed ab
0b40: 61 6e 64 6f 6e 73 20 61 62 61 73 65 20 61 62 61  andons abase aba
0b50: 73 68 20 61 62 61 66 74 7d 20 7b 61 62 61 73 65  sh abaft} {abase
0b60: 73 20 61 62 61 73 65 64 7d 0a 20 20 20 32 20 7b  s abased}.   2 {
0b70: 61 62 61 73 69 6e 67 20 61 62 61 73 65 73 20 61  abasing abases a
0b80: 62 61 66 74 20 61 62 61 74 65 64 20 61 62 61 6e  baft abated aban
0b90: 64 6f 6e 73 7d 20 7b 61 62 61 73 65 73 20 61 62  dons} {abases ab
0ba0: 61 6e 64 6f 6e 65 64 7d 0a 20 20 20 33 20 7b 61  andoned}.   3 {a
0bb0: 62 61 74 65 6d 65 6e 74 20 61 62 61 73 68 20 61  batement abash a
0bc0: 62 61 73 68 20 61 62 61 74 65 64 20 61 62 61 73  bash abated abas
0bd0: 65 7d 20 7b 61 62 61 73 65 6d 65 6e 74 73 20 61  e} {abasements a
0be0: 62 61 73 68 69 6e 67 7d 0a 20 20 20 34 20 7b 61  bashing}.   4 {a
0bf0: 62 61 66 74 20 61 62 61 73 65 6d 65 6e 74 73 20  baft abasements 
0c00: 61 62 61 73 65 20 61 62 61 73 65 6d 65 6e 74 20  abase abasement 
0c10: 61 62 61 73 69 6e 67 7d 20 7b 61 62 61 73 65 6d  abasing} {abasem
0c20: 65 6e 74 20 61 62 61 73 65 73 7d 0a 20 20 20 35  ent abases}.   5
0c30: 20 7b 61 62 61 66 74 20 61 62 61 73 68 69 6e 67   {abaft abashing
0c40: 20 61 62 61 74 65 6d 65 6e 74 20 61 62 61 73 68   abatement abash
0c50: 20 61 62 61 73 65 6d 65 6e 74 73 7d 20 7b 61 62   abasements} {ab
0c60: 61 6e 64 6f 6e 73 20 61 62 61 6e 64 6f 6e 69 6e  andons abandonin
0c70: 67 7d 0a 20 20 20 36 20 7b 61 62 61 63 6b 20 61  g}.   6 {aback a
0c80: 62 61 74 65 20 61 62 61 73 65 6d 65 6e 74 73 20  bate abasements 
0c90: 61 62 61 73 68 65 73 20 61 62 61 6e 64 6f 6e 65  abashes abandone
0ca0: 64 7d 20 7b 61 62 61 73 65 6d 65 6e 74 20 61 62  d} {abasement ab
0cb0: 61 73 65 64 7d 0a 20 20 20 37 20 7b 61 62 61 6e  ased}.   7 {aban
0cc0: 64 6f 6e 73 20 61 62 61 74 65 64 20 61 62 61 73  dons abated abas
0cd0: 65 64 20 61 62 61 63 6b 20 61 62 61 6e 64 6f 6e  ed aback abandon
0ce0: 69 6e 67 7d 20 7b 61 62 61 73 65 73 20 61 62 61  ing} {abases aba
0cf0: 6e 64 6f 6e 65 64 7d 0a 20 20 20 38 20 7b 61 62  ndoned}.   8 {ab
0d00: 61 73 68 69 6e 67 20 61 62 61 73 65 73 20 61 62  ashing abases ab
0d10: 61 73 65 6d 65 6e 74 20 61 62 61 66 74 20 61 62  asement abaft ab
0d20: 61 73 68 69 6e 67 7d 20 7b 61 62 61 73 68 65 64  ashing} {abashed
0d30: 20 61 62 61 74 65 7d 0a 20 20 20 39 20 7b 61 62   abate}.   9 {ab
0d40: 61 73 68 20 61 62 61 73 65 20 61 62 61 74 65 20  ash abase abate 
0d50: 61 62 61 73 68 69 6e 67 20 61 62 61 73 68 65 64  abashing abashed
0d60: 7d 20 7b 61 62 61 6e 64 6f 6e 20 61 62 61 6e 64  } {abandon aband
0d70: 6f 6e 65 64 7d 0a 20 20 20 31 30 20 7b 61 62 61  oned}.   10 {aba
0d80: 74 65 20 61 62 61 6e 64 6f 6e 69 6e 67 20 61 62  te abandoning ab
0d90: 61 6e 64 6f 6e 73 20 61 62 61 73 65 6d 65 6e 74  andons abasement
0da0: 20 61 62 61 63 6b 7d 20 7b 61 62 61 6e 64 6f 6e   aback} {abandon
0db0: 20 61 62 61 6e 64 6f 6e 69 6e 67 7d 0a 7d 20 7b   abandoning}.} {
0dc0: 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .  do_execsql_te
0dd0: 73 74 20 33 2e 31 2e 24 74 6e 2e 31 20 7b 20 49  st 3.1.$tn.1 { I
0de0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41  NSERT INTO t1 VA
0df0: 4c 55 45 53 28 24 61 2c 20 24 62 29 20 7d 20 0a  LUES($a, $b) } .
0e00: 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73    do_execsql_tes
0e10: 74 20 33 2e 31 2e 24 74 6e 2e 32 20 7b 20 49 4e  t 3.1.$tn.2 { IN
0e20: 53 45 52 54 20 49 4e 54 4f 20 74 31 28 74 31 29  SERT INTO t1(t1)
0e30: 20 56 41 4c 55 45 53 28 27 69 6e 74 65 67 72 69   VALUES('integri
0e40: 74 79 2d 63 68 65 63 6b 27 29 20 7d 0a 7d 0a 0a  ty-check') }.}..
0e50: 66 6f 72 65 61 63 68 20 7b 74 6e 20 65 78 70 72  foreach {tn expr
0e60: 20 72 65 73 7d 20 7b 0a 20 20 31 20 7b 61 62 61   res} {.  1 {aba
0e70: 73 68 7d 20 7b 39 20 35 20 33 20 31 7d 0a 20 20  sh} {9 5 3 1}.  
0e80: 32 20 7b 61 62 61 73 65 7d 20 7b 39 20 34 20 33  2 {abase} {9 4 3
0e90: 20 31 7d 0a 20 20 33 20 7b 61 62 61 73 65 20 2b   1}.  3 {abase +
0ea0: 20 61 62 61 73 68 7d 20 7b 31 7d 0a 20 20 34 20   abash} {1}.  4 
0eb0: 7b 61 62 61 73 68 20 2b 20 61 62 61 73 65 7d 20  {abash + abase} 
0ec0: 7b 39 7d 0a 20 20 35 20 7b 61 62 61 66 74 20 2b  {9}.  5 {abaft +
0ed0: 20 61 62 61 73 68 69 6e 67 7d 20 7b 38 20 35 7d   abashing} {8 5}
0ee0: 0a 20 20 36 20 7b 61 62 61 6e 64 6f 6e 20 2b 20  .  6 {abandon + 
0ef0: 61 62 61 6e 64 6f 6e 69 6e 67 7d 20 7b 31 30 7d  abandoning} {10}
0f00: 0a 20 20 37 20 7b 22 61 62 61 73 68 69 6e 67 20  .  7 {"abashing 
0f10: 61 62 61 73 65 73 20 61 62 61 73 65 6d 65 6e 74  abases abasement
0f20: 20 61 62 61 66 74 20 61 62 61 73 68 69 6e 67 22   abaft abashing"
0f30: 7d 20 7b 38 7d 0a 7d 20 7b 0a 20 20 64 6f 5f 65  } {8}.} {.  do_e
0f40: 78 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 32 2e  xecsql_test 3.2.
0f50: 24 74 6e 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  $tn {.    SELECT
0f60: 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 20 57   rowid FROM t1 W
0f70: 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 24 65  HERE t1 MATCH $e
0f80: 78 70 72 20 4f 52 44 45 52 20 42 59 20 72 6f 77  xpr ORDER BY row
0f90: 69 64 20 44 45 53 43 0a 20 20 7d 20 24 72 65 73  id DESC.  } $res
0fa0: 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  .}..do_execsql_t
0fb0: 65 73 74 20 33 2e 33 20 7b 0a 20 20 53 45 4c 45  est 3.3 {.  SELE
0fc0: 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31  CT rowid FROM t1
0fd0: 20 57 48 45 52 45 20 74 31 20 4d 41 54 43 48 20   WHERE t1 MATCH 
0fe0: 27 4e 45 41 52 28 61 62 61 63 6b 20 61 62 61 74  'NEAR(aback abat
0ff0: 65 2c 20 32 29 27 0a 7d 20 7b 36 7d 0a 0a 66 6f  e, 2)'.} {6}..fo
1000: 72 65 61 63 68 20 7b 74 6e 20 65 78 70 72 20 72  reach {tn expr r
1010: 65 73 7d 20 7b 0a 20 20 31 20 7b 61 62 61 73 68  es} {.  1 {abash
1020: 7d 20 7b 31 20 33 20 35 20 39 7d 0a 20 20 32 20  } {1 3 5 9}.  2 
1030: 7b 61 62 61 73 65 7d 20 7b 31 20 33 20 34 20 39  {abase} {1 3 4 9
1040: 7d 0a 20 20 33 20 7b 61 62 61 73 65 20 2b 20 61  }.  3 {abase + a
1050: 62 61 73 68 7d 20 7b 31 7d 0a 20 20 34 20 7b 61  bash} {1}.  4 {a
1060: 62 61 73 68 20 2b 20 61 62 61 73 65 7d 20 7b 39  bash + abase} {9
1070: 7d 0a 20 20 35 20 7b 61 62 61 66 74 20 2b 20 61  }.  5 {abaft + a
1080: 62 61 73 68 69 6e 67 7d 20 7b 35 20 38 7d 0a 20  bashing} {5 8}. 
1090: 20 36 20 7b 61 62 61 6e 64 6f 6e 20 2b 20 61 62   6 {abandon + ab
10a0: 61 6e 64 6f 6e 69 6e 67 7d 20 7b 31 30 7d 0a 20  andoning} {10}. 
10b0: 20 37 20 7b 22 61 62 61 73 68 69 6e 67 20 61 62   7 {"abashing ab
10c0: 61 73 65 73 20 61 62 61 73 65 6d 65 6e 74 20 61  ases abasement a
10d0: 62 61 66 74 20 61 62 61 73 68 69 6e 67 22 7d 20  baft abashing"} 
10e0: 7b 38 7d 0a 7d 20 7b 0a 20 20 64 6f 5f 65 78 65  {8}.} {.  do_exe
10f0: 63 73 71 6c 5f 74 65 73 74 20 33 2e 34 2e 24 74  csql_test 3.4.$t
1100: 6e 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72  n {.    SELECT r
1110: 6f 77 69 64 20 46 52 4f 4d 20 74 31 20 57 48 45  owid FROM t1 WHE
1120: 52 45 20 74 31 20 4d 41 54 43 48 20 24 65 78 70  RE t1 MATCH $exp
1130: 72 0a 20 20 7d 20 24 72 65 73 0a 7d 0a 0a 23 2d  r.  } $res.}..#-
1140: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1150: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1160: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1180: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 44 6f 63 75 6d  --------.# Docum
1190: 65 6e 74 73 20 77 69 74 68 20 6d 6f 72 65 20 74  ents with more t
11a0: 68 61 6e 20 32 4d 20 74 6f 6b 65 6e 73 2e 0a 23  han 2M tokens..#
11b0: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
11c0: 74 20 34 2e 30 20 7b 0a 20 20 43 52 45 41 54 45  t 4.0 {.  CREATE
11d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73   VIRTUAL TABLE s
11e0: 31 20 55 53 49 4e 47 20 66 74 73 35 28 78 2c 20  1 USING fts5(x, 
11f0: 64 65 74 61 69 6c 3d 25 44 45 54 41 49 4c 25 29  detail=%DETAIL%)
1200: 3b 0a 7d 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20  ;.}.foreach {tn 
1210: 64 6f 63 7d 20 5b 6c 69 73 74 20 5c 0a 20 20 31  doc} [list \.  1
1220: 20 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74 20   [string repeat 
1230: 7b 61 20 78 20 7d 20 31 35 30 30 30 30 30 5d 20  {a x } 1500000] 
1240: 20 20 20 20 20 20 5c 0a 20 20 32 20 22 5b 73 74        \.  2 "[st
1250: 72 69 6e 67 20 72 65 70 65 61 74 20 7b 61 20 61  ring repeat {a a
1260: 20 7d 20 31 35 30 30 30 30 30 5d 20 78 22 20 20   } 1500000] x"  
1270: 20 5c 0a 5d 20 7b 0a 20 20 64 6f 5f 65 78 65 63   \.] {.  do_exec
1280: 73 71 6c 5f 74 65 73 74 20 34 2e 24 74 6e 20 7b  sql_test 4.$tn {
1290: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 31 20   INSERT INTO s1 
12a0: 56 41 4c 55 45 53 28 24 64 6f 63 29 20 7d 0a 7d  VALUES($doc) }.}
12b0: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
12c0: 74 20 34 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54  t 4.3 {.  SELECT
12d0: 20 72 6f 77 69 64 20 46 52 4f 4d 20 73 31 20 57   rowid FROM s1 W
12e0: 48 45 52 45 20 73 31 20 4d 41 54 43 48 20 27 78  HERE s1 MATCH 'x
12f0: 27 0a 7d 20 7b 31 20 32 7d 0a 0a 69 66 20 7b 5b  '.} {1 2}..if {[
1300: 64 65 74 61 69 6c 5f 69 73 5f 66 75 6c 6c 5d 7d  detail_is_full]}
1310: 20 7b 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f   {.  do_execsql_
1320: 74 65 73 74 20 34 2e 34 20 7b 0a 20 20 20 20 53  test 4.4 {.    S
1330: 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d  ELECT rowid FROM
1340: 20 73 31 20 57 48 45 52 45 20 73 31 20 4d 41 54   s1 WHERE s1 MAT
1350: 43 48 20 27 22 61 20 78 22 27 0a 20 20 7d 20 7b  CH '"a x"'.  } {
1360: 31 20 32 7d 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73  1 2}.}..do_execs
1370: 71 6c 5f 74 65 73 74 20 34 2e 35 20 7b 0a 20 20  ql_test 4.5 {.  
1380: 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f  SELECT rowid FRO
1390: 4d 20 73 31 20 57 48 45 52 45 20 73 31 20 4d 41  M s1 WHERE s1 MA
13a0: 54 43 48 20 27 61 20 78 27 0a 7d 20 7b 31 20 32  TCH 'a x'.} {1 2
13b0: 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }..#------------
13c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
1400: 43 68 65 63 6b 20 74 68 61 74 20 61 20 73 70 65  Check that a spe
1410: 63 69 61 6c 20 63 61 73 65 20 6f 66 20 73 65 67  cial case of seg
1420: 6d 65 6e 74 20 70 72 6f 6d 6f 74 69 6f 6e 20 77  ment promotion w
1430: 6f 72 6b 73 2e 20 54 68 65 20 63 61 73 65 20 69  orks. The case i
1440: 73 20 77 68 65 72 65 0a 23 20 61 20 6e 65 77 20  s where.# a new 
1450: 73 65 67 6d 65 6e 74 20 69 73 20 77 72 69 74 74  segment is writt
1460: 65 6e 20 74 6f 20 6c 65 76 65 6c 20 4c 2c 20 62  en to level L, b
1470: 75 74 20 74 68 65 20 6f 6c 64 65 73 74 20 73 65  ut the oldest se
1480: 67 6d 65 6e 74 20 77 69 74 68 69 6e 20 6c 65 76  gment within lev
1490: 65 6c 0a 23 20 28 4c 2d 32 29 20 69 73 20 6c 61  el.# (L-2) is la
14a0: 72 67 65 72 20 74 68 61 6e 20 69 74 2e 0a 23 0a  rger than it..#.
14b0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
14c0: 35 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20 56  5.0 {.  CREATE V
14d0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 73 32 20  IRTUAL TABLE s2 
14e0: 55 53 49 4e 47 20 66 74 73 35 28 78 2c 20 64 65  USING fts5(x, de
14f0: 74 61 69 6c 3d 25 44 45 54 41 49 4c 25 29 3b 0a  tail=%DETAIL%);.
1500: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 32    INSERT INTO s2
1510: 28 73 32 2c 20 72 61 6e 6b 29 20 56 41 4c 55 45  (s2, rank) VALUE
1520: 53 28 27 70 67 73 7a 27 2c 20 33 32 29 3b 0a 20  S('pgsz', 32);. 
1530: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 32 28   INSERT INTO s2(
1540: 73 32 2c 20 72 61 6e 6b 29 20 56 41 4c 55 45 53  s2, rank) VALUES
1550: 28 27 61 75 74 6f 6d 65 72 67 65 27 2c 20 30 29  ('automerge', 0)
1560: 3b 0a 7d 0a 0a 70 72 6f 63 20 72 6e 64 64 6f 63  ;.}..proc rnddoc
1570: 20 7b 6e 7d 20 7b 0a 20 20 73 65 74 20 6d 61 70   {n} {.  set map
1580: 20 5b 6c 69 73 74 20 30 20 61 20 20 31 20 62 20   [list 0 a  1 b 
1590: 20 32 20 63 20 20 33 20 64 20 20 34 20 65 20 20   2 c  3 d  4 e  
15a0: 35 20 66 20 20 36 20 67 20 20 37 20 68 20 20 38  5 f  6 g  7 h  8
15b0: 20 69 20 20 39 20 6a 5d 0a 20 20 73 65 74 20 64   i  9 j].  set d
15c0: 6f 63 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 20  oc [list].  for 
15d0: 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20  {set i 0} {$i < 
15e0: 24 6e 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20  $n} {incr i} {. 
15f0: 20 20 20 6c 61 70 70 65 6e 64 20 64 6f 63 20 5b     lappend doc [
1600: 73 74 72 69 6e 67 20 6d 61 70 20 24 6d 61 70 20  string map $map 
1610: 5b 66 6f 72 6d 61 74 20 25 2e 33 64 20 5b 65 78  [format %.3d [ex
1620: 70 72 20 69 6e 74 28 72 61 6e 64 28 29 2a 31 30  pr int(rand()*10
1630: 30 30 29 5d 5d 5d 0a 20 20 7d 0a 20 20 73 65 74  00)]]].  }.  set
1640: 20 64 6f 63 0a 7d 0a 64 62 20 66 75 6e 63 20 72   doc.}.db func r
1650: 6e 64 64 6f 63 20 72 6e 64 64 6f 63 0a 0a 64 6f  nddoc rnddoc..do
1660: 5f 74 65 73 74 20 35 2e 31 20 7b 0a 20 20 66 6f  _test 5.1 {.  fo
1670: 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 20  r {set i 1} {$i 
1680: 3c 3d 20 36 35 7d 20 7b 69 6e 63 72 20 69 7d 20  <= 65} {incr i} 
1690: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20  {.    execsql { 
16a0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 32 20 56  INSERT INTO s2 V
16b0: 41 4c 55 45 53 28 72 6e 64 64 6f 63 28 31 30 29  ALUES(rnddoc(10)
16c0: 29 20 7d 0a 20 20 7d 0a 20 20 66 6f 72 20 7b 73  ) }.  }.  for {s
16d0: 65 74 20 69 20 31 7d 20 7b 24 69 20 3c 3d 20 36  et i 1} {$i <= 6
16e0: 33 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20  3} {incr i} {.  
16f0: 20 20 65 78 65 63 73 71 6c 20 7b 20 44 45 4c 45    execsql { DELE
1700: 54 45 20 46 52 4f 4d 20 73 32 20 57 48 45 52 45  TE FROM s2 WHERE
1710: 20 72 6f 77 69 64 20 3d 20 24 69 20 7d 0a 20 20   rowid = $i }.  
1720: 7d 0a 20 20 66 74 73 35 5f 6c 65 76 65 6c 5f 73  }.  fts5_level_s
1730: 65 67 73 20 73 32 0a 7d 20 7b 30 20 38 7d 0a 0a  egs s2.} {0 8}..
1740: 64 6f 5f 74 65 73 74 20 35 2e 32 20 7b 0a 20 20  do_test 5.2 {.  
1750: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e  execsql {.    IN
1760: 53 45 52 54 20 49 4e 54 4f 20 73 32 28 73 32 2c  SERT INTO s2(s2,
1770: 20 72 61 6e 6b 29 20 56 41 4c 55 45 53 28 27 61   rank) VALUES('a
1780: 75 74 6f 6d 65 72 67 65 27 2c 20 38 29 3b 0a 20  utomerge', 8);. 
1790: 20 7d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20   }.  for {set i 
17a0: 30 7d 20 7b 24 69 20 3c 20 37 7d 20 7b 69 6e 63  0} {$i < 7} {inc
17b0: 72 20 69 7d 20 7b 0a 20 20 20 20 65 78 65 63 73  r i} {.    execs
17c0: 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f  ql { INSERT INTO
17d0: 20 73 32 20 56 41 4c 55 45 53 28 72 6e 64 64 6f   s2 VALUES(rnddo
17e0: 63 28 35 30 29 29 20 7d 0a 20 20 7d 0a 20 20 66  c(50)) }.  }.  f
17f0: 74 73 35 5f 6c 65 76 65 6c 5f 73 65 67 73 20 73  ts5_level_segs s
1800: 32 0a 7d 20 7b 38 20 30 20 30 7d 0a 0a 23 20 54  2.} {8 0 0}..# T
1810: 65 73 74 20 61 6c 73 6f 20 74 68 65 20 6f 74 68  est also the oth
1820: 65 72 20 74 79 70 65 20 6f 66 20 73 65 67 6d 65  er type of segme
1830: 6e 74 20 70 72 6f 6d 6f 74 69 6f 6e 20 2d 20 77  nt promotion - w
1840: 68 65 6e 20 61 20 6e 65 77 20 73 65 67 6d 65 6e  hen a new segmen
1850: 74 20 69 73 20 77 72 69 74 74 65 6e 0a 23 20 74  t is written.# t
1860: 68 61 74 20 69 73 20 6c 61 72 67 65 72 20 74 68  hat is larger th
1870: 61 6e 20 73 65 67 6d 65 6e 74 73 20 69 6d 6d 65  an segments imme
1880: 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 69 6e  diately followin
1890: 67 20 69 74 2e 0a 64 6f 5f 74 65 73 74 20 35 2e  g it..do_test 5.
18a0: 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  3 {.  execsql {.
18b0: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 73      DROP TABLE s
18c0: 32 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49  2;.    CREATE VI
18d0: 52 54 55 41 4c 20 54 41 42 4c 45 20 73 32 20 55  RTUAL TABLE s2 U
18e0: 53 49 4e 47 20 66 74 73 35 28 78 2c 20 64 65 74  SING fts5(x, det
18f0: 61 69 6c 3d 25 44 45 54 41 49 4c 25 29 3b 0a 20  ail=%DETAIL%);. 
1900: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 73     INSERT INTO s
1910: 32 28 73 32 2c 20 72 61 6e 6b 29 20 56 41 4c 55  2(s2, rank) VALU
1920: 45 53 28 27 70 67 73 7a 27 2c 20 33 32 29 3b 0a  ES('pgsz', 32);.
1930: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1940: 73 32 28 73 32 2c 20 72 61 6e 6b 29 20 56 41 4c  s2(s2, rank) VAL
1950: 55 45 53 28 27 61 75 74 6f 6d 65 72 67 65 27 2c  UES('automerge',
1960: 20 30 29 3b 0a 20 20 7d 0a 0a 20 20 66 6f 72 20   0);.  }..  for 
1970: 7b 73 65 74 20 69 20 31 7d 20 7b 24 69 20 3c 3d  {set i 1} {$i <=
1980: 20 31 36 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a   16} {incr i} {.
1990: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e      execsql { IN
19a0: 53 45 52 54 20 49 4e 54 4f 20 73 32 20 56 41 4c  SERT INTO s2 VAL
19b0: 55 45 53 28 72 6e 64 64 6f 63 28 35 29 29 20 7d  UES(rnddoc(5)) }
19c0: 0a 20 20 7d 0a 20 20 66 74 73 35 5f 6c 65 76 65  .  }.  fts5_leve
19d0: 6c 5f 73 65 67 73 20 73 32 0a 7d 20 7b 30 20 31  l_segs s2.} {0 1
19e0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 35 2e 34 20 7b  }..do_test 5.4 {
19f0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53  .  execsql { INS
1a00: 45 52 54 20 49 4e 54 4f 20 73 32 20 56 41 4c 55  ERT INTO s2 VALU
1a10: 45 53 28 72 6e 64 64 6f 63 28 31 36 30 29 29 20  ES(rnddoc(160)) 
1a20: 7d 0a 20 20 66 74 73 35 5f 6c 65 76 65 6c 5f 73  }.  fts5_level_s
1a30: 65 67 73 20 73 32 0a 7d 20 7b 32 20 30 7d 0a 0a  egs s2.} {2 0}..
1a40: 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  #---------------
1a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1a80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 64 6f 5f  ----------.#.do_
1a90: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 36 2e 30  execsql_test 6.0
1aa0: 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49 52 54   {.  CREATE VIRT
1ab0: 55 41 4c 20 54 41 42 4c 45 20 73 33 20 55 53 49  UAL TABLE s3 USI
1ac0: 4e 47 20 66 74 73 35 28 78 2c 20 64 65 74 61 69  NG fts5(x, detai
1ad0: 6c 3d 25 44 45 54 41 49 4c 25 29 3b 0a 20 20 42  l=%DETAIL%);.  B
1ae0: 45 47 49 4e 3b 0a 20 20 20 20 49 4e 53 45 52 54  EGIN;.    INSERT
1af0: 20 49 4e 54 4f 20 73 33 20 56 41 4c 55 45 53 28   INTO s3 VALUES(
1b00: 27 61 20 62 20 63 27 29 3b 0a 20 20 20 20 49 4e  'a b c');.    IN
1b10: 53 45 52 54 20 49 4e 54 4f 20 73 33 20 56 41 4c  SERT INTO s3 VAL
1b20: 55 45 53 28 27 41 20 42 20 43 27 29 3b 0a 7d 0a  UES('A B C');.}.
1b30: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
1b40: 20 36 2e 31 2e 31 20 7b 0a 20 20 53 45 4c 45 43   6.1.1 {.  SELEC
1b50: 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 73 33 20  T rowid FROM s3 
1b60: 57 48 45 52 45 20 73 33 20 4d 41 54 43 48 20 27  WHERE s3 MATCH '
1b70: 61 27 0a 7d 20 7b 31 20 32 7d 0a 0a 64 6f 5f 65  a'.} {1 2}..do_e
1b80: 78 65 63 73 71 6c 5f 74 65 73 74 20 36 2e 31 2e  xecsql_test 6.1.
1b90: 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 72 6f 77  2 {.  SELECT row
1ba0: 69 64 20 46 52 4f 4d 20 73 33 20 57 48 45 52 45  id FROM s3 WHERE
1bb0: 20 73 33 20 4d 41 54 43 48 20 27 61 27 20 4f 52   s3 MATCH 'a' OR
1bc0: 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45 53  DER BY rowid DES
1bd0: 43 0a 7d 20 7b 32 20 31 7d 0a 0a 64 6f 5f 65 78  C.} {2 1}..do_ex
1be0: 65 63 73 71 6c 5f 74 65 73 74 20 36 2e 32 20 7b  ecsql_test 6.2 {
1bf0: 0a 20 20 43 4f 4d 4d 49 54 3b 0a 7d 0a 0a 64 6f  .  COMMIT;.}..do
1c00: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 36 2e  _execsql_test 6.
1c10: 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 72 6f 77  3 {.  SELECT row
1c20: 69 64 20 46 52 4f 4d 20 73 33 20 57 48 45 52 45  id FROM s3 WHERE
1c30: 20 73 33 20 4d 41 54 43 48 20 27 61 27 0a 7d 20   s3 MATCH 'a'.} 
1c40: 7b 31 20 32 7d 0a 0a 64 6f 5f 74 65 73 74 20 36  {1 2}..do_test 6
1c50: 2e 34 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a  .4 {.  db close.
1c60: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
1c70: 74 2e 64 62 0a 20 20 65 78 65 63 73 71 6c 20 7b  t.db.  execsql {
1c80: 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20  .    BEGIN;.    
1c90: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 33    INSERT INTO s3
1ca0: 28 73 33 29 20 56 41 4c 55 45 53 28 27 6f 70 74  (s3) VALUES('opt
1cb0: 69 6d 69 7a 65 27 29 3b 0a 20 20 20 20 52 4f 4c  imize');.    ROL
1cc0: 4c 42 41 43 4b 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a  LBACK;.  }.} {}.
1cd0: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
1ce0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1d00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1d10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 73 65  -----------.#.se
1d20: 74 20 64 6f 63 20 5b 73 74 72 69 6e 67 20 72 65  t doc [string re
1d30: 70 65 61 74 20 22 61 20 62 20 63 20 22 20 35 30  peat "a b c " 50
1d40: 30 5d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  0].do_execsql_te
1d50: 73 74 20 37 2e 30 20 7b 0a 20 20 43 52 45 41 54  st 7.0 {.  CREAT
1d60: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
1d70: 78 31 20 55 53 49 4e 47 20 66 74 73 35 28 78 2c  x1 USING fts5(x,
1d80: 20 64 65 74 61 69 6c 3d 25 44 45 54 41 49 4c 25   detail=%DETAIL%
1d90: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
1da0: 20 78 31 28 78 31 2c 20 72 61 6e 6b 29 20 56 41   x1(x1, rank) VA
1db0: 4c 55 45 53 28 27 70 67 73 7a 27 2c 20 33 32 29  LUES('pgsz', 32)
1dc0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
1dd0: 78 31 20 56 41 4c 55 45 53 28 24 64 6f 63 29 3b  x1 VALUES($doc);
1de0: 0a 7d 0a 0a 7d 20 3b 23 20 66 6f 72 65 61 63 68  .}..} ;# foreach
1df0: 5f 64 65 74 61 69 6c 5f 6d 6f 64 65 2e 2e 2e 0a  _detail_mode....
1e00: 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a        ..finish_test.