/ Hex Artifact Content
Login

Artifact 3e4e3d5e75c076520341d0bdf4eb17c00e8cbde2:


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 20 6f 72 20 6d 69 73 73 69 6e 67 20  rror or missing 
0880: 64 61 74 61 62 61 73 65 7d 7d 0a 64 6f 5f 74 65  database}}.do_te
0890: 73 74 20 66 74 73 33 61 6f 2d 32 2e 36 20 7b 0a  st fts3ao-2.6 {.
08a0: 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45    execsql { SELE
08b0: 43 54 20 72 6f 77 69 64 2c 20 73 6e 69 70 70 65  CT rowid, snippe
08c0: 74 28 66 74 73 5f 74 31 29 20 46 52 4f 4d 20 66  t(fts_t1) FROM f
08d0: 74 73 5f 74 31 20 57 48 45 52 45 20 61 20 4d 41  ts_t1 WHERE a MA
08e0: 54 43 48 20 27 66 6f 75 72 27 3b 20 7d 0a 7d 20  TCH 'four'; }.} 
08f0: 7b 31 20 7b 6f 6e 65 20 74 68 72 65 65 20 3c 62  {1 {one three <b
0900: 3e 66 6f 75 72 3c 2f 62 3e 7d 7d 0a 64 6f 5f 74  >four</b>}}.do_t
0910: 65 73 74 20 66 74 73 33 61 6f 2d 32 2e 37 20 7b  est fts3ao-2.7 {
0920: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c  .  execsql { SEL
0930: 45 43 54 20 74 62 6c 5f 6e 61 6d 65 20 46 52 4f  ECT tbl_name FRO
0940: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
0950: 57 48 45 52 45 20 74 79 70 65 20 3d 20 27 74 61  WHERE type = 'ta
0960: 62 6c 65 27 7d 0a 7d 20 7b 66 74 73 5f 74 31 20  ble'}.} {fts_t1 
0970: 66 74 73 5f 74 31 5f 63 6f 6e 74 65 6e 74 20 66  fts_t1_content f
0980: 74 73 5f 74 31 5f 73 65 67 6d 65 6e 74 73 20 66  ts_t1_segments f
0990: 74 73 5f 74 31 5f 73 65 67 64 69 72 20 74 31 5f  ts_t1_segdir t1_
09a0: 73 65 67 64 69 72 7d 0a 0a 23 20 53 65 65 20 77  segdir}..# See w
09b0: 68 61 74 20 68 61 70 70 65 6e 73 20 77 68 65 6e  hat happens when
09c0: 20 72 65 6e 61 6d 69 6e 67 20 74 68 65 20 66 74   renaming the ft
09d0: 73 33 20 74 61 62 6c 65 20 66 61 69 6c 73 20 69  s3 table fails i
09e0: 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61 63 74  nside a transact
09f0: 69 6f 6e 2e 0a 23 0a 64 6f 5f 74 65 73 74 20 66  ion..#.do_test f
0a00: 74 73 33 61 6f 2d 32 2e 38 20 7b 0a 20 20 65 78  ts3ao-2.8 {.  ex
0a10: 65 63 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49  ecsql {.    BEGI
0a20: 4e 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  N;.    INSERT IN
0a30: 54 4f 20 66 74 73 5f 74 31 28 61 2c 20 62 2c 20  TO fts_t1(a, b, 
0a40: 63 29 20 56 41 4c 55 45 53 28 27 6f 6e 65 20 74  c) VALUES('one t
0a50: 77 6f 20 74 68 72 65 65 27 2c 20 27 6f 6e 65 20  wo three', 'one 
0a60: 66 6f 75 72 27 2c 20 27 6f 6e 65 20 74 77 6f 27  four', 'one two'
0a70: 29 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74  );.  }.} {}.do_t
0a80: 65 73 74 20 66 74 73 33 61 6f 2d 32 2e 39 20 7b  est fts3ao-2.9 {
0a90: 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a 20 20  .  catchsql {.  
0aa0: 20 20 41 4c 54 45 52 20 54 41 42 4c 45 20 66 74    ALTER TABLE ft
0ab0: 73 5f 74 31 20 52 45 4e 41 4d 45 20 74 6f 20 74  s_t1 RENAME to t
0ac0: 31 3b 0a 20 20 7d 0a 7d 20 7b 31 20 7b 53 51 4c  1;.  }.} {1 {SQL
0ad0: 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72 20   logic error or 
0ae0: 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73 65  missing database
0af0: 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 61  }}.do_test fts3a
0b00: 6f 2d 32 2e 31 30 20 7b 0a 20 20 65 78 65 63 73  o-2.10 {.  execs
0b10: 71 6c 20 7b 20 53 45 4c 45 43 54 20 72 6f 77 69  ql { SELECT rowi
0b20: 64 2c 20 73 6e 69 70 70 65 74 28 66 74 73 5f 74  d, snippet(fts_t
0b30: 31 29 20 46 52 4f 4d 20 66 74 73 5f 74 31 20 57  1) FROM fts_t1 W
0b40: 48 45 52 45 20 61 20 4d 41 54 43 48 20 27 66 6f  HERE a MATCH 'fo
0b50: 75 72 27 3b 20 7d 0a 7d 20 7b 31 20 7b 6f 6e 65  ur'; }.} {1 {one
0b60: 20 74 68 72 65 65 20 3c 62 3e 66 6f 75 72 3c 2f   three <b>four</
0b70: 62 3e 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73  b>}}.do_test fts
0b80: 33 61 6f 2d 32 2e 31 31 20 7b 0a 20 20 65 78 65  3ao-2.11 {.  exe
0b90: 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 74 62  csql { SELECT tb
0ba0: 6c 5f 6e 61 6d 65 20 46 52 4f 4d 20 73 71 6c 69  l_name FROM sqli
0bb0: 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20  te_master WHERE 
0bc0: 74 79 70 65 20 3d 20 27 74 61 62 6c 65 27 7d 0a  type = 'table'}.
0bd0: 7d 20 7b 66 74 73 5f 74 31 20 66 74 73 5f 74 31  } {fts_t1 fts_t1
0be0: 5f 63 6f 6e 74 65 6e 74 20 66 74 73 5f 74 31 5f  _content fts_t1_
0bf0: 73 65 67 6d 65 6e 74 73 20 66 74 73 5f 74 31 5f  segments fts_t1_
0c00: 73 65 67 64 69 72 20 74 31 5f 73 65 67 64 69 72  segdir t1_segdir
0c10: 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 61 6f  }.do_test fts3ao
0c20: 2d 32 2e 31 32 20 7b 0a 20 20 65 78 65 63 73 71  -2.12 {.  execsq
0c30: 6c 20 43 4f 4d 4d 49 54 0a 20 20 65 78 65 63 73  l COMMIT.  execs
0c40: 71 6c 20 7b 53 45 4c 45 43 54 20 61 20 46 52 4f  ql {SELECT a FRO
0c50: 4d 20 66 74 73 5f 74 31 7d 0a 7d 20 7b 7b 6f 6e  M fts_t1}.} {{on
0c60: 65 20 74 68 72 65 65 20 66 6f 75 72 7d 20 7b 6f  e three four} {o
0c70: 6e 65 20 74 77 6f 20 74 68 72 65 65 7d 7d 0a 64  ne two three}}.d
0c80: 6f 5f 74 65 73 74 20 66 74 73 33 61 6f 2d 32 2e  o_test fts3ao-2.
0c90: 31 32 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b  12 {.  execsql {
0ca0: 20 53 45 4c 45 43 54 20 61 2c 20 62 2c 20 63 20   SELECT a, b, c 
0cb0: 46 52 4f 4d 20 66 74 73 5f 74 31 20 57 48 45 52  FROM fts_t1 WHER
0cc0: 45 20 63 20 4d 41 54 43 48 20 27 66 6f 75 72 27  E c MATCH 'four'
0cd0: 3b 20 7d 0a 7d 20 7b 7b 6f 6e 65 20 74 68 72 65  ; }.} {{one thre
0ce0: 65 20 66 6f 75 72 7d 20 7b 6f 6e 65 20 66 6f 75  e four} {one fou
0cf0: 72 7d 20 7b 6f 6e 65 20 66 6f 75 72 20 74 77 6f  r} {one four two
0d00: 7d 7d 0a 0a 23 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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d40: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 43 6c 6f 73 65  --------.# Close
0d50: 2c 20 64 65 6c 65 74 65 20 61 6e 64 20 72 65 6f  , delete and reo
0d60: 70 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65  pen the database
0d70: 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  . The following 
0d80: 74 65 73 74 20 73 68 6f 75 6c 64 20 0a 23 20 62  test should .# b
0d90: 65 20 72 75 6e 20 6f 6e 20 61 6e 20 69 6e 69 74  e run on an init
0da0: 69 61 6c 6c 79 20 65 6d 70 74 79 20 64 62 2e 0a  ially empty db..
0db0: 23 0a 64 62 20 63 6c 6f 73 65 0a 66 6f 72 63 65  #.db close.force
0dc0: 64 65 6c 65 74 65 20 74 65 73 74 2e 64 62 20 74  delete test.db t
0dd0: 65 73 74 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 73  est.db-journal.s
0de0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
0df0: 62 0a 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 61  b..do_test fts3a
0e00: 6f 2d 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71  o-3.1 {.  execsq
0e10: 6c 20 7b 0a 20 20 20 20 43 52 45 41 54 45 20 56  l {.    CREATE V
0e20: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 31 20  IRTUAL TABLE t1 
0e30: 55 53 49 4e 47 20 66 74 73 33 28 61 2c 20 62 2c  USING fts3(a, b,
0e40: 20 63 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20   c);.    INSERT 
0e50: 49 4e 54 4f 20 74 31 28 61 2c 20 62 2c 20 63 29  INTO t1(a, b, c)
0e60: 20 56 41 4c 55 45 53 28 27 6f 6e 65 20 74 68 72   VALUES('one thr
0e70: 65 65 20 66 6f 75 72 27 2c 20 27 6f 6e 65 20 66  ee four', 'one f
0e80: 6f 75 72 27 2c 20 27 6f 6e 65 20 74 77 6f 27 29  our', 'one two')
0e90: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 61 2c 20  ;.    SELECT a, 
0ea0: 62 2c 20 63 20 46 52 4f 4d 20 74 31 20 57 48 45  b, c FROM t1 WHE
0eb0: 52 45 20 63 20 4d 41 54 43 48 20 27 74 77 6f 27  RE c MATCH 'two'
0ec0: 3b 0a 20 20 7d 0a 7d 20 7b 7b 6f 6e 65 20 74 68  ;.  }.} {{one th
0ed0: 72 65 65 20 66 6f 75 72 7d 20 7b 6f 6e 65 20 66  ree four} {one f
0ee0: 6f 75 72 7d 20 7b 6f 6e 65 20 74 77 6f 7d 7d 0a  our} {one two}}.
0ef0: 0a 23 20 54 68 69 73 20 74 65 73 74 20 77 61 73  .# This test was
0f00: 20 63 72 61 73 68 69 6e 67 20 61 74 20 6f 6e 65   crashing at one
0f10: 20 70 6f 69 6e 74 2e 0a 23 0a 64 6f 5f 74 65 73   point..#.do_tes
0f20: 74 20 66 74 73 33 61 6f 2d 33 2e 32 20 7b 0a 20  t fts3ao-3.2 {. 
0f30: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
0f40: 45 4c 45 43 54 20 61 2c 20 62 2c 20 63 20 46 52  ELECT a, b, c FR
0f50: 4f 4d 20 74 31 20 57 48 45 52 45 20 63 20 4d 41  OM t1 WHERE c MA
0f60: 54 43 48 20 27 74 77 6f 27 3b 0a 20 20 20 20 43  TCH 'two';.    C
0f70: 52 45 41 54 45 20 54 41 42 4c 45 20 74 33 28 61  REATE TABLE t3(a
0f80: 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 53 45 4c  , b, c);.    SEL
0f90: 45 43 54 20 61 2c 20 62 2c 20 63 20 46 52 4f 4d  ECT a, b, c FROM
0fa0: 20 74 31 20 57 48 45 52 45 20 20 63 20 20 4d 41   t1 WHERE  c  MA
0fb0: 54 43 48 20 27 74 77 6f 27 3b 0a 20 20 7d 0a 7d  TCH 'two';.  }.}
0fc0: 20 7b 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 20 7b 6f 6e 65 20 74 68 72  ne two} {one thr
0ff0: 65 65 20 66 6f 75 72 7d 20 7b 6f 6e 65 20 66 6f  ee four} {one fo
1000: 75 72 7d 20 7b 6f 6e 65 20 74 77 6f 7d 7d 0a 0a  ur} {one two}}..
1010: 23 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: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1050: 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 74 68  ------.# Test th
1060: 61 74 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  at it is possibl
1070: 65 20 74 6f 20 72 65 6e 61 6d 65 20 61 6e 20 66  e to rename an f
1080: 74 73 33 20 74 61 62 6c 65 20 69 6e 20 61 6e 20  ts3 table in an 
1090: 61 74 74 61 63 68 65 64 20 0a 23 20 64 61 74 61  attached .# data
10a0: 62 61 73 65 2e 0a 23 0a 66 6f 72 63 65 64 65 6c  base..#.forcedel
10b0: 65 74 65 20 74 65 73 74 32 2e 64 62 20 74 65 73  ete test2.db tes
10c0: 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a 0a 64  t2.db-journal..d
10d0: 6f 5f 74 65 73 74 20 66 74 73 33 61 6f 2d 33 2e  o_test fts3ao-3.
10e0: 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a  1 {.  execsql {.
10f0: 20 20 20 20 41 54 54 41 43 48 20 27 74 65 73 74      ATTACH 'test
1100: 32 2e 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20  2.db' AS aux;.  
1110: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
1120: 20 54 41 42 4c 45 20 61 75 78 2e 74 31 20 55 53   TABLE aux.t1 US
1130: 49 4e 47 20 66 74 73 33 28 61 2c 20 62 2c 20 63  ING fts3(a, b, c
1140: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
1150: 54 4f 20 61 75 78 2e 74 31 28 61 2c 20 62 2c 20  TO aux.t1(a, b, 
1160: 63 29 20 56 41 4c 55 45 53 28 0a 20 20 20 20 20  c) VALUES(.     
1170: 20 27 6e 65 75 6e 67 20 73 6f 6e 67 20 73 61 68   'neung song sah
1180: 6d 27 2c 20 27 6e 65 75 6e 67 20 73 65 65 27 2c  m', 'neung see',
1190: 20 27 6e 65 75 6e 67 20 73 65 65 20 73 6f 6e 67   'neung see song
11a0: 27 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 7d 20 7b  '.    );.  }.} {
11b0: 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 61  }..do_test fts3a
11c0: 6f 2d 33 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  o-3.2 {.  execsq
11d0: 6c 20 7b 20 53 45 4c 45 43 54 20 61 2c 20 62 2c  l { SELECT a, b,
11e0: 20 63 20 46 52 4f 4d 20 61 75 78 2e 74 31 20 57   c FROM aux.t1 W
11f0: 48 45 52 45 20 61 20 4d 41 54 43 48 20 27 73 6f  HERE a MATCH 'so
1200: 6e 67 27 3b 20 7d 0a 7d 20 7b 7b 6e 65 75 6e 67  ng'; }.} {{neung
1210: 20 73 6f 6e 67 20 73 61 68 6d 7d 20 7b 6e 65 75   song sahm} {neu
1220: 6e 67 20 73 65 65 7d 20 7b 6e 65 75 6e 67 20 73  ng see} {neung s
1230: 65 65 20 73 6f 6e 67 7d 7d 0a 0a 64 6f 5f 74 65  ee song}}..do_te
1240: 73 74 20 66 74 73 33 61 6f 2d 33 2e 33 20 7b 0a  st fts3ao-3.3 {.
1250: 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c 45    execsql { SELE
1260: 43 54 20 61 2c 20 62 2c 20 63 20 46 52 4f 4d 20  CT a, b, c FROM 
1270: 74 31 20 57 48 45 52 45 20 63 20 4d 41 54 43 48  t1 WHERE c MATCH
1280: 20 27 74 77 6f 27 3b 20 7d 0a 7d 20 7b 7b 6f 6e   'two'; }.} {{on
1290: 65 20 74 68 72 65 65 20 66 6f 75 72 7d 20 7b 6f  e three four} {o
12a0: 6e 65 20 66 6f 75 72 7d 20 7b 6f 6e 65 20 74 77  ne four} {one tw
12b0: 6f 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 74 73  o}}..do_test fts
12c0: 33 61 6f 2d 33 2e 34 20 7b 0a 20 20 65 78 65 63  3ao-3.4 {.  exec
12d0: 73 71 6c 20 7b 20 41 4c 54 45 52 20 54 41 42 4c  sql { ALTER TABL
12e0: 45 20 61 75 78 2e 74 31 20 52 45 4e 41 4d 45 20  E aux.t1 RENAME 
12f0: 54 4f 20 74 32 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f  TO t2 }.} {}..do
1300: 5f 74 65 73 74 20 66 74 73 33 61 6f 2d 33 2e 32  _test fts3ao-3.2
1310: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 53   {.  execsql { S
1320: 45 4c 45 43 54 20 61 2c 20 62 2c 20 63 20 46 52  ELECT a, b, c FR
1330: 4f 4d 20 74 32 20 57 48 45 52 45 20 61 20 4d 41  OM t2 WHERE a MA
1340: 54 43 48 20 27 73 6f 6e 67 27 3b 20 7d 0a 7d 20  TCH 'song'; }.} 
1350: 7b 7b 6e 65 75 6e 67 20 73 6f 6e 67 20 73 61 68  {{neung song sah
1360: 6d 7d 20 7b 6e 65 75 6e 67 20 73 65 65 7d 20 7b  m} {neung see} {
1370: 6e 65 75 6e 67 20 73 65 65 20 73 6f 6e 67 7d 7d  neung see song}}
1380: 0a 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 61 6f  ..do_test fts3ao
1390: 2d 33 2e 33 20 7b 0a 20 20 65 78 65 63 73 71 6c  -3.3 {.  execsql
13a0: 20 7b 20 53 45 4c 45 43 54 20 61 2c 20 62 2c 20   { SELECT a, b, 
13b0: 63 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  c FROM t1 WHERE 
13c0: 63 20 4d 41 54 43 48 20 27 74 77 6f 27 3b 20 7d  c MATCH 'two'; }
13d0: 0a 7d 20 7b 7b 6f 6e 65 20 74 68 72 65 65 20 66  .} {{one three f
13e0: 6f 75 72 7d 20 7b 6f 6e 65 20 66 6f 75 72 7d 20  our} {one four} 
13f0: 7b 6f 6e 65 20 74 77 6f 7d 7d 0a 0a 23 2d 2d 2d  {one two}}..#---
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 2d 2d 2d 2d  ----------------
1420: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1430: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1440: 2d 2d 0a 23 20 54 65 73 74 20 74 68 61 74 20 69  --.# Test that i
1450: 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 6f  t is possible to
1460: 20 72 65 6e 61 6d 65 20 61 6e 20 66 74 73 33 20   rename an fts3 
1470: 74 61 62 6c 65 20 77 69 74 68 69 6e 20 61 20 0a  table within a .
1480: 23 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 23  # transaction..#
1490: 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 61 6f 2d  .do_test fts3ao-
14a0: 34 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.1 {.  execsql 
14b0: 7b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 52  {.    CREATE VIR
14c0: 54 55 41 4c 20 54 41 42 4c 45 20 74 34 20 55 53  TUAL TABLE t4 US
14d0: 49 4e 47 20 66 74 73 33 3b 0a 20 20 20 20 49 4e  ING fts3;.    IN
14e0: 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c  SERT INTO t4 VAL
14f0: 55 45 53 28 27 74 68 65 20 71 75 69 63 6b 20 62  UES('the quick b
1500: 72 6f 77 6e 20 66 6f 78 27 29 3b 0a 20 20 7d 0a  rown fox');.  }.
1510: 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73  } {}.do_test fts
1520: 33 61 6f 2d 34 2e 32 20 7b 0a 20 20 65 78 65 63  3ao-4.2 {.  exec
1530: 73 71 6c 20 7b 0a 20 20 20 20 42 45 47 49 4e 3b  sql {.    BEGIN;
1540: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
1550: 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27 6a 75  TO t4 VALUES('ju
1560: 6d 70 65 64 20 6f 76 65 72 20 74 68 65 27 29 3b  mped over the');
1570: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
1580: 74 20 66 74 73 33 61 6f 2d 34 2e 33 20 7b 20 65  t fts3ao-4.3 { e
1590: 78 65 63 73 71 6c 20 7b 20 41 4c 54 45 52 20 54  xecsql { ALTER T
15a0: 41 42 4c 45 20 74 34 20 52 45 4e 41 4d 45 20 54  ABLE t4 RENAME T
15b0: 4f 20 74 35 3b 20 7d 20 7d 20 7b 7d 0a 64 6f 5f  O t5; } } {}.do_
15c0: 74 65 73 74 20 66 74 73 33 61 6f 2d 34 2e 34 20  test fts3ao-4.4 
15d0: 7b 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45  { execsql { INSE
15e0: 52 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45  RT INTO t5 VALUE
15f0: 53 28 27 6c 61 7a 79 20 64 6f 67 27 29 3b 20 7d  S('lazy dog'); }
1600: 20 7d 20 7b 7d 0a 64 6f 5f 74 65 73 74 20 66 74   } {}.do_test ft
1610: 73 33 61 6f 2d 34 2e 35 20 7b 20 65 78 65 63 73  s3ao-4.5 { execs
1620: 71 6c 20 43 4f 4d 4d 49 54 20 7d 20 7b 7d 0a 64  ql COMMIT } {}.d
1630: 6f 5f 74 65 73 74 20 66 74 73 33 61 6f 2d 34 2e  o_test fts3ao-4.
1640: 36 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20  6 {.  execsql { 
1650: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 35  SELECT * FROM t5
1660: 20 7d 0a 7d 20 7b 7b 74 68 65 20 71 75 69 63 6b   }.} {{the quick
1670: 20 62 72 6f 77 6e 20 66 6f 78 7d 20 7b 6a 75 6d   brown fox} {jum
1680: 70 65 64 20 6f 76 65 72 20 74 68 65 7d 20 7b 6c  ped over the} {l
1690: 61 7a 79 20 64 6f 67 7d 7d 0a 64 6f 5f 74 65 73  azy dog}}.do_tes
16a0: 74 20 66 74 73 33 61 6f 2d 34 2e 37 20 7b 0a 20  t fts3ao-4.7 {. 
16b0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 42   execsql {.    B
16c0: 45 47 49 4e 3b 0a 20 20 20 20 20 20 49 4e 53 45  EGIN;.      INSE
16d0: 52 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45  RT INTO t5 VALUE
16e0: 53 28 27 44 6f 77 6e 20 63 61 6d 65 20 61 20 6a  S('Down came a j
16f0: 75 6d 62 75 63 6b 20 74 6f 20 64 72 69 6e 6b 20  umbuck to drink 
1700: 61 74 20 74 68 61 74 20 62 69 6c 6c 61 62 6f 6e  at that billabon
1710: 67 27 29 3b 0a 20 20 20 20 20 20 41 4c 54 45 52  g');.      ALTER
1720: 20 54 41 42 4c 45 20 74 35 20 52 45 4e 41 4d 45   TABLE t5 RENAME
1730: 20 54 4f 20 74 36 3b 0a 20 20 20 20 20 20 49 4e   TO t6;.      IN
1740: 53 45 52 54 20 49 4e 54 4f 20 74 36 20 56 41 4c  SERT INTO t6 VAL
1750: 55 45 53 28 27 44 6f 77 6e 20 63 61 6d 65 20 74  UES('Down came t
1760: 68 65 20 74 72 6f 6f 70 65 72 73 2c 20 6f 6e 65  he troopers, one
1770: 2c 20 74 77 6f 2c 20 74 68 72 65 65 27 29 3b 0a  , two, three');.
1780: 20 20 20 20 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20      ROLLBACK;.  
1790: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
17a0: 74 35 3b 0a 20 20 7d 0a 7d 20 7b 7b 74 68 65 20  t5;.  }.} {{the 
17b0: 71 75 69 63 6b 20 62 72 6f 77 6e 20 66 6f 78 7d  quick brown fox}
17c0: 20 7b 6a 75 6d 70 65 64 20 6f 76 65 72 20 74 68   {jumped over th
17d0: 65 7d 20 7b 6c 61 7a 79 20 64 6f 67 7d 7d 0a 64  e} {lazy dog}}.d
17e0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 66  o_execsql_test f
17f0: 74 73 33 61 6f 2d 34 2e 38 20 7b 0a 20 20 53 45  ts3ao-4.8 {.  SE
1800: 4c 45 43 54 20 73 6e 69 70 70 65 74 28 74 35 2c  LECT snippet(t5,
1810: 20 27 5b 27 2c 20 27 5d 27 29 20 46 52 4f 4d 20   '[', ']') FROM 
1820: 74 35 20 57 48 45 52 45 20 74 35 20 4d 41 54 43  t5 WHERE t5 MATC
1830: 48 20 27 74 68 65 27 0a 7d 20 7b 7b 5b 74 68 65  H 'the'.} {{[the
1840: 5d 20 71 75 69 63 6b 20 62 72 6f 77 6e 20 66 6f  ] quick brown fo
1850: 78 7d 20 7b 6a 75 6d 70 65 64 20 6f 76 65 72 20  x} {jumped over 
1860: 5b 74 68 65 5d 7d 7d 0a 0a 23 20 54 65 73 74 20  [the]}}..# Test 
1870: 74 68 61 74 20 69 74 20 69 73 20 70 6f 73 73 69  that it is possi
1880: 62 6c 65 20 74 6f 20 72 65 6e 61 6d 65 20 61 6e  ble to rename an
1890: 20 46 54 53 34 20 74 61 62 6c 65 2e 20 52 65 6e   FTS4 table. Ren
18a0: 61 6d 69 6e 67 20 61 6e 20 46 54 53 34 20 74 61  aming an FTS4 ta
18b0: 62 6c 65 0a 23 20 69 6e 76 6f 6c 76 65 73 20 72  ble.# involves r
18c0: 65 6e 61 6d 69 6e 67 20 74 68 65 20 65 78 74 72  enaming the extr
18d0: 61 20 25 5f 64 6f 63 73 69 7a 65 20 61 6e 64 20  a %_docsize and 
18e0: 25 5f 73 74 61 74 20 74 61 62 6c 65 73 2e 0a 23  %_stat tables..#
18f0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
1900: 20 35 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20   5.1 {.  CREATE 
1910: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 37  VIRTUAL TABLE t7
1920: 20 55 53 49 4e 47 20 46 54 53 34 3b 0a 20 20 49   USING FTS4;.  I
1930: 4e 53 45 52 54 20 49 4e 54 4f 20 74 37 20 56 41  NSERT INTO t7 VA
1940: 4c 55 45 53 28 27 63 6f 69 6e 65 64 20 62 79 20  LUES('coined by 
1950: 61 20 47 65 72 6d 61 6e 20 63 6c 69 6e 69 63 69  a German clinici
1960: 61 6e 27 29 3b 0a 20 20 53 45 4c 45 43 54 20 63  an');.  SELECT c
1970: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 73 71 6c  ount(*) FROM sql
1980: 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45  ite_master WHERE
1990: 20 6e 61 6d 65 20 4c 49 4b 45 20 27 74 37 25 27   name LIKE 't7%'
19a0: 3b 0a 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74  ;.  SELECT count
19b0: 28 2a 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f  (*) FROM sqlite_
19c0: 6d 61 73 74 65 72 20 57 48 45 52 45 20 6e 61 6d  master WHERE nam
19d0: 65 20 4c 49 4b 45 20 27 74 38 25 27 3b 0a 7d 20  e LIKE 't8%';.} 
19e0: 7b 36 20 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  {6 0}.do_execsql
19f0: 5f 74 65 73 74 20 35 2e 32 20 7b 0a 20 20 41 4c  _test 5.2 {.  AL
1a00: 54 45 52 20 54 41 42 4c 45 20 74 37 20 52 45 4e  TER TABLE t7 REN
1a10: 41 4d 45 20 54 4f 20 74 38 3b 0a 20 20 53 45 4c  AME TO t8;.  SEL
1a20: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
1a30: 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master 
1a40: 57 48 45 52 45 20 6e 61 6d 65 20 4c 49 4b 45 20  WHERE name LIKE 
1a50: 27 74 37 25 27 3b 0a 20 20 53 45 4c 45 43 54 20  't7%';.  SELECT 
1a60: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 73 71  count(*) FROM sq
1a70: 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 52  lite_master WHER
1a80: 45 20 6e 61 6d 65 20 4c 49 4b 45 20 27 74 38 25  E name LIKE 't8%
1a90: 27 3b 0a 7d 20 7b 30 20 36 7d 0a 0a 23 20 41 74  ';.} {0 6}..# At
1aa0: 20 6f 6e 65 20 70 6f 69 6e 74 20 74 68 69 73 20   one point this 
1ab0: 77 61 73 20 63 61 75 73 69 6e 67 20 61 20 6d 65  was causing a me
1ac0: 6d 6f 72 79 20 6c 65 61 6b 2e 0a 23 0a 66 6f 72  mory leak..#.for
1ad0: 65 61 63 68 20 7b 74 6e 20 73 71 6c 7d 20 7b 0a  each {tn sql} {.
1ae0: 20 20 31 20 7b 7d 0a 20 20 32 20 7b 20 49 4e 53    1 {}.  2 { INS
1af0: 45 52 54 20 49 4e 54 4f 20 66 74 28 66 74 29 20  ERT INTO ft(ft) 
1b00: 56 41 4c 55 45 53 28 27 6d 65 72 67 65 3d 32 2c  VALUES('merge=2,
1b10: 32 27 29 3b 20 7d 0a 7d 20 7b 0a 20 20 72 65 73  2'); }.} {.  res
1b20: 65 74 5f 64 62 0a 20 20 64 6f 5f 65 78 65 63 73  et_db.  do_execs
1b30: 71 6c 5f 74 65 73 74 20 36 2e 24 74 6e 2e 31 20  ql_test 6.$tn.1 
1b40: 22 0a 20 20 20 20 43 52 45 41 54 45 20 54 41 42  ".    CREATE TAB
1b50: 4c 45 20 74 31 28 78 29 3b 0a 20 20 20 20 43 52  LE t1(x);.    CR
1b60: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
1b70: 4c 45 20 66 74 20 55 53 49 4e 47 20 66 74 73 33  LE ft USING fts3
1b80: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
1b90: 4f 20 66 74 20 56 41 4c 55 45 53 28 27 68 65 6c  O ft VALUES('hel
1ba0: 6c 6f 20 77 6f 72 6c 64 27 29 3b 0a 20 20 20 20  lo world');.    
1bb0: 24 73 71 6c 0a 20 20 22 0a 0a 20 20 64 62 20 63  $sql.  "..  db c
1bc0: 6c 6f 73 65 0a 20 20 73 71 6c 69 74 65 33 20 64  lose.  sqlite3 d
1bd0: 62 20 74 65 73 74 2e 64 62 0a 20 20 64 6f 5f 65  b test.db.  do_e
1be0: 78 65 63 73 71 6c 5f 74 65 73 74 20 36 2e 24 74  xecsql_test 6.$t
1bf0: 6e 2e 32 20 7b 20 53 45 4c 45 43 54 20 2a 20 46  n.2 { SELECT * F
1c00: 52 4f 4d 20 74 31 20 7d 20 7b 7d 0a 0a 20 20 64  ROM t1 } {}..  d
1c10: 6f 5f 74 65 73 74 20 36 2e 24 74 6e 2e 33 20 7b  o_test 6.$tn.3 {
1c20: 0a 20 20 20 20 73 71 6c 69 74 65 33 20 64 62 32  .    sqlite3 db2
1c30: 20 74 65 73 74 2e 64 62 0a 20 20 20 20 64 62 32   test.db.    db2
1c40: 20 65 76 61 6c 20 7b 20 44 52 4f 50 20 54 41 42   eval { DROP TAB
1c50: 4c 45 20 74 31 20 7d 0a 20 20 20 20 64 62 32 20  LE t1 }.    db2 
1c60: 63 6c 6f 73 65 0a 20 20 20 20 73 65 74 20 73 74  close.    set st
1c70: 6d 74 20 5b 73 71 6c 69 74 65 33 5f 70 72 65 70  mt [sqlite3_prep
1c80: 61 72 65 20 64 62 20 7b 20 53 45 4c 45 43 54 20  are db { SELECT 
1c90: 2a 20 46 52 4f 4d 20 66 74 20 7d 20 2d 31 20 64  * FROM ft } -1 d
1ca0: 75 6d 6d 79 5d 0a 20 20 20 20 73 71 6c 69 74 65  ummy].    sqlite
1cb0: 33 5f 66 69 6e 61 6c 69 7a 65 20 24 73 74 6d 74  3_finalize $stmt
1cc0: 0a 20 20 7d 20 7b 53 51 4c 49 54 45 5f 4f 4b 7d  .  } {SQLITE_OK}
1cd0: 0a 20 20 64 62 20 63 6c 6f 73 65 0a 7d 0a 0a 66  .  db close.}..f
1ce0: 69 6e 69 73 68 5f 74 65 73 74 0a                 inish_test.