/ Hex Artifact Content
Login

Artifact c15c4a9d04e210d0be67e54ce6a87b927168fbf9c1e3faec8c1a732c366fd491:


0000: 23 20 32 30 30 37 20 41 75 67 75 73 74 20 32 30  # 2007 August 20
0010: 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20  .#.# The author 
0020: 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69  disclaims copyri
0030: 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72  ght to this sour
0040: 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61  ce code.  In pla
0050: 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20  ce of.# a legal 
0060: 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20  notice, here is 
0070: 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20  a blessing:.#.# 
0080: 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f     May you do go
0090: 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e  od and not evil.
00a0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69  .#    May you fi
00b0: 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66  nd forgiveness f
00c0: 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20  or yourself and 
00d0: 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a  forgive others..
00e0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61  #    May you sha
00f0: 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72  re freely, never
0100: 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61   taking more tha
0110: 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a  n you give..#.#*
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73 20  ********.# This 
0170: 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  file implements 
0180: 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
0190: 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72   for SQLite libr
01a0: 61 72 79 2e 20 20 54 68 69 73 0a 23 20 73 63 72  ary.  This.# scr
01b0: 69 70 74 20 74 65 73 74 73 20 66 6f 72 20 74 68  ipt tests for th
01c0: 65 20 66 74 73 32 20 72 6f 77 69 64 2d 76 65 72  e fts2 rowid-ver
01d0: 73 75 73 2d 76 61 63 75 75 6d 20 70 72 6f 62 6c  sus-vacuum probl
01e0: 65 6d 20 28 74 69 63 6b 65 74 20 23 32 35 36 36  em (ticket #2566
01f0: 29 2e 0a 23 0a 23 20 24 49 64 3a 20 66 74 73 33  )..#.# $Id: fts3
0200: 62 2e 74 65 73 74 2c 76 20 31 2e 33 20 32 30 30  b.test,v 1.3 200
0210: 37 2f 30 39 2f 31 33 20 31 38 3a 31 34 3a 34 39  7/09/13 18:14:49
0220: 20 73 68 65 73 73 20 45 78 70 20 24 0a 23 0a 0a   shess Exp $.#..
0230: 73 65 74 20 74 65 73 74 64 69 72 20 5b 66 69 6c  set testdir [fil
0240: 65 20 64 69 72 6e 61 6d 65 20 24 61 72 67 76 30  e dirname $argv0
0250: 5d 0a 73 6f 75 72 63 65 20 24 74 65 73 74 64 69  ].source $testdi
0260: 72 2f 74 65 73 74 65 72 2e 74 63 6c 0a 0a 23 20  r/tester.tcl..# 
0270: 49 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  If SQLITE_ENABLE
0280: 5f 46 54 53 33 20 69 73 20 6e 6f 74 20 64 65 66  _FTS3 is not def
0290: 69 6e 65 64 2c 20 6f 6d 69 74 20 74 68 69 73 20  ined, omit this 
02a0: 66 69 6c 65 2e 0a 69 66 63 61 70 61 62 6c 65 20  file..ifcapable 
02b0: 21 66 74 73 33 20 7b 0a 20 20 66 69 6e 69 73 68  !fts3 {.  finish
02c0: 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d  _test.  return.}
02d0: 0a 0a 64 62 20 65 76 61 6c 20 7b 0a 20 20 43 52  ..db eval {.  CR
02e0: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
02f0: 4c 45 20 74 31 20 55 53 49 4e 47 20 66 74 73 33  LE t1 USING fts3
0300: 28 63 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  (c);.  INSERT IN
0310: 54 4f 20 74 31 20 28 63 29 20 56 41 4c 55 45 53  TO t1 (c) VALUES
0320: 28 27 74 68 69 73 20 69 73 20 61 20 74 65 73 74  ('this is a test
0330: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
0340: 4f 20 74 31 20 28 63 29 20 56 41 4c 55 45 53 28  O t1 (c) VALUES(
0350: 27 74 68 61 74 20 77 61 73 20 61 20 74 65 73 74  'that was a test
0360: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
0370: 4f 20 74 31 20 28 63 29 20 56 41 4c 55 45 53 28  O t1 (c) VALUES(
0380: 27 74 68 69 73 20 69 73 20 66 75 6e 27 29 3b 0a  'this is fun');.
0390: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
03a0: 20 57 48 45 52 45 20 63 20 3d 20 27 74 68 61 74   WHERE c = 'that
03b0: 20 77 61 73 20 61 20 74 65 73 74 27 3b 0a 7d 0a   was a test';.}.
03c0: 0a 23 20 42 61 73 65 6c 69 6e 65 20 74 65 73 74  .# Baseline test
03d0: 2e 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 62 2d  ..do_test fts3b-
03e0: 31 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.1 {.  execsql 
03f0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77  {.    SELECT row
0400: 69 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  id FROM t1 WHERE
0410: 20 63 20 4d 41 54 43 48 20 27 74 68 69 73 27 3b   c MATCH 'this';
0420: 0a 20 20 7d 0a 7d 20 7b 31 20 33 7d 0a 0a 64 62  .  }.} {1 3}..db
0430: 20 65 76 61 6c 20 7b 56 41 43 55 55 4d 7d 0a 0a   eval {VACUUM}..
0440: 23 20 54 68 65 20 56 41 43 55 55 4d 20 72 65 6e  # The VACUUM ren
0450: 75 6d 62 65 72 65 64 20 74 68 65 20 74 31 5f 63  umbered the t1_c
0460: 6f 6e 74 65 6e 74 20 74 61 62 6c 65 20 69 6e 20  ontent table in 
0470: 66 74 73 32 2c 20 77 68 69 63 68 20 62 72 65 61  fts2, which brea
0480: 6b 73 0a 23 20 74 68 69 73 2e 0a 64 6f 5f 74 65  ks.# this..do_te
0490: 73 74 20 66 74 73 33 62 2d 31 2e 32 20 7b 0a 20  st fts3b-1.2 {. 
04a0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
04b0: 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d  ELECT rowid FROM
04c0: 20 74 31 20 57 48 45 52 45 20 63 20 4d 41 54 43   t1 WHERE c MATC
04d0: 48 20 27 74 68 69 73 27 3b 0a 20 20 7d 0a 7d 20  H 'this';.  }.} 
04e0: 7b 31 20 33 7d 0a 0a 23 20 54 68 65 20 74 32 20  {1 3}..# The t2 
04f0: 74 61 62 6c 65 20 69 73 20 75 6e 66 6f 72 74 75  table is unfortu
0500: 6e 61 74 65 6c 79 20 70 72 65 74 74 79 20 63 6f  nately pretty co
0510: 6e 74 72 69 76 65 64 2e 20 20 57 65 20 6e 65 65  ntrived.  We nee
0520: 64 20 64 6f 63 75 6d 65 6e 74 73 0a 23 20 74 68  d documents.# th
0530: 61 74 20 61 72 65 20 62 69 67 67 65 72 20 74 68  at are bigger th
0540: 61 6e 20 52 4f 4f 54 5f 4d 41 58 20 28 31 30 32  an ROOT_MAX (102
0550: 34 29 20 74 6f 20 66 6f 72 63 65 20 73 65 67 6d  4) to force segm
0560: 65 6e 74 73 20 6f 75 74 20 6f 66 20 74 68 65 0a  ents out of the.
0570: 23 20 73 65 67 64 69 72 20 61 6e 64 20 69 6e 74  # segdir and int
0580: 6f 20 25 5f 73 65 67 6d 65 6e 74 73 2e 20 20 57  o %_segments.  W
0590: 65 20 61 6c 73 6f 20 6e 65 65 64 20 74 6f 20 66  e also need to f
05a0: 6f 72 63 65 20 73 65 67 6d 65 6e 74 20 6d 65 72  orce segment mer
05b0: 67 69 6e 67 0a 23 20 74 6f 20 67 65 6e 65 72 61  ging.# to genera
05c0: 74 65 20 61 20 68 6f 6c 65 20 69 6e 20 74 68 65  te a hole in the
05d0: 20 25 5f 73 65 67 6d 65 6e 74 73 20 74 61 62 6c   %_segments tabl
05e0: 65 2c 20 77 68 69 63 68 20 6e 65 65 64 73 20 6d  e, which needs m
05f0: 6f 72 65 20 74 68 61 6e 20 31 36 0a 23 20 64 6f  ore than 16.# do
0600: 63 73 2e 20 20 42 65 79 6f 6e 64 20 74 68 61 74  cs.  Beyond that
0610: 2c 20 74 6f 20 74 65 73 74 20 63 6f 72 72 65 63  , to test correc
0620: 74 20 6f 70 65 72 61 74 69 6f 6e 20 6f 66 20 42  t operation of B
0630: 4c 4f 43 4b 5f 53 45 4c 45 43 54 5f 53 54 4d 54  LOCK_SELECT_STMT
0640: 2c 0a 23 20 77 65 20 6e 65 65 64 20 74 6f 20 6d  ,.# we need to m
0650: 65 72 67 65 20 61 20 6d 75 6c 74 2d 6c 65 76 65  erge a mult-leve
0660: 6c 20 74 72 65 65 2c 20 77 68 69 63 68 20 69 73  l tree, which is
0670: 20 77 68 65 72 65 20 74 68 65 20 31 30 2c 30 30   where the 10,00
0680: 30 20 63 6f 6d 65 73 0a 23 20 66 72 6f 6d 2e 20  0 comes.# from. 
0690: 20 57 68 69 63 68 20 69 73 20 73 6c 6f 77 2c 20   Which is slow, 
06a0: 74 68 75 73 20 74 68 65 20 73 65 74 20 6f 66 20  thus the set of 
06b0: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 77 69  transactions, wi
06c0: 74 68 20 74 68 65 20 35 30 30 0a 23 20 62 65 69  th the 500.# bei
06d0: 6e 67 20 61 20 6e 75 6d 62 65 72 20 73 75 63 68  ng a number such
06e0: 20 74 68 61 74 20 31 30 2c 30 30 30 2f 35 30 30   that 10,000/500
06f0: 20 3e 20 31 36 2e 0a 73 65 74 20 74 65 78 74 20   > 16..set text 
0700: 7b 0a 20 20 4c 6f 72 65 6d 20 69 70 73 75 6d 20  {.  Lorem ipsum 
0710: 64 6f 6c 6f 72 20 73 69 74 20 61 6d 65 74 2c 20  dolor sit amet, 
0720: 63 6f 6e 73 65 63 74 65 74 75 65 72 20 61 64 69  consectetuer adi
0730: 70 69 73 63 69 6e 67 20 65 6c 69 74 2e 20 4d 61  piscing elit. Ma
0740: 65 63 65 6e 61 73 0a 20 20 69 61 63 75 6c 69 73  ecenas.  iaculis
0750: 20 6d 6f 6c 6c 69 73 20 69 70 73 75 6d 2e 20 50   mollis ipsum. P
0760: 72 61 65 73 65 6e 74 20 72 68 6f 6e 63 75 73 20  raesent rhoncus 
0770: 70 6c 61 63 65 72 61 74 20 6a 75 73 74 6f 2e 20  placerat justo. 
0780: 44 75 69 73 20 6e 6f 6e 20 71 75 61 6d 0a 20 20  Duis non quam.  
0790: 73 65 64 20 74 75 72 70 69 73 20 70 6f 73 75 65  sed turpis posue
07a0: 72 65 20 70 6c 61 63 65 72 61 74 2e 20 43 75 72  re placerat. Cur
07b0: 61 62 69 74 75 72 20 65 74 20 6c 6f 72 65 6d 20  abitur et lorem 
07c0: 69 6e 20 6c 6f 72 65 6d 20 70 6f 72 74 74 69 74  in lorem porttit
07d0: 6f 72 0a 20 20 61 6c 69 71 75 65 74 2e 20 50 65  or.  aliquet. Pe
07e0: 6c 6c 65 6e 74 65 73 71 75 65 20 62 69 62 65 6e  llentesque biben
07f0: 64 75 6d 20 74 69 6e 63 69 64 75 6e 74 20 64 69  dum tincidunt di
0800: 61 6d 2e 20 56 65 73 74 69 62 75 6c 75 6d 20 62  am. Vestibulum b
0810: 6c 61 6e 64 69 74 0a 20 20 61 6e 74 65 20 6e 65  landit.  ante ne
0820: 63 20 65 6c 69 74 2e 20 49 6e 20 73 61 70 69 65  c elit. In sapie
0830: 6e 20 64 69 61 6d 2c 20 66 61 63 69 6c 69 73 69  n diam, facilisi
0840: 73 20 65 67 65 74 2c 20 64 69 63 74 75 6d 20 73  s eget, dictum s
0850: 65 64 2c 20 76 69 76 65 72 72 61 0a 20 20 61 74  ed, viverra.  at
0860: 2c 20 66 65 6c 69 73 2e 20 56 65 73 74 69 62 75  , felis. Vestibu
0870: 6c 75 6d 20 6d 61 67 6e 61 2e 20 53 65 64 20 6d  lum magna. Sed m
0880: 61 67 6e 61 20 64 6f 6c 6f 72 2c 20 76 65 73 74  agna dolor, vest
0890: 69 62 75 6c 75 6d 20 72 68 6f 6e 63 75 73 2c 0a  ibulum rhoncus,.
08a0: 20 20 6f 72 6e 61 72 65 20 76 65 6c 2c 20 76 75    ornare vel, vu
08b0: 6c 70 75 74 61 74 65 20 73 69 74 20 61 6d 65 74  lputate sit amet
08c0: 2c 20 66 65 6c 69 73 2e 20 49 6e 74 65 67 65 72  , felis. Integer
08d0: 20 6d 61 6c 65 73 75 61 64 61 2c 20 74 65 6c 6c   malesuada, tell
08e0: 75 73 20 61 74 0a 20 20 6c 75 63 74 75 73 20 67  us at.  luctus g
08f0: 72 61 76 69 64 61 2c 20 64 69 61 6d 20 6e 75 6e  ravida, diam nun
0900: 63 20 70 6f 72 74 61 20 6e 69 62 68 2c 20 6e 65  c porta nibh, ne
0910: 63 20 69 6d 70 65 72 64 69 65 74 20 6d 61 73 73  c imperdiet mass
0920: 61 20 6d 65 74 75 73 20 65 75 0a 20 20 6c 65 63  a metus eu.  lec
0930: 74 75 73 2e 20 41 6c 69 71 75 61 6d 20 6e 69 73  tus. Aliquam nis
0940: 69 2e 20 4e 75 6e 63 20 66 72 69 6e 67 69 6c 6c  i. Nunc fringill
0950: 61 20 6e 75 6c 6c 61 20 61 74 20 6c 65 63 74 75  a nulla at lectu
0960: 73 2e 20 53 75 73 70 65 6e 64 69 73 73 65 0a 20  s. Suspendisse. 
0970: 20 70 6f 74 65 6e 74 69 2e 20 43 75 6d 20 73 6f   potenti. Cum so
0980: 63 69 69 73 20 6e 61 74 6f 71 75 65 20 70 65 6e  ciis natoque pen
0990: 61 74 69 62 75 73 20 65 74 20 6d 61 67 6e 69 73  atibus et magnis
09a0: 20 64 69 73 20 70 61 72 74 75 72 69 65 6e 74 0a   dis parturient.
09b0: 20 20 6d 6f 6e 74 65 73 2c 20 6e 61 73 63 65 74    montes, nascet
09c0: 75 72 20 72 69 64 69 63 75 6c 75 73 20 6d 75 73  ur ridiculus mus
09d0: 2e 20 50 65 6c 6c 65 6e 74 65 73 71 75 65 20 6f  . Pellentesque o
09e0: 64 69 6f 20 6e 75 6c 6c 61 2c 20 66 65 75 67 69  dio nulla, feugi
09f0: 61 74 20 65 75 2c 0a 20 20 73 75 73 63 69 70 69  at eu,.  suscipi
0a00: 74 20 6e 65 63 2c 20 63 6f 6e 73 65 71 75 61 74  t nec, consequat
0a10: 20 71 75 69 73 2c 20 72 69 73 75 73 2e 0a 7d 0a   quis, risus..}.
0a20: 61 70 70 65 6e 64 20 74 65 78 74 20 24 74 65 78  append text $tex
0a30: 74 0a 0a 64 62 20 65 76 61 6c 20 7b 43 52 45 41  t..db eval {CREA
0a40: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
0a50: 20 74 32 20 55 53 49 4e 47 20 66 74 73 33 28 63   t2 USING fts3(c
0a60: 29 7d 0a 73 65 74 20 72 65 73 20 7b 7d 0a 64 62  )}.set res {}.db
0a70: 20 65 76 61 6c 20 7b 42 45 47 49 4e 7d 0a 66 6f   eval {BEGIN}.fo
0a80: 72 20 7b 73 65 74 20 69 69 20 30 7d 20 7b 24 69  r {set ii 0} {$i
0a90: 69 3c 31 30 30 30 30 7d 20 7b 69 6e 63 72 20 69  i<10000} {incr i
0aa0: 69 7d 20 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b  i} {.  db eval {
0ab0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 28  INSERT INTO t2 (
0ac0: 63 29 20 56 41 4c 55 45 53 20 28 24 74 65 78 74  c) VALUES ($text
0ad0: 29 7d 0a 20 20 6c 61 70 70 65 6e 64 20 72 65 73  )}.  lappend res
0ae0: 20 5b 65 78 70 72 20 7b 24 69 69 2b 31 7d 5d 0a   [expr {$ii+1}].
0af0: 20 20 69 66 20 7b 28 24 69 69 25 35 30 30 29 3d    if {($ii%500)=
0b00: 3d 30 7d 20 7b 0a 20 20 20 20 64 62 20 65 76 61  =0} {.    db eva
0b10: 6c 20 7b 0a 20 20 20 20 20 20 43 4f 4d 4d 49 54  l {.      COMMIT
0b20: 3b 0a 20 20 20 20 20 20 42 45 47 49 4e 3b 0a 20  ;.      BEGIN;. 
0b30: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 64 62 20 65 76     }.  }.}.db ev
0b40: 61 6c 20 7b 43 4f 4d 4d 49 54 7d 0a 0a 64 6f 5f  al {COMMIT}..do_
0b50: 74 65 73 74 20 66 74 73 33 62 2d 32 2e 31 20 7b  test fts3b-2.1 {
0b60: 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20  .  execsql {.   
0b70: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52   SELECT rowid FR
0b80: 4f 4d 20 74 32 20 57 48 45 52 45 20 63 20 4d 41  OM t2 WHERE c MA
0b90: 54 43 48 20 27 6c 6f 72 65 6d 27 3b 0a 20 20 7d  TCH 'lorem';.  }
0ba0: 0a 7d 20 24 72 65 73 0a 0a 64 62 20 65 76 61 6c  .} $res..db eval
0bb0: 20 7b 56 41 43 55 55 4d 7d 0a 0a 23 20 54 68 65   {VACUUM}..# The
0bc0: 20 56 41 43 55 55 4d 20 72 65 6e 75 6d 62 65 72   VACUUM renumber
0bd0: 65 64 20 74 68 65 20 74 32 5f 73 65 67 6d 65 6e  ed the t2_segmen
0be0: 74 20 74 61 62 6c 65 20 69 6e 20 66 74 73 32 2c  t table in fts2,
0bf0: 20 77 68 69 63 68 20 77 6f 75 6c 64 0a 23 20 62   which would.# b
0c00: 72 65 61 6b 20 74 68 65 20 66 6f 6c 6c 6f 77 69  reak the followi
0c10: 6e 67 2e 0a 64 6f 5f 74 65 73 74 20 66 74 73 33  ng..do_test fts3
0c20: 62 2d 32 2e 32 20 7b 0a 20 20 65 78 65 63 73 71  b-2.2 {.  execsq
0c30: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72  l {.    SELECT r
0c40: 6f 77 69 64 20 46 52 4f 4d 20 74 32 20 57 48 45  owid FROM t2 WHE
0c50: 52 45 20 63 20 4d 41 54 43 48 20 27 6c 6f 72 65  RE c MATCH 'lore
0c60: 6d 27 3b 0a 20 20 7d 0a 7d 20 24 72 65 73 0a 0a  m';.  }.} $res..
0c70: 23 20 53 69 6e 63 65 20 66 74 73 33 20 69 73 20  # Since fts3 is 
0c80: 61 6c 72 65 61 64 79 20 61 6e 20 41 50 49 20 62  already an API b
0c90: 72 65 61 6b 2c 20 49 27 76 65 20 6d 61 72 6b 65  reak, I've marke
0ca0: 64 20 74 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65  d the table-name
0cb0: 64 0a 23 20 63 6f 6c 75 6d 6e 20 48 49 44 44 45  d.# column HIDDE
0cc0: 4e 2e 0a 0a 64 62 20 65 76 61 6c 20 7b 0a 20 20  N...db eval {.  
0cd0: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
0ce0: 41 42 4c 45 20 74 33 20 55 53 49 4e 47 20 66 74  ABLE t3 USING ft
0cf0: 73 33 28 63 29 3b 0a 20 20 49 4e 53 45 52 54 20  s3(c);.  INSERT 
0d00: 49 4e 54 4f 20 74 33 20 28 63 29 20 56 41 4c 55  INTO t3 (c) VALU
0d10: 45 53 28 27 74 68 69 73 20 69 73 20 61 20 74 65  ES('this is a te
0d20: 73 74 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  st');.  INSERT I
0d30: 4e 54 4f 20 74 33 20 28 63 29 20 56 41 4c 55 45  NTO t3 (c) VALUE
0d40: 53 28 27 74 68 61 74 20 77 61 73 20 61 20 74 65  S('that was a te
0d50: 73 74 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  st');.  INSERT I
0d60: 4e 54 4f 20 74 33 20 28 63 29 20 56 41 4c 55 45  NTO t3 (c) VALUE
0d70: 53 28 27 74 68 69 73 20 69 73 20 66 75 6e 27 29  S('this is fun')
0d80: 3b 0a 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20  ;.  DELETE FROM 
0d90: 74 33 20 57 48 45 52 45 20 63 20 3d 20 27 74 68  t3 WHERE c = 'th
0da0: 61 74 20 77 61 73 20 61 20 74 65 73 74 27 3b 0a  at was a test';.
0db0: 7d 0a 0a 23 20 54 65 73 74 20 74 68 61 74 20 74  }..# Test that t
0dc0: 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65 64 20 63  he table-named c
0dd0: 6f 6c 75 6d 6e 20 73 74 69 6c 6c 20 77 6f 72 6b  olumn still work
0de0: 73 2e 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 62  s..do_test fts3b
0df0: 2d 33 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c  -3.1 {.  execsql
0e00: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 73 6e   {.    SELECT sn
0e10: 69 70 70 65 74 28 74 33 29 20 46 52 4f 4d 20 74  ippet(t3) FROM t
0e20: 33 20 57 48 45 52 45 20 74 33 20 4d 41 54 43 48  3 WHERE t3 MATCH
0e30: 20 27 74 65 73 74 27 3b 0a 20 20 7d 0a 7d 20 7b   'test';.  }.} {
0e40: 7b 74 68 69 73 20 69 73 20 61 20 3c 62 3e 74 65  {this is a <b>te
0e50: 73 74 3c 2f 62 3e 7d 7d 0a 0a 23 20 54 65 73 74  st</b>}}..# Test
0e60: 20 74 68 61 74 20 74 68 65 20 63 6f 6c 75 6d 6e   that the column
0e70: 20 64 6f 65 73 6e 27 74 20 61 70 70 65 61 72 20   doesn't appear 
0e80: 77 68 65 6e 20 73 65 6c 65 63 74 69 6e 67 20 61  when selecting a
0e90: 6c 6c 20 63 6f 6c 75 6d 6e 73 2e 0a 64 6f 5f 74  ll columns..do_t
0ea0: 65 73 74 20 66 74 73 33 62 2d 33 2e 32 20 7b 0a  est fts3b-3.2 {.
0eb0: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0ec0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 33  SELECT * FROM t3
0ed0: 20 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20 31   WHERE rowid = 1
0ee0: 3b 0a 20 20 7d 0a 7d 20 7b 7b 74 68 69 73 20 69  ;.  }.} {{this i
0ef0: 73 20 61 20 74 65 73 74 7d 7d 0a 0a 23 20 54 65  s a test}}..# Te
0f00: 73 74 20 74 68 61 74 20 74 68 65 20 63 6f 6c 75  st that the colu
0f10: 6d 6e 20 64 6f 65 73 6e 27 74 20 63 6f 6e 66 6c  mn doesn't confl
0f20: 69 63 74 20 77 69 74 68 20 69 6e 73 65 72 74 73  ict with inserts
0f30: 20 74 68 61 74 20 64 6f 6e 27 74 20 6e 61 6d 65   that don't name
0f40: 0a 23 20 63 6f 6c 75 6d 6e 73 2e 0a 64 6f 5f 74  .# columns..do_t
0f50: 65 73 74 20 66 74 73 33 62 2d 33 2e 33 20 7b 0a  est fts3b-3.3 {.
0f60: 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20    execsql {.    
0f70: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56  INSERT INTO t3 V
0f80: 41 4c 55 45 53 20 28 27 61 6e 6f 74 68 65 72 20  ALUES ('another 
0f90: 74 65 73 74 27 29 3b 0a 20 20 7d 0a 7d 20 7b 7d  test');.  }.} {}
0fa0: 0a 0a 23 20 66 74 73 33 20 61 64 64 73 20 61 20  ..# fts3 adds a 
0fb0: 6e 65 77 20 69 6d 70 6c 69 63 69 74 20 63 6f 6c  new implicit col
0fc0: 75 6d 6e 2c 20 64 6f 63 69 64 2c 20 77 68 69 63  umn, docid, whic
0fd0: 68 20 61 63 74 73 20 61 73 20 61 6e 20 61 6c 69  h acts as an ali
0fe0: 61 73 20 66 6f 72 0a 23 20 72 6f 77 69 64 2e 0a  as for.# rowid..
0ff0: 0a 64 62 20 65 76 61 6c 20 7b 0a 20 20 43 52 45  .db eval {.  CRE
1000: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
1010: 45 20 74 34 20 55 53 49 4e 47 20 66 74 73 33 28  E t4 USING fts3(
1020: 63 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  c);.  INSERT INT
1030: 4f 20 74 34 20 28 63 29 20 56 41 4c 55 45 53 28  O t4 (c) VALUES(
1040: 27 74 68 69 73 20 69 73 20 61 20 74 65 73 74 27  'this is a test'
1050: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
1060: 20 74 34 20 28 63 29 20 56 41 4c 55 45 53 28 27   t4 (c) VALUES('
1070: 74 68 61 74 20 77 61 73 20 61 20 74 65 73 74 27  that was a test'
1080: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
1090: 20 74 34 20 28 63 29 20 56 41 4c 55 45 53 28 27   t4 (c) VALUES('
10a0: 74 68 69 73 20 69 73 20 66 75 6e 27 29 3b 0a 20  this is fun');. 
10b0: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 34 20   DELETE FROM t4 
10c0: 57 48 45 52 45 20 63 20 3d 20 27 74 68 61 74 20  WHERE c = 'that 
10d0: 77 61 73 20 61 20 74 65 73 74 27 3b 0a 7d 0a 0a  was a test';.}..
10e0: 23 20 54 65 73 74 20 74 68 61 74 20 64 6f 63 69  # Test that doci
10f0: 64 20 69 73 20 70 72 65 73 65 6e 74 20 61 6e 64  d is present and
1100: 20 69 64 65 6e 74 69 63 61 6c 20 74 6f 20 72 6f   identical to ro
1110: 77 69 64 2e 0a 64 6f 5f 74 65 73 74 20 66 74 73  wid..do_test fts
1120: 33 62 2d 34 2e 31 20 7b 0a 20 20 65 78 65 63 73  3b-4.1 {.  execs
1130: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
1140: 72 6f 77 69 64 20 46 52 4f 4d 20 74 34 20 57 48  rowid FROM t4 WH
1150: 45 52 45 20 72 6f 77 69 64 20 3c 3e 20 64 6f 63  ERE rowid <> doc
1160: 69 64 3b 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 23 20  id;.  }.} {}..# 
1170: 54 65 73 74 20 74 68 61 74 20 64 6f 63 69 64 20  Test that docid 
1180: 69 73 20 68 69 64 64 65 6e 2e 0a 64 6f 5f 74 65  is hidden..do_te
1190: 73 74 20 66 74 73 33 62 2d 34 2e 32 20 7b 0a 20  st fts3b-4.2 {. 
11a0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 53   execsql {.    S
11b0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 20  ELECT * FROM t4 
11c0: 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20 31 3b  WHERE rowid = 1;
11d0: 0a 20 20 7d 0a 7d 20 7b 7b 74 68 69 73 20 69 73  .  }.} {{this is
11e0: 20 61 20 74 65 73 74 7d 7d 0a 0a 23 20 54 65 73   a test}}..# Tes
11f0: 74 20 74 68 61 74 20 64 6f 63 69 64 20 63 61 6e  t that docid can
1200: 20 62 65 20 73 65 6c 65 63 74 65 64 2e 0a 64 6f   be selected..do
1210: 5f 74 65 73 74 20 66 74 73 33 62 2d 34 2e 33 20  _test fts3b-4.3 
1220: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20  {.  execsql {.  
1230: 20 20 53 45 4c 45 43 54 20 64 6f 63 69 64 2c 20    SELECT docid, 
1240: 2a 20 46 52 4f 4d 20 74 34 20 57 48 45 52 45 20  * FROM t4 WHERE 
1250: 72 6f 77 69 64 20 3d 20 31 3b 0a 20 20 7d 0a 7d  rowid = 1;.  }.}
1260: 20 7b 31 20 7b 74 68 69 73 20 69 73 20 61 20 74   {1 {this is a t
1270: 65 73 74 7d 7d 0a 0a 23 20 54 65 73 74 20 74 68  est}}..# Test th
1280: 61 74 20 64 6f 63 69 64 20 63 61 6e 20 62 65 20  at docid can be 
1290: 75 73 65 64 20 69 6e 20 57 48 45 52 45 2e 0a 64  used in WHERE..d
12a0: 6f 5f 74 65 73 74 20 66 74 73 33 62 2d 34 2e 34  o_test fts3b-4.4
12b0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
12c0: 20 20 20 53 45 4c 45 43 54 20 64 6f 63 69 64 2c     SELECT docid,
12d0: 20 2a 20 46 52 4f 4d 20 74 34 20 57 48 45 52 45   * FROM t4 WHERE
12e0: 20 64 6f 63 69 64 20 3d 20 31 3b 0a 20 20 7d 0a   docid = 1;.  }.
12f0: 7d 20 7b 31 20 7b 74 68 69 73 20 69 73 20 61 20  } {1 {this is a 
1300: 74 65 73 74 7d 7d 0a 0a 23 20 54 65 73 74 20 74  test}}..# Test t
1310: 68 61 74 20 74 68 65 20 63 6f 6c 75 6d 6e 20 64  hat the column d
1320: 6f 65 73 6e 27 74 20 63 6f 6e 66 6c 69 63 74 20  oesn't conflict 
1330: 77 69 74 68 20 69 6e 73 65 72 74 73 20 74 68 61  with inserts tha
1340: 74 20 64 6f 6e 27 74 20 6e 61 6d 65 0a 23 20 63  t don't name.# c
1350: 6f 6c 75 6d 6e 73 2e 20 20 5b 59 65 73 2c 20 74  olumns.  [Yes, t
1360: 68 69 73 20 69 73 20 74 68 65 20 73 61 6d 65 20  his is the same 
1370: 61 73 20 66 74 73 33 62 2d 33 2e 33 2c 20 68 65  as fts3b-3.3, he
1380: 72 65 20 6a 75 73 74 20 69 6e 20 63 61 73 65 20  re just in case 
1390: 74 68 65 0a 23 20 67 6f 61 6c 73 20 6f 66 20 74  the.# goals of t
13a0: 68 61 74 20 74 65 73 74 20 63 68 61 6e 67 65 2e  hat test change.
13b0: 5d 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 62 2d  ].do_test fts3b-
13c0: 34 2e 35 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  4.5 {.  execsql 
13d0: 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  {.    INSERT INT
13e0: 4f 20 74 34 20 56 41 4c 55 45 53 20 28 27 61 6e  O t4 VALUES ('an
13f0: 6f 74 68 65 72 20 74 65 73 74 27 29 3b 0a 20 20  other test');.  
1400: 7d 0a 7d 20 7b 7d 0a 0a 23 20 54 65 73 74 20 74  }.} {}..# Test t
1410: 68 61 74 20 74 68 65 20 64 6f 63 69 64 20 63 61  hat the docid ca
1420: 6e 20 62 65 20 66 6f 72 63 65 64 20 6f 6e 20 69  n be forced on i
1430: 6e 73 65 72 74 2e 0a 64 6f 5f 74 65 73 74 20 66  nsert..do_test f
1440: 74 73 33 62 2d 34 2e 36 20 7b 0a 20 20 65 78 65  ts3b-4.6 {.  exe
1450: 63 73 71 6c 20 7b 0a 20 20 20 20 49 4e 53 45 52  csql {.    INSER
1460: 54 20 49 4e 54 4f 20 74 34 20 28 64 6f 63 69 64  T INTO t4 (docid
1470: 2c 20 63 29 20 56 41 4c 55 45 53 20 28 31 30 2c  , c) VALUES (10,
1480: 20 27 79 65 74 20 61 6e 6f 74 68 65 72 20 74 65   'yet another te
1490: 73 74 27 29 3b 0a 20 20 20 20 53 45 4c 45 43 54  st');.    SELECT
14a0: 20 2a 20 46 52 4f 4d 20 74 34 20 57 48 45 52 45   * FROM t4 WHERE
14b0: 20 64 6f 63 69 64 20 3d 20 31 30 3b 0a 20 20 7d   docid = 10;.  }
14c0: 0a 7d 20 7b 7b 79 65 74 20 61 6e 6f 74 68 65 72  .} {{yet another
14d0: 20 74 65 73 74 7d 7d 0a 0a 23 20 54 65 73 74 20   test}}..# Test 
14e0: 74 68 61 74 20 72 6f 77 69 64 20 63 61 6e 20 61  that rowid can a
14f0: 6c 73 6f 20 62 65 20 66 6f 72 63 65 64 2e 0a 64  lso be forced..d
1500: 6f 5f 74 65 73 74 20 66 74 73 33 62 2d 34 2e 37  o_test fts3b-4.7
1510: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 0a 20   {.  execsql {. 
1520: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74     INSERT INTO t
1530: 34 20 28 64 6f 63 69 64 2c 20 63 29 20 56 41 4c  4 (docid, c) VAL
1540: 55 45 53 20 28 31 32 2c 20 27 73 74 69 6c 6c 20  UES (12, 'still 
1550: 74 65 73 74 69 6e 67 27 29 3b 0a 20 20 20 20 53  testing');.    S
1560: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 20  ELECT * FROM t4 
1570: 57 48 45 52 45 20 64 6f 63 69 64 20 3d 20 31 32  WHERE docid = 12
1580: 3b 0a 20 20 7d 0a 7d 20 7b 7b 73 74 69 6c 6c 20  ;.  }.} {{still 
1590: 74 65 73 74 69 6e 67 7d 7d 0a 0a 23 20 49 66 20  testing}}..# If 
15a0: 61 6e 20 69 6e 73 65 72 74 20 74 72 69 65 73 20  an insert tries 
15b0: 74 6f 20 73 65 74 20 62 6f 74 68 20 64 6f 63 69  to set both doci
15c0: 64 20 61 6e 64 20 72 6f 77 69 64 2c 20 72 65 71  d and rowid, req
15d0: 75 69 72 65 20 61 6e 20 65 72 72 6f 72 2e 0a 64  uire an error..d
15e0: 6f 5f 74 65 73 74 20 66 74 73 33 62 2d 34 2e 38  o_test fts3b-4.8
15f0: 20 7b 0a 20 20 63 61 74 63 68 73 71 6c 20 7b 0a   {.  catchsql {.
1600: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1610: 74 34 20 28 72 6f 77 69 64 2c 20 64 6f 63 69 64  t4 (rowid, docid
1620: 2c 20 63 29 20 56 41 4c 55 45 53 20 28 31 34 2c  , c) VALUES (14,
1630: 20 31 35 2c 20 27 62 61 64 20 74 65 73 74 27 29   15, 'bad test')
1640: 3b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  ;.    SELECT * F
1650: 52 4f 4d 20 74 34 20 57 48 45 52 45 20 64 6f 63  ROM t4 WHERE doc
1660: 69 64 20 3d 20 31 34 3b 0a 20 20 7d 0a 7d 20 7b  id = 14;.  }.} {
1670: 31 20 7b 53 51 4c 20 6c 6f 67 69 63 20 65 72 72  1 {SQL logic err
1680: 6f 72 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 74  or}}..do_test ft
1690: 73 33 62 2d 34 2e 39 20 7b 0a 20 20 65 78 65 63  s3b-4.9 {.  exec
16a0: 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 64 6f 63  sql { SELECT doc
16b0: 69 64 20 46 52 4f 4d 20 74 34 20 57 48 45 52 45  id FROM t4 WHERE
16c0: 20 74 34 20 4d 41 54 43 48 20 27 74 65 73 74 69   t4 MATCH 'testi
16d0: 6e 67 27 20 7d 0a 7d 20 7b 31 32 7d 0a 64 6f 5f  ng' }.} {12}.do_
16e0: 74 65 73 74 20 66 74 73 33 62 2d 34 2e 31 30 20  test fts3b-4.10 
16f0: 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20  {.  execsql { . 
1700: 20 20 20 55 50 44 41 54 45 20 74 34 20 53 45 54     UPDATE t4 SET
1710: 20 64 6f 63 69 64 20 3d 20 31 34 20 57 48 45 52   docid = 14 WHER
1720: 45 20 64 6f 63 69 64 20 3d 20 31 32 3b 0a 20 20  E docid = 12;.  
1730: 20 20 53 45 4c 45 43 54 20 64 6f 63 69 64 20 46    SELECT docid F
1740: 52 4f 4d 20 74 34 20 57 48 45 52 45 20 74 34 20  ROM t4 WHERE t4 
1750: 4d 41 54 43 48 20 27 74 65 73 74 69 6e 67 27 3b  MATCH 'testing';
1760: 0a 20 20 7d 0a 7d 20 7b 31 34 7d 0a 64 6f 5f 74  .  }.} {14}.do_t
1770: 65 73 74 20 66 74 73 33 62 2d 34 2e 31 31 20 7b  est fts3b-4.11 {
1780: 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 53 45 4c  .  execsql { SEL
1790: 45 43 54 20 2a 20 46 52 4f 4d 20 74 34 20 57 48  ECT * FROM t4 WH
17a0: 45 52 45 20 72 6f 77 69 64 20 3d 20 31 34 3b 20  ERE rowid = 14; 
17b0: 7d 0a 7d 20 7b 7b 73 74 69 6c 6c 20 74 65 73 74  }.} {{still test
17c0: 69 6e 67 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74  ing}}.do_test ft
17d0: 73 33 62 2d 34 2e 31 32 20 7b 0a 20 20 65 78 65  s3b-4.12 {.  exe
17e0: 63 73 71 6c 20 7b 20 53 45 4c 45 43 54 20 2a 20  csql { SELECT * 
17f0: 46 52 4f 4d 20 74 34 20 57 48 45 52 45 20 72 6f  FROM t4 WHERE ro
1800: 77 69 64 20 3d 20 31 32 3b 20 7d 0a 7d 20 7b 7d  wid = 12; }.} {}
1810: 0a 64 6f 5f 74 65 73 74 20 66 74 73 33 62 2d 34  .do_test fts3b-4
1820: 2e 31 33 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  .13 {.  execsql 
1830: 7b 20 53 45 4c 45 43 54 20 64 6f 63 69 64 20 46  { SELECT docid F
1840: 52 4f 4d 20 74 34 20 57 48 45 52 45 20 74 34 20  ROM t4 WHERE t4 
1850: 4d 41 54 43 48 20 27 73 74 69 6c 6c 27 3b 20 7d  MATCH 'still'; }
1860: 0a 7d 20 7b 31 34 7d 0a 0a 66 69 6e 69 73 68 5f  .} {14}..finish_
1870: 74 65 73 74 0a                                   test.