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

Artifact 05716af19a899cd70d5cd916c580043c03f30db4:


0000: 23 20 32 30 31 31 20 4f 63 74 6f 62 65 72 20 30  # 2011 October 0
0010: 33 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  3.#.# 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 74 65 73 74 69 6e 67 20 74 68 65  t is testing the
01d0: 20 63 6f 6e 74 65 6e 74 3d 78 78 78 20 46 54 53   content=xxx FTS
01e0: 34 20 6f 70 74 69 6f 6e 2e 0a 23 0a 0a 73 65 74  4 option..#..set
01f0: 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64   testdir [file d
0200: 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73  irname $argv0].s
0210: 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74  ource $testdir/t
0220: 65 73 74 65 72 2e 74 63 6c 0a 73 65 74 20 3a 3a  ester.tcl.set ::
0230: 74 65 73 74 70 72 65 66 69 78 20 66 74 73 34 63  testprefix fts4c
0240: 6f 6e 74 65 6e 74 0a 0a 23 20 49 66 20 53 51 4c  ontent..# If SQL
0250: 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20  ITE_ENABLE_FTS3 
0260: 69 73 20 64 65 66 69 6e 65 64 2c 20 6f 6d 69 74  is defined, omit
0270: 20 74 68 69 73 20 66 69 6c 65 2e 0a 69 66 63 61   this file..ifca
0280: 70 61 62 6c 65 20 21 66 74 73 33 20 7b 0a 20 20  pable !fts3 {.  
0290: 66 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65  finish_test.  re
02a0: 74 75 72 6e 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  turn.}..#-------
02b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02f0: 2d 2d 0a 23 20 54 65 73 74 20 6f 72 67 61 6e 69  --.# Test organi
0300: 7a 61 74 69 6f 6e 3a 0a 23 20 20 20 0a 23 20 20  zation:.#   .#  
0310: 20 31 2e 2a 20 2d 20 57 61 72 6d 2d 62 6f 64 79   1.* - Warm-body
0320: 20 74 65 73 74 73 2e 0a 23 0a 23 20 20 20 32 2e   tests..#.#   2.
0330: 2a 20 2d 20 51 75 65 72 79 69 6e 67 20 61 20 63  * - Querying a c
0340: 6f 6e 74 65 6e 74 3d 78 78 78 20 46 54 53 20 74  ontent=xxx FTS t
0350: 61 62 6c 65 2e 0a 23 0a 23 20 20 20 33 2e 2a 20  able..#.#   3.* 
0360: 2d 20 57 72 69 74 69 6e 67 20 74 6f 20 61 20 63  - Writing to a c
0370: 6f 6e 74 65 6e 74 3d 78 78 78 20 46 54 53 20 74  ontent=xxx FTS t
0380: 61 62 6c 65 2e 0a 23 0a 23 20 20 20 34 2e 2a 20  able..#.#   4.* 
0390: 2d 20 54 68 65 20 22 49 4e 53 45 52 54 20 49 4e  - The "INSERT IN
03a0: 54 4f 20 66 74 73 28 66 74 73 29 20 56 41 4c 55  TO fts(fts) VALU
03b0: 45 53 28 27 72 65 62 75 69 6c 64 27 29 22 20 63  ES('rebuild')" c
03c0: 6f 6d 6d 61 6e 64 2e 0a 23 0a 23 20 20 20 35 2e  ommand..#.#   5.
03d0: 2a 20 2d 20 43 68 65 63 6b 20 74 68 61 74 20 43  * - Check that C
03e0: 52 45 41 54 45 20 54 41 42 4c 45 2c 20 44 52 4f  REATE TABLE, DRO
03f0: 50 20 54 41 42 4c 45 20 61 6e 64 20 41 4c 54 45  P TABLE and ALTE
0400: 52 20 54 41 42 4c 45 20 63 6f 72 72 65 63 74 6c  R TABLE correctl
0410: 79 0a 23 20 20 20 20 20 20 20 20 20 69 67 6e 6f  y.#         igno
0420: 72 65 20 61 6e 79 20 25 5f 63 6f 6e 74 65 6e 74  re any %_content
0430: 20 74 61 62 6c 65 20 77 68 65 6e 20 75 73 65 64   table when used
0440: 20 77 69 74 68 20 74 68 65 20 63 6f 6e 74 65 6e   with the conten
0450: 74 3d 78 78 78 20 6f 70 74 69 6f 6e 2e 0a 23 0a  t=xxx option..#.
0460: 23 20 20 20 36 2e 2a 20 2d 20 54 65 73 74 20 74  #   6.* - Test t
0470: 68 65 20 65 66 66 65 63 74 73 20 6f 66 20 6d 65  he effects of me
0480: 73 73 69 6e 67 20 77 69 74 68 20 74 68 65 20 73  ssing with the s
0490: 63 68 65 6d 61 20 6f 66 20 74 61 62 6c 65 20 78  chema of table x
04a0: 78 78 20 61 66 74 65 72 0a 23 20 20 20 20 20 20  xx after.#      
04b0: 20 20 20 63 72 65 61 74 69 6e 67 20 61 20 63 6f     creating a co
04c0: 6e 74 65 6e 74 3d 78 78 78 20 46 54 53 20 69 6e  ntent=xxx FTS in
04d0: 64 65 78 2e 0a 23 20 20 20 0a 23 20 20 20 37 2e  dex..#   .#   7.
04e0: 2a 20 2d 20 54 65 73 74 20 74 68 61 74 20 69 66  * - Test that if
04f0: 20 63 6f 6e 74 65 6e 74 3d 78 78 78 20 69 73 20   content=xxx is 
0500: 73 70 65 63 69 66 69 65 64 20 61 6e 64 20 74 61  specified and ta
0510: 62 6c 65 20 78 78 78 20 64 6f 65 73 20 6e 6f 74  ble xxx does not
0520: 0a 23 20 20 20 20 20 20 20 20 20 65 78 69 73 74  .#         exist
0530: 2c 20 74 68 65 20 46 54 53 20 74 61 62 6c 65 20  , the FTS table 
0540: 63 61 6e 20 73 74 69 6c 6c 20 62 65 20 75 73 65  can still be use
0550: 64 20 66 6f 72 20 49 4e 53 45 52 54 20 61 6e 64  d for INSERT and
0560: 20 73 6f 6d 65 0a 23 20 20 20 20 20 20 20 20 20   some.#         
0570: 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
0580: 73 2e 0a 23 0a 23 20 20 20 38 2e 2a 20 2d 20 54  s..#.#   8.* - T
0590: 65 73 74 20 74 68 61 74 20 69 66 20 74 68 65 20  est that if the 
05a0: 63 6f 6e 74 65 6e 74 3d 78 78 78 20 61 6e 64 20  content=xxx and 
05b0: 70 72 65 66 69 78 20 6f 70 74 69 6f 6e 73 20 61  prefix options a
05c0: 72 65 20 75 73 65 64 20 74 6f 67 65 74 68 65 72  re used together
05d0: 2c 0a 23 20 20 20 20 20 20 20 20 20 74 68 65 20  ,.#         the 
05e0: 27 72 65 62 75 69 6c 64 27 20 63 6f 6d 6d 61 6e  'rebuild' comman
05f0: 64 20 73 74 69 6c 6c 20 77 6f 72 6b 73 2e 0a 23  d still works..#
0600: 0a 23 20 20 20 39 2e 2a 20 2d 20 54 65 73 74 20  .#   9.* - Test 
0610: 75 73 69 6e 67 20 63 6f 6e 74 65 6e 74 3d 78 78  using content=xx
0620: 78 20 77 68 65 72 65 20 78 78 78 20 69 73 20 61  x where xxx is a
0630: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a   virtual table..
0640: 23 0a 23 20 20 20 31 31 2e 2a 20 2d 20 54 65 73  #.#   11.* - Tes
0650: 74 20 74 68 61 74 20 63 69 72 63 75 6c 61 72 20  t that circular 
0660: 72 65 66 65 72 65 6e 63 65 73 20 28 65 2e 67 2e  references (e.g.
0670: 20 22 74 31 28 63 6f 6e 74 65 6e 74 3d 74 31 29   "t1(content=t1)
0680: 22 29 20 61 72 65 0a 23 20 20 20 20 20 20 20 20  ") are.#        
0690: 20 20 64 65 74 65 63 74 65 64 2e 0a 23 0a 0a 64    detected..#..d
06a0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31  o_execsql_test 1
06b0: 2e 31 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20  .1.1 {.  CREATE 
06c0: 54 41 42 4c 45 20 74 31 28 61 2c 20 62 2c 20 63  TABLE t1(a, b, c
06d0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
06e0: 20 74 31 20 56 41 4c 55 45 53 28 27 77 20 78 27   t1 VALUES('w x'
06f0: 2c 20 27 78 20 79 27 2c 20 27 79 20 7a 27 29 3b  , 'x y', 'y z');
0700: 0a 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41  .  CREATE VIRTUA
0710: 4c 20 54 41 42 4c 45 20 66 74 31 20 55 53 49 4e  L TABLE ft1 USIN
0720: 47 20 66 74 73 34 28 63 6f 6e 74 65 6e 74 3d 74  G fts4(content=t
0730: 31 29 3b 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  1);.}..do_execsq
0740: 6c 5f 74 65 73 74 20 31 2e 31 2e 32 20 7b 0a 20  l_test 1.1.2 {. 
0750: 20 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e   PRAGMA table_in
0760: 66 6f 28 66 74 31 29 3b 0a 7d 20 7b 0a 20 20 30  fo(ft1);.} {.  0
0770: 20 61 20 7b 7d 20 30 20 7b 7d 20 30 20 0a 20 20   a {} 0 {} 0 .  
0780: 31 20 62 20 7b 7d 20 30 20 7b 7d 20 30 20 0a 20  1 b {} 0 {} 0 . 
0790: 20 32 20 63 20 7b 7d 20 30 20 7b 7d 20 30 0a 7d   2 c {} 0 {} 0.}
07a0: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
07b0: 74 20 31 2e 31 2e 33 20 7b 20 53 45 4c 45 43 54  t 1.1.3 { SELECT
07c0: 20 2a 2c 20 72 6f 77 69 64 20 46 52 4f 4d 20 66   *, rowid FROM f
07d0: 74 31 20 7d 20 7b 7b 77 20 78 7d 20 7b 78 20 79  t1 } {{w x} {x y
07e0: 7d 20 7b 79 20 7a 7d 20 31 7d 0a 64 6f 5f 65 78  } {y z} 1}.do_ex
07f0: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 31 2e 34  ecsql_test 1.1.4
0800: 20 7b 20 53 45 4c 45 43 54 20 61 2c 20 63 20 46   { SELECT a, c F
0810: 52 4f 4d 20 66 74 31 20 57 48 45 52 45 20 72 6f  ROM ft1 WHERE ro
0820: 77 69 64 3d 31 20 7d 20 7b 7b 77 20 78 7d 20 7b  wid=1 } {{w x} {
0830: 79 20 7a 7d 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  y z}}..do_execsq
0840: 6c 5f 74 65 73 74 20 31 2e 31 2e 35 20 7b 20 49  l_test 1.1.5 { I
0850: 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 31 28 66  NSERT INTO ft1(f
0860: 74 31 29 20 56 41 4c 55 45 53 28 27 72 65 62 75  t1) VALUES('rebu
0870: 69 6c 64 27 29 20 7d 20 7b 7d 0a 64 6f 5f 65 78  ild') } {}.do_ex
0880: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 31 2e 36  ecsql_test 1.1.6
0890: 20 7b 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20   { SELECT rowid 
08a0: 46 52 4f 4d 20 66 74 31 20 57 48 45 52 45 20 66  FROM ft1 WHERE f
08b0: 74 31 20 4d 41 54 43 48 20 27 78 27 20 7d 20 7b  t1 MATCH 'x' } {
08c0: 31 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  1}.do_execsql_te
08d0: 73 74 20 31 2e 31 2e 37 20 7b 20 53 45 4c 45 43  st 1.1.7 { SELEC
08e0: 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 66 74 31  T rowid FROM ft1
08f0: 20 57 48 45 52 45 20 66 74 31 20 4d 41 54 43 48   WHERE ft1 MATCH
0900: 20 27 61 27 20 7d 20 7b 7d 0a 0a 64 6f 5f 65 78   'a' } {}..do_ex
0910: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 32 2e 31  ecsql_test 1.2.1
0920: 20 7b 0a 20 20 44 52 4f 50 20 54 41 42 4c 45 20   {.  DROP TABLE 
0930: 66 74 31 3b 0a 20 20 43 52 45 41 54 45 20 56 49  ft1;.  CREATE VI
0940: 52 54 55 41 4c 20 54 41 42 4c 45 20 66 74 31 20  RTUAL TABLE ft1 
0950: 55 53 49 4e 47 20 66 74 73 34 28 63 6f 6e 74 65  USING fts4(conte
0960: 6e 74 3d 74 31 2c 20 62 29 3b 0a 20 20 50 52 41  nt=t1, b);.  PRA
0970: 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 66  GMA table_info(f
0980: 74 31 29 3b 0a 7d 20 7b 0a 20 20 30 20 62 20 7b  t1);.} {.  0 b {
0990: 7d 20 30 20 7b 7d 20 30 20 0a 7d 0a 64 6f 5f 65  } 0 {} 0 .}.do_e
09a0: 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 32 2e  xecsql_test 1.2.
09b0: 32 20 7b 20 0a 20 20 53 45 4c 45 43 54 20 2a 2c  2 { .  SELECT *,
09c0: 20 72 6f 77 69 64 20 46 52 4f 4d 20 66 74 31 20   rowid FROM ft1 
09d0: 0a 7d 20 7b 7b 78 20 79 7d 20 31 7d 0a 0a 23 2d  .} {{x y} 1}..#-
09e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
09f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
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 0a 23 20 54 68 65 20 66  --------.# The f
0a30: 6f 6c 6c 6f 77 69 6e 67 20 62 6c 6f 63 6b 20 6f  ollowing block o
0a40: 66 20 74 65 73 74 73 20 2d 20 32 2e 2a 20 2d 20  f tests - 2.* - 
0a50: 74 65 73 74 20 74 68 61 74 20 61 20 63 6f 6e 74  test that a cont
0a60: 65 6e 74 3d 78 78 78 20 46 54 53 20 74 61 62 6c  ent=xxx FTS tabl
0a70: 65 0a 23 20 63 61 6e 20 62 65 20 71 75 65 72 69  e.# can be queri
0a80: 65 64 2e 20 41 6c 73 6f 20 74 65 73 74 65 64 20  ed. Also tested 
0a90: 61 72 65 20 63 61 73 65 73 20 77 68 65 72 65 20  are cases where 
0aa0: 72 6f 77 73 20 69 64 65 6e 74 69 66 69 65 64 20  rows identified 
0ab0: 69 6e 20 74 68 65 20 46 54 53 0a 23 20 61 72 65  in the FTS.# are
0ac0: 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 74 68   missing from th
0ad0: 65 20 63 6f 6e 74 65 6e 74 20 74 61 62 6c 65 2c  e content table,
0ae0: 20 61 6e 64 20 63 61 73 65 73 20 77 68 65 72 65   and cases where
0af0: 20 74 68 65 20 69 6e 64 65 78 20 69 73 20 0a 23   the index is .#
0b00: 20 69 6e 63 6f 6e 73 69 73 74 65 6e 74 20 77 69   inconsistent wi
0b10: 74 68 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 74  th the content t
0b20: 61 62 6c 65 2e 0a 23 20 0a 64 6f 5f 65 78 65 63  able..# .do_exec
0b30: 73 71 6c 5f 74 65 73 74 20 32 2e 30 20 7b 0a 20  sql_test 2.0 {. 
0b40: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 32   CREATE TABLE t2
0b50: 28 78 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  (x);.  INSERT IN
0b60: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27 4f 20  TO t2 VALUES('O 
0b70: 53 20 57 20 57 20 46 20 55 20 43 20 52 20 51 20  S W W F U C R Q 
0b80: 49 20 43 20 4e 20 50 20 5a 20 59 20 59 20 45 20  I C N P Z Y Y E 
0b90: 59 20 59 20 45 27 29 3b 20 20 2d 2d 20 31 0a 20  Y Y E');  -- 1. 
0ba0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
0bb0: 56 41 4c 55 45 53 28 27 59 20 58 20 55 20 56 20  VALUES('Y X U V 
0bc0: 4c 20 42 20 45 20 48 20 59 20 4a 20 43 20 59 20  L B E H Y J C Y 
0bd0: 41 20 49 20 41 20 50 20 56 20 46 20 56 20 4b 27  A I A P V F V K'
0be0: 29 3b 20 20 2d 2d 20 32 0a 20 20 49 4e 53 45 52  );  -- 2.  INSER
0bf0: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
0c00: 28 27 50 20 57 20 49 20 4e 20 4a 20 48 20 49 20  ('P W I N J H I 
0c10: 49 20 4e 20 49 20 46 20 42 20 4b 20 44 20 55 20  I N I F B K D U 
0c20: 51 20 42 20 5a 20 53 20 46 27 29 3b 20 20 2d 2d  Q B Z S F');  --
0c30: 20 33 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f   3.  INSERT INTO
0c40: 20 74 32 20 56 41 4c 55 45 53 28 27 4e 20 52 20   t2 VALUES('N R 
0c50: 4f 20 52 20 48 20 4a 20 52 20 48 20 47 20 4d 20  O R H J R H G M 
0c60: 44 20 49 20 55 20 55 20 42 20 4f 20 4d 20 50 20  D I U U B O M P 
0c70: 41 20 55 27 29 3b 20 20 2d 2d 20 34 0a 20 20 49  A U');  -- 4.  I
0c80: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
0c90: 4c 55 45 53 28 27 59 20 4f 20 56 20 4f 20 47 20  LUES('Y O V O G 
0ca0: 54 20 50 20 4e 20 47 20 54 20 4e 20 46 20 49 20  T P N G T N F I 
0cb0: 56 20 42 20 55 20 4d 20 4a 20 4d 20 47 27 29 3b  V B U M J M G');
0cc0: 20 20 2d 2d 20 35 0a 20 20 49 4e 53 45 52 54 20    -- 5.  INSERT 
0cd0: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27  INTO t2 VALUES('
0ce0: 4a 20 4f 20 42 20 4e 20 4b 20 4e 20 45 20 43 20  J O B N K N E C 
0cf0: 48 20 5a 20 52 20 4b 20 4a 20 4f 20 55 20 47 20  H Z R K J O U G 
0d00: 4d 20 4b 20 4c 20 53 27 29 3b 20 20 2d 2d 20 36  M K L S');  -- 6
0d10: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
0d20: 32 20 56 41 4c 55 45 53 28 27 53 20 5a 20 53 20  2 VALUES('S Z S 
0d30: 52 20 49 20 51 20 55 20 41 20 50 20 57 20 52 20  R I Q U A P W R 
0d40: 58 20 48 20 4b 20 43 20 5a 20 55 20 4c 20 53 20  X H K C Z U L S 
0d50: 50 27 29 3b 20 20 2d 2d 20 37 0a 20 20 49 4e 53  P');  -- 7.  INS
0d60: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
0d70: 45 53 28 27 4a 20 43 20 48 20 4e 20 52 20 43 20  ES('J C H N R C 
0d80: 4b 20 52 20 56 20 4e 20 4d 20 4f 20 46 20 5a 20  K R V N M O F Z 
0d90: 4d 20 5a 20 41 20 49 20 48 20 57 27 29 3b 20 20  M Z A I H W');  
0da0: 2d 2d 20 38 0a 20 20 49 4e 53 45 52 54 20 49 4e  -- 8.  INSERT IN
0db0: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27 4f 20  TO t2 VALUES('O 
0dc0: 59 20 47 20 49 20 53 20 4a 20 55 20 55 20 57 20  Y G I S J U U W 
0dd0: 4f 20 44 20 5a 20 46 20 4a 20 4b 20 4e 20 52 20  O D Z F J K N R 
0de0: 50 20 52 20 4c 27 29 3b 20 20 2d 2d 20 39 0a 20  P R L');  -- 9. 
0df0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20   INSERT INTO t2 
0e00: 56 41 4c 55 45 53 28 27 42 20 47 20 4c 20 4b 20  VALUES('B G L K 
0e10: 55 20 52 20 55 20 50 20 56 20 58 20 5a 20 49 20  U R U P V X Z I 
0e20: 48 20 56 20 52 20 57 20 43 20 51 20 41 20 53 27  H V R W C Q A S'
0e30: 29 3b 20 20 2d 2d 20 31 30 0a 20 20 49 4e 53 45  );  -- 10.  INSE
0e40: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
0e50: 53 28 27 54 20 46 20 54 20 4a 20 46 20 46 20 59  S('T F T J F F Y
0e60: 20 56 20 46 20 57 20 4e 20 58 20 4b 20 51 20 41   V F W N X K Q A
0e70: 20 59 20 4c 20 58 20 57 20 47 27 29 3b 20 20 2d   Y L X W G');  -
0e80: 2d 20 31 31 0a 20 20 49 4e 53 45 52 54 20 49 4e  - 11.  INSERT IN
0e90: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27 43 20  TO t2 VALUES('C 
0ea0: 4a 20 55 20 48 20 42 20 51 20 58 20 4c 20 43 20  J U H B Q X L C 
0eb0: 4d 20 4d 20 59 20 45 20 47 20 56 20 46 20 57 20  M M Y E G V F W 
0ec0: 56 20 5a 20 43 27 29 3b 20 20 2d 2d 20 31 32 0a  V Z C');  -- 12.
0ed0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
0ee0: 20 56 41 4c 55 45 53 28 27 42 20 57 20 4c 20 54   VALUES('B W L T
0ef0: 20 46 20 53 20 47 20 58 20 44 20 50 20 48 20 4e   F S G X D P H N
0f00: 20 47 20 4d 20 52 20 49 20 4f 20 41 20 58 20 49   G M R I O A X I
0f10: 27 29 3b 20 20 2d 2d 20 31 33 0a 20 20 49 4e 53  ');  -- 13.  INS
0f20: 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55  ERT INTO t2 VALU
0f30: 45 53 28 27 4e 20 47 20 59 20 4f 20 4b 20 51 20  ES('N G Y O K Q 
0f40: 4b 20 5a 20 4e 20 4d 20 48 20 55 20 4a 20 45 20  K Z N M H U J E 
0f50: 44 20 48 20 55 20 57 20 52 20 4b 27 29 3b 20 20  D H U W R K');  
0f60: 2d 2d 20 31 34 0a 20 20 49 4e 53 45 52 54 20 49  -- 14.  INSERT I
0f70: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27 55  NTO t2 VALUES('U
0f80: 20 44 20 54 20 52 20 55 20 59 20 46 20 4a 20 44   D T R U Y F J D
0f90: 20 53 20 4a 20 58 20 45 20 48 20 51 20 47 20 56   S J X E H Q G V
0fa0: 20 41 20 53 20 5a 27 29 3b 20 20 2d 2d 20 31 35   A S Z');  -- 15
0fb0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
0fc0: 32 20 56 41 4c 55 45 53 28 27 4d 20 49 20 57 20  2 VALUES('M I W 
0fd0: 50 20 4a 20 53 20 48 20 52 20 4a 20 44 20 51 20  P J S H R J D Q 
0fe0: 49 20 43 20 47 20 50 20 43 20 54 20 50 20 48 20  I C G P C T P H 
0ff0: 52 27 29 3b 20 20 2d 2d 20 31 36 0a 20 20 49 4e  R');  -- 16.  IN
1000: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
1010: 55 45 53 28 27 4a 20 4d 20 4e 20 49 20 53 20 4c  UES('J M N I S L
1020: 20 58 20 51 20 43 20 41 20 42 20 46 20 43 20 42   X Q C A B F C B
1030: 20 59 20 44 20 48 20 56 20 52 20 4a 27 29 3b 20   Y D H V R J'); 
1040: 20 2d 2d 20 31 37 0a 20 20 49 4e 53 45 52 54 20   -- 17.  INSERT 
1050: 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27  INTO t2 VALUES('
1060: 46 20 56 20 5a 20 57 20 4a 20 51 20 4c 20 50 20  F V Z W J Q L P 
1070: 58 20 59 20 45 20 57 20 42 20 55 20 51 20 4e 20  X Y E W B U Q N 
1080: 48 20 58 20 4b 20 54 27 29 3b 20 20 2d 2d 20 31  H X K T');  -- 1
1090: 38 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  8.  INSERT INTO 
10a0: 74 32 20 56 41 4c 55 45 53 28 27 52 20 46 20 53  t2 VALUES('R F S
10b0: 20 52 20 59 20 4f 20 46 20 51 20 45 20 49 20 45   R Y O F Q E I E
10c0: 20 47 20 48 20 43 20 42 20 48 20 52 20 58 20 59   G H C B H R X Y
10d0: 20 4e 27 29 3b 20 20 2d 2d 20 31 39 0a 20 20 49   N');  -- 19.  I
10e0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
10f0: 4c 55 45 53 28 27 55 20 51 20 51 20 51 20 54 20  LUES('U Q Q Q T 
1100: 45 20 50 20 44 20 4d 20 46 20 58 20 50 20 4a 20  E P D M F X P J 
1110: 47 20 48 20 58 20 43 20 51 20 44 20 4c 27 29 3b  G H X C Q D L');
1120: 20 20 2d 2d 20 32 30 0a 7d 0a 0a 64 6f 5f 65 78    -- 20.}..do_ex
1130: 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 31 20 7b  ecsql_test 2.1 {
1140: 0a 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41  .  CREATE VIRTUA
1150: 4c 20 54 41 42 4c 45 20 66 74 32 20 55 53 49 4e  L TABLE ft2 USIN
1160: 47 20 66 74 73 34 28 63 6f 6e 74 65 6e 74 3d 74  G fts4(content=t
1170: 32 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  2);.  INSERT INT
1180: 4f 20 66 74 32 28 66 74 32 29 20 56 41 4c 55 45  O ft2(ft2) VALUE
1190: 53 28 27 72 65 62 75 69 6c 64 27 29 3b 0a 0a 20  S('rebuild');.. 
11a0: 20 2d 2d 20 4d 6f 64 69 66 79 20 74 68 65 20 62   -- Modify the b
11b0: 61 63 6b 69 6e 67 20 74 61 62 6c 65 20 61 20 62  acking table a b
11c0: 69 74 3a 20 52 6f 77 20 31 37 20 69 73 20 6d 69  it: Row 17 is mi
11d0: 73 73 69 6e 67 20 61 6e 64 20 74 68 65 20 63 6f  ssing and the co
11e0: 6e 74 65 6e 74 73 20 0a 20 20 2d 2d 20 6f 66 20  ntents .  -- of 
11f0: 72 6f 77 20 32 30 20 64 6f 20 6e 6f 74 20 6d 61  row 20 do not ma
1200: 74 63 68 20 74 68 65 20 46 54 53 20 69 6e 64 65  tch the FTS inde
1210: 78 20 63 6f 6e 74 65 6e 74 73 2e 20 0a 20 20 44  x contents. .  D
1220: 45 4c 45 54 45 20 46 52 4f 4d 20 74 32 20 57 48  ELETE FROM t2 WH
1230: 45 52 45 20 72 6f 77 69 64 20 3d 20 31 37 3b 0a  ERE rowid = 17;.
1240: 20 20 55 50 44 41 54 45 20 74 32 20 53 45 54 20    UPDATE t2 SET 
1250: 78 20 3d 20 27 61 20 62 20 63 20 64 20 65 20 66  x = 'a b c d e f
1260: 20 67 20 68 20 69 20 6a 27 20 57 48 45 52 45 20   g h i j' WHERE 
1270: 72 6f 77 69 64 20 3d 20 32 30 3b 0a 7d 0a 0a 66  rowid = 20;.}..f
1280: 6f 72 65 61 63 68 20 7b 74 6e 20 6d 61 74 63 68  oreach {tn match
1290: 20 72 6f 77 69 64 6c 69 73 74 7d 20 7b 0a 20 20   rowidlist} {.  
12a0: 31 20 20 20 7b 53 7d 20 20 20 20 20 20 20 20 7b  1   {S}        {
12b0: 31 20 33 20 36 20 37 20 39 20 31 30 20 31 33 20  1 3 6 7 9 10 13 
12c0: 31 35 20 31 36 20 31 37 20 31 39 7d 0a 20 20 32  15 16 17 19}.  2
12d0: 20 20 20 7b 22 53 20 52 22 7d 20 20 20 20 7b 37     {"S R"}    {7
12e0: 20 31 39 7d 0a 20 20 33 20 20 20 7b 22 4e 20 4b   19}.  3   {"N K
12f0: 20 4e 22 7d 20 20 7b 36 7d 0a 20 20 34 20 20 20   N"}  {6}.  4   
1300: 7b 22 51 20 51 22 7d 20 20 20 20 7b 32 30 7d 0a  {"Q Q"}    {20}.
1310: 20 20 35 20 20 20 7b 22 42 20 59 20 44 22 7d 20    5   {"B Y D"} 
1320: 20 7b 31 37 7d 0a 7d 20 7b 0a 20 20 64 6f 5f 65   {17}.} {.  do_e
1330: 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 32 2e  xecsql_test 2.2.
1340: 31 2e 24 74 6e 20 7b 0a 20 20 20 20 53 45 4c 45  1.$tn {.    SELE
1350: 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 66 74  CT rowid FROM ft
1360: 32 20 57 48 45 52 45 20 66 74 32 20 4d 41 54 43  2 WHERE ft2 MATC
1370: 48 20 24 6d 61 74 63 68 0a 20 20 7d 20 24 72 6f  H $match.  } $ro
1380: 77 69 64 6c 69 73 74 0a 0a 20 20 64 6f 5f 65 78  widlist..  do_ex
1390: 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 32 2e 32  ecsql_test 2.2.2
13a0: 2e 24 74 6e 20 7b 0a 20 20 20 20 53 45 4c 45 43  .$tn {.    SELEC
13b0: 54 20 64 6f 63 69 64 20 46 52 4f 4d 20 66 74 32  T docid FROM ft2
13c0: 20 57 48 45 52 45 20 66 74 32 20 4d 41 54 43 48   WHERE ft2 MATCH
13d0: 20 24 6d 61 74 63 68 0a 20 20 7d 20 24 72 6f 77   $match.  } $row
13e0: 69 64 6c 69 73 74 0a 7d 0a 0a 66 6f 72 65 61 63  idlist.}..foreac
13f0: 68 20 7b 74 6e 20 6d 61 74 63 68 20 72 65 73 75  h {tn match resu
1400: 6c 74 7d 20 7b 0a 20 20 31 20 20 20 7b 22 4e 20  lt} {.  1   {"N 
1410: 4b 20 4e 22 7d 20 20 7b 7b 4a 20 4f 20 42 20 4e  K N"}  {{J O B N
1420: 20 4b 20 4e 20 45 20 43 20 48 20 5a 20 52 20 4b   K N E C H Z R K
1430: 20 4a 20 4f 20 55 20 47 20 4d 20 4b 20 4c 20 53   J O U G M K L S
1440: 7d 7d 0a 20 20 32 20 20 20 7b 22 51 20 51 22 7d  }}.  2   {"Q Q"}
1450: 20 20 20 20 7b 7b 61 20 62 20 63 20 64 20 65 20      {{a b c d e 
1460: 66 20 67 20 68 20 69 20 6a 7d 7d 0a 20 20 33 20  f g h i j}}.  3 
1470: 20 20 7b 22 42 20 59 20 44 22 7d 20 20 7b 7b 7d    {"B Y D"}  {{}
1480: 7d 0a 7d 20 7b 0a 20 20 64 6f 5f 65 78 65 63 73  }.} {.  do_execs
1490: 71 6c 5f 74 65 73 74 20 32 2e 33 2e 24 74 6e 20  ql_test 2.3.$tn 
14a0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
14b0: 52 4f 4d 20 66 74 32 20 57 48 45 52 45 20 66 74  ROM ft2 WHERE ft
14c0: 32 20 4d 41 54 43 48 20 24 6d 61 74 63 68 0a 20  2 MATCH $match. 
14d0: 20 7d 20 24 72 65 73 75 6c 74 0a 7d 0a 0a 66 6f   } $result.}..fo
14e0: 72 65 61 63 68 20 7b 74 6e 20 6d 61 74 63 68 20  reach {tn match 
14f0: 72 65 73 75 6c 74 7d 20 7b 0a 20 20 31 20 20 20  result} {.  1   
1500: 7b 22 4e 20 4b 20 4e 22 7d 20 20 7b 7b 2e 2e 4f  {"N K N"}  {{..O
1510: 20 42 20 5b 4e 5d 20 5b 4b 5d 20 5b 4e 5d 20 45   B [N] [K] [N] E
1520: 2e 2e 7d 7d 0a 20 20 32 20 20 20 7b 22 42 20 59  ..}}.  2   {"B Y
1530: 20 44 22 7d 20 20 7b 7b 7d 7d 0a 20 20 33 20 20   D"}  {{}}.  3  
1540: 20 7b 22 51 20 51 22 7d 20 20 20 20 7b 7b 61 20   {"Q Q"}    {{a 
1550: 5b 62 5d 20 5b 63 5d 20 5b 64 5d 20 65 20 66 2e  [b] [c] [d] e f.
1560: 2e 7d 7d 0a 7d 20 7b 0a 20 20 64 6f 5f 65 78 65  .}}.} {.  do_exe
1570: 63 73 71 6c 5f 74 65 73 74 20 32 2e 34 2e 24 74  csql_test 2.4.$t
1580: 6e 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 73  n {.    SELECT s
1590: 6e 69 70 70 65 74 28 66 74 32 2c 20 27 5b 27 2c  nippet(ft2, '[',
15a0: 20 27 5d 27 2c 20 27 2e 2e 27 2c 20 2d 31 2c 20   ']', '..', -1, 
15b0: 36 29 20 46 52 4f 4d 20 66 74 32 20 57 48 45 52  6) FROM ft2 WHER
15c0: 45 20 66 74 32 20 4d 41 54 43 48 20 24 6d 61 74  E ft2 MATCH $mat
15d0: 63 68 0a 20 20 7d 20 24 72 65 73 75 6c 74 0a 7d  ch.  } $result.}
15e0: 0a 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20 6d 61  ..foreach {tn ma
15f0: 74 63 68 20 72 65 73 75 6c 74 7d 20 7b 0a 20 20  tch result} {.  
1600: 31 20 20 20 7b 22 4e 20 4b 20 4e 22 7d 20 20 7b  1   {"N K N"}  {
1610: 7b 30 20 30 20 36 20 31 20 30 20 31 20 38 20 31  {0 0 6 1 0 1 8 1
1620: 20 30 20 32 20 31 30 20 31 7d 7d 0a 20 20 32 20   0 2 10 1}}.  2 
1630: 20 20 7b 22 42 20 59 20 44 22 7d 20 20 7b 7b 7d    {"B Y D"}  {{}
1640: 7d 0a 20 20 33 20 20 20 7b 22 51 20 51 22 7d 20  }.  3   {"Q Q"} 
1650: 20 20 20 7b 7b 30 20 30 20 32 20 31 20 30 20 30     {{0 0 2 1 0 0
1660: 20 34 20 31 20 30 20 31 20 34 20 31 20 30 20 31   4 1 0 1 4 1 0 1
1670: 20 36 20 31 7d 7d 0a 20 20 34 20 20 20 7b 22 51   6 1}}.  4   {"Q
1680: 20 44 20 4c 22 7d 20 20 7b 7b 7d 7d 0a 7d 20 7b   D L"}  {{}}.} {
1690: 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .  do_execsql_te
16a0: 73 74 20 32 2e 35 2e 24 74 6e 20 7b 0a 20 20 20  st 2.5.$tn {.   
16b0: 20 53 45 4c 45 43 54 20 6f 66 66 73 65 74 73 28   SELECT offsets(
16c0: 66 74 32 29 20 46 52 4f 4d 20 66 74 32 20 57 48  ft2) FROM ft2 WH
16d0: 45 52 45 20 66 74 32 20 4d 41 54 43 48 20 24 6d  ERE ft2 MATCH $m
16e0: 61 74 63 68 0a 20 20 7d 20 24 72 65 73 75 6c 74  atch.  } $result
16f0: 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .}..#-----------
1700: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
1740: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62   The following b
1750: 6c 6f 63 6b 20 6f 66 20 74 65 73 74 73 20 2d 20  lock of tests - 
1760: 33 2e 2a 20 2d 20 74 65 73 74 20 74 68 61 74 20  3.* - test that 
1770: 74 68 65 20 46 54 53 20 69 6e 64 65 78 20 63 61  the FTS index ca
1780: 6e 20 62 65 0a 23 20 6d 6f 64 69 66 69 65 64 20  n be.# modified 
1790: 62 79 20 77 72 69 74 69 6e 67 20 74 6f 20 74 68  by writing to th
17a0: 65 20 74 61 62 6c 65 2e 20 42 75 74 20 74 68 61  e table. But tha
17b0: 74 20 74 68 69 73 20 68 61 73 20 6e 6f 20 65 66  t this has no ef
17c0: 66 65 63 74 20 6f 6e 20 74 68 65 20 0a 23 20 63  fect on the .# c
17d0: 6f 6e 74 65 6e 74 20 74 61 62 6c 65 2e 0a 23 20  ontent table..# 
17e0: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
17f0: 74 20 33 2e 31 20 7b 0a 20 20 43 52 45 41 54 45  t 3.1 {.  CREATE
1800: 20 54 41 42 4c 45 20 74 33 28 78 2c 20 79 29 3b   TABLE t3(x, y);
1810: 0a 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41  .  CREATE VIRTUA
1820: 4c 20 54 41 42 4c 45 20 66 74 33 20 55 53 49 4e  L TABLE ft3 USIN
1830: 47 20 66 74 73 34 28 63 6f 6e 74 65 6e 74 3d 74  G fts4(content=t
1840: 33 29 3b 0a 7d 0a 0a 64 6f 5f 63 61 74 63 68 73  3);.}..do_catchs
1850: 71 6c 5f 74 65 73 74 20 33 2e 31 2e 31 20 7b 0a  ql_test 3.1.1 {.
1860: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74    INSERT INTO ft
1870: 33 20 56 41 4c 55 45 53 28 27 61 20 62 20 63 27  3 VALUES('a b c'
1880: 2c 20 27 64 20 65 20 66 27 29 3b 0a 7d 20 7b 31  , 'd e f');.} {1
1890: 20 7b 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69   {constraint fai
18a0: 6c 65 64 7d 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  led}}.do_execsql
18b0: 5f 74 65 73 74 20 33 2e 31 2e 32 20 7b 0a 20 20  _test 3.1.2 {.  
18c0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 33 28  INSERT INTO ft3(
18d0: 64 6f 63 69 64 2c 20 78 2c 20 79 29 20 56 41 4c  docid, x, y) VAL
18e0: 55 45 53 28 32 31 2c 20 27 61 20 62 20 63 27 2c  UES(21, 'a b c',
18f0: 20 27 64 20 65 20 66 27 29 3b 0a 20 20 53 45 4c   'd e f');.  SEL
1900: 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 66  ECT rowid FROM f
1910: 74 33 20 57 48 45 52 45 20 66 74 33 20 4d 41 54  t3 WHERE ft3 MAT
1920: 43 48 20 27 22 61 20 62 20 63 22 27 3b 0a 7d 20  CH '"a b c"';.} 
1930: 7b 32 31 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  {21}.do_execsql_
1940: 74 65 73 74 20 33 2e 31 2e 33 20 7b 20 53 45 4c  test 3.1.3 { SEL
1950: 45 43 54 20 2a 20 46 52 4f 4d 20 74 33 20 7d 20  ECT * FROM t3 } 
1960: 7b 7d 0a 0a 23 20 54 68 69 73 20 44 45 4c 45 54  {}..# This DELET
1970: 45 20 64 6f 65 73 20 6e 6f 74 20 77 6f 72 6b 2c  E does not work,
1980: 20 73 69 6e 63 65 20 74 68 65 72 65 20 69 73 20   since there is 
1990: 6e 6f 20 72 6f 77 20 69 6e 20 5b 74 33 5d 20 74  no row in [t3] t
19a0: 6f 20 62 61 73 65 20 74 68 65 0a 23 20 44 45 4c  o base the.# DEL
19b0: 45 54 45 20 6f 6e 2e 20 53 6f 20 74 68 65 20 53  ETE on. So the S
19c0: 45 4c 45 43 54 20 6f 6e 20 5b 66 74 33 5d 20 73  ELECT on [ft3] s
19d0: 74 69 6c 6c 20 72 65 74 75 72 6e 73 20 72 6f 77  till returns row
19e0: 69 64 20 32 31 2e 0a 64 6f 5f 65 78 65 63 73 71  id 21..do_execsq
19f0: 6c 5f 74 65 73 74 20 33 2e 31 2e 34 20 7b 20 0a  l_test 3.1.4 { .
1a00: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 66 74    DELETE FROM ft
1a10: 33 3b 0a 20 20 53 45 4c 45 43 54 20 72 6f 77 69  3;.  SELECT rowi
1a20: 64 20 46 52 4f 4d 20 66 74 33 20 57 48 45 52 45  d FROM ft3 WHERE
1a30: 20 66 74 33 20 4d 41 54 43 48 20 27 22 61 20 62   ft3 MATCH '"a b
1a40: 20 63 22 27 3b 0a 7d 20 7b 32 31 7d 0a 0a 23 20   c"';.} {21}..# 
1a50: 49 66 20 74 68 65 20 72 6f 77 20 69 73 20 61 64  If the row is ad
1a60: 64 65 64 20 74 6f 20 5b 74 33 5d 20 62 65 66 6f  ded to [t3] befo
1a70: 72 65 20 74 68 65 20 44 45 4c 45 54 45 20 6f 6e  re the DELETE on
1a80: 20 5b 66 74 33 5d 2c 20 69 74 20 77 6f 72 6b 73   [ft3], it works
1a90: 2e 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
1aa0: 74 20 33 2e 31 2e 35 20 7b 0a 20 20 49 4e 53 45  t 3.1.5 {.  INSE
1ab0: 52 54 20 49 4e 54 4f 20 74 33 28 72 6f 77 69 64  RT INTO t3(rowid
1ac0: 2c 20 78 2c 20 79 29 20 56 41 4c 55 45 53 28 32  , x, y) VALUES(2
1ad0: 31 2c 20 27 61 20 62 20 63 27 2c 20 27 64 20 65  1, 'a b c', 'd e
1ae0: 20 66 27 29 3b 0a 20 20 44 45 4c 45 54 45 20 46   f');.  DELETE F
1af0: 52 4f 4d 20 66 74 33 3b 0a 20 20 53 45 4c 45 43  ROM ft3;.  SELEC
1b00: 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 66 74 33  T rowid FROM ft3
1b10: 20 57 48 45 52 45 20 66 74 33 20 4d 41 54 43 48   WHERE ft3 MATCH
1b20: 20 27 22 61 20 62 20 63 22 27 3b 0a 7d 20 7b 7d   '"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 33 2e 31 2e 36 20 7b 20 53 45 4c 45 43 54 20   3.1.6 { SELECT 
1b50: 72 6f 77 69 64 20 46 52 4f 4d 20 74 33 20 7d 20  rowid FROM t3 } 
1b60: 7b 32 31 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c  {21}..do_execsql
1b70: 5f 74 65 73 74 20 33 2e 32 2e 31 20 7b 0a 20 20  _test 3.2.1 {.  
1b80: 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 33 28  INSERT INTO ft3(
1b90: 72 6f 77 69 64 2c 20 78 2c 20 79 29 20 56 41 4c  rowid, x, y) VAL
1ba0: 55 45 53 28 30 2c 20 27 52 20 54 20 4d 20 53 20  UES(0, 'R T M S 
1bb0: 4d 27 2c 20 27 41 20 46 20 4f 20 4b 20 48 27 29  M', 'A F O K H')
1bc0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
1bd0: 66 74 33 28 72 6f 77 69 64 2c 20 78 2c 20 79 29  ft3(rowid, x, y)
1be0: 20 56 41 4c 55 45 53 28 31 2c 20 27 43 20 5a 20   VALUES(1, 'C Z 
1bf0: 4a 20 4f 20 58 27 2c 20 27 55 20 53 20 51 20 44  J O X', 'U S Q D
1c00: 20 4b 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49   K');.  INSERT I
1c10: 4e 54 4f 20 66 74 33 28 72 6f 77 69 64 2c 20 78  NTO ft3(rowid, x
1c20: 2c 20 79 29 20 56 41 4c 55 45 53 28 32 2c 20 27  , y) VALUES(2, '
1c30: 4e 20 47 20 48 20 50 20 4f 27 2c 20 27 4e 20 4f  N G H P O', 'N O
1c40: 20 50 20 4f 20 43 27 29 3b 0a 20 20 49 4e 53 45   P O C');.  INSE
1c50: 52 54 20 49 4e 54 4f 20 66 74 33 28 72 6f 77 69  RT INTO ft3(rowi
1c60: 64 2c 20 78 2c 20 79 29 20 56 41 4c 55 45 53 28  d, x, y) VALUES(
1c70: 33 2c 20 27 56 20 48 20 53 20 44 20 52 27 2c 20  3, 'V H S D R', 
1c80: 27 4b 20 4e 20 47 20 45 20 43 27 29 3b 0a 20 20  'K N G E C');.  
1c90: 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 33 28  INSERT INTO ft3(
1ca0: 72 6f 77 69 64 2c 20 78 2c 20 79 29 20 56 41 4c  rowid, x, y) VAL
1cb0: 55 45 53 28 34 2c 20 27 4a 20 54 20 52 20 56 20  UES(4, 'J T R V 
1cc0: 55 27 2c 20 27 55 20 58 20 53 20 4c 20 43 27 29  U', 'U X S L C')
1cd0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
1ce0: 66 74 33 28 72 6f 77 69 64 2c 20 78 2c 20 79 29  ft3(rowid, x, y)
1cf0: 20 56 41 4c 55 45 53 28 35 2c 20 27 4e 20 41 20   VALUES(5, 'N A 
1d00: 59 20 4e 20 47 27 2c 20 27 58 20 44 20 47 20 50  Y N G', 'X D G P
1d10: 20 59 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49   Y');.  INSERT I
1d20: 4e 54 4f 20 66 74 33 28 72 6f 77 69 64 2c 20 78  NTO ft3(rowid, x
1d30: 2c 20 79 29 20 56 41 4c 55 45 53 28 36 2c 20 27  , y) VALUES(6, '
1d40: 49 20 51 20 49 20 53 20 50 27 2c 20 27 44 20 52  I Q I S P', 'D R
1d50: 20 4f 20 51 20 42 27 29 3b 0a 20 20 49 4e 53 45   O Q B');.  INSE
1d60: 52 54 20 49 4e 54 4f 20 66 74 33 28 72 6f 77 69  RT INTO ft3(rowi
1d70: 64 2c 20 78 2c 20 79 29 20 56 41 4c 55 45 53 28  d, x, y) VALUES(
1d80: 37 2c 20 27 54 20 4b 20 54 20 5a 20 4a 27 2c 20  7, 'T K T Z J', 
1d90: 27 42 20 57 20 44 20 47 20 4f 27 29 3b 0a 20 20  'B W D G O');.  
1da0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 33 28  INSERT INTO ft3(
1db0: 72 6f 77 69 64 2c 20 78 2c 20 79 29 20 56 41 4c  rowid, x, y) VAL
1dc0: 55 45 53 28 38 2c 20 27 59 20 4b 20 46 20 58 20  UES(8, 'Y K F X 
1dd0: 54 27 2c 20 27 44 20 46 20 47 20 56 20 47 27 29  T', 'D F G V G')
1de0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
1df0: 66 74 33 28 72 6f 77 69 64 2c 20 78 2c 20 79 29  ft3(rowid, x, y)
1e00: 20 56 41 4c 55 45 53 28 39 2c 20 27 45 20 4c 20   VALUES(9, 'E L 
1e10: 45 20 54 20 4c 27 2c 20 27 50 20 57 20 4e 20 46  E T L', 'P W N F
1e20: 20 5a 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49   Z');.  INSERT I
1e30: 4e 54 4f 20 66 74 33 28 72 6f 77 69 64 2c 20 78  NTO ft3(rowid, x
1e40: 2c 20 79 29 20 56 41 4c 55 45 53 28 31 30 2c 20  , y) VALUES(10, 
1e50: 27 4f 20 47 20 4a 20 47 20 58 27 2c 20 27 47 20  'O G J G X', 'G 
1e60: 4a 20 46 20 45 20 50 27 29 3b 0a 20 20 49 4e 53  J F E P');.  INS
1e70: 45 52 54 20 49 4e 54 4f 20 66 74 33 28 72 6f 77  ERT INTO ft3(row
1e80: 69 64 2c 20 78 2c 20 79 29 20 56 41 4c 55 45 53  id, x, y) VALUES
1e90: 28 31 31 2c 20 27 4f 20 4c 20 4e 20 4e 20 5a 27  (11, 'O L N N Z'
1ea0: 2c 20 27 4b 20 45 20 5a 20 46 20 44 27 29 3b 0a  , 'K E Z F D');.
1eb0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74    INSERT INTO ft
1ec0: 33 28 72 6f 77 69 64 2c 20 78 2c 20 79 29 20 56  3(rowid, x, y) V
1ed0: 41 4c 55 45 53 28 31 32 2c 20 27 52 20 5a 20 4d  ALUES(12, 'R Z M
1ee0: 20 52 20 4a 27 2c 20 27 58 20 47 20 49 20 4d 20   R J', 'X G I M 
1ef0: 5a 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  Z');.  INSERT IN
1f00: 54 4f 20 66 74 33 28 72 6f 77 69 64 2c 20 78 2c  TO ft3(rowid, x,
1f10: 20 79 29 20 56 41 4c 55 45 53 28 31 33 2c 20 27   y) VALUES(13, '
1f20: 4c 20 58 20 4e 20 4e 20 58 27 2c 20 27 52 20 52  L X N N X', 'R R
1f30: 20 4e 20 53 20 54 27 29 3b 0a 20 20 49 4e 53 45   N S T');.  INSE
1f40: 52 54 20 49 4e 54 4f 20 66 74 33 28 72 6f 77 69  RT INTO ft3(rowi
1f50: 64 2c 20 78 2c 20 79 29 20 56 41 4c 55 45 53 28  d, x, y) VALUES(
1f60: 31 34 2c 20 27 46 20 4c 20 42 20 4a 20 48 27 2c  14, 'F L B J H',
1f70: 20 27 4b 20 57 20 46 20 4c 20 43 27 29 3b 0a 20   'K W F L C');. 
1f80: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 33   INSERT INTO ft3
1f90: 28 72 6f 77 69 64 2c 20 78 2c 20 79 29 20 56 41  (rowid, x, y) VA
1fa0: 4c 55 45 53 28 31 35 2c 20 27 50 20 45 20 42 20  LUES(15, 'P E B 
1fb0: 4d 20 56 27 2c 20 27 45 20 41 20 41 20 42 20 55  M V', 'E A A B U
1fc0: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
1fd0: 4f 20 66 74 33 28 72 6f 77 69 64 2c 20 78 2c 20  O ft3(rowid, x, 
1fe0: 79 29 20 56 41 4c 55 45 53 28 31 36 2c 20 27 56  y) VALUES(16, 'V
1ff0: 20 45 20 43 20 46 20 50 27 2c 20 27 4c 20 55 20   E C F P', 'L U 
2000: 54 20 56 20 4b 27 29 3b 0a 20 20 49 4e 53 45 52  T V K');.  INSER
2010: 54 20 49 4e 54 4f 20 66 74 33 28 72 6f 77 69 64  T INTO ft3(rowid
2020: 2c 20 78 2c 20 79 29 20 56 41 4c 55 45 53 28 31  , x, y) VALUES(1
2030: 37 2c 20 27 54 20 4e 20 4f 20 5a 20 4e 27 2c 20  7, 'T N O Z N', 
2040: 27 54 20 50 20 51 20 58 20 4e 27 29 3b 0a 20 20  'T P Q X N');.  
2050: 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 33 28  INSERT INTO ft3(
2060: 72 6f 77 69 64 2c 20 78 2c 20 79 29 20 56 41 4c  rowid, x, y) VAL
2070: 55 45 53 28 31 38 2c 20 27 56 20 57 20 55 20 57  UES(18, 'V W U W
2080: 20 52 27 2c 20 27 48 20 4f 20 41 20 41 20 56 27   R', 'H O A A V'
2090: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
20a0: 20 66 74 33 28 72 6f 77 69 64 2c 20 78 2c 20 79   ft3(rowid, x, y
20b0: 29 20 56 41 4c 55 45 53 28 31 39 2c 20 27 41 20  ) VALUES(19, 'A 
20c0: 48 20 4e 20 4c 20 46 27 2c 20 27 49 20 47 20 48  H N L F', 'I G H
20d0: 20 42 20 4f 27 29 3b 0a 7d 0a 0a 66 6f 72 65 61   B O');.}..forea
20e0: 63 68 20 7b 74 6e 20 6d 61 74 63 68 20 72 6f 77  ch {tn match row
20f0: 69 64 6c 69 73 74 7d 20 7b 0a 20 20 31 20 20 20  idlist} {.  1   
2100: 22 4e 20 41 22 20 20 20 20 7b 35 20 31 39 7d 0a  "N A"    {5 19}.
2110: 20 20 32 20 20 20 22 78 3a 4f 22 20 20 20 20 7b    2   "x:O"    {
2120: 31 20 32 20 31 30 20 31 31 20 31 37 7d 0a 20 20  1 2 10 11 17}.  
2130: 33 20 20 20 22 79 3a 4f 22 20 20 20 20 7b 30 20  3   "y:O"    {0 
2140: 32 20 36 20 37 20 31 38 20 31 39 7d 0a 7d 20 7b  2 6 7 18 19}.} {
2150: 0a 20 20 73 65 74 20 72 65 73 20 5b 6c 69 73 74  .  set res [list
2160: 5d 0a 20 20 66 6f 72 65 61 63 68 20 72 6f 77 69  ].  foreach rowi
2170: 64 20 24 72 6f 77 69 64 6c 69 73 74 20 7b 20 6c  d $rowidlist { l
2180: 61 70 70 65 6e 64 20 72 65 73 20 24 72 6f 77 69  append res $rowi
2190: 64 20 7b 7d 20 7b 7d 20 7d 0a 0a 20 20 64 6f 5f  d {} {} }..  do_
21a0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 32  execsql_test 3.2
21b0: 2e 32 2e 24 74 6e 20 7b 0a 20 20 20 20 53 45 4c  .2.$tn {.    SEL
21c0: 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f  ECT rowid, * FRO
21d0: 4d 20 66 74 33 20 57 48 45 52 45 20 66 74 33 20  M ft3 WHERE ft3 
21e0: 4d 41 54 43 48 20 24 6d 61 74 63 68 0a 20 20 7d  MATCH $match.  }
21f0: 20 24 72 65 73 0a 20 20 64 6f 5f 65 78 65 63 73   $res.  do_execs
2200: 71 6c 5f 74 65 73 74 20 33 2e 32 2e 33 2e 24 74  ql_test 3.2.3.$t
2210: 6e 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 64  n {.    SELECT d
2220: 6f 63 69 64 2c 20 2a 20 46 52 4f 4d 20 66 74 33  ocid, * FROM ft3
2230: 20 57 48 45 52 45 20 66 74 33 20 4d 41 54 43 48   WHERE ft3 MATCH
2240: 20 24 6d 61 74 63 68 0a 20 20 7d 20 24 72 65 73   $match.  } $res
2250: 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  .}..do_execsql_t
2260: 65 73 74 20 33 2e 33 2e 31 20 7b 0a 20 20 49 4e  est 3.3.1 {.  IN
2270: 53 45 52 54 20 49 4e 54 4f 20 74 33 28 72 6f 77  SERT INTO t3(row
2280: 69 64 2c 20 78 2c 20 79 29 20 56 41 4c 55 45 53  id, x, y) VALUES
2290: 28 30 2c 20 27 52 20 54 20 4d 20 53 20 4d 27 2c  (0, 'R T M S M',
22a0: 20 27 41 20 46 20 4f 20 4b 20 48 27 29 3b 0a 20   'A F O K H');. 
22b0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 28   INSERT INTO t3(
22c0: 72 6f 77 69 64 2c 20 78 2c 20 79 29 20 56 41 4c  rowid, x, y) VAL
22d0: 55 45 53 28 31 2c 20 27 43 20 5a 20 4a 20 4f 20  UES(1, 'C Z J O 
22e0: 58 27 2c 20 27 55 20 53 20 51 20 44 20 4b 27 29  X', 'U S Q D K')
22f0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
2300: 74 33 28 72 6f 77 69 64 2c 20 78 2c 20 79 29 20  t3(rowid, x, y) 
2310: 56 41 4c 55 45 53 28 32 2c 20 27 4e 20 47 20 48  VALUES(2, 'N G H
2320: 20 50 20 4f 27 2c 20 27 4e 20 4f 20 50 20 4f 20   P O', 'N O P O 
2330: 43 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  C');.  INSERT IN
2340: 54 4f 20 74 33 28 72 6f 77 69 64 2c 20 78 2c 20  TO t3(rowid, x, 
2350: 79 29 20 56 41 4c 55 45 53 28 33 2c 20 27 56 20  y) VALUES(3, 'V 
2360: 48 20 53 20 44 20 52 27 2c 20 27 4b 20 4e 20 47  H S D R', 'K N G
2370: 20 45 20 43 27 29 3b 0a 20 20 49 4e 53 45 52 54   E C');.  INSERT
2380: 20 49 4e 54 4f 20 74 33 28 72 6f 77 69 64 2c 20   INTO t3(rowid, 
2390: 78 2c 20 79 29 20 56 41 4c 55 45 53 28 34 2c 20  x, y) VALUES(4, 
23a0: 27 4a 20 54 20 52 20 56 20 55 27 2c 20 27 55 20  'J T R V U', 'U 
23b0: 58 20 53 20 4c 20 43 27 29 3b 0a 20 20 49 4e 53  X S L C');.  INS
23c0: 45 52 54 20 49 4e 54 4f 20 74 33 28 72 6f 77 69  ERT INTO t3(rowi
23d0: 64 2c 20 78 2c 20 79 29 20 56 41 4c 55 45 53 28  d, x, y) VALUES(
23e0: 35 2c 20 27 4e 20 41 20 59 20 4e 20 47 27 2c 20  5, 'N A Y N G', 
23f0: 27 58 20 44 20 47 20 50 20 59 27 29 3b 0a 20 20  'X D G P Y');.  
2400: 55 50 44 41 54 45 20 66 74 33 20 53 45 54 20 78  UPDATE ft3 SET x
2410: 20 3d 20 79 2c 20 79 20 3d 20 78 3b 0a 20 20 44   = y, y = x;.  D
2420: 45 4c 45 54 45 20 46 52 4f 4d 20 74 33 3b 0a 7d  ELETE FROM t3;.}
2430: 0a 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20 6d 61  ..foreach {tn ma
2440: 74 63 68 20 72 6f 77 69 64 6c 69 73 74 7d 20 7b  tch rowidlist} {
2450: 0a 20 20 31 20 20 20 22 4e 20 41 22 20 20 20 20  .  1   "N A"    
2460: 7b 35 20 31 39 7d 0a 20 20 32 20 20 20 22 78 3a  {5 19}.  2   "x:
2470: 4f 22 20 20 20 20 7b 30 20 32 20 31 30 20 31 31  O"    {0 2 10 11
2480: 20 31 37 7d 0a 20 20 33 20 20 20 22 79 3a 4f 22   17}.  3   "y:O"
2490: 20 20 20 20 7b 31 20 32 20 36 20 37 20 31 38 20      {1 2 6 7 18 
24a0: 31 39 7d 0a 7d 20 7b 0a 20 20 73 65 74 20 72 65  19}.} {.  set re
24b0: 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61  s [list].  forea
24c0: 63 68 20 72 6f 77 69 64 20 24 72 6f 77 69 64 6c  ch rowid $rowidl
24d0: 69 73 74 20 7b 20 6c 61 70 70 65 6e 64 20 72 65  ist { lappend re
24e0: 73 20 24 72 6f 77 69 64 20 7b 7d 20 7b 7d 20 7d  s $rowid {} {} }
24f0: 0a 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ..  do_execsql_t
2500: 65 73 74 20 33 2e 33 2e 32 2e 24 74 6e 20 7b 0a  est 3.3.2.$tn {.
2510: 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64      SELECT rowid
2520: 2c 20 2a 20 46 52 4f 4d 20 66 74 33 20 57 48 45  , * FROM ft3 WHE
2530: 52 45 20 66 74 33 20 4d 41 54 43 48 20 24 6d 61  RE ft3 MATCH $ma
2540: 74 63 68 0a 20 20 7d 20 24 72 65 73 0a 20 20 64  tch.  } $res.  d
2550: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33  o_execsql_test 3
2560: 2e 33 2e 33 2e 24 74 6e 20 7b 0a 20 20 20 20 53  .3.3.$tn {.    S
2570: 45 4c 45 43 54 20 64 6f 63 69 64 2c 20 2a 20 46  ELECT docid, * F
2580: 52 4f 4d 20 66 74 33 20 57 48 45 52 45 20 66 74  ROM ft3 WHERE ft
2590: 33 20 4d 41 54 43 48 20 24 6d 61 74 63 68 0a 20  3 MATCH $match. 
25a0: 20 7d 20 24 72 65 73 0a 7d 0a 0a 64 6f 5f 65 78   } $res.}..do_ex
25b0: 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 33 2e 31  ecsql_test 3.3.1
25c0: 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f   {.  INSERT INTO
25d0: 20 74 33 28 72 6f 77 69 64 2c 20 78 2c 20 79 29   t3(rowid, x, y)
25e0: 20 56 41 4c 55 45 53 28 31 35 2c 20 27 50 20 45   VALUES(15, 'P E
25f0: 20 42 20 4d 20 56 27 2c 20 27 45 20 41 20 41 20   B M V', 'E A A 
2600: 42 20 55 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  B U');.  INSERT 
2610: 49 4e 54 4f 20 74 33 28 72 6f 77 69 64 2c 20 78  INTO t3(rowid, x
2620: 2c 20 79 29 20 56 41 4c 55 45 53 28 31 36 2c 20  , y) VALUES(16, 
2630: 27 56 20 45 20 43 20 46 20 50 27 2c 20 27 4c 20  'V E C F P', 'L 
2640: 55 20 54 20 56 20 4b 27 29 3b 0a 20 20 49 4e 53  U T V K');.  INS
2650: 45 52 54 20 49 4e 54 4f 20 74 33 28 72 6f 77 69  ERT INTO t3(rowi
2660: 64 2c 20 78 2c 20 79 29 20 56 41 4c 55 45 53 28  d, x, y) VALUES(
2670: 31 37 2c 20 27 54 20 4e 20 4f 20 5a 20 4e 27 2c  17, 'T N O Z N',
2680: 20 27 54 20 50 20 51 20 58 20 4e 27 29 3b 0a 20   'T P Q X N');. 
2690: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 28   INSERT INTO t3(
26a0: 72 6f 77 69 64 2c 20 78 2c 20 79 29 20 56 41 4c  rowid, x, y) VAL
26b0: 55 45 53 28 31 38 2c 20 27 56 20 57 20 55 20 57  UES(18, 'V W U W
26c0: 20 52 27 2c 20 27 48 20 4f 20 41 20 41 20 56 27   R', 'H O A A V'
26d0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
26e0: 20 74 33 28 72 6f 77 69 64 2c 20 78 2c 20 79 29   t3(rowid, x, y)
26f0: 20 56 41 4c 55 45 53 28 31 39 2c 20 27 41 20 48   VALUES(19, 'A H
2700: 20 4e 20 4c 20 46 27 2c 20 27 49 20 47 20 48 20   N L F', 'I G H 
2710: 42 20 4f 27 29 3b 0a 20 20 44 45 4c 45 54 45 20  B O');.  DELETE 
2720: 46 52 4f 4d 20 66 74 33 3b 0a 7d 0a 0a 66 6f 72  FROM ft3;.}..for
2730: 65 61 63 68 20 7b 74 6e 20 6d 61 74 63 68 20 72  each {tn match r
2740: 6f 77 69 64 6c 69 73 74 7d 20 7b 0a 20 20 31 20  owidlist} {.  1 
2750: 20 20 22 4e 20 41 22 20 20 20 20 7b 35 7d 0a 20    "N A"    {5}. 
2760: 20 32 20 20 20 22 78 3a 4f 22 20 20 20 20 7b 30   2   "x:O"    {0
2770: 20 32 20 31 30 20 31 31 7d 0a 20 20 33 20 20 20   2 10 11}.  3   
2780: 22 79 3a 4f 22 20 20 20 20 7b 31 20 32 20 36 20  "y:O"    {1 2 6 
2790: 37 7d 0a 7d 20 7b 0a 20 20 73 65 74 20 72 65 73  7}.} {.  set res
27a0: 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63   [list].  foreac
27b0: 68 20 72 6f 77 69 64 20 24 72 6f 77 69 64 6c 69  h rowid $rowidli
27c0: 73 74 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73  st { lappend res
27d0: 20 24 72 6f 77 69 64 20 7b 7d 20 7b 7d 20 7d 0a   $rowid {} {} }.
27e0: 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .  do_execsql_te
27f0: 73 74 20 33 2e 33 2e 32 2e 24 74 6e 20 7b 0a 20  st 3.3.2.$tn {. 
2800: 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c     SELECT rowid,
2810: 20 2a 20 46 52 4f 4d 20 66 74 33 20 57 48 45 52   * FROM ft3 WHER
2820: 45 20 66 74 33 20 4d 41 54 43 48 20 24 6d 61 74  E ft3 MATCH $mat
2830: 63 68 0a 20 20 7d 20 24 72 65 73 0a 20 20 64 6f  ch.  } $res.  do
2840: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33 2e  _execsql_test 3.
2850: 33 2e 33 2e 24 74 6e 20 7b 0a 20 20 20 20 53 45  3.3.$tn {.    SE
2860: 4c 45 43 54 20 64 6f 63 69 64 2c 20 2a 20 46 52  LECT docid, * FR
2870: 4f 4d 20 66 74 33 20 57 48 45 52 45 20 66 74 33  OM ft3 WHERE ft3
2880: 20 4d 41 54 43 48 20 24 6d 61 74 63 68 0a 20 20   MATCH $match.  
2890: 7d 20 24 72 65 73 0a 7d 0a 0a 0a 23 2d 2d 2d 2d  } $res.}...#----
28a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
28b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
28c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
28d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
28e0: 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63 61 73  -----.# Test cas
28f0: 65 73 20 34 2e 2a 20 74 65 73 74 20 74 68 65 20  es 4.* test the 
2900: 27 72 65 62 75 69 6c 64 27 20 63 6f 6d 6d 61 6e  'rebuild' comman
2910: 64 2e 20 4f 6e 20 63 6f 6e 74 65 6e 74 3d 78 78  d. On content=xx
2920: 78 20 61 6e 64 20 72 65 67 75 6c 61 72 0a 23 20  x and regular.# 
2930: 46 54 53 20 74 61 62 6c 65 73 2e 0a 23 20 0a 64  FTS tables..# .d
2940: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34  o_execsql_test 4
2950: 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41  .0 {.  CREATE TA
2960: 42 4c 45 20 74 34 28 78 29 3b 0a 20 20 43 52 45  BLE t4(x);.  CRE
2970: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
2980: 45 20 66 74 34 20 55 53 49 4e 47 20 66 74 73 34  E ft4 USING fts4
2990: 28 63 6f 6e 74 65 6e 74 3d 74 34 29 3b 0a 20 20  (content=t4);.  
29a0: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
29b0: 41 42 4c 45 20 66 74 34 78 20 55 53 49 4e 47 20  ABLE ft4x USING 
29c0: 66 74 73 34 28 78 29 3b 0a 7d 0a 0a 64 6f 5f 65  fts4(x);.}..do_e
29d0: 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 31 2e  xecsql_test 4.1.
29e0: 31 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  1 {.  INSERT INT
29f0: 4f 20 66 74 34 78 28 66 74 34 78 29 20 56 41 4c  O ft4x(ft4x) VAL
2a00: 55 45 53 28 27 72 65 62 75 69 6c 64 27 29 3b 0a  UES('rebuild');.
2a10: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74    INSERT INTO ft
2a20: 34 28 66 74 34 29 20 56 41 4c 55 45 53 28 27 72  4(ft4) VALUES('r
2a30: 65 62 75 69 6c 64 27 29 3b 0a 7d 20 7b 7d 0a 64  ebuild');.} {}.d
2a40: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34  o_execsql_test 4
2a50: 2e 31 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20  .1.2 {.  SELECT 
2a60: 69 64 2c 20 71 75 6f 74 65 28 76 61 6c 75 65 29  id, quote(value)
2a70: 20 46 52 4f 4d 20 66 74 34 5f 73 74 61 74 0a 7d   FROM ft4_stat.}
2a80: 20 7b 30 20 58 27 30 30 30 30 30 30 27 7d 0a 64   {0 X'000000'}.d
2a90: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34  o_execsql_test 4
2aa0: 2e 31 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20  .1.3 {.  SELECT 
2ab0: 69 64 2c 20 71 75 6f 74 65 28 76 61 6c 75 65 29  id, quote(value)
2ac0: 20 46 52 4f 4d 20 66 74 34 78 5f 73 74 61 74 0a   FROM ft4x_stat.
2ad0: 7d 20 7b 30 20 58 27 30 30 30 30 30 30 27 7d 0a  } {0 X'000000'}.
2ae0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
2af0: 20 34 2e 32 2e 31 20 7b 0a 20 20 49 4e 53 45 52   4.2.1 {.  INSER
2b00: 54 20 49 4e 54 4f 20 66 74 34 78 20 56 41 4c 55  T INTO ft4x VALU
2b10: 45 53 28 27 4d 20 47 20 4d 20 46 20 54 27 29 3b  ES('M G M F T');
2b20: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66  .  INSERT INTO f
2b30: 74 34 78 20 56 41 4c 55 45 53 28 27 5a 20 51 20  t4x VALUES('Z Q 
2b40: 43 20 41 20 55 27 29 3b 0a 20 20 49 4e 53 45 52  C A U');.  INSER
2b50: 54 20 49 4e 54 4f 20 66 74 34 78 20 56 41 4c 55  T INTO ft4x VALU
2b60: 45 53 28 27 4e 20 4c 20 4c 20 56 27 29 3b 0a 20  ES('N L L V');. 
2b70: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 34   INSERT INTO ft4
2b80: 78 20 56 41 4c 55 45 53 28 27 54 20 46 20 44 20  x VALUES('T F D 
2b90: 58 20 44 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  X D');.  INSERT 
2ba0: 49 4e 54 4f 20 66 74 34 78 20 56 41 4c 55 45 53  INTO ft4x VALUES
2bb0: 28 27 5a 20 48 20 49 20 53 20 44 27 29 3b 0a 0a  ('Z H I S D');..
2bc0: 20 20 53 45 4c 45 43 54 20 69 64 2c 20 71 75 6f    SELECT id, quo
2bd0: 74 65 28 76 61 6c 75 65 29 20 46 52 4f 4d 20 66  te(value) FROM f
2be0: 74 34 78 5f 73 74 61 74 0a 7d 20 7b 30 20 58 27  t4x_stat.} {0 X'
2bf0: 30 35 31 38 32 42 27 7d 0a 0a 64 6f 5f 65 78 65  05182B'}..do_exe
2c00: 63 73 71 6c 5f 74 65 73 74 20 34 2e 32 2e 32 20  csql_test 4.2.2 
2c10: 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  {.  INSERT INTO 
2c20: 66 74 34 28 72 6f 77 69 64 2c 20 78 29 20 53 45  ft4(rowid, x) SE
2c30: 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52  LECT rowid, * FR
2c40: 4f 4d 20 66 74 34 78 3b 0a 20 20 53 45 4c 45 43  OM ft4x;.  SELEC
2c50: 54 20 69 64 2c 20 71 75 6f 74 65 28 76 61 6c 75  T id, quote(valu
2c60: 65 29 20 46 52 4f 4d 20 66 74 34 5f 73 74 61 74  e) FROM ft4_stat
2c70: 0a 7d 20 7b 30 20 58 27 30 35 31 38 32 42 27 7d  .} {0 X'05182B'}
2c80: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
2c90: 74 20 34 2e 32 2e 33 20 7b 0a 20 20 53 45 4c 45  t 4.2.3 {.  SELE
2ca0: 43 54 20 64 6f 63 69 64 2c 20 71 75 6f 74 65 28  CT docid, quote(
2cb0: 73 69 7a 65 29 20 46 52 4f 4d 20 66 74 34 5f 64  size) FROM ft4_d
2cc0: 6f 63 73 69 7a 65 0a 7d 20 7b 31 20 58 27 30 35  ocsize.} {1 X'05
2cd0: 27 20 32 20 58 27 30 35 27 20 33 20 58 27 30 34  ' 2 X'05' 3 X'04
2ce0: 27 20 34 20 58 27 30 35 27 20 35 20 58 27 30 35  ' 4 X'05' 5 X'05
2cf0: 27 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  '}..do_execsql_t
2d00: 65 73 74 20 34 2e 32 2e 34 20 7b 0a 20 20 49 4e  est 4.2.4 {.  IN
2d10: 53 45 52 54 20 49 4e 54 4f 20 66 74 34 78 28 66  SERT INTO ft4x(f
2d20: 74 34 78 29 20 56 41 4c 55 45 53 28 27 72 65 62  t4x) VALUES('reb
2d30: 75 69 6c 64 27 29 3b 0a 20 20 53 45 4c 45 43 54  uild');.  SELECT
2d40: 20 69 64 2c 20 71 75 6f 74 65 28 76 61 6c 75 65   id, quote(value
2d50: 29 20 46 52 4f 4d 20 66 74 34 78 5f 73 74 61 74  ) FROM ft4x_stat
2d60: 3b 0a 20 20 53 45 4c 45 43 54 20 64 6f 63 69 64  ;.  SELECT docid
2d70: 2c 20 71 75 6f 74 65 28 73 69 7a 65 29 20 46 52  , quote(size) FR
2d80: 4f 4d 20 66 74 34 78 5f 64 6f 63 73 69 7a 65 0a  OM ft4x_docsize.
2d90: 7d 20 7b 30 20 58 27 30 35 31 38 32 42 27 20 31  } {0 X'05182B' 1
2da0: 20 58 27 30 35 27 20 32 20 58 27 30 35 27 20 33   X'05' 2 X'05' 3
2db0: 20 58 27 30 34 27 20 34 20 58 27 30 35 27 20 35   X'04' 4 X'05' 5
2dc0: 20 58 27 30 35 27 7d 0a 0a 64 6f 5f 65 78 65 63   X'05'}..do_exec
2dd0: 73 71 6c 5f 74 65 73 74 20 34 2e 32 2e 35 20 7b  sql_test 4.2.5 {
2de0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66  .  INSERT INTO f
2df0: 74 34 28 66 74 34 29 20 56 41 4c 55 45 53 28 27  t4(ft4) VALUES('
2e00: 72 65 62 75 69 6c 64 27 29 3b 0a 20 20 53 45 4c  rebuild');.  SEL
2e10: 45 43 54 20 69 64 2c 20 71 75 6f 74 65 28 76 61  ECT id, quote(va
2e20: 6c 75 65 29 20 46 52 4f 4d 20 66 74 34 5f 73 74  lue) FROM ft4_st
2e30: 61 74 3b 0a 20 20 53 45 4c 45 43 54 20 64 6f 63  at;.  SELECT doc
2e40: 69 64 2c 20 71 75 6f 74 65 28 73 69 7a 65 29 20  id, quote(size) 
2e50: 46 52 4f 4d 20 66 74 34 5f 64 6f 63 73 69 7a 65  FROM ft4_docsize
2e60: 0a 7d 20 7b 30 20 58 27 30 30 30 30 30 30 27 7d  .} {0 X'000000'}
2e70: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
2e80: 74 20 34 2e 32 2e 36 20 7b 0a 20 20 49 4e 53 45  t 4.2.6 {.  INSE
2e90: 52 54 20 49 4e 54 4f 20 74 34 28 72 6f 77 69 64  RT INTO t4(rowid
2ea0: 2c 20 78 29 20 53 45 4c 45 43 54 20 72 6f 77 69  , x) SELECT rowi
2eb0: 64 2c 20 78 20 46 52 4f 4d 20 66 74 34 78 3b 0a  d, x FROM ft4x;.
2ec0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74    INSERT INTO ft
2ed0: 34 28 66 74 34 29 20 56 41 4c 55 45 53 28 27 72  4(ft4) VALUES('r
2ee0: 65 62 75 69 6c 64 27 29 3b 0a 20 20 53 45 4c 45  ebuild');.  SELE
2ef0: 43 54 20 69 64 2c 20 71 75 6f 74 65 28 76 61 6c  CT id, quote(val
2f00: 75 65 29 20 46 52 4f 4d 20 66 74 34 5f 73 74 61  ue) FROM ft4_sta
2f10: 74 3b 0a 20 20 53 45 4c 45 43 54 20 64 6f 63 69  t;.  SELECT doci
2f20: 64 2c 20 71 75 6f 74 65 28 73 69 7a 65 29 20 46  d, quote(size) F
2f30: 52 4f 4d 20 66 74 34 5f 64 6f 63 73 69 7a 65 0a  ROM ft4_docsize.
2f40: 7d 20 7b 30 20 58 27 30 35 31 38 32 42 27 20 31  } {0 X'05182B' 1
2f50: 20 58 27 30 35 27 20 32 20 58 27 30 35 27 20 33   X'05' 2 X'05' 3
2f60: 20 58 27 30 34 27 20 34 20 58 27 30 35 27 20 35   X'04' 4 X'05' 5
2f70: 20 58 27 30 35 27 7d 0a 0a 0a 23 2d 2d 2d 2d 2d   X'05'}...#-----
2f80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2f90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2fc0: 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63 61 73 65  ----.# Test case
2fd0: 73 20 35 2e 2a 20 74 65 73 74 20 74 68 61 74 20  s 5.* test that 
2fe0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  the following co
2ff0: 6d 6d 61 6e 64 73 20 64 6f 20 6e 6f 74 20 63 72  mmands do not cr
3000: 65 61 74 65 2f 6d 6f 76 65 20 6f 72 0a 23 20 64  eate/move or.# d
3010: 65 6c 65 74 65 20 61 20 25 5f 63 6f 6e 74 65 6e  elete a %_conten
3020: 74 20 74 61 62 6c 65 20 77 68 65 6e 20 75 73 65  t table when use
3030: 64 20 77 69 74 68 20 61 20 63 6f 6e 74 65 6e 74  d with a content
3040: 3d 78 78 78 20 46 54 53 20 74 61 62 6c 65 2e 0a  =xxx FTS table..
3050: 23 20 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  # .do_execsql_te
3060: 73 74 20 35 2e 31 2e 31 20 7b 0a 20 20 43 52 45  st 5.1.1 {.  CRE
3070: 41 54 45 20 54 41 42 4c 45 20 74 35 28 61 2c 20  ATE TABLE t5(a, 
3080: 62 2c 20 63 2c 20 64 29 3b 0a 20 20 43 52 45 41  b, c, d);.  CREA
3090: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
30a0: 20 66 74 35 20 55 53 49 4e 47 20 66 74 73 34 28   ft5 USING fts4(
30b0: 63 6f 6e 74 65 6e 74 3d 74 35 29 3b 0a 20 20 53  content=t5);.  S
30c0: 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20  ELECT name FROM 
30d0: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48  sqlite_master WH
30e0: 45 52 45 20 6e 61 6d 65 20 4c 49 4b 45 20 27 25  ERE name LIKE '%
30f0: 74 35 25 27 3b 0a 7d 20 7b 0a 20 20 74 35 20 66  t5%';.} {.  t5 f
3100: 74 35 20 66 74 35 5f 73 65 67 6d 65 6e 74 73 20  t5 ft5_segments 
3110: 66 74 35 5f 73 65 67 64 69 72 20 0a 20 20 73 71  ft5_segdir .  sq
3120: 6c 69 74 65 5f 61 75 74 6f 69 6e 64 65 78 5f 66  lite_autoindex_f
3130: 74 35 5f 73 65 67 64 69 72 5f 31 20 66 74 35 5f  t5_segdir_1 ft5_
3140: 64 6f 63 73 69 7a 65 20 66 74 35 5f 73 74 61 74  docsize ft5_stat
3150: 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .}.do_execsql_te
3160: 73 74 20 35 2e 31 2e 32 20 7b 0a 20 20 41 4c 54  st 5.1.2 {.  ALT
3170: 45 52 20 54 41 42 4c 45 20 66 74 35 20 52 45 4e  ER TABLE ft5 REN
3180: 41 4d 45 20 54 4f 20 66 74 36 3b 0a 20 20 53 45  AME TO ft6;.  SE
3190: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
31a0: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
31b0: 52 45 20 6e 61 6d 65 20 4c 49 4b 45 20 27 25 74  RE name LIKE '%t
31c0: 35 25 27 3b 0a 7d 20 7b 0a 20 20 74 35 0a 7d 0a  5%';.} {.  t5.}.
31d0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
31e0: 35 2e 31 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54  5.1.3 {.  SELECT
31f0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
3200: 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 6e  e_master WHERE n
3210: 61 6d 65 20 4c 49 4b 45 20 27 25 74 36 25 27 3b  ame LIKE '%t6%';
3220: 0a 7d 20 7b 0a 20 20 66 74 36 20 66 74 36 5f 73  .} {.  ft6 ft6_s
3230: 65 67 6d 65 6e 74 73 20 66 74 36 5f 73 65 67 64  egments ft6_segd
3240: 69 72 20 0a 20 20 73 71 6c 69 74 65 5f 61 75 74  ir .  sqlite_aut
3250: 6f 69 6e 64 65 78 5f 66 74 36 5f 73 65 67 64 69  oindex_ft6_segdi
3260: 72 5f 31 20 66 74 36 5f 64 6f 63 73 69 7a 65 20  r_1 ft6_docsize 
3270: 66 74 36 5f 73 74 61 74 0a 7d 0a 64 6f 5f 65 78  ft6_stat.}.do_ex
3280: 65 63 73 71 6c 5f 74 65 73 74 20 35 2e 31 2e 34  ecsql_test 5.1.4
3290: 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f   {.  INSERT INTO
32a0: 20 74 35 20 56 41 4c 55 45 53 28 27 61 27 2c 20   t5 VALUES('a', 
32b0: 27 62 27 2c 20 27 63 27 2c 20 27 64 27 29 3b 0a  'b', 'c', 'd');.
32c0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74    INSERT INTO ft
32d0: 36 28 66 74 36 29 20 56 41 4c 55 45 53 28 27 72  6(ft6) VALUES('r
32e0: 65 62 75 69 6c 64 27 29 3b 0a 20 20 53 45 4c 45  ebuild');.  SELE
32f0: 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 66 74  CT rowid FROM ft
3300: 36 20 57 48 45 52 45 20 66 74 36 20 4d 41 54 43  6 WHERE ft6 MATC
3310: 48 20 27 62 27 3b 0a 7d 20 7b 31 7d 0a 64 6f 5f  H 'b';.} {1}.do_
3320: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35 2e 31  execsql_test 5.1
3330: 2e 35 20 7b 0a 20 20 44 52 4f 50 20 54 41 42 4c  .5 {.  DROP TABL
3340: 45 20 66 74 36 3b 0a 20 20 53 45 4c 45 43 54 20  E ft6;.  SELECT 
3350: 2a 20 46 52 4f 4d 20 74 35 3b 0a 7d 20 7b 61 20  * FROM t5;.} {a 
3360: 62 20 63 20 64 7d 0a 64 6f 5f 65 78 65 63 73 71  b c d}.do_execsq
3370: 6c 5f 74 65 73 74 20 35 2e 31 2e 36 20 7b 0a 20  l_test 5.1.6 {. 
3380: 20 53 45 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f   SELECT name FRO
3390: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
33a0: 57 48 45 52 45 20 6e 61 6d 65 20 4c 49 4b 45 20  WHERE name LIKE 
33b0: 27 25 74 36 25 27 3b 0a 7d 20 7b 0a 7d 0a 64 6f  '%t6%';.} {.}.do
33c0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35 2e  _execsql_test 5.
33d0: 31 2e 37 20 7b 0a 20 20 43 52 45 41 54 45 20 56  1.7 {.  CREATE V
33e0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 66 74 35  IRTUAL TABLE ft5
33f0: 20 55 53 49 4e 47 20 66 74 73 34 28 63 6f 6e 74   USING fts4(cont
3400: 65 6e 74 3d 74 35 29 3b 0a 20 20 43 52 45 41 54  ent=t5);.  CREAT
3410: 45 20 54 41 42 4c 45 20 74 35 5f 63 6f 6e 74 65  E TABLE t5_conte
3420: 6e 74 28 61 2c 20 62 29 3b 0a 20 20 44 52 4f 50  nt(a, b);.  DROP
3430: 20 54 41 42 4c 45 20 66 74 35 3b 0a 20 20 53 45   TABLE ft5;.  SE
3440: 4c 45 43 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73  LECT name FROM s
3450: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45  qlite_master WHE
3460: 52 45 20 6e 61 6d 65 20 4c 49 4b 45 20 27 25 74  RE name LIKE '%t
3470: 35 25 27 3b 0a 7d 20 7b 0a 20 20 74 35 20 74 35  5%';.} {.  t5 t5
3480: 5f 63 6f 6e 74 65 6e 74 0a 7d 0a 0a 23 2d 2d 2d  _content.}..#---
3490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
34a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
34b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
34c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
34d0: 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63 61  ------.# Test ca
34e0: 73 65 73 20 36 2e 2a 20 74 65 73 74 20 0a 23 20  ses 6.* test .# 
34f0: 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73  .do_catchsql_tes
3500: 74 20 36 2e 31 2e 31 20 7b 0a 20 20 43 52 45 41  t 6.1.1 {.  CREA
3510: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
3520: 20 66 74 37 20 55 53 49 4e 47 20 66 74 73 34 28   ft7 USING fts4(
3530: 63 6f 6e 74 65 6e 74 3d 74 37 29 3b 0a 7d 20 7b  content=t7);.} {
3540: 31 20 7b 6e 6f 20 73 75 63 68 20 74 61 62 6c 65  1 {no such table
3550: 3a 20 6d 61 69 6e 2e 74 37 7d 7d 0a 0a 64 6f 5f  : main.t7}}..do_
3560: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 36 2e 32  execsql_test 6.2
3570: 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41  .1 {.  CREATE TA
3580: 42 4c 45 20 74 37 28 6f 6e 65 2c 20 74 77 6f 29  BLE t7(one, two)
3590: 3b 0a 20 20 43 52 45 41 54 45 20 56 49 52 54 55  ;.  CREATE VIRTU
35a0: 41 4c 20 54 41 42 4c 45 20 66 74 37 20 55 53 49  AL TABLE ft7 USI
35b0: 4e 47 20 66 74 73 34 28 63 6f 6e 74 65 6e 74 3d  NG fts4(content=
35c0: 74 37 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  t7);.  INSERT IN
35d0: 54 4f 20 74 37 20 56 41 4c 55 45 53 28 27 41 20  TO t7 VALUES('A 
35e0: 42 27 2c 20 27 42 20 41 27 29 3b 0a 20 20 49 4e  B', 'B A');.  IN
35f0: 53 45 52 54 20 49 4e 54 4f 20 74 37 20 56 41 4c  SERT INTO t7 VAL
3600: 55 45 53 28 27 43 20 44 27 2c 20 27 41 20 41 27  UES('C D', 'A A'
3610: 29 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52  );.  SELECT * FR
3620: 4f 4d 20 66 74 37 3b 0a 7d 20 7b 0a 20 20 7b 41  OM ft7;.} {.  {A
3630: 20 42 7d 20 7b 42 20 41 7d 20 7b 43 20 44 7d 20   B} {B A} {C D} 
3640: 7b 41 20 41 7d 0a 7d 0a 0a 64 6f 5f 63 61 74 63  {A A}.}..do_catc
3650: 68 73 71 6c 5f 74 65 73 74 20 36 2e 32 2e 32 20  hsql_test 6.2.2 
3660: 7b 0a 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74  {.  DROP TABLE t
3670: 37 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52  7;.  SELECT * FR
3680: 4f 4d 20 66 74 37 3b 0a 7d 20 7b 31 20 7b 53 51  OM ft7;.} {1 {SQ
3690: 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72  L logic error or
36a0: 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73   missing databas
36b0: 65 7d 7d 0a 0a 64 62 20 63 6c 6f 73 65 0a 73 71  e}}..db close.sq
36c0: 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64 62  lite3 db test.db
36d0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
36e0: 20 36 2e 32 2e 33 20 7b 0a 20 20 53 45 4c 45 43   6.2.3 {.  SELEC
36f0: 54 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  T name FROM sqli
3700: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
3710: 6e 61 6d 65 20 4c 49 4b 45 20 27 25 74 37 25 27  name LIKE '%t7%'
3720: 0a 7d 20 7b 0a 20 20 66 74 37 20 66 74 37 5f 73  .} {.  ft7 ft7_s
3730: 65 67 6d 65 6e 74 73 20 66 74 37 5f 73 65 67 64  egments ft7_segd
3740: 69 72 20 73 71 6c 69 74 65 5f 61 75 74 6f 69 6e  ir sqlite_autoin
3750: 64 65 78 5f 66 74 37 5f 73 65 67 64 69 72 5f 31  dex_ft7_segdir_1
3760: 20 0a 20 20 66 74 37 5f 64 6f 63 73 69 7a 65 20   .  ft7_docsize 
3770: 66 74 37 5f 73 74 61 74 0a 7d 0a 64 6f 5f 63 61  ft7_stat.}.do_ca
3780: 74 63 68 73 71 6c 5f 74 65 73 74 20 36 2e 32 2e  tchsql_test 6.2.
3790: 34 20 7b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46  4 {.  SELECT * F
37a0: 52 4f 4d 20 66 74 37 3b 0a 7d 20 7b 31 20 7b 6e  ROM ft7;.} {1 {n
37b0: 6f 20 73 75 63 68 20 74 61 62 6c 65 3a 20 6d 61  o such table: ma
37c0: 69 6e 2e 74 37 7d 7d 0a 64 6f 5f 65 78 65 63 73  in.t7}}.do_execs
37d0: 71 6c 5f 74 65 73 74 20 36 2e 32 2e 35 20 7b 0a  ql_test 6.2.5 {.
37e0: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
37f0: 37 28 78 2c 20 79 29 3b 0a 20 20 49 4e 53 45 52  7(x, y);.  INSER
3800: 54 20 49 4e 54 4f 20 74 37 20 56 41 4c 55 45 53  T INTO t7 VALUES
3810: 28 27 41 20 42 27 2c 20 27 42 20 41 27 29 3b 0a  ('A B', 'B A');.
3820: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 37    INSERT INTO t7
3830: 20 56 41 4c 55 45 53 28 27 43 20 44 27 2c 20 27   VALUES('C D', '
3840: 41 20 41 27 29 3b 0a 20 20 53 45 4c 45 43 54 20  A A');.  SELECT 
3850: 2a 20 46 52 4f 4d 20 66 74 37 3b 0a 7d 20 7b 0a  * FROM ft7;.} {.
3860: 20 20 7b 41 20 42 7d 20 7b 42 20 41 7d 20 7b 43    {A B} {B A} {C
3870: 20 44 7d 20 7b 41 20 41 7d 0a 7d 0a 0a 64 6f 5f   D} {A A}.}..do_
3880: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 36 2e 32  execsql_test 6.2
3890: 2e 36 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e  .6 {.  INSERT IN
38a0: 54 4f 20 66 74 37 28 66 74 37 29 20 56 41 4c 55  TO ft7(ft7) VALU
38b0: 45 53 28 27 72 65 62 75 69 6c 64 27 29 3b 0a 20  ES('rebuild');. 
38c0: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52   SELECT rowid FR
38d0: 4f 4d 20 66 74 37 20 57 48 45 52 45 20 66 74 37  OM ft7 WHERE ft7
38e0: 20 4d 41 54 43 48 20 27 22 41 20 41 22 27 3b 0a   MATCH '"A A"';.
38f0: 7d 20 7b 32 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  } {2}..do_execsq
3900: 6c 5f 74 65 73 74 20 36 2e 32 2e 37 20 7b 0a 20  l_test 6.2.7 {. 
3910: 20 44 52 4f 50 20 54 41 42 4c 45 20 74 37 3b 0a   DROP TABLE t7;.
3920: 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 74    CREATE TABLE t
3930: 37 28 78 29 3b 0a 7d 0a 64 6f 5f 63 61 74 63 68  7(x);.}.do_catch
3940: 73 71 6c 5f 74 65 73 74 20 36 2e 32 2e 38 20 7b  sql_test 6.2.8 {
3950: 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  .  SELECT * FROM
3960: 20 66 74 37 20 57 48 45 52 45 20 66 74 37 20 4d   ft7 WHERE ft7 M
3970: 41 54 43 48 20 27 22 41 20 41 22 27 3b 0a 7d 20  ATCH '"A A"';.} 
3980: 7b 31 20 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72  {1 {SQL logic er
3990: 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67 20 64  ror or missing d
39a0: 61 74 61 62 61 73 65 7d 7d 0a 64 6f 5f 63 61 74  atabase}}.do_cat
39b0: 63 68 73 71 6c 5f 74 65 73 74 20 36 2e 32 2e 39  chsql_test 6.2.9
39c0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52   {.  SELECT * FR
39d0: 4f 4d 20 66 74 37 20 57 48 45 52 45 20 66 74 37  OM ft7 WHERE ft7
39e0: 20 4d 41 54 43 48 20 27 22 41 20 41 22 27 3b 0a   MATCH '"A A"';.
39f0: 7d 20 7b 31 20 7b 53 51 4c 20 6c 6f 67 69 63 20  } {1 {SQL logic 
3a00: 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69 6e 67  error or missing
3a10: 20 64 61 74 61 62 61 73 65 7d 7d 0a 0a 64 62 20   database}}..db 
3a20: 63 6c 6f 73 65 0a 73 71 6c 69 74 65 33 20 64 62  close.sqlite3 db
3a30: 20 74 65 73 74 2e 64 62 0a 64 6f 5f 63 61 74 63   test.db.do_catc
3a40: 68 73 71 6c 5f 74 65 73 74 20 36 2e 32 2e 31 30  hsql_test 6.2.10
3a50: 20 7b 0a 20 20 53 45 4c 45 43 54 20 72 6f 77 69   {.  SELECT rowi
3a60: 64 20 46 52 4f 4d 20 66 74 37 20 57 48 45 52 45  d FROM ft7 WHERE
3a70: 20 66 74 37 20 4d 41 54 43 48 20 27 22 41 20 41   ft7 MATCH '"A A
3a80: 22 27 3b 0a 7d 20 7b 30 20 32 7d 0a 64 6f 5f 63  "';.} {0 2}.do_c
3a90: 61 74 63 68 73 71 6c 5f 74 65 73 74 20 36 2e 32  atchsql_test 6.2
3aa0: 2e 31 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 72  .11 {.  SELECT r
3ab0: 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20 66 74 37  owid, * FROM ft7
3ac0: 20 57 48 45 52 45 20 66 74 37 20 4d 41 54 43 48   WHERE ft7 MATCH
3ad0: 20 27 22 41 20 41 22 27 3b 0a 7d 20 7b 30 20 7b   '"A A"';.} {0 {
3ae0: 32 20 7b 7d 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  2 {}}}..#-------
3af0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b30: 2d 2d 0a 23 20 54 65 73 74 20 63 61 73 65 73 20  --.# Test cases 
3b40: 37 2e 2a 0a 23 20 0a 64 6f 5f 65 78 65 63 73 71  7.*.# .do_execsq
3b50: 6c 5f 74 65 73 74 20 37 2e 31 2e 31 20 7b 0a 20  l_test 7.1.1 {. 
3b60: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
3b70: 54 41 42 4c 45 20 66 74 38 20 55 53 49 4e 47 20  TABLE ft8 USING 
3b80: 66 74 73 34 28 63 6f 6e 74 65 6e 74 3d 6e 6f 73  fts4(content=nos
3b90: 75 63 68 74 61 62 6c 65 2c 20 78 29 3b 0a 20 20  uchtable, x);.  
3ba0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 38 28  INSERT INTO ft8(
3bb0: 64 6f 63 69 64 2c 20 78 29 20 56 41 4c 55 45 53  docid, x) VALUES
3bc0: 28 31 33 2c 20 27 55 20 4f 20 4e 20 58 20 47 27  (13, 'U O N X G'
3bd0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
3be0: 20 66 74 38 28 64 6f 63 69 64 2c 20 78 29 20 56   ft8(docid, x) V
3bf0: 41 4c 55 45 53 28 31 34 2c 20 27 43 20 4a 20 4a  ALUES(14, 'C J J
3c00: 20 55 20 42 27 29 3b 0a 20 20 49 4e 53 45 52 54   U B');.  INSERT
3c10: 20 49 4e 54 4f 20 66 74 38 28 64 6f 63 69 64 2c   INTO ft8(docid,
3c20: 20 78 29 20 56 41 4c 55 45 53 28 31 35 2c 20 27   x) VALUES(15, '
3c30: 4e 20 4a 20 59 20 47 20 58 27 29 3b 0a 20 20 49  N J Y G X');.  I
3c40: 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 38 28 64  NSERT INTO ft8(d
3c50: 6f 63 69 64 2c 20 78 29 20 56 41 4c 55 45 53 28  ocid, x) VALUES(
3c60: 31 36 2c 20 27 52 20 59 20 44 20 4f 20 52 27 29  16, 'R Y D O R')
3c70: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
3c80: 66 74 38 28 64 6f 63 69 64 2c 20 78 29 20 56 41  ft8(docid, x) VA
3c90: 4c 55 45 53 28 31 37 2c 20 27 49 20 59 20 54 20  LUES(17, 'I Y T 
3ca0: 51 20 4f 27 29 3b 0a 7d 0a 0a 64 6f 5f 65 78 65  Q O');.}..do_exe
3cb0: 63 73 71 6c 5f 74 65 73 74 20 37 2e 31 2e 32 20  csql_test 7.1.2 
3cc0: 7b 0a 20 20 53 45 4c 45 43 54 20 64 6f 63 69 64  {.  SELECT docid
3cd0: 20 46 52 4f 4d 20 66 74 38 20 57 48 45 52 45 20   FROM ft8 WHERE 
3ce0: 66 74 38 20 4d 41 54 43 48 20 27 4e 27 3b 0a 7d  ft8 MATCH 'N';.}
3cf0: 20 7b 31 33 20 31 35 7d 0a 0a 64 6f 5f 65 78 65   {13 15}..do_exe
3d00: 63 73 71 6c 5f 74 65 73 74 20 37 2e 32 2e 31 20  csql_test 7.2.1 
3d10: 7b 0a 20 20 43 52 45 41 54 45 20 56 49 52 54 55  {.  CREATE VIRTU
3d20: 41 4c 20 54 41 42 4c 45 20 66 74 39 20 55 53 49  AL TABLE ft9 USI
3d30: 4e 47 20 66 74 73 34 28 63 6f 6e 74 65 6e 74 3d  NG fts4(content=
3d40: 2c 20 78 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , x);.  INSERT I
3d50: 4e 54 4f 20 66 74 39 28 64 6f 63 69 64 2c 20 78  NTO ft9(docid, x
3d60: 29 20 56 41 4c 55 45 53 28 31 33 2c 20 27 55 20  ) VALUES(13, 'U 
3d70: 4f 20 4e 20 58 20 47 27 29 3b 0a 20 20 49 4e 53  O N X G');.  INS
3d80: 45 52 54 20 49 4e 54 4f 20 66 74 39 28 64 6f 63  ERT INTO ft9(doc
3d90: 69 64 2c 20 78 29 20 56 41 4c 55 45 53 28 31 34  id, x) VALUES(14
3da0: 2c 20 27 43 20 4a 20 4a 20 55 20 42 27 29 3b 0a  , 'C J J U B');.
3db0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74    INSERT INTO ft
3dc0: 39 28 64 6f 63 69 64 2c 20 78 29 20 56 41 4c 55  9(docid, x) VALU
3dd0: 45 53 28 31 35 2c 20 27 4e 20 4a 20 59 20 47 20  ES(15, 'N J Y G 
3de0: 58 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  X');.  INSERT IN
3df0: 54 4f 20 66 74 39 28 64 6f 63 69 64 2c 20 78 29  TO ft9(docid, x)
3e00: 20 56 41 4c 55 45 53 28 31 36 2c 20 27 52 20 59   VALUES(16, 'R Y
3e10: 20 44 20 4f 20 52 27 29 3b 0a 20 20 49 4e 53 45   D O R');.  INSE
3e20: 52 54 20 49 4e 54 4f 20 66 74 39 28 64 6f 63 69  RT INTO ft9(doci
3e30: 64 2c 20 78 29 20 56 41 4c 55 45 53 28 31 37 2c  d, x) VALUES(17,
3e40: 20 27 49 20 59 20 54 20 51 20 4f 27 29 3b 0a 7d   'I Y T Q O');.}
3e50: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
3e60: 20 37 2e 32 2e 32 20 7b 0a 20 20 53 45 4c 45 43   7.2.2 {.  SELEC
3e70: 54 20 64 6f 63 69 64 20 46 52 4f 4d 20 66 74 39  T docid FROM ft9
3e80: 20 57 48 45 52 45 20 66 74 39 20 4d 41 54 43 48   WHERE ft9 MATCH
3e90: 20 27 4e 27 3b 0a 7d 20 7b 31 33 20 31 35 7d 0a   'N';.} {13 15}.
3ea0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
3eb0: 37 2e 32 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54  7.2.3 {.  SELECT
3ec0: 20 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74   name FROM sqlit
3ed0: 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 6e  e_master WHERE n
3ee0: 61 6d 65 20 4c 49 4b 45 20 27 66 74 39 5f 25 27  ame LIKE 'ft9_%'
3ef0: 3b 0a 7d 20 7b 66 74 39 5f 73 65 67 6d 65 6e 74  ;.} {ft9_segment
3f00: 73 20 66 74 39 5f 73 65 67 64 69 72 20 66 74 39  s ft9_segdir ft9
3f10: 5f 64 6f 63 73 69 7a 65 20 66 74 39 5f 73 74 61  _docsize ft9_sta
3f20: 74 7d 0a 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f  t}..do_catchsql_
3f30: 74 65 73 74 20 37 2e 32 2e 34 20 7b 0a 20 20 53  test 7.2.4 {.  S
3f40: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 66 74 39  ELECT * FROM ft9
3f50: 20 57 48 45 52 45 20 66 74 39 20 4d 41 54 43 48   WHERE ft9 MATCH
3f60: 20 27 4e 27 3b 0a 7d 20 7b 31 20 7b 53 51 4c 20   'N';.} {1 {SQL 
3f70: 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20 6d  logic error or m
3f80: 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65 7d  issing database}
3f90: 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }..#------------
3fa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3fd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
3fe0: 54 65 73 74 20 63 61 73 65 73 20 38 2e 2a 0a 23  Test cases 8.*.#
3ff0: 20 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73   .do_execsql_tes
4000: 74 20 38 2e 31 20 7b 0a 20 20 43 52 45 41 54 45  t 8.1 {.  CREATE
4010: 20 54 41 42 4c 45 20 74 31 30 28 61 2c 20 62 29   TABLE t10(a, b)
4020: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
4030: 74 31 30 20 56 41 4c 55 45 53 28 0a 20 20 20 20  t10 VALUES(.    
4040: 20 20 27 61 62 61 73 69 61 20 61 62 61 73 69 63    'abasia abasic
4050: 20 61 62 61 73 6b 27 2c 20 27 41 62 61 73 73 69   abask', 'Abassi
4060: 6e 20 61 62 61 73 74 61 72 64 69 7a 65 20 61 62  n abastardize ab
4070: 61 74 61 62 6c 65 27 29 3b 0a 20 20 49 4e 53 45  atable');.  INSE
4080: 52 54 20 49 4e 54 4f 20 74 31 30 20 56 41 4c 55  RT INTO t10 VALU
4090: 45 53 28 0a 20 20 20 20 20 20 27 61 62 61 74 65  ES(.      'abate
40a0: 20 61 62 61 74 65 6d 65 6e 74 20 61 62 61 74 65   abatement abate
40b0: 72 27 2c 20 27 61 62 61 74 69 73 20 61 62 61 74  r', 'abatis abat
40c0: 69 73 65 64 20 61 62 61 74 6f 6e 27 29 3b 0a 20  ised abaton');. 
40d0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 30   INSERT INTO t10
40e0: 20 56 41 4c 55 45 53 28 0a 20 20 20 20 20 20 27   VALUES(.      '
40f0: 61 62 61 74 6f 72 20 61 62 61 74 74 6f 69 72 20  abator abattoir 
4100: 41 62 61 74 75 61 27 2c 20 27 61 62 61 74 75 72  Abatua', 'abatur
4110: 65 20 61 62 61 76 65 20 61 62 61 78 69 61 6c 27  e abave abaxial'
4120: 29 3b 0a 0a 20 20 43 52 45 41 54 45 20 56 49 52  );..  CREATE VIR
4130: 54 55 41 4c 20 54 41 42 4c 45 20 66 74 31 30 20  TUAL TABLE ft10 
4140: 55 53 49 4e 47 20 66 74 73 34 28 63 6f 6e 74 65  USING fts4(conte
4150: 6e 74 3d 74 31 30 2c 20 70 72 65 66 69 78 3d 22  nt=t10, prefix="
4160: 32 2c 34 22 2c 20 61 2c 20 62 29 3b 0a 7d 0a 0a  2,4", a, b);.}..
4170: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
4180: 38 2e 32 20 7b 20 53 45 4c 45 43 54 20 2a 20 46  8.2 { SELECT * F
4190: 52 4f 4d 20 66 74 31 30 20 57 48 45 52 45 20 61  ROM ft10 WHERE a
41a0: 20 4d 41 54 43 48 20 27 61 62 2a 27 3b 20 20 20   MATCH 'ab*';   
41b0: 20 20 20 20 20 20 20 7d 0a 64 6f 5f 65 78 65 63         }.do_exec
41c0: 73 71 6c 5f 74 65 73 74 20 38 2e 33 20 7b 20 49  sql_test 8.3 { I
41d0: 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 31 30 28  NSERT INTO ft10(
41e0: 66 74 31 30 29 20 56 41 4c 55 45 53 28 27 72 65  ft10) VALUES('re
41f0: 62 75 69 6c 64 27 29 3b 20 20 20 20 20 20 20 20  build');        
4200: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
4210: 74 20 38 2e 34 20 7b 20 53 45 4c 45 43 54 20 72  t 8.4 { SELECT r
4220: 6f 77 69 64 20 46 52 4f 4d 20 66 74 31 30 20 57  owid FROM ft10 W
4230: 48 45 52 45 20 61 20 4d 41 54 43 48 20 27 61 62  HERE a MATCH 'ab
4240: 2a 27 3b 20 20 20 20 20 20 7d 20 7b 31 20 32 20  *';      } {1 2 
4250: 33 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  3}.do_execsql_te
4260: 73 74 20 38 2e 35 20 7b 20 53 45 4c 45 43 54 20  st 8.5 { SELECT 
4270: 72 6f 77 69 64 20 46 52 4f 4d 20 66 74 31 30 20  rowid FROM ft10 
4280: 57 48 45 52 45 20 62 20 4d 41 54 43 48 20 27 61  WHERE b MATCH 'a
4290: 62 61 76 2a 27 3b 20 20 20 20 7d 20 7b 33 7d 0a  bav*';    } {3}.
42a0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
42b0: 38 2e 36 20 7b 20 53 45 4c 45 43 54 20 72 6f 77  8.6 { SELECT row
42c0: 69 64 20 46 52 4f 4d 20 66 74 31 30 20 57 48 45  id FROM ft10 WHE
42d0: 52 45 20 66 74 31 30 20 4d 41 54 43 48 20 27 61  RE ft10 MATCH 'a
42e0: 62 61 73 2a 27 3b 20 7d 20 7b 31 7d 0a 0a 23 2d  bas*'; } {1}..#-
42f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4330: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20  --------.# Test 
4340: 63 61 73 65 73 20 39 2e 2a 0a 23 20 0a 72 65 73  cases 9.*.# .res
4350: 65 74 5f 64 62 0a 72 65 67 69 73 74 65 72 5f 65  et_db.register_e
4360: 63 68 6f 5f 6d 6f 64 75 6c 65 20 5b 73 71 6c 69  cho_module [sqli
4370: 74 65 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70  te3_connection_p
4380: 6f 69 6e 74 65 72 20 64 62 5d 0a 0a 64 6f 5f 65  ointer db]..do_e
4390: 78 65 63 73 71 6c 5f 74 65 73 74 20 39 2e 31 20  xecsql_test 9.1 
43a0: 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45  {.  CREATE TABLE
43b0: 20 74 62 6c 31 28 61 2c 20 62 29 3b 0a 20 20 49   tbl1(a, b);.  I
43c0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 62 6c 31 20  NSERT INTO tbl1 
43d0: 56 41 4c 55 45 53 28 27 61 20 62 27 2c 20 27 63  VALUES('a b', 'c
43e0: 20 64 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49   d');.  INSERT I
43f0: 4e 54 4f 20 74 62 6c 31 20 56 41 4c 55 45 53 28  NTO tbl1 VALUES(
4400: 27 65 20 66 27 2c 20 27 61 20 62 27 29 3b 0a 20  'e f', 'a b');. 
4410: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
4420: 54 41 42 4c 45 20 65 31 20 55 53 49 4e 47 20 65  TABLE e1 USING e
4430: 63 68 6f 28 74 62 6c 31 29 3b 0a 20 20 43 52 45  cho(tbl1);.  CRE
4440: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
4450: 45 20 66 74 31 20 55 53 49 4e 47 20 66 74 73 34  E ft1 USING fts4
4460: 28 63 6f 6e 74 65 6e 74 3d 65 31 29 3b 0a 20 20  (content=e1);.  
4470: 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 31 28  INSERT INTO ft1(
4480: 66 74 31 29 20 56 41 4c 55 45 53 28 27 72 65 62  ft1) VALUES('reb
4490: 75 69 6c 64 27 29 3b 0a 7d 0a 0a 64 6f 5f 65 78  uild');.}..do_ex
44a0: 65 63 73 71 6c 5f 74 65 73 74 20 39 2e 32 20 7b  ecsql_test 9.2 {
44b0: 0a 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c  .  SELECT rowid,
44c0: 20 2a 20 46 52 4f 4d 20 66 74 31 20 57 48 45 52   * FROM ft1 WHER
44d0: 45 20 66 74 31 20 4d 41 54 43 48 20 27 65 27 0a  E ft1 MATCH 'e'.
44e0: 7d 20 7b 32 20 7b 65 20 66 7d 20 7b 61 20 62 7d  } {2 {e f} {a b}
44f0: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
4500: 73 74 20 39 2e 33 20 7b 0a 20 20 53 45 4c 45 43  st 9.3 {.  SELEC
4510: 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d 20  T rowid, * FROM 
4520: 66 74 31 20 57 48 45 52 45 20 66 74 31 20 4d 41  ft1 WHERE ft1 MA
4530: 54 43 48 20 27 61 27 0a 7d 20 7b 31 20 7b 61 20  TCH 'a'.} {1 {a 
4540: 62 7d 20 7b 63 20 64 7d 20 32 20 7b 65 20 66 7d  b} {c d} 2 {e f}
4550: 20 7b 61 20 62 7d 7d 0a 0a 64 6f 5f 65 78 65 63   {a b}}..do_exec
4560: 73 71 6c 5f 74 65 73 74 20 39 2e 34 20 7b 20 0a  sql_test 9.4 { .
4570: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 66 74    DELETE FROM ft
4580: 31 20 57 48 45 52 45 20 64 6f 63 69 64 3d 31 3b  1 WHERE docid=1;
4590: 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  .}..do_execsql_t
45a0: 65 73 74 20 39 2e 35 20 7b 0a 20 20 53 45 4c 45  est 9.5 {.  SELE
45b0: 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52 4f 4d  CT rowid, * FROM
45c0: 20 66 74 31 20 57 48 45 52 45 20 66 74 31 20 4d   ft1 WHERE ft1 M
45d0: 41 54 43 48 20 27 61 27 0a 7d 20 7b 32 20 7b 65  ATCH 'a'.} {2 {e
45e0: 20 66 7d 20 7b 61 20 62 7d 7d 0a 0a 64 6f 5f 65   f} {a b}}..do_e
45f0: 78 65 63 73 71 6c 5f 74 65 73 74 20 39 2e 36 20  xecsql_test 9.6 
4600: 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  {.  INSERT INTO 
4610: 66 74 31 28 66 74 31 29 20 56 41 4c 55 45 53 28  ft1(ft1) VALUES(
4620: 27 72 65 62 75 69 6c 64 27 29 3b 0a 20 20 53 45  'rebuild');.  SE
4630: 4c 45 43 54 20 72 6f 77 69 64 2c 20 2a 20 46 52  LECT rowid, * FR
4640: 4f 4d 20 66 74 31 20 57 48 45 52 45 20 66 74 31  OM ft1 WHERE ft1
4650: 20 4d 41 54 43 48 20 27 61 27 0a 7d 20 7b 31 20   MATCH 'a'.} {1 
4660: 7b 61 20 62 7d 20 7b 63 20 64 7d 20 32 20 7b 65  {a b} {c d} 2 {e
4670: 20 66 7d 20 7b 61 20 62 7d 7d 0a 0a 0a 23 2d 2d   f} {a b}}...#--
4680: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4690: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
46a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
46b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
46c0: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 63  -------.# Test c
46d0: 61 73 65 73 20 31 30 2e 2a 0a 23 20 0a 72 65 73  ases 10.*.# .res
46e0: 65 74 5f 64 62 0a 72 65 67 69 73 74 65 72 5f 66  et_db.register_f
46f0: 73 5f 6d 6f 64 75 6c 65 20 5b 73 71 6c 69 74 65  s_module [sqlite
4700: 33 5f 63 6f 6e 6e 65 63 74 69 6f 6e 5f 70 6f 69  3_connection_poi
4710: 6e 74 65 72 20 64 62 5d 0a 0a 70 72 6f 63 20 77  nter db]..proc w
4720: 72 69 74 65 5f 66 69 6c 65 20 7b 70 61 74 68 20  rite_file {path 
4730: 74 65 78 74 7d 20 7b 0a 20 20 73 65 74 20 66 64  text} {.  set fd
4740: 20 5b 6f 70 65 6e 20 24 70 61 74 68 20 77 5d 0a   [open $path w].
4750: 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69 6e    puts -nonewlin
4760: 65 20 24 66 64 20 24 74 65 78 74 0a 20 20 63 6c  e $fd $text.  cl
4770: 6f 73 65 20 24 66 64 0a 7d 0a 0a 77 72 69 74 65  ose $fd.}..write
4780: 5f 66 69 6c 65 20 74 31 2e 74 78 74 20 7b 61 20  _file t1.txt {a 
4790: 62 20 63 20 64 20 65 20 66 20 67 20 68 20 69 20  b c d e f g h i 
47a0: 6a 20 6b 20 6c 20 6d 20 6e 20 6f 20 70 20 71 20  j k l m n o p q 
47b0: 72 20 73 20 74 20 75 20 76 20 77 20 78 20 79 20  r s t u v w x y 
47c0: 7a 7d 0a 77 72 69 74 65 5f 66 69 6c 65 20 74 32  z}.write_file t2
47d0: 2e 74 78 74 20 7b 61 20 62 20 63 20 64 20 65 20  .txt {a b c d e 
47e0: 66 20 67 20 68 20 69 20 6a 20 6b 20 6c 20 6d 20  f g h i j k l m 
47f0: 61 20 62 20 63 20 64 20 65 20 66 20 67 20 68 20  a b c d e f g h 
4800: 69 20 6a 20 6b 20 6c 20 6d 7d 0a 77 72 69 74 65  i j k l m}.write
4810: 5f 66 69 6c 65 20 74 33 2e 74 78 74 20 7b 6e 20  _file t3.txt {n 
4820: 6f 20 70 20 71 20 72 20 73 20 74 20 75 20 76 20  o p q r s t u v 
4830: 77 20 78 20 79 20 7a 20 6e 20 6f 20 70 20 71 20  w x y z n o p q 
4840: 72 20 73 20 74 20 75 20 76 20 77 20 78 20 79 20  r s t u v w x y 
4850: 7a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  z}..do_execsql_t
4860: 65 73 74 20 31 30 2e 31 20 7b 0a 20 20 43 52 45  est 10.1 {.  CRE
4870: 41 54 45 20 54 41 42 4c 45 20 69 64 78 28 69 64  ATE TABLE idx(id
4880: 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
4890: 20 4b 45 59 2c 20 70 61 74 68 20 54 45 58 54 29   KEY, path TEXT)
48a0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
48b0: 69 64 78 20 56 41 4c 55 45 53 20 28 31 2c 20 27  idx VALUES (1, '
48c0: 74 31 2e 74 78 74 27 29 3b 0a 20 20 49 4e 53 45  t1.txt');.  INSE
48d0: 52 54 20 49 4e 54 4f 20 69 64 78 20 56 41 4c 55  RT INTO idx VALU
48e0: 45 53 20 28 32 2c 20 27 74 32 2e 74 78 74 27 29  ES (2, 't2.txt')
48f0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
4900: 69 64 78 20 56 41 4c 55 45 53 20 28 33 2c 20 27  idx VALUES (3, '
4910: 74 33 2e 74 78 74 27 29 3b 0a 0a 20 20 43 52 45  t3.txt');..  CRE
4920: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
4930: 45 20 76 74 20 55 53 49 4e 47 20 66 73 28 69 64  E vt USING fs(id
4940: 78 29 3b 0a 20 20 53 45 4c 45 43 54 20 70 61 74  x);.  SELECT pat
4950: 68 2c 20 64 61 74 61 20 46 52 4f 4d 20 76 74 3b  h, data FROM vt;
4960: 0a 7d 20 7b 0a 20 20 31 20 7b 61 20 62 20 63 20  .} {.  1 {a b c 
4970: 64 20 65 20 66 20 67 20 68 20 69 20 6a 20 6b 20  d e f g h i j k 
4980: 6c 20 6d 20 6e 20 6f 20 70 20 71 20 72 20 73 20  l m n o p q r s 
4990: 74 20 75 20 76 20 77 20 78 20 79 20 7a 7d 20 0a  t u v w x y z} .
49a0: 20 20 32 20 7b 61 20 62 20 63 20 64 20 65 20 66    2 {a b c d e f
49b0: 20 67 20 68 20 69 20 6a 20 6b 20 6c 20 6d 20 61   g h i j k l m a
49c0: 20 62 20 63 20 64 20 65 20 66 20 67 20 68 20 69   b c d e f g h i
49d0: 20 6a 20 6b 20 6c 20 6d 7d 0a 20 20 33 20 7b 6e   j k l m}.  3 {n
49e0: 20 6f 20 70 20 71 20 72 20 73 20 74 20 75 20 76   o p q r s t u v
49f0: 20 77 20 78 20 79 20 7a 20 6e 20 6f 20 70 20 71   w x y z n o p q
4a00: 20 72 20 73 20 74 20 75 20 76 20 77 20 78 20 79   r s t u v w x y
4a10: 20 7a 7d 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71   z}.}..do_execsq
4a20: 6c 5f 74 65 73 74 20 31 30 2e 32 20 7b 0a 20 20  l_test 10.2 {.  
4a30: 53 45 4c 45 43 54 20 70 61 74 68 2c 20 64 61 74  SELECT path, dat
4a40: 61 20 46 52 4f 4d 20 76 74 20 57 48 45 52 45 20  a FROM vt WHERE 
4a50: 72 6f 77 69 64 20 3d 20 32 3b 0a 7d 20 7b 0a 20  rowid = 2;.} {. 
4a60: 20 32 20 7b 61 20 62 20 63 20 64 20 65 20 66 20   2 {a b c d e f 
4a70: 67 20 68 20 69 20 6a 20 6b 20 6c 20 6d 20 61 20  g h i j k l m a 
4a80: 62 20 63 20 64 20 65 20 66 20 67 20 68 20 69 20  b c d e f g h i 
4a90: 6a 20 6b 20 6c 20 6d 7d 0a 7d 0a 0a 64 6f 5f 65  j k l m}.}..do_e
4aa0: 78 65 63 73 71 6c 5f 74 65 73 74 20 31 30 2e 33  xecsql_test 10.3
4ab0: 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49 52 54   {.  CREATE VIRT
4ac0: 55 41 4c 20 54 41 42 4c 45 20 66 74 20 55 53 49  UAL TABLE ft USI
4ad0: 4e 47 20 66 74 73 34 28 63 6f 6e 74 65 6e 74 3d  NG fts4(content=
4ae0: 76 74 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  vt);.  INSERT IN
4af0: 54 4f 20 66 74 28 66 74 29 20 56 41 4c 55 45 53  TO ft(ft) VALUES
4b00: 28 27 72 65 62 75 69 6c 64 27 29 3b 0a 7d 0a 0a  ('rebuild');.}..
4b10: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
4b20: 31 30 2e 34 20 7b 0a 20 20 53 45 4c 45 43 54 20  10.4 {.  SELECT 
4b30: 73 6e 69 70 70 65 74 28 66 74 2c 20 27 5b 27 2c  snippet(ft, '[',
4b40: 20 27 5d 27 2c 20 27 2e 2e 2e 27 2c 20 2d 31 2c   ']', '...', -1,
4b50: 20 35 29 20 46 52 4f 4d 20 66 74 20 57 48 45 52   5) FROM ft WHER
4b60: 45 20 66 74 20 4d 41 54 43 48 20 27 65 27 0a 7d  E ft MATCH 'e'.}
4b70: 20 7b 0a 20 20 7b 2e 2e 2e 63 20 64 20 5b 65 5d   {.  {...c d [e]
4b80: 20 66 20 67 2e 2e 2e 7d 20 7b 2e 2e 2e 63 20 64   f g...} {...c d
4b90: 20 5b 65 5d 20 66 20 67 2e 2e 2e 7d 0a 7d 0a 0a   [e] f g...}.}..
4ba0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
4bb0: 31 30 2e 35 20 7b 0a 20 20 53 45 4c 45 43 54 20  10.5 {.  SELECT 
4bc0: 73 6e 69 70 70 65 74 28 66 74 2c 20 27 5b 27 2c  snippet(ft, '[',
4bd0: 20 27 5d 27 2c 20 27 2e 2e 2e 27 2c 20 2d 31 2c   ']', '...', -1,
4be0: 20 35 29 20 46 52 4f 4d 20 66 74 20 57 48 45 52   5) FROM ft WHER
4bf0: 45 20 66 74 20 4d 41 54 43 48 20 27 74 27 0a 7d  E ft MATCH 't'.}
4c00: 20 7b 0a 20 20 7b 2e 2e 2e 72 20 73 20 5b 74 5d   {.  {...r s [t]
4c10: 20 75 20 76 2e 2e 2e 7d 20 7b 2e 2e 2e 72 20 73   u v...} {...r s
4c20: 20 5b 74 5d 20 75 20 76 2e 2e 2e 7d 0a 7d 0a 0a   [t] u v...}.}..
4c30: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
4c40: 31 30 2e 36 20 7b 20 44 45 4c 45 54 45 20 46 52  10.6 { DELETE FR
4c50: 4f 4d 20 66 74 20 57 48 45 52 45 20 64 6f 63 69  OM ft WHERE doci
4c60: 64 3d 32 20 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  d=2 }..do_execsq
4c70: 6c 5f 74 65 73 74 20 31 30 2e 37 20 7b 0a 20 20  l_test 10.7 {.  
4c80: 53 45 4c 45 43 54 20 73 6e 69 70 70 65 74 28 66  SELECT snippet(f
4c90: 74 2c 20 27 5b 27 2c 20 27 5d 27 2c 20 27 2e 2e  t, '[', ']', '..
4ca0: 2e 27 2c 20 2d 31 2c 20 35 29 20 46 52 4f 4d 20  .', -1, 5) FROM 
4cb0: 66 74 20 57 48 45 52 45 20 66 74 20 4d 41 54 43  ft WHERE ft MATC
4cc0: 48 20 27 65 27 0a 7d 20 7b 0a 20 20 7b 2e 2e 2e  H 'e'.} {.  {...
4cd0: 63 20 64 20 5b 65 5d 20 66 20 67 2e 2e 2e 7d 0a  c d [e] f g...}.
4ce0: 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }..#------------
4cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4d00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4d10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
4d30: 54 65 73 74 20 63 61 73 65 73 20 31 31 2e 2a 0a  Test cases 11.*.
4d40: 23 20 0a 72 65 73 65 74 5f 64 62 0a 0a 64 6f 5f  # .reset_db..do_
4d50: 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 31 31  catchsql_test 11
4d60: 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49  .1 {.  CREATE VI
4d70: 52 54 55 41 4c 20 54 41 42 4c 45 20 78 31 20 55  RTUAL TABLE x1 U
4d80: 53 49 4e 47 20 66 74 73 34 28 63 6f 6e 74 65 6e  SING fts4(conten
4d90: 74 3d 78 31 29 3b 0a 7d 20 7b 31 20 7b 76 74 61  t=x1);.} {1 {vta
4da0: 62 6c 65 20 63 6f 6e 73 74 72 75 63 74 6f 72 20  ble constructor 
4db0: 63 61 6c 6c 65 64 20 72 65 63 75 72 73 69 76 65  called recursive
4dc0: 6c 79 3a 20 78 31 7d 7d 0a 0a 0a 66 69 6e 69 73  ly: x1}}...finis
4dd0: 68 5f 74 65 73 74 0a                             h_test.