/ Hex Artifact Content
Login

Artifact 09cd920d585ebf1c2910b6be869efa286e308a84:


0000: 23 20 32 30 30 37 20 4a 75 6e 65 20 32 30 0a 23  # 2007 June 20.#
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 32 20 6d 6f 64 75 6c 65 2e 0a 23 0a 23 20 24  S2 module..#.# $
01e0: 49 64 3a 20 66 74 73 32 6f 2e 74 65 73 74 2c 76  Id: fts2o.test,v
01f0: 20 31 2e 34 20 32 30 30 37 2f 30 37 2f 30 32 20   1.4 2007/07/02 
0200: 31 30 3a 31 36 3a 35 30 20 64 61 6e 69 65 6c 6b  10:16:50 danielk
0210: 31 39 37 37 20 45 78 70 20 24 0a 23 0a 0a 73 65  1977 Exp $.#..se
0220: 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20  t testdir [file 
0230: 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a  dirname $argv0].
0240: 73 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f  source $testdir/
0250: 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20 49 66  tester.tcl..# If
0260: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
0270: 54 53 32 20 69 73 20 6e 6f 74 20 64 65 66 69 6e  TS2 is not defin
0280: 65 64 2c 20 6f 6d 69 74 20 74 68 69 73 20 66 69  ed, omit this fi
0290: 6c 65 2e 0a 69 66 63 61 70 61 62 6c 65 20 21 66  le..ifcapable !f
02a0: 74 73 32 20 7b 0a 20 20 66 69 6e 69 73 68 5f 74  ts2 {.  finish_t
02b0: 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a 0a  est.  return.}..
02c0: 23 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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0300: 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 65 73 65 20 74  ------.# These t
0310: 65 73 74 73 2c 20 66 74 73 32 6f 2d 31 2e 2a 2c  ests, fts2o-1.*,
0320: 20 74 65 73 74 20 74 68 61 74 20 74 69 63 6b 65   test that ticke
0330: 74 20 23 32 34 32 39 20 69 73 20 66 69 78 65 64  t #2429 is fixed
0340: 2e 0a 23 0a 64 62 20 65 76 61 6c 20 7b 0a 20 20  ..#.db eval {.  
0350: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
0360: 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20 66 74  ABLE t1 USING ft
0370: 73 32 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 49  s2(a, b, c);.  I
0380: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28 61 2c  NSERT INTO t1(a,
0390: 20 62 2c 20 63 29 20 56 41 4c 55 45 53 28 27 6f   b, c) VALUES('o
03a0: 6e 65 20 74 68 72 65 65 20 66 6f 75 72 27 2c 20  ne three four', 
03b0: 27 6f 6e 65 20 66 6f 75 72 27 2c 20 27 6f 6e 65  'one four', 'one
03c0: 20 66 6f 75 72 20 74 77 6f 27 29 3b 0a 7d 0a 64   four two');.}.d
03d0: 6f 5f 74 65 73 74 20 66 74 73 32 6f 2d 31 2e 31  o_test fts2o-1.1
03e0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
03f0: 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c     SELECT rowid,
0400: 20 73 6e 69 70 70 65 74 28 74 31 29 20 46 52 4f   snippet(t1) FRO
0410: 4d 20 74 31 20 57 48 45 52 45 20 63 20 4d 41 54  M t1 WHERE c MAT
0420: 43 48 20 27 66 6f 75 72 27 3b 0a 20 20 7d 0a 7d  CH 'four';.  }.}
0430: 20 7b 31 20 7b 6f 6e 65 20 3c 62 3e 66 6f 75 72   {1 {one <b>four
0440: 3c 2f 62 3e 20 74 77 6f 7d 7d 0a 64 6f 5f 74 65  </b> two}}.do_te
0450: 73 74 20 66 74 73 32 6f 2d 31 2e 32 20 7b 0a 20  st fts2o-1.2 {. 
0460: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
0470: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 73 6e 69  ELECT rowid, sni
0480: 70 70 65 74 28 74 31 29 20 46 52 4f 4d 20 74 31  ppet(t1) FROM t1
0490: 20 57 48 45 52 45 20 62 20 4d 41 54 43 48 20 27   WHERE b MATCH '
04a0: 66 6f 75 72 27 3b 0a 20 20 7d 0a 7d 20 7b 31 20  four';.  }.} {1 
04b0: 7b 6f 6e 65 20 3c 62 3e 66 6f 75 72 3c 2f 62 3e  {one <b>four</b>
04c0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 32 6f  }}.do_test fts2o
04d0: 2d 31 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  -1.3 {.  execsql
04e0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f   {.    SELECT ro
04f0: 77 69 64 2c 20 73 6e 69 70 70 65 74 28 74 31 29  wid, snippet(t1)
0500: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 61   FROM t1 WHERE a
0510: 20 4d 41 54 43 48 20 27 66 6f 75 72 27 3b 0a 20   MATCH 'four';. 
0520: 20 7d 0a 7d 20 7b 31 20 7b 6f 6e 65 20 74 68 72   }.} {1 {one thr
0530: 65 65 20 3c 62 3e 66 6f 75 72 3c 2f 62 3e 7d 7d  ee <b>four</b>}}
0540: 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..#-------------
0550: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0580: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20  --------.# Test 
0590: 74 68 61 74 20 69 74 20 69 73 20 70 6f 73 73 69  that it is possi
05a0: 62 6c 65 20 74 6f 20 72 65 6e 61 6d 65 20 61 6e  ble to rename an
05b0: 20 66 74 73 32 20 74 61 62 6c 65 2e 0a 23 0a 64   fts2 table..#.d
05c0: 6f 5f 74 65 73 74 20 66 74 73 32 6f 2d 32 2e 31  o_test fts2o-2.1
05d0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 53   {.  execsql { S
05e0: 45 4c 45 43 54 20 74 62 6c 5f 6e 61 6d 65 20 46  ELECT tbl_name F
05f0: 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  ROM sqlite_maste
0600: 72 20 57 48 45 52 45 20 74 79 70 65 20 3d 20 27  r WHERE type = '
0610: 74 61 62 6c 65 27 7d 0a 7d 20 7b 74 31 20 74 31  table'}.} {t1 t1
0620: 5f 63 6f 6e 74 65 6e 74 20 74 31 5f 73 65 67 6d  _content t1_segm
0630: 65 6e 74 73 20 74 31 5f 73 65 67 64 69 72 7d 0a  ents t1_segdir}.
0640: 64 6f 5f 74 65 73 74 20 66 74 73 32 6f 2d 32 2e  do_test fts2o-2.
0650: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  2 {.  execsql { 
0660: 41 4c 54 45 52 20 54 41 42 4c 45 20 74 31 20 52  ALTER TABLE t1 R
0670: 45 4e 41 4d 45 20 74 6f 20 66 74 73 5f 74 31 3b  ENAME to fts_t1;
0680: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
0690: 66 74 73 32 6f 2d 32 2e 33 20 7b 0a 20 20 65 78  fts2o-2.3 {.  ex
06a0: 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 72  ecsql { SELECT r
06b0: 6f 77 69 64 2c 20 73 6e 69 70 70 65 74 28 66 74  owid, snippet(ft
06c0: 73 5f 74 31 29 20 46 52 4f 4d 20 66 74 73 5f 74  s_t1) FROM fts_t
06d0: 31 20 57 48 45 52 45 20 61 20 4d 41 54 43 48 20  1 WHERE a MATCH 
06e0: 27 66 6f 75 72 27 3b 20 7d 0a 7d 20 7b 31 20 7b  'four'; }.} {1 {
06f0: 6f 6e 65 20 74 68 72 65 65 20 3c 62 3e 66 6f 75  one three <b>fou
0700: 72 3c 2f 62 3e 7d 7d 0a 64 6f 5f 74 65 73 74 20  r</b>}}.do_test 
0710: 66 74 73 32 6f 2d 32 2e 34 20 7b 0a 20 20 65 78  fts2o-2.4 {.  ex
0720: 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 74  ecsql { SELECT t
0730: 62 6c 5f 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  bl_name FROM sql
0740: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
0750: 20 74 79 70 65 20 3d 20 27 74 61 62 6c 65 27 7d   type = 'table'}
0760: 0a 7d 20 7b 66 74 73 5f 74 31 20 66 74 73 5f 74  .} {fts_t1 fts_t
0770: 31 5f 63 6f 6e 74 65 6e 74 20 66 74 73 5f 74 31  1_content fts_t1
0780: 5f 73 65 67 6d 65 6e 74 73 20 66 74 73 5f 74 31  _segments fts_t1
0790: 5f 73 65 67 64 69 72 7d 0a 0a 23 20 53 65 65 20  _segdir}..# See 
07a0: 77 68 61 74 20 68 61 70 70 65 6e 73 20 77 68 65  what happens whe
07b0: 6e 20 72 65 6e 61 6d 69 6e 67 20 74 68 65 20 66  n renaming the f
07c0: 74 73 32 20 74 61 62 6c 65 20 66 61 69 6c 73 2e  ts2 table fails.
07d0: 0a 23 0a 64 6f 5f 74 65 73 74 20 66 74 73 32 6f  .#.do_test fts2o
07e0: 2d 32 2e 35 20 7b 0a 20 20 63 61 74 63 68 73 71  -2.5 {.  catchsq
07f0: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 54  l {.    CREATE T
0800: 41 42 4c 45 20 74 31 5f 73 65 67 64 69 72 28 61  ABLE t1_segdir(a
0810: 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 41 4c 54  , b, c);.    ALT
0820: 45 52 20 54 41 42 4c 45 20 66 74 73 5f 74 31 20  ER TABLE fts_t1 
0830: 52 45 4e 41 4d 45 20 74 6f 20 74 31 3b 0a 20 20  RENAME to t1;.  
0840: 7d 0a 7d 20 7b 31 20 7b 53 51 4c 20 6c 6f 67 69  }.} {1 {SQL logi
0850: 63 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73 69  c error or missi
0860: 6e 67 20 64 61 74 61 62 61 73 65 7d 7d 0a 64 6f  ng database}}.do
0870: 5f 74 65 73 74 20 66 74 73 32 6f 2d 32 2e 36 20  _test fts2o-2.6 
0880: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45  {.  execsql { SE
0890: 4c 45 43 54 20 72 6f 77 69 64 2c 20 73 6e 69 70  LECT rowid, snip
08a0: 70 65 74 28 66 74 73 5f 74 31 29 20 46 52 4f 4d  pet(fts_t1) FROM
08b0: 20 66 74 73 5f 74 31 20 57 48 45 52 45 20 61 20   fts_t1 WHERE a 
08c0: 4d 41 54 43 48 20 27 66 6f 75 72 27 3b 20 7d 0a  MATCH 'four'; }.
08d0: 7d 20 7b 31 20 7b 6f 6e 65 20 74 68 72 65 65 20  } {1 {one three 
08e0: 3c 62 3e 66 6f 75 72 3c 2f 62 3e 7d 7d 0a 64 6f  <b>four</b>}}.do
08f0: 5f 74 65 73 74 20 66 74 73 32 6f 2d 32 2e 37 20  _test fts2o-2.7 
0900: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45  {.  execsql { SE
0910: 4c 45 43 54 20 74 62 6c 5f 6e 61 6d 65 20 46 52  LECT tbl_name FR
0920: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
0930: 20 57 48 45 52 45 20 74 79 70 65 20 3d 20 27 74   WHERE type = 't
0940: 61 62 6c 65 27 7d 0a 7d 20 7b 66 74 73 5f 74 31  able'}.} {fts_t1
0950: 20 66 74 73 5f 74 31 5f 63 6f 6e 74 65 6e 74 20   fts_t1_content 
0960: 66 74 73 5f 74 31 5f 73 65 67 6d 65 6e 74 73 20  fts_t1_segments 
0970: 66 74 73 5f 74 31 5f 73 65 67 64 69 72 20 74 31  fts_t1_segdir t1
0980: 5f 73 65 67 64 69 72 7d 0a 0a 23 20 53 65 65 20  _segdir}..# See 
0990: 77 68 61 74 20 68 61 70 70 65 6e 73 20 77 68 65  what happens whe
09a0: 6e 20 72 65 6e 61 6d 69 6e 67 20 74 68 65 20 66  n renaming the f
09b0: 74 73 32 20 74 61 62 6c 65 20 66 61 69 6c 73 20  ts2 table fails 
09c0: 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61 63  inside a transac
09d0: 74 69 6f 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20  tion..#.do_test 
09e0: 66 74 73 32 6f 2d 32 2e 38 20 7b 0a 20 20 65 78  fts2o-2.8 {.  ex
09f0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  ecsql {.    BEGI
0a00: 4e 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  N;.    INSERT IN
0a10: 54 4f 20 66 74 73 5f 74 31 28 61 2c 20 62 2c 20  TO fts_t1(a, b, 
0a20: 63 29 20 56 41 4c 55 45 53 28 27 6f 6e 65 20 74  c) VALUES('one t
0a30: 77 6f 20 74 68 72 65 65 27 2c 20 27 6f 6e 65 20  wo three', 'one 
0a40: 66 6f 75 72 27 2c 20 27 6f 6e 65 20 74 77 6f 27  four', 'one two'
0a50: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  );.  }.} {}.do_t
0a60: 65 73 74 20 66 74 73 32 6f 2d 32 2e 39 20 7b 0a  est fts2o-2.9 {.
0a70: 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20 20    catchsql {.   
0a80: 20 41 4c 54 45 52 20 54 41 42 4c 45 20 66 74 73   ALTER TABLE fts
0a90: 5f 74 31 20 52 45 4e 41 4d 45 20 74 6f 20 74 31  _t1 RENAME to t1
0aa0: 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 53 51 4c 20  ;.  }.} {1 {SQL 
0ab0: 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20 6d  logic error or m
0ac0: 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65 7d  issing database}
0ad0: 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 32 6f 2d  }.do_test fts2o-
0ae0: 32 2e 31 30 20 7b 0a 20 20 65 78 65 63 73 71 6c  2.10 {.  execsql
0af0: 20 7b 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c   { SELECT rowid,
0b00: 20 73 6e 69 70 70 65 74 28 66 74 73 5f 74 31 29   snippet(fts_t1)
0b10: 20 46 52 4f 4d 20 66 74 73 5f 74 31 20 57 48 45   FROM fts_t1 WHE
0b20: 52 45 20 61 20 4d 41 54 43 48 20 27 66 6f 75 72  RE a MATCH 'four
0b30: 27 3b 20 7d 0a 7d 20 7b 31 20 7b 6f 6e 65 20 74  '; }.} {1 {one t
0b40: 68 72 65 65 20 3c 62 3e 66 6f 75 72 3c 2f 62 3e  hree <b>four</b>
0b50: 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 32 6f  }}.do_test fts2o
0b60: 2d 32 2e 31 31 20 7b 0a 20 20 65 78 65 63 73 71  -2.11 {.  execsq
0b70: 6c 20 7b 20 53 45 4c 45 43 54 20 74 62 6c 5f 6e  l { SELECT tbl_n
0b80: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
0b90: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
0ba0: 65 20 3d 20 27 74 61 62 6c 65 27 7d 0a 7d 20 7b  e = 'table'}.} {
0bb0: 66 74 73 5f 74 31 20 66 74 73 5f 74 31 5f 63 6f  fts_t1 fts_t1_co
0bc0: 6e 74 65 6e 74 20 66 74 73 5f 74 31 5f 73 65 67  ntent fts_t1_seg
0bd0: 6d 65 6e 74 73 20 66 74 73 5f 74 31 5f 73 65 67  ments fts_t1_seg
0be0: 64 69 72 20 74 31 5f 73 65 67 64 69 72 7d 0a 64  dir t1_segdir}.d
0bf0: 6f 5f 74 65 73 74 20 66 74 73 32 6f 2d 32 2e 31  o_test fts2o-2.1
0c00: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 43 4f  2 {.  execsql CO
0c10: 4d 4d 49 54 0a 20 20 65 78 65 63 73 71 6c 20 7b  MMIT.  execsql {
0c20: 53 45 4c 45 43 54 20 61 20 46 52 4f 4d 20 66 74  SELECT a FROM ft
0c30: 73 5f 74 31 7d 0a 7d 20 7b 7b 6f 6e 65 20 74 68  s_t1}.} {{one th
0c40: 72 65 65 20 66 6f 75 72 7d 20 7b 6f 6e 65 20 74  ree four} {one t
0c50: 77 6f 20 74 68 72 65 65 7d 7d 0a 64 6f 5f 74 65  wo three}}.do_te
0c60: 73 74 20 66 74 73 32 6f 2d 32 2e 31 32 20 7b 0a  st fts2o-2.12 {.
0c70: 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45    execsql { SELE
0c80: 43 54 20 61 2c 20 62 2c 20 63 20 46 52 4f 4d 20  CT a, b, c FROM 
0c90: 66 74 73 5f 74 31 20 57 48 45 52 45 20 63 20 4d  fts_t1 WHERE c M
0ca0: 41 54 43 48 20 27 66 6f 75 72 27 3b 20 7d 0a 7d  ATCH 'four'; }.}
0cb0: 20 7b 7b 6f 6e 65 20 74 68 72 65 65 20 66 6f 75   {{one three fou
0cc0: 72 7d 20 7b 6f 6e 65 20 66 6f 75 72 7d 20 7b 6f  r} {one four} {o
0cd0: 6e 65 20 66 6f 75 72 20 74 77 6f 7d 7d 0a 0a 23  ne four two}}..#
0ce0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d20: 2d 2d 2d 0a 23 20 43 6c 6f 73 65 2c 20 64 65 6c  ---.# Close, del
0d30: 65 74 65 20 61 6e 64 20 72 65 6f 70 65 6e 20 74  ete and reopen t
0d40: 68 65 20 64 61 74 61 62 61 73 65 2e 20 54 68 65  he database. The
0d50: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 20   following test 
0d60: 73 68 6f 75 6c 64 20 0a 23 20 62 65 20 72 75 6e  should .# be run
0d70: 20 6f 6e 20 61 6e 20 69 6e 69 74 69 61 6c 6c 79   on an initially
0d80: 20 65 6d 70 74 79 20 64 62 2e 0a 23 0a 64 62 20   empty db..#.db 
0d90: 63 6c 6f 73 65 0a 66 6f 72 63 65 64 65 6c 65 74  close.forcedelet
0da0: 65 20 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64  e test.db test.d
0db0: 62 2d 6a 6f 75 72 6e 61 6c 0a 73 71 6c 69 74 65  b-journal.sqlite
0dc0: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 0a 64 6f  3 db test.db..do
0dd0: 5f 74 65 73 74 20 66 74 73 32 6f 2d 33 2e 31 20  _test fts2o-3.1 
0de0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
0df0: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
0e00: 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20   TABLE t1 USING 
0e10: 66 74 73 32 28 61 2c 20 62 2c 20 63 29 3b 0a 20  fts2(a, b, c);. 
0e20: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
0e30: 31 28 61 2c 20 62 2c 20 63 29 20 56 41 4c 55 45  1(a, b, c) VALUE
0e40: 53 28 27 6f 6e 65 20 74 68 72 65 65 20 66 6f 75  S('one three fou
0e50: 72 27 2c 20 27 6f 6e 65 20 66 6f 75 72 27 2c 20  r', 'one four', 
0e60: 27 6f 6e 65 20 74 77 6f 27 29 3b 0a 20 20 20 20  'one two');.    
0e70: 53 45 4c 45 43 54 20 61 2c 20 62 2c 20 63 20 46  SELECT a, b, c F
0e80: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 63 20 4d  ROM t1 WHERE c M
0e90: 41 54 43 48 20 27 74 77 6f 27 3b 0a 20 20 7d 0a  ATCH 'two';.  }.
0ea0: 7d 20 7b 7b 6f 6e 65 20 74 68 72 65 65 20 66 6f  } {{one three fo
0eb0: 75 72 7d 20 7b 6f 6e 65 20 66 6f 75 72 7d 20 7b  ur} {one four} {
0ec0: 6f 6e 65 20 74 77 6f 7d 7d 0a 0a 23 20 54 68 69  one two}}..# Thi
0ed0: 73 20 74 65 73 74 20 77 61 73 20 63 72 61 73 68  s test was crash
0ee0: 69 6e 67 20 61 74 20 6f 6e 65 20 70 6f 69 6e 74  ing at one point
0ef0: 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 66 74 73 32  ..#.do_test fts2
0f00: 6f 2d 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  o-3.2 {.  execsq
0f10: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 61  l {.    SELECT a
0f20: 2c 20 62 2c 20 63 20 46 52 4f 4d 20 74 31 20 57  , b, c FROM t1 W
0f30: 48 45 52 45 20 63 20 4d 41 54 43 48 20 27 74 77  HERE c MATCH 'tw
0f40: 6f 27 3b 0a 20 20 20 20 43 52 45 41 54 45 20 54  o';.    CREATE T
0f50: 41 42 4c 45 20 74 33 28 61 2c 20 62 2c 20 63 29  ABLE t3(a, b, c)
0f60: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 2c 20  ;.    SELECT a, 
0f70: 62 2c 20 63 20 46 52 4f 4d 20 74 31 20 57 48 45  b, c FROM t1 WHE
0f80: 52 45 20 20 63 20 20 4d 41 54 43 48 20 27 74 77  RE  c  MATCH 'tw
0f90: 6f 27 3b 0a 20 20 7d 0a 7d 20 7b 7b 6f 6e 65 20  o';.  }.} {{one 
0fa0: 74 68 72 65 65 20 66 6f 75 72 7d 20 7b 6f 6e 65  three four} {one
0fb0: 20 66 6f 75 72 7d 20 7b 6f 6e 65 20 74 77 6f 7d   four} {one two}
0fc0: 20 7b 6f 6e 65 20 74 68 72 65 65 20 66 6f 75 72   {one three four
0fd0: 7d 20 7b 6f 6e 65 20 66 6f 75 72 7d 20 7b 6f 6e  } {one four} {on
0fe0: 65 20 74 77 6f 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d  e two}}..#------
0ff0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
1030: 23 20 54 65 73 74 20 74 68 61 74 20 69 74 20 69  # Test that it i
1040: 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72 65  s possible to re
1050: 6e 61 6d 65 20 61 6e 20 66 74 73 32 20 74 61 62  name an fts2 tab
1060: 6c 65 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65  le in an attache
1070: 64 20 0a 23 20 64 61 74 61 62 61 73 65 2e 0a 23  d .# database..#
1080: 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73  .forcedelete tes
1090: 74 32 2e 64 62 20 74 65 73 74 32 2e 64 62 2d 6a  t2.db test2.db-j
10a0: 6f 75 72 6e 61 6c 0a 0a 64 6f 5f 74 65 73 74 20  ournal..do_test 
10b0: 66 74 73 32 6f 2d 33 2e 31 20 7b 0a 20 20 65 78  fts2o-3.1 {.  ex
10c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 41 54 54 41  ecsql {.    ATTA
10d0: 43 48 20 27 74 65 73 74 32 2e 64 62 27 20 41 53  CH 'test2.db' AS
10e0: 20 61 75 78 3b 0a 20 20 20 20 43 52 45 41 54 45   aux;.    CREATE
10f0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 61   VIRTUAL TABLE a
1100: 75 78 2e 74 31 20 55 53 49 4e 47 20 66 74 73 32  ux.t1 USING fts2
1110: 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 49  (a, b, c);.    I
1120: 4e 53 45 52 54 20 49 4e 54 4f 20 61 75 78 2e 74  NSERT INTO aux.t
1130: 31 28 61 2c 20 62 2c 20 63 29 20 56 41 4c 55 45  1(a, b, c) VALUE
1140: 53 28 0a 20 20 20 20 20 20 27 6e 65 75 6e 67 20  S(.      'neung 
1150: 73 6f 6e 67 20 73 61 68 6d 27 2c 20 27 6e 65 75  song sahm', 'neu
1160: 6e 67 20 73 65 65 27 2c 20 27 6e 65 75 6e 67 20  ng see', 'neung 
1170: 73 65 65 20 73 6f 6e 67 27 0a 20 20 20 20 29 3b  see song'.    );
1180: 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65  .  }.} {}..do_te
1190: 73 74 20 66 74 73 32 6f 2d 33 2e 32 20 7b 0a 20  st fts2o-3.2 {. 
11a0: 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43   execsql { SELEC
11b0: 54 20 61 2c 20 62 2c 20 63 20 46 52 4f 4d 20 61  T a, b, c FROM a
11c0: 75 78 2e 74 31 20 57 48 45 52 45 20 61 20 4d 41  ux.t1 WHERE a MA
11d0: 54 43 48 20 27 73 6f 6e 67 27 3b 20 7d 0a 7d 20  TCH 'song'; }.} 
11e0: 7b 7b 6e 65 75 6e 67 20 73 6f 6e 67 20 73 61 68  {{neung song sah
11f0: 6d 7d 20 7b 6e 65 75 6e 67 20 73 65 65 7d 20 7b  m} {neung see} {
1200: 6e 65 75 6e 67 20 73 65 65 20 73 6f 6e 67 7d 7d  neung see song}}
1210: 0a 0a 64 6f 5f 74 65 73 74 20 66 74 73 32 6f 2d  ..do_test fts2o-
1220: 33 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  3.3 {.  execsql 
1230: 7b 20 53 45 4c 45 43 54 20 61 2c 20 62 2c 20 63  { SELECT a, b, c
1240: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 63   FROM t1 WHERE c
1250: 20 4d 41 54 43 48 20 27 74 77 6f 27 3b 20 7d 0a   MATCH 'two'; }.
1260: 7d 20 7b 7b 6f 6e 65 20 74 68 72 65 65 20 66 6f  } {{one three fo
1270: 75 72 7d 20 7b 6f 6e 65 20 66 6f 75 72 7d 20 7b  ur} {one four} {
1280: 6f 6e 65 20 74 77 6f 7d 7d 0a 0a 64 6f 5f 74 65  one two}}..do_te
1290: 73 74 20 66 74 73 32 6f 2d 33 2e 34 20 7b 0a 20  st fts2o-3.4 {. 
12a0: 20 65 78 65 63 73 71 6c 20 7b 20 41 4c 54 45 52   execsql { ALTER
12b0: 20 54 41 42 4c 45 20 61 75 78 2e 74 31 20 52 45   TABLE aux.t1 RE
12c0: 4e 41 4d 45 20 54 4f 20 74 32 20 7d 0a 7d 20 7b  NAME TO t2 }.} {
12d0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 74 73 32 6f  }..do_test fts2o
12e0: 2d 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c  -3.2 {.  execsql
12f0: 20 7b 20 53 45 4c 45 43 54 20 61 2c 20 62 2c 20   { SELECT a, b, 
1300: 63 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20  c FROM t2 WHERE 
1310: 61 20 4d 41 54 43 48 20 27 73 6f 6e 67 27 3b 20  a MATCH 'song'; 
1320: 7d 0a 7d 20 7b 7b 6e 65 75 6e 67 20 73 6f 6e 67  }.} {{neung song
1330: 20 73 61 68 6d 7d 20 7b 6e 65 75 6e 67 20 73 65   sahm} {neung se
1340: 65 7d 20 7b 6e 65 75 6e 67 20 73 65 65 20 73 6f  e} {neung see so
1350: 6e 67 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 74  ng}}..do_test ft
1360: 73 32 6f 2d 33 2e 33 20 7b 0a 20 20 65 78 65 63  s2o-3.3 {.  exec
1370: 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 61 2c 20  sql { SELECT a, 
1380: 62 2c 20 63 20 46 52 4f 4d 20 74 31 20 57 48 45  b, c FROM t1 WHE
1390: 52 45 20 63 20 4d 41 54 43 48 20 27 74 77 6f 27  RE c MATCH 'two'
13a0: 3b 20 7d 0a 7d 20 7b 7b 6f 6e 65 20 74 68 72 65  ; }.} {{one thre
13b0: 65 20 66 6f 75 72 7d 20 7b 6f 6e 65 20 66 6f 75  e four} {one fou
13c0: 72 7d 20 7b 6f 6e 65 20 74 77 6f 7d 7d 0a 0a 66  r} {one two}}..f
13d0: 69 6e 69 73 68 5f 74 65 73 74 0a                 inish_test.