/ Hex Artifact Content
Login

Artifact 298fa1670aa21cd445b282d139b70c72e7ade12b:


0000: 23 20 32 30 30 37 20 46 65 62 72 75 61 72 79 20  # 2007 February 
0010: 36 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  6.#.# 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 0a 23 0a 23 2a 2a 2a  rce code..#.#***
0050: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0060: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0070: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0080: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0090: 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73 20 66 69  ******.# This fi
00a0: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65  le implements re
00b0: 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66  gression tests f
00c0: 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  or SQLite librar
00d0: 79 2e 20 20 54 68 69 73 0a 23 20 74 65 73 74 73  y.  This.# tests
00e0: 20 63 72 65 61 74 69 6e 67 20 66 74 73 32 20 74   creating fts2 t
00f0: 61 62 6c 65 73 20 69 6e 20 61 6e 20 61 74 74 61  ables in an atta
0100: 63 68 65 64 20 64 61 74 61 62 61 73 65 2e 0a 23  ched database..#
0110: 0a 23 20 24 49 64 3a 20 66 74 73 32 6a 2e 74 65  .# $Id: fts2j.te
0120: 73 74 2c 76 20 31 2e 31 20 32 30 30 37 2f 30 32  st,v 1.1 2007/02
0130: 2f 30 37 20 30 31 3a 30 31 3a 31 38 20 73 68 65  /07 01:01:18 she
0140: 73 73 20 45 78 70 20 24 0a 23 0a 0a 73 65 74 20  ss Exp $.#..set 
0150: 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69  testdir [file di
0160: 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f  rname $argv0].so
0170: 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65  urce $testdir/te
0180: 73 74 65 72 2e 74 63 6c 0a 0a 23 20 49 66 20 53  ster.tcl..# If S
0190: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
01a0: 32 20 69 73 20 64 65 66 69 6e 65 64 2c 20 6f 6d  2 is defined, om
01b0: 69 74 20 74 68 69 73 20 66 69 6c 65 2e 0a 69 66  it this file..if
01c0: 63 61 70 61 62 6c 65 20 21 66 74 73 32 20 7b 0a  capable !fts2 {.
01d0: 20 20 66 69 6e 69 73 68 5f 74 65 73 74 0a 20 20    finish_test.  
01e0: 72 65 74 75 72 6e 0a 7d 0a 0a 23 20 43 6c 65 61  return.}..# Clea
01f0: 6e 20 75 70 20 61 6e 79 74 68 69 6e 67 20 6c 65  n up anything le
0200: 66 74 20 6f 76 65 72 20 66 72 6f 6d 20 61 20 70  ft over from a p
0210: 72 65 76 69 6f 75 73 20 70 61 73 73 2e 0a 66 6f  revious pass..fo
0220: 72 63 65 64 65 6c 65 74 65 20 74 65 73 74 32 2e  rcedelete test2.
0230: 64 62 0a 66 6f 72 63 65 64 65 6c 65 74 65 20 74  db.forcedelete t
0240: 65 73 74 32 2e 64 62 2d 6a 6f 75 72 6e 61 6c 0a  est2.db-journal.
0250: 73 71 6c 69 74 65 33 20 64 62 32 20 74 65 73 74  sqlite3 db2 test
0260: 32 2e 64 62 0a 0a 64 62 20 65 76 61 6c 20 7b 0a  2.db..db eval {.
0270: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
0280: 20 54 41 42 4c 45 20 74 33 20 55 53 49 4e 47 20   TABLE t3 USING 
0290: 66 74 73 32 28 63 6f 6e 74 65 6e 74 29 3b 0a 20  fts2(content);. 
02a0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20   INSERT INTO t3 
02b0: 28 72 6f 77 69 64 2c 20 63 6f 6e 74 65 6e 74 29  (rowid, content)
02c0: 20 56 41 4c 55 45 53 28 31 2c 20 22 68 65 6c 6c   VALUES(1, "hell
02d0: 6f 20 77 6f 72 6c 64 22 29 3b 0a 7d 0a 0a 64 62  o world");.}..db
02e0: 32 20 65 76 61 6c 20 7b 0a 20 20 43 52 45 41 54  2 eval {.  CREAT
02f0: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
0300: 74 31 20 55 53 49 4e 47 20 66 74 73 32 28 63 6f  t1 USING fts2(co
0310: 6e 74 65 6e 74 29 3b 0a 20 20 49 4e 53 45 52 54  ntent);.  INSERT
0320: 20 49 4e 54 4f 20 74 31 20 28 72 6f 77 69 64 2c   INTO t1 (rowid,
0330: 20 63 6f 6e 74 65 6e 74 29 20 56 41 4c 55 45 53   content) VALUES
0340: 28 31 2c 20 22 68 65 6c 6c 6f 20 77 6f 72 6c 64  (1, "hello world
0350: 22 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ");.  INSERT INT
0360: 4f 20 74 31 20 28 72 6f 77 69 64 2c 20 63 6f 6e  O t1 (rowid, con
0370: 74 65 6e 74 29 20 56 41 4c 55 45 53 28 32 2c 20  tent) VALUES(2, 
0380: 22 68 65 6c 6c 6f 20 74 68 65 72 65 22 29 3b 0a  "hello there");.
0390: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
03a0: 20 28 72 6f 77 69 64 2c 20 63 6f 6e 74 65 6e 74   (rowid, content
03b0: 29 20 56 41 4c 55 45 53 28 33 2c 20 22 63 72 75  ) VALUES(3, "cru
03c0: 65 6c 20 77 6f 72 6c 64 22 29 3b 0a 7d 0a 0a 23  el world");.}..#
03d0: 20 54 68 69 73 20 68 61 73 20 61 6c 77 61 79 73   This has always
03e0: 20 77 6f 72 6b 65 64 20 62 65 63 61 75 73 65 20   worked because 
03f0: 74 68 65 20 74 31 5f 2a 20 74 61 62 6c 65 73 20  the t1_* tables 
0400: 75 73 65 64 20 62 79 20 66 74 73 32 20 77 69 6c  used by fts2 wil
0410: 6c 20 62 65 0a 23 20 74 68 65 20 64 65 66 61 75  l be.# the defau
0420: 6c 74 73 2e 0a 64 6f 5f 74 65 73 74 20 66 74 73  lts..do_test fts
0430: 32 6a 2d 31 2e 31 20 7b 0a 20 20 65 78 65 63 73  2j-1.1 {.  execs
0440: 71 6c 20 7b 0a 20 20 20 20 41 54 54 41 43 48 20  ql {.    ATTACH 
0450: 44 41 54 41 42 41 53 45 20 27 74 65 73 74 32 2e  DATABASE 'test2.
0460: 64 62 27 20 41 53 20 74 77 6f 3b 0a 20 20 20 20  db' AS two;.    
0470: 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f  SELECT rowid FRO
0480: 4d 20 74 31 20 57 48 45 52 45 20 74 31 20 4d 41  M t1 WHERE t1 MA
0490: 54 43 48 20 27 68 65 6c 6c 6f 27 3b 0a 20 20 20  TCH 'hello';.   
04a0: 20 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45   DETACH DATABASE
04b0: 20 74 77 6f 3b 0a 20 20 7d 0a 7d 20 7b 31 20 32   two;.  }.} {1 2
04c0: 7d 0a 23 20 4d 61 6b 65 20 63 65 72 74 61 69 6e  }.# Make certain
04d0: 20 77 65 27 72 65 20 64 65 74 61 63 68 65 64 20   we're detached 
04e0: 69 66 20 74 68 65 72 65 20 77 61 73 20 61 6e 20  if there was an 
04f0: 65 72 72 6f 72 2e 0a 63 61 74 63 68 20 7b 64 62  error..catch {db
0500: 20 65 76 61 6c 20 7b 44 45 54 41 43 48 20 44 41   eval {DETACH DA
0510: 54 41 42 41 53 45 20 74 77 6f 7d 7d 0a 0a 23 20  TABASE two}}..# 
0520: 49 6e 20 6f 6c 64 65 72 20 63 6f 64 65 2c 20 74  In older code, t
0530: 68 69 73 20 61 70 70 65 61 72 73 20 74 6f 20 77  his appears to w
0540: 6f 72 6b 20 66 69 6e 65 2c 20 62 75 74 20 74 68  ork fine, but th
0550: 65 20 74 32 5f 2a 20 74 61 62 6c 65 73 20 75 73  e t2_* tables us
0560: 65 64 0a 23 20 62 79 20 66 74 73 32 20 77 69 6c  ed.# by fts2 wil
0570: 6c 20 62 65 20 63 72 65 61 74 65 64 20 69 6e 20  l be created in 
0580: 64 61 74 61 62 61 73 65 20 27 6d 61 69 6e 27 20  database 'main' 
0590: 69 6e 73 74 65 61 64 20 6f 66 20 64 61 74 61 62  instead of datab
05a0: 61 73 65 0a 23 20 27 74 77 6f 27 2e 20 20 49 74  ase.# 'two'.  It
05b0: 20 61 70 70 65 61 72 73 20 74 6f 20 77 6f 72 6b   appears to work
05c0: 20 66 69 6e 65 20 62 65 63 61 75 73 65 20 74 68   fine because th
05d0: 65 20 74 61 62 6c 65 73 20 65 6e 64 20 75 70 20  e tables end up 
05e0: 62 65 69 6e 67 20 74 68 65 0a 23 20 64 65 66 61  being the.# defa
05f0: 75 6c 74 73 2c 20 62 75 74 20 6f 62 76 69 6f 75  ults, but obviou
0600: 73 6c 79 20 69 73 20 62 61 64 6c 79 20 62 72 6f  sly is badly bro
0610: 6b 65 6e 20 69 66 20 79 6f 75 20 68 6f 70 65 20  ken if you hope 
0620: 74 6f 20 75 73 65 20 74 68 69 6e 67 73 0a 23 20  to use things.# 
0630: 6f 74 68 65 72 20 74 68 61 6e 20 69 6e 20 74 68  other than in th
0640: 65 20 65 78 61 63 74 20 73 61 6d 65 20 41 54 54  e exact same ATT
0650: 41 43 48 20 73 65 74 75 70 2e 0a 64 6f 5f 74 65  ACH setup..do_te
0660: 73 74 20 66 74 73 32 6a 2d 31 2e 32 20 7b 0a 20  st fts2j-1.2 {. 
0670: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 41   execsql {.    A
0680: 54 54 41 43 48 20 44 41 54 41 42 41 53 45 20 27  TTACH DATABASE '
0690: 74 65 73 74 32 2e 64 62 27 20 41 53 20 74 77 6f  test2.db' AS two
06a0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 52  ;.    CREATE VIR
06b0: 54 55 41 4c 20 54 41 42 4c 45 20 74 77 6f 2e 74  TUAL TABLE two.t
06c0: 32 20 55 53 49 4e 47 20 66 74 73 32 28 63 6f 6e  2 USING fts2(con
06d0: 74 65 6e 74 29 3b 0a 20 20 20 20 49 4e 53 45 52  tent);.    INSER
06e0: 54 20 49 4e 54 4f 20 74 32 20 28 72 6f 77 69 64  T INTO t2 (rowid
06f0: 2c 20 63 6f 6e 74 65 6e 74 29 20 56 41 4c 55 45  , content) VALUE
0700: 53 28 31 2c 20 22 68 65 6c 6c 6f 20 77 6f 72 6c  S(1, "hello worl
0710: 64 22 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20  d");.    INSERT 
0720: 49 4e 54 4f 20 74 32 20 28 72 6f 77 69 64 2c 20  INTO t2 (rowid, 
0730: 63 6f 6e 74 65 6e 74 29 20 56 41 4c 55 45 53 28  content) VALUES(
0740: 32 2c 20 22 68 65 6c 6c 6f 20 74 68 65 72 65 22  2, "hello there"
0750: 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e  );.    INSERT IN
0760: 54 4f 20 74 32 20 28 72 6f 77 69 64 2c 20 63 6f  TO t2 (rowid, co
0770: 6e 74 65 6e 74 29 20 56 41 4c 55 45 53 28 33 2c  ntent) VALUES(3,
0780: 20 22 63 72 75 65 6c 20 77 6f 72 6c 64 22 29 3b   "cruel world");
0790: 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69  .    SELECT rowi
07a0: 64 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20  d FROM t2 WHERE 
07b0: 74 32 20 4d 41 54 43 48 20 27 68 65 6c 6c 6f 27  t2 MATCH 'hello'
07c0: 3b 0a 20 20 20 20 44 45 54 41 43 48 20 44 41 54  ;.    DETACH DAT
07d0: 41 42 41 53 45 20 74 77 6f 3b 0a 20 20 7d 0a 7d  ABASE two;.  }.}
07e0: 20 7b 31 20 32 7d 0a 63 61 74 63 68 20 7b 64 62   {1 2}.catch {db
07f0: 20 65 76 61 6c 20 7b 44 45 54 41 43 48 20 44 41   eval {DETACH DA
0800: 54 41 42 41 53 45 20 74 77 6f 7d 7d 0a 0a 23 20  TABASE two}}..# 
0810: 49 6e 20 6f 6c 64 65 72 20 63 6f 64 65 2c 20 74  In older code, t
0820: 68 69 73 20 62 72 6f 6b 65 20 62 65 63 61 75 73  his broke becaus
0830: 65 20 74 68 65 20 66 74 73 32 20 63 6f 64 65 20  e the fts2 code 
0840: 61 74 74 65 6d 70 74 65 64 20 74 6f 20 63 72 65  attempted to cre
0850: 61 74 65 0a 23 20 74 33 5f 2a 20 74 61 62 6c 65  ate.# t3_* table
0860: 73 20 69 6e 20 64 61 74 61 62 61 73 65 20 27 6d  s in database 'm
0870: 61 69 6e 27 2c 20 62 75 74 20 74 68 65 79 20 61  ain', but they a
0880: 6c 72 65 61 64 79 20 65 78 69 73 74 65 64 2e 20  lready existed. 
0890: 20 4e 6f 72 6d 61 6c 6c 79 0a 23 20 74 68 69 73   Normally.# this
08a0: 20 77 6f 75 6c 64 6e 27 74 20 68 61 70 70 65 6e   wouldn't happen
08b0: 20 77 69 74 68 6f 75 74 20 74 33 20 69 74 73 65   without t3 itse
08c0: 6c 66 20 65 78 69 73 74 69 6e 67 2c 20 69 6e 20  lf existing, in 
08d0: 77 68 69 63 68 20 63 61 73 65 20 74 68 65 0a 23  which case the.#
08e0: 20 66 74 73 32 20 63 6f 64 65 20 77 6f 75 6c 64   fts2 code would
08f0: 20 6e 65 76 65 72 20 62 65 20 63 61 6c 6c 65 64   never be called
0900: 20 69 6e 20 74 68 65 20 66 69 72 73 74 20 70 6c   in the first pl
0910: 61 63 65 2e 0a 64 6f 5f 74 65 73 74 20 66 74 73  ace..do_test fts
0920: 32 6a 2d 31 2e 33 20 7b 0a 20 20 65 78 65 63 73  2j-1.3 {.  execs
0930: 71 6c 20 7b 0a 20 20 20 20 41 54 54 41 43 48 20  ql {.    ATTACH 
0940: 44 41 54 41 42 41 53 45 20 27 74 65 73 74 32 2e  DATABASE 'test2.
0950: 64 62 27 20 41 53 20 74 77 6f 3b 0a 0a 20 20 20  db' AS two;..   
0960: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
0970: 54 41 42 4c 45 20 74 77 6f 2e 74 33 20 55 53 49  TABLE two.t3 USI
0980: 4e 47 20 66 74 73 32 28 63 6f 6e 74 65 6e 74 29  NG fts2(content)
0990: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
09a0: 4f 20 74 77 6f 2e 74 33 20 28 72 6f 77 69 64 2c  O two.t3 (rowid,
09b0: 20 63 6f 6e 74 65 6e 74 29 20 56 41 4c 55 45 53   content) VALUES
09c0: 28 32 2c 20 22 68 65 6c 6c 6f 20 74 68 65 72 65  (2, "hello there
09d0: 22 29 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  ");.    INSERT I
09e0: 4e 54 4f 20 74 77 6f 2e 74 33 20 28 72 6f 77 69  NTO two.t3 (rowi
09f0: 64 2c 20 63 6f 6e 74 65 6e 74 29 20 56 41 4c 55  d, content) VALU
0a00: 45 53 28 33 2c 20 22 63 72 75 65 6c 20 77 6f 72  ES(3, "cruel wor
0a10: 6c 64 22 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  ld");.    SELECT
0a20: 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 77 6f 2e   rowid FROM two.
0a30: 74 33 20 57 48 45 52 45 20 74 33 20 4d 41 54 43  t3 WHERE t3 MATC
0a40: 48 20 27 68 65 6c 6c 6f 27 3b 0a 0a 20 20 20 20  H 'hello';..    
0a50: 44 45 54 41 43 48 20 44 41 54 41 42 41 53 45 20  DETACH DATABASE 
0a60: 74 77 6f 3b 0a 20 20 7d 20 64 62 32 0a 7d 20 7b  two;.  } db2.} {
0a70: 32 7d 0a 63 61 74 63 68 20 7b 64 62 20 65 76 61  2}.catch {db eva
0a80: 6c 20 7b 44 45 54 41 43 48 20 44 41 54 41 42 41  l {DETACH DATABA
0a90: 53 45 20 74 77 6f 7d 7d 0a 0a 63 61 74 63 68 20  SE two}}..catch 
0aa0: 7b 64 62 32 20 63 6c 6f 73 65 7d 0a 66 6f 72 63  {db2 close}.forc
0ab0: 65 64 65 6c 65 74 65 20 74 65 73 74 32 2e 64 62  edelete test2.db
0ac0: 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a        ..finish_test.