/ Hex Artifact Content
Login

Artifact 266989148fec6d9f1bb6c5382f7aa3dcea0e9cd444576e28dd2b9287ac7dd220:


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 33 20 6d 6f 64 75 6c 65 2e 0a 23 0a 23 20 24  S3 module..#.# $
01e0: 49 64 3a 20 66 74 73 33 61 6f 2e 74 65 73 74 2c  Id: fts3ao.test,
01f0: 76 20 31 2e 31 20 32 30 30 37 2f 30 38 2f 32 30  v 1.1 2007/08/20
0200: 20 31 37 3a 33 38 3a 34 32 20 73 68 65 73 73 20   17:38:42 shess 
0210: 45 78 70 20 24 0a 23 0a 0a 73 65 74 20 74 65 73  Exp $.#..set tes
0220: 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72 6e 61  tdir [file dirna
0230: 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75 72 63  me $argv0].sourc
0240: 65 20 24 74 65 73 74 64 69 72 2f 74 65 73 74 65  e $testdir/teste
0250: 72 2e 74 63 6c 0a 0a 23 20 49 66 20 53 51 4c 49  r.tcl..# If SQLI
0260: 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 69  TE_ENABLE_FTS3 i
0270: 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2c 20 6f  s not defined, o
0280: 6d 69 74 20 74 68 69 73 20 66 69 6c 65 2e 0a 69  mit this file..i
0290: 66 63 61 70 61 62 6c 65 20 21 66 74 73 33 20 7b  fcapable !fts3 {
02a0: 0a 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20  .  finish_test. 
02b0: 20 72 65 74 75 72 6e 0a 7d 0a 0a 73 65 74 20 3a   return.}..set :
02c0: 3a 74 65 73 74 70 72 65 66 69 78 20 66 74 73 33  :testprefix fts3
02d0: 61 6f 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ao..#-----------
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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 68 65  ----------.# The
0320: 73 65 20 74 65 73 74 73 2c 20 66 74 73 33 61 6f  se tests, fts3ao
0330: 2d 31 2e 2a 2c 20 74 65 73 74 20 74 68 61 74 20  -1.*, test that 
0340: 74 69 63 6b 65 74 20 23 32 34 32 39 20 69 73 20  ticket #2429 is 
0350: 66 69 78 65 64 2e 0a 23 0a 64 62 20 65 76 61 6c  fixed..#.db eval
0360: 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49 52 54   {.  CREATE VIRT
0370: 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55 53 49  UAL TABLE t1 USI
0380: 4e 47 20 66 74 73 33 28 61 2c 20 62 2c 20 63 29  NG fts3(a, b, c)
0390: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
03a0: 74 31 28 61 2c 20 62 2c 20 63 29 20 56 41 4c 55  t1(a, b, c) VALU
03b0: 45 53 28 27 6f 6e 65 20 74 68 72 65 65 20 66 6f  ES('one three fo
03c0: 75 72 27 2c 20 27 6f 6e 65 20 66 6f 75 72 27 2c  ur', 'one four',
03d0: 20 27 6f 6e 65 20 66 6f 75 72 20 74 77 6f 27 29   'one four two')
03e0: 3b 0a 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33  ;.}.do_test fts3
03f0: 61 6f 2d 31 2e 31 20 7b 0a 20 20 65 78 65 63 73  ao-1.1 {.  execs
0400: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
0410: 72 6f 77 69 64 2c 20 73 6e 69 70 70 65 74 28 74  rowid, snippet(t
0420: 31 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  1) FROM t1 WHERE
0430: 20 63 20 4d 41 54 43 48 20 27 66 6f 75 72 27 3b   c MATCH 'four';
0440: 0a 20 20 7d 0a 7d 20 7b 31 20 7b 6f 6e 65 20 3c  .  }.} {1 {one <
0450: 62 3e 66 6f 75 72 3c 2f 62 3e 20 74 77 6f 7d 7d  b>four</b> two}}
0460: 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 61 6f 2d  .do_test fts3ao-
0470: 31 2e 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.2 {.  execsql 
0480: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77  {.    SELECT row
0490: 69 64 2c 20 73 6e 69 70 70 65 74 28 74 31 29 20  id, snippet(t1) 
04a0: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 62 20  FROM t1 WHERE b 
04b0: 4d 41 54 43 48 20 27 66 6f 75 72 27 3b 0a 20 20  MATCH 'four';.  
04c0: 7d 0a 7d 20 7b 31 20 7b 6f 6e 65 20 3c 62 3e 66  }.} {1 {one <b>f
04d0: 6f 75 72 3c 2f 62 3e 7d 7d 0a 64 6f 5f 74 65 73  our</b>}}.do_tes
04e0: 74 20 66 74 73 33 61 6f 2d 31 2e 33 20 7b 0a 20  t fts3ao-1.3 {. 
04f0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
0500: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 73 6e 69  ELECT rowid, sni
0510: 70 70 65 74 28 74 31 29 20 46 52 4f 4d 20 74 31  ppet(t1) FROM t1
0520: 20 57 48 45 52 45 20 61 20 4d 41 54 43 48 20 27   WHERE a MATCH '
0530: 66 6f 75 72 27 3b 0a 20 20 7d 0a 7d 20 7b 31 20  four';.  }.} {1 
0540: 7b 6f 6e 65 20 74 68 72 65 65 20 3c 62 3e 66 6f  {one three <b>fo
0550: 75 72 3c 2f 62 3e 7d 7d 0a 0a 23 2d 2d 2d 2d 2d  ur</b>}}..#-----
0560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
05a0: 0a 23 20 54 65 73 74 20 74 68 61 74 20 69 74 20  .# Test that it 
05b0: 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72  is possible to r
05c0: 65 6e 61 6d 65 20 61 6e 20 66 74 73 33 20 74 61  ename an fts3 ta
05d0: 62 6c 65 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 66  ble..#.do_test f
05e0: 74 73 33 61 6f 2d 32 2e 31 20 7b 0a 20 20 65 78  ts3ao-2.1 {.  ex
05f0: 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 74  ecsql { SELECT t
0600: 62 6c 5f 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c  bl_name FROM sql
0610: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
0620: 20 74 79 70 65 20 3d 20 27 74 61 62 6c 65 27 7d   type = 'table'}
0630: 0a 7d 20 7b 74 31 20 74 31 5f 63 6f 6e 74 65 6e  .} {t1 t1_conten
0640: 74 20 74 31 5f 73 65 67 6d 65 6e 74 73 20 74 31  t t1_segments t1
0650: 5f 73 65 67 64 69 72 7d 0a 64 6f 5f 74 65 73 74  _segdir}.do_test
0660: 20 66 74 73 33 61 6f 2d 32 2e 32 20 7b 0a 20 20   fts3ao-2.2 {.  
0670: 65 78 65 63 73 71 6c 20 7b 20 41 4c 54 45 52 20  execsql { ALTER 
0680: 54 41 42 4c 45 20 74 31 20 52 45 4e 41 4d 45 20  TABLE t1 RENAME 
0690: 74 6f 20 66 74 73 5f 74 31 3b 20 7d 0a 7d 20 7b  to fts_t1; }.} {
06a0: 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 61 6f  }.do_test fts3ao
06b0: 2d 32 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  -2.3 {.  execsql
06c0: 20 7b 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c   { SELECT rowid,
06d0: 20 73 6e 69 70 70 65 74 28 66 74 73 5f 74 31 29   snippet(fts_t1)
06e0: 20 46 52 4f 4d 20 66 74 73 5f 74 31 20 57 48 45   FROM fts_t1 WHE
06f0: 52 45 20 61 20 4d 41 54 43 48 20 27 66 6f 75 72  RE a MATCH 'four
0700: 27 3b 20 7d 0a 7d 20 7b 31 20 7b 6f 6e 65 20 74  '; }.} {1 {one t
0710: 68 72 65 65 20 3c 62 3e 66 6f 75 72 3c 2f 62 3e  hree <b>four</b>
0720: 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 61  }}.do_test fts3a
0730: 6f 2d 32 2e 34 20 7b 0a 20 20 65 78 65 63 73 71  o-2.4 {.  execsq
0740: 6c 20 7b 20 53 45 4c 45 43 54 20 74 62 6c 5f 6e  l { SELECT tbl_n
0750: 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  ame FROM sqlite_
0760: 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70  master WHERE typ
0770: 65 20 3d 20 27 74 61 62 6c 65 27 7d 0a 7d 20 7b  e = 'table'}.} {
0780: 66 74 73 5f 74 31 20 66 74 73 5f 74 31 5f 63 6f  fts_t1 fts_t1_co
0790: 6e 74 65 6e 74 20 66 74 73 5f 74 31 5f 73 65 67  ntent fts_t1_seg
07a0: 6d 65 6e 74 73 20 66 74 73 5f 74 31 5f 73 65 67  ments fts_t1_seg
07b0: 64 69 72 7d 0a 0a 23 20 53 65 65 20 77 68 61 74  dir}..# See what
07c0: 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20 72 65   happens when re
07d0: 6e 61 6d 69 6e 67 20 74 68 65 20 66 74 73 33 20  naming the fts3 
07e0: 74 61 62 6c 65 20 66 61 69 6c 73 2e 0a 23 0a 64  table fails..#.d
07f0: 6f 5f 74 65 73 74 20 66 74 73 33 61 6f 2d 32 2e  o_test fts3ao-2.
0800: 35 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b  5 {.  catchsql {
0810: 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c  .    CREATE TABL
0820: 45 20 74 31 5f 73 65 67 64 69 72 28 61 2c 20 62  E t1_segdir(a, b
0830: 2c 20 63 29 3b 0a 20 20 20 20 41 4c 54 45 52 20  , c);.    ALTER 
0840: 54 41 42 4c 45 20 66 74 73 5f 74 31 20 52 45 4e  TABLE fts_t1 REN
0850: 41 4d 45 20 74 6f 20 74 31 3b 0a 20 20 7d 0a 7d  AME to t1;.  }.}
0860: 20 7b 31 20 7b 53 51 4c 20 6c 6f 67 69 63 20 65   {1 {SQL logic e
0870: 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65 73 74 20 66  rror}}.do_test f
0880: 74 73 33 61 6f 2d 32 2e 36 20 7b 0a 20 20 65 78  ts3ao-2.6 {.  ex
0890: 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 72  ecsql { SELECT r
08a0: 6f 77 69 64 2c 20 73 6e 69 70 70 65 74 28 66 74  owid, snippet(ft
08b0: 73 5f 74 31 29 20 46 52 4f 4d 20 66 74 73 5f 74  s_t1) FROM fts_t
08c0: 31 20 57 48 45 52 45 20 61 20 4d 41 54 43 48 20  1 WHERE a MATCH 
08d0: 27 66 6f 75 72 27 3b 20 7d 0a 7d 20 7b 31 20 7b  'four'; }.} {1 {
08e0: 6f 6e 65 20 74 68 72 65 65 20 3c 62 3e 66 6f 75  one three <b>fou
08f0: 72 3c 2f 62 3e 7d 7d 0a 64 6f 5f 74 65 73 74 20  r</b>}}.do_test 
0900: 66 74 73 33 61 6f 2d 32 2e 37 20 7b 0a 20 20 65  fts3ao-2.7 {.  e
0910: 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20  xecsql { SELECT 
0920: 74 62 6c 5f 6e 61 6d 65 20 46 52 4f 4d 20 73 71  tbl_name FROM sq
0930: 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52  lite_master WHER
0940: 45 20 74 79 70 65 20 3d 20 27 74 61 62 6c 65 27  E type = 'table'
0950: 7d 0a 7d 20 7b 66 74 73 5f 74 31 20 66 74 73 5f  }.} {fts_t1 fts_
0960: 74 31 5f 63 6f 6e 74 65 6e 74 20 66 74 73 5f 74  t1_content fts_t
0970: 31 5f 73 65 67 6d 65 6e 74 73 20 66 74 73 5f 74  1_segments fts_t
0980: 31 5f 73 65 67 64 69 72 20 74 31 5f 73 65 67 64  1_segdir t1_segd
0990: 69 72 7d 0a 0a 23 20 53 65 65 20 77 68 61 74 20  ir}..# See what 
09a0: 68 61 70 70 65 6e 73 20 77 68 65 6e 20 72 65 6e  happens when ren
09b0: 61 6d 69 6e 67 20 74 68 65 20 66 74 73 33 20 74  aming the fts3 t
09c0: 61 62 6c 65 20 66 61 69 6c 73 20 69 6e 73 69 64  able fails insid
09d0: 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  e a transaction.
09e0: 0a 23 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 61  .#.do_test fts3a
09f0: 6f 2d 32 2e 38 20 7b 0a 20 20 65 78 65 63 73 71  o-2.8 {.  execsq
0a00: 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a 20  l {.    BEGIN;. 
0a10: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66     INSERT INTO f
0a20: 74 73 5f 74 31 28 61 2c 20 62 2c 20 63 29 20 56  ts_t1(a, b, c) V
0a30: 41 4c 55 45 53 28 27 6f 6e 65 20 74 77 6f 20 74  ALUES('one two t
0a40: 68 72 65 65 27 2c 20 27 6f 6e 65 20 66 6f 75 72  hree', 'one four
0a50: 27 2c 20 27 6f 6e 65 20 74 77 6f 27 29 3b 0a 20  ', 'one two');. 
0a60: 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20   }.} {}.do_test 
0a70: 66 74 73 33 61 6f 2d 32 2e 39 20 7b 0a 20 20 63  fts3ao-2.9 {.  c
0a80: 61 74 63 68 73 71 6c 20 7b 0a 20 20 20 20 41 4c  atchsql {.    AL
0a90: 54 45 52 20 54 41 42 4c 45 20 66 74 73 5f 74 31  TER TABLE fts_t1
0aa0: 20 52 45 4e 41 4d 45 20 74 6f 20 74 31 3b 0a 20   RENAME to t1;. 
0ab0: 20 7d 0a 7d 20 7b 31 20 7b 53 51 4c 20 6c 6f 67   }.} {1 {SQL log
0ac0: 69 63 20 65 72 72 6f 72 7d 7d 0a 64 6f 5f 74 65  ic error}}.do_te
0ad0: 73 74 20 66 74 73 33 61 6f 2d 32 2e 31 30 20 7b  st fts3ao-2.10 {
0ae0: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c  .  execsql { SEL
0af0: 45 43 54 20 72 6f 77 69 64 2c 20 73 6e 69 70 70  ECT rowid, snipp
0b00: 65 74 28 20 66 74 73 5f 74 31 20 29 20 46 52 4f  et( fts_t1 ) FRO
0b10: 4d 20 66 74 73 5f 74 31 20 57 48 45 52 45 20 61  M fts_t1 WHERE a
0b20: 20 4d 41 54 43 48 20 27 66 6f 75 72 27 3b 20 7d   MATCH 'four'; }
0b30: 0a 7d 20 7b 31 20 7b 6f 6e 65 20 74 68 72 65 65  .} {1 {one three
0b40: 20 3c 62 3e 66 6f 75 72 3c 2f 62 3e 7d 7d 0a 64   <b>four</b>}}.d
0b50: 6f 5f 74 65 73 74 20 66 74 73 33 61 6f 2d 32 2e  o_test fts3ao-2.
0b60: 31 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  11 {.  execsql {
0b70: 20 53 45 4c 45 43 54 20 74 62 6c 5f 6e 61 6d 65   SELECT tbl_name
0b80: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
0b90: 74 65 72 20 57 48 45 52 45 20 74 79 70 65 20 3d  ter WHERE type =
0ba0: 20 27 74 61 62 6c 65 27 7d 0a 7d 20 7b 66 74 73   'table'}.} {fts
0bb0: 5f 74 31 20 66 74 73 5f 74 31 5f 63 6f 6e 74 65  _t1 fts_t1_conte
0bc0: 6e 74 20 66 74 73 5f 74 31 5f 73 65 67 6d 65 6e  nt fts_t1_segmen
0bd0: 74 73 20 66 74 73 5f 74 31 5f 73 65 67 64 69 72  ts fts_t1_segdir
0be0: 20 74 31 5f 73 65 67 64 69 72 7d 0a 64 6f 5f 74   t1_segdir}.do_t
0bf0: 65 73 74 20 66 74 73 33 61 6f 2d 32 2e 31 32 20  est fts3ao-2.12 
0c00: 7b 0a 20 20 65 78 65 63 73 71 6c 20 43 4f 4d 4d  {.  execsql COMM
0c10: 49 54 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45  IT.  execsql {SE
0c20: 4c 45 43 54 20 61 20 46 52 4f 4d 20 66 74 73 5f  LECT a FROM fts_
0c30: 74 31 7d 0a 7d 20 7b 7b 6f 6e 65 20 74 68 72 65  t1}.} {{one thre
0c40: 65 20 66 6f 75 72 7d 20 7b 6f 6e 65 20 74 77 6f  e four} {one two
0c50: 20 74 68 72 65 65 7d 7d 0a 64 6f 5f 74 65 73 74   three}}.do_test
0c60: 20 66 74 73 33 61 6f 2d 32 2e 31 32 20 7b 0a 20   fts3ao-2.12 {. 
0c70: 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43   execsql { SELEC
0c80: 54 20 61 2c 20 62 2c 20 63 20 46 52 4f 4d 20 66  T a, b, c FROM f
0c90: 74 73 5f 74 31 20 57 48 45 52 45 20 63 20 4d 41  ts_t1 WHERE c MA
0ca0: 54 43 48 20 27 66 6f 75 72 27 3b 20 7d 0a 7d 20  TCH 'four'; }.} 
0cb0: 7b 7b 6f 6e 65 20 74 68 72 65 65 20 66 6f 75 72  {{one three four
0cc0: 7d 20 7b 6f 6e 65 20 66 6f 75 72 7d 20 7b 6f 6e  } {one four} {on
0cd0: 65 20 66 6f 75 72 20 74 77 6f 7d 7d 0a 0a 23 2d  e 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 0a 23 20 43 6c 6f 73 65 2c 20 64 65 6c 65  --.# Close, dele
0d30: 74 65 20 61 6e 64 20 72 65 6f 70 65 6e 20 74 68  te and reopen th
0d40: 65 20 64 61 74 61 62 61 73 65 2e 20 54 68 65 20  e database. The 
0d50: 66 6f 6c 6c 6f 77 69 6e 67 20 74 65 73 74 20 73  following test s
0d60: 68 6f 75 6c 64 20 0a 23 20 62 65 20 72 75 6e 20  hould .# be run 
0d70: 6f 6e 20 61 6e 20 69 6e 69 74 69 61 6c 6c 79 20  on an initially 
0d80: 65 6d 70 74 79 20 64 62 2e 0a 23 0a 64 62 20 63  empty db..#.db c
0d90: 6c 6f 73 65 0a 66 6f 72 63 65 64 65 6c 65 74 65  lose.forcedelete
0da0: 20 74 65 73 74 2e 64 62 20 74 65 73 74 2e 64 62   test.db test.db
0db0: 2d 6a 6f 75 72 6e 61 6c 0a 73 71 6c 69 74 65 33  -journal.sqlite3
0dc0: 20 64 62 20 74 65 73 74 2e 64 62 0a 0a 64 6f 5f   db test.db..do_
0dd0: 74 65 73 74 20 66 74 73 33 61 6f 2d 33 2e 31 20  test fts3ao-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 33 28 61 2c 20 62 2c 20 63 29 3b 0a 20  fts3(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 33  ..#.do_test fts3
0f00: 61 6f 2d 33 2e 32 20 7b 0a 20 20 65 78 65 63 73  ao-3.2 {.  execs
0f10: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
0f20: 61 2c 20 62 2c 20 63 20 46 52 4f 4d 20 74 31 20  a, b, c FROM t1 
0f30: 57 48 45 52 45 20 63 20 4d 41 54 43 48 20 27 74  WHERE c MATCH 't
0f40: 77 6f 27 3b 0a 20 20 20 20 43 52 45 41 54 45 20  wo';.    CREATE 
0f50: 54 41 42 4c 45 20 74 33 28 61 2c 20 62 2c 20 63  TABLE t3(a, b, c
0f60: 29 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 2c  );.    SELECT a,
0f70: 20 62 2c 20 63 20 46 52 4f 4d 20 74 31 20 57 48   b, c FROM t1 WH
0f80: 45 52 45 20 20 63 20 20 4d 41 54 43 48 20 27 74  ERE  c  MATCH 't
0f90: 77 6f 27 3b 0a 20 20 7d 0a 7d 20 7b 7b 6f 6e 65  wo';.  }.} {{one
0fa0: 20 74 68 72 65 65 20 66 6f 75 72 7d 20 7b 6f 6e   three four} {on
0fb0: 65 20 66 6f 75 72 7d 20 7b 6f 6e 65 20 74 77 6f  e four} {one two
0fc0: 7d 20 7b 6f 6e 65 20 74 68 72 65 65 20 66 6f 75  } {one three fou
0fd0: 72 7d 20 7b 6f 6e 65 20 66 6f 75 72 7d 20 7b 6f  r} {one four} {o
0fe0: 6e 65 20 74 77 6f 7d 7d 0a 0a 23 2d 2d 2d 2d 2d  ne 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 2d  ----------------
1030: 0a 23 20 54 65 73 74 20 74 68 61 74 20 69 74 20  .# Test that it 
1040: 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72  is possible to r
1050: 65 6e 61 6d 65 20 61 6e 20 66 74 73 33 20 74 61  ename an fts3 ta
1060: 62 6c 65 20 69 6e 20 61 6e 20 61 74 74 61 63 68  ble in an attach
1070: 65 64 20 0a 23 20 64 61 74 61 62 61 73 65 2e 0a  ed .# database..
1080: 23 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65  #.forcedelete te
1090: 73 74 32 2e 64 62 20 74 65 73 74 32 2e 64 62 2d  st2.db test2.db-
10a0: 6a 6f 75 72 6e 61 6c 0a 0a 64 6f 5f 74 65 73 74  journal..do_test
10b0: 20 66 74 73 33 61 6f 2d 33 2e 31 20 7b 0a 20 20   fts3ao-3.1 {.  
10c0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 41 54  execsql {.    AT
10d0: 54 41 43 48 20 27 74 65 73 74 32 2e 64 62 27 20  TACH 'test2.db' 
10e0: 41 53 20 61 75 78 3b 0a 20 20 20 20 43 52 45 41  AS aux;.    CREA
10f0: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
1100: 20 61 75 78 2e 74 31 20 55 53 49 4e 47 20 66 74   aux.t1 USING ft
1110: 73 33 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20  s3(a, b, c);.   
1120: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61 75 78   INSERT INTO aux
1130: 2e 74 31 28 61 2c 20 62 2c 20 63 29 20 56 41 4c  .t1(a, b, c) VAL
1140: 55 45 53 28 0a 20 20 20 20 20 20 27 6e 65 75 6e  UES(.      'neun
1150: 67 20 73 6f 6e 67 20 73 61 68 6d 27 2c 20 27 6e  g song sahm', 'n
1160: 65 75 6e 67 20 73 65 65 27 2c 20 27 6e 65 75 6e  eung see', 'neun
1170: 67 20 73 65 65 20 73 6f 6e 67 27 0a 20 20 20 20  g see song'.    
1180: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f  );.  }.} {}..do_
1190: 74 65 73 74 20 66 74 73 33 61 6f 2d 33 2e 32 20  test fts3ao-3.2 
11a0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45  {.  execsql { SE
11b0: 4c 45 43 54 20 61 2c 20 62 2c 20 63 20 46 52 4f  LECT a, b, c FRO
11c0: 4d 20 61 75 78 2e 74 31 20 57 48 45 52 45 20 61  M aux.t1 WHERE a
11d0: 20 4d 41 54 43 48 20 27 73 6f 6e 67 27 3b 20 7d   MATCH 'song'; }
11e0: 0a 7d 20 7b 7b 6e 65 75 6e 67 20 73 6f 6e 67 20  .} {{neung song 
11f0: 73 61 68 6d 7d 20 7b 6e 65 75 6e 67 20 73 65 65  sahm} {neung see
1200: 7d 20 7b 6e 65 75 6e 67 20 73 65 65 20 73 6f 6e  } {neung see son
1210: 67 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 74 73  g}}..do_test fts
1220: 33 61 6f 2d 33 2e 33 20 7b 0a 20 20 65 78 65 63  3ao-3.3 {.  exec
1230: 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 61 2c 20  sql { SELECT a, 
1240: 62 2c 20 63 20 46 52 4f 4d 20 74 31 20 57 48 45  b, c FROM t1 WHE
1250: 52 45 20 63 20 4d 41 54 43 48 20 27 74 77 6f 27  RE c MATCH 'two'
1260: 3b 20 7d 0a 7d 20 7b 7b 6f 6e 65 20 74 68 72 65  ; }.} {{one thre
1270: 65 20 66 6f 75 72 7d 20 7b 6f 6e 65 20 66 6f 75  e four} {one fou
1280: 72 7d 20 7b 6f 6e 65 20 74 77 6f 7d 7d 0a 0a 64  r} {one two}}..d
1290: 6f 5f 74 65 73 74 20 66 74 73 33 61 6f 2d 33 2e  o_test fts3ao-3.
12a0: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  4 {.  execsql { 
12b0: 41 4c 54 45 52 20 54 41 42 4c 45 20 61 75 78 2e  ALTER TABLE aux.
12c0: 74 31 20 52 45 4e 41 4d 45 20 54 4f 20 74 32 20  t1 RENAME TO t2 
12d0: 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 74 65 73 74 20  }.} {}..do_test 
12e0: 66 74 73 33 61 6f 2d 33 2e 32 20 7b 0a 20 20 65  fts3ao-3.2 {.  e
12f0: 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20  xecsql { SELECT 
1300: 61 2c 20 62 2c 20 63 20 46 52 4f 4d 20 74 32 20  a, b, c FROM t2 
1310: 57 48 45 52 45 20 61 20 4d 41 54 43 48 20 27 73  WHERE a MATCH 's
1320: 6f 6e 67 27 3b 20 7d 0a 7d 20 7b 7b 6e 65 75 6e  ong'; }.} {{neun
1330: 67 20 73 6f 6e 67 20 73 61 68 6d 7d 20 7b 6e 65  g song sahm} {ne
1340: 75 6e 67 20 73 65 65 7d 20 7b 6e 65 75 6e 67 20  ung see} {neung 
1350: 73 65 65 20 73 6f 6e 67 7d 7d 0a 0a 64 6f 5f 74  see song}}..do_t
1360: 65 73 74 20 66 74 73 33 61 6f 2d 33 2e 33 20 7b  est fts3ao-3.3 {
1370: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c  .  execsql { SEL
1380: 45 43 54 20 61 2c 20 62 2c 20 63 20 46 52 4f 4d  ECT a, b, c FROM
1390: 20 74 31 20 57 48 45 52 45 20 63 20 4d 41 54 43   t1 WHERE c MATC
13a0: 48 20 27 74 77 6f 27 3b 20 7d 0a 7d 20 7b 7b 6f  H 'two'; }.} {{o
13b0: 6e 65 20 74 68 72 65 65 20 66 6f 75 72 7d 20 7b  ne three four} {
13c0: 6f 6e 65 20 66 6f 75 72 7d 20 7b 6f 6e 65 20 74  one four} {one t
13d0: 77 6f 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d  wo}}..#---------
13e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1410: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54  ------------.# T
1420: 65 73 74 20 74 68 61 74 20 69 74 20 69 73 20 70  est that it is p
1430: 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6e 61 6d  ossible to renam
1440: 65 20 61 6e 20 66 74 73 33 20 74 61 62 6c 65 20  e an fts3 table 
1450: 77 69 74 68 69 6e 20 61 20 0a 23 20 74 72 61 6e  within a .# tran
1460: 73 61 63 74 69 6f 6e 2e 0a 23 0a 64 6f 5f 74 65  saction..#.do_te
1470: 73 74 20 66 74 73 33 61 6f 2d 34 2e 31 20 7b 0a  st fts3ao-4.1 {.
1480: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
1490: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
14a0: 41 42 4c 45 20 74 34 20 55 53 49 4e 47 20 66 74  ABLE t4 USING ft
14b0: 73 33 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  s3;.    INSERT I
14c0: 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27 74  NTO t4 VALUES('t
14d0: 68 65 20 71 75 69 63 6b 20 62 72 6f 77 6e 20 66  he quick brown f
14e0: 6f 78 27 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64  ox');.  }.} {}.d
14f0: 6f 5f 74 65 73 74 20 66 74 73 33 61 6f 2d 34 2e  o_test fts3ao-4.
1500: 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  2 {.  execsql {.
1510: 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20      BEGIN;.     
1520: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 34 20   INSERT INTO t4 
1530: 56 41 4c 55 45 53 28 27 6a 75 6d 70 65 64 20 6f  VALUES('jumped o
1540: 76 65 72 20 74 68 65 27 29 3b 0a 20 20 7d 0a 7d  ver the');.  }.}
1550: 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33   {}.do_test fts3
1560: 61 6f 2d 34 2e 33 20 7b 20 65 78 65 63 73 71 6c  ao-4.3 { execsql
1570: 20 7b 20 41 4c 54 45 52 20 54 41 42 4c 45 20 74   { ALTER TABLE t
1580: 34 20 52 45 4e 41 4d 45 20 54 4f 20 74 35 3b 20  4 RENAME TO t5; 
1590: 7d 20 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 66  } } {}.do_test f
15a0: 74 73 33 61 6f 2d 34 2e 34 20 7b 20 65 78 65 63  ts3ao-4.4 { exec
15b0: 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54  sql { INSERT INT
15c0: 4f 20 74 35 20 56 41 4c 55 45 53 28 27 6c 61 7a  O t5 VALUES('laz
15d0: 79 20 64 6f 67 27 29 3b 20 7d 20 7d 20 7b 7d 0a  y dog'); } } {}.
15e0: 64 6f 5f 74 65 73 74 20 66 74 73 33 61 6f 2d 34  do_test fts3ao-4
15f0: 2e 35 20 7b 20 65 78 65 63 73 71 6c 20 43 4f 4d  .5 { execsql COM
1600: 4d 49 54 20 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74  MIT } {}.do_test
1610: 20 66 74 73 33 61 6f 2d 34 2e 36 20 7b 0a 20 20   fts3ao-4.6 {.  
1620: 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45 43 54  execsql { SELECT
1630: 20 2a 20 46 52 4f 4d 20 74 35 20 7d 0a 7d 20 7b   * FROM t5 }.} {
1640: 7b 74 68 65 20 71 75 69 63 6b 20 62 72 6f 77 6e  {the quick brown
1650: 20 66 6f 78 7d 20 7b 6a 75 6d 70 65 64 20 6f 76   fox} {jumped ov
1660: 65 72 20 74 68 65 7d 20 7b 6c 61 7a 79 20 64 6f  er the} {lazy do
1670: 67 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33  g}}.do_test fts3
1680: 61 6f 2d 34 2e 37 20 7b 0a 20 20 65 78 65 63 73  ao-4.7 {.  execs
1690: 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b 0a  ql {.    BEGIN;.
16a0: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
16b0: 4f 20 74 35 20 56 41 4c 55 45 53 28 27 44 6f 77  O t5 VALUES('Dow
16c0: 6e 20 63 61 6d 65 20 61 20 6a 75 6d 62 75 63 6b  n came a jumbuck
16d0: 20 74 6f 20 64 72 69 6e 6b 20 61 74 20 74 68 61   to drink at tha
16e0: 74 20 62 69 6c 6c 61 62 6f 6e 67 27 29 3b 0a 20  t billabong');. 
16f0: 20 20 20 20 20 41 4c 54 45 52 20 54 41 42 4c 45       ALTER TABLE
1700: 20 74 35 20 52 45 4e 41 4d 45 20 54 4f 20 74 36   t5 RENAME TO t6
1710: 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  ;.      INSERT I
1720: 4e 54 4f 20 74 36 20 56 41 4c 55 45 53 28 27 44  NTO t6 VALUES('D
1730: 6f 77 6e 20 63 61 6d 65 20 74 68 65 20 74 72 6f  own came the tro
1740: 6f 70 65 72 73 2c 20 6f 6e 65 2c 20 74 77 6f 2c  opers, one, two,
1750: 20 74 68 72 65 65 27 29 3b 0a 20 20 20 20 52 4f   three');.    RO
1760: 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 53 45 4c 45  LLBACK;.    SELE
1770: 43 54 20 2a 20 46 52 4f 4d 20 74 35 3b 0a 20 20  CT * FROM t5;.  
1780: 7d 0a 7d 20 7b 7b 74 68 65 20 71 75 69 63 6b 20  }.} {{the quick 
1790: 62 72 6f 77 6e 20 66 6f 78 7d 20 7b 6a 75 6d 70  brown fox} {jump
17a0: 65 64 20 6f 76 65 72 20 74 68 65 7d 20 7b 6c 61  ed over the} {la
17b0: 7a 79 20 64 6f 67 7d 7d 0a 64 6f 5f 65 78 65 63  zy dog}}.do_exec
17c0: 73 71 6c 5f 74 65 73 74 20 66 74 73 33 61 6f 2d  sql_test fts3ao-
17d0: 34 2e 38 20 7b 0a 20 20 53 45 4c 45 43 54 20 73  4.8 {.  SELECT s
17e0: 6e 69 70 70 65 74 28 74 35 2c 20 27 5b 27 2c 20  nippet(t5, '[', 
17f0: 27 5d 27 29 20 46 52 4f 4d 20 74 35 20 57 48 45  ']') FROM t5 WHE
1800: 52 45 20 74 35 20 4d 41 54 43 48 20 27 74 68 65  RE t5 MATCH 'the
1810: 27 0a 7d 20 7b 7b 5b 74 68 65 5d 20 71 75 69 63  '.} {{[the] quic
1820: 6b 20 62 72 6f 77 6e 20 66 6f 78 7d 20 7b 6a 75  k brown fox} {ju
1830: 6d 70 65 64 20 6f 76 65 72 20 5b 74 68 65 5d 7d  mped over [the]}
1840: 7d 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20 69  }..# Test that i
1850: 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f  t is possible to
1860: 20 72 65 6e 61 6d 65 20 61 6e 20 46 54 53 34 20   rename an FTS4 
1870: 74 61 62 6c 65 2e 20 52 65 6e 61 6d 69 6e 67 20  table. Renaming 
1880: 61 6e 20 46 54 53 34 20 74 61 62 6c 65 0a 23 20  an FTS4 table.# 
1890: 69 6e 76 6f 6c 76 65 73 20 72 65 6e 61 6d 69 6e  involves renamin
18a0: 67 20 74 68 65 20 65 78 74 72 61 20 25 5f 64 6f  g the extra %_do
18b0: 63 73 69 7a 65 20 61 6e 64 20 25 5f 73 74 61 74  csize and %_stat
18c0: 20 74 61 62 6c 65 73 2e 0a 23 0a 64 6f 5f 65 78   tables..#.do_ex
18d0: 65 63 73 71 6c 5f 74 65 73 74 20 35 2e 31 20 7b  ecsql_test 5.1 {
18e0: 0a 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41  .  CREATE VIRTUA
18f0: 4c 20 54 41 42 4c 45 20 74 37 20 55 53 49 4e 47  L TABLE t7 USING
1900: 20 46 54 53 34 3b 0a 20 20 49 4e 53 45 52 54 20   FTS4;.  INSERT 
1910: 49 4e 54 4f 20 74 37 20 56 41 4c 55 45 53 28 27  INTO t7 VALUES('
1920: 63 6f 69 6e 65 64 20 62 79 20 61 20 47 65 72 6d  coined by a Germ
1930: 61 6e 20 63 6c 69 6e 69 63 69 61 6e 27 29 3b 0a  an clinician');.
1940: 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a    SELECT count(*
1950: 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61  ) FROM sqlite_ma
1960: 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d 65 20  ster WHERE name 
1970: 4c 49 4b 45 20 27 74 37 25 27 3b 0a 20 20 53 45  LIKE 't7%';.  SE
1980: 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52  LECT count(*) FR
1990: 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
19a0: 20 57 48 45 52 45 20 6e 61 6d 65 20 4c 49 4b 45   WHERE name LIKE
19b0: 20 27 74 38 25 27 3b 0a 7d 20 7b 36 20 30 7d 0a   't8%';.} {6 0}.
19c0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
19d0: 35 2e 32 20 7b 0a 20 20 41 4c 54 45 52 20 54 41  5.2 {.  ALTER TA
19e0: 42 4c 45 20 74 37 20 52 45 4e 41 4d 45 20 54 4f  BLE t7 RENAME TO
19f0: 20 74 38 3b 0a 20 20 53 45 4c 45 43 54 20 63 6f   t8;.  SELECT co
1a00: 75 6e 74 28 2a 29 20 46 52 4f 4d 20 73 71 6c 69  unt(*) FROM sqli
1a10: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
1a20: 6e 61 6d 65 20 4c 49 4b 45 20 27 74 37 25 27 3b  name LIKE 't7%';
1a30: 0a 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28  .  SELECT count(
1a40: 2a 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  *) FROM sqlite_m
1a50: 61 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d 65  aster WHERE name
1a60: 20 4c 49 4b 45 20 27 74 38 25 27 3b 0a 7d 20 7b   LIKE 't8%';.} {
1a70: 30 20 36 7d 0a 0a 23 20 41 74 20 6f 6e 65 20 70  0 6}..# At one p
1a80: 6f 69 6e 74 20 74 68 69 73 20 77 61 73 20 63 61  oint this was ca
1a90: 75 73 69 6e 67 20 61 20 6d 65 6d 6f 72 79 20 6c  using a memory l
1aa0: 65 61 6b 2e 0a 23 0a 66 6f 72 65 61 63 68 20 7b  eak..#.foreach {
1ab0: 74 6e 20 73 71 6c 7d 20 7b 0a 20 20 31 20 7b 7d  tn sql} {.  1 {}
1ac0: 0a 20 20 32 20 7b 20 49 4e 53 45 52 54 20 49 4e  .  2 { INSERT IN
1ad0: 54 4f 20 66 74 28 66 74 29 20 56 41 4c 55 45 53  TO ft(ft) VALUES
1ae0: 28 27 6d 65 72 67 65 3d 32 2c 32 27 29 3b 20 7d  ('merge=2,2'); }
1af0: 0a 7d 20 7b 0a 20 20 72 65 73 65 74 5f 64 62 0a  .} {.  reset_db.
1b00: 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73    do_execsql_tes
1b10: 74 20 36 2e 24 74 6e 2e 31 20 22 0a 20 20 20 20  t 6.$tn.1 ".    
1b20: 43 52 45 41 54 45 20 54 41 42 4c 45 20 74 31 28  CREATE TABLE t1(
1b30: 78 29 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56  x);.    CREATE V
1b40: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 66 74 20  IRTUAL TABLE ft 
1b50: 55 53 49 4e 47 20 66 74 73 33 3b 0a 20 20 20 20  USING fts3;.    
1b60: 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 20 56  INSERT INTO ft V
1b70: 41 4c 55 45 53 28 27 68 65 6c 6c 6f 20 77 6f 72  ALUES('hello wor
1b80: 6c 64 27 29 3b 0a 20 20 20 20 24 73 71 6c 0a 20  ld');.    $sql. 
1b90: 20 22 0a 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20   "..  db close. 
1ba0: 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73 74   sqlite3 db test
1bb0: 2e 64 62 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c  .db.  do_execsql
1bc0: 5f 74 65 73 74 20 36 2e 24 74 6e 2e 32 20 7b 20  _test 6.$tn.2 { 
1bd0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
1be0: 20 7d 20 7b 7d 0a 0a 20 20 64 6f 5f 74 65 73 74   } {}..  do_test
1bf0: 20 36 2e 24 74 6e 2e 33 20 7b 0a 20 20 20 20 73   6.$tn.3 {.    s
1c00: 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74 2e  qlite3 db2 test.
1c10: 64 62 0a 20 20 20 20 64 62 32 20 65 76 61 6c 20  db.    db2 eval 
1c20: 7b 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 20  { DROP TABLE t1 
1c30: 7d 0a 20 20 20 20 64 62 32 20 63 6c 6f 73 65 0a  }.    db2 close.
1c40: 20 20 20 20 73 65 74 20 73 74 6d 74 20 5b 73 71      set stmt [sq
1c50: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 20 64 62  lite3_prepare db
1c60: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
1c70: 20 66 74 20 7d 20 2d 31 20 64 75 6d 6d 79 5d 0a   ft } -1 dummy].
1c80: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 69 6e 61      sqlite3_fina
1c90: 6c 69 7a 65 20 24 73 74 6d 74 0a 20 20 7d 20 7b  lize $stmt.  } {
1ca0: 53 51 4c 49 54 45 5f 4f 4b 7d 0a 20 20 64 62 20  SQLITE_OK}.  db 
1cb0: 63 6c 6f 73 65 0a 7d 0a 0a 66 69 6e 69 73 68 5f  close.}..finish_
1cc0: 74 65 73 74 0a                                   test.