/ Hex Artifact Content
Login

Artifact 31d8137fc7c14b5b991e3c4fa041ad2ac1255c7b:


0000: 23 20 32 30 30 36 20 4f 63 74 6f 62 65 72 20 31  # 2006 October 1
0010: 39 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  9.#.# 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 65 0a 23 20 66 6f 63 75 73 20  y.  The.# focus 
00e0: 6f 66 20 74 68 69 73 20 73 63 72 69 70 74 20 69  of this script i
00f0: 73 20 74 65 73 74 69 6e 67 20 64 65 6c 65 74 69  s testing deleti
0100: 6f 6e 73 20 69 6e 20 74 68 65 20 46 54 53 33 20  ons in the FTS3 
0110: 6d 6f 64 75 6c 65 2e 0a 23 0a 23 20 24 49 64 3a  module..#.# $Id:
0120: 20 66 74 73 33 61 65 2e 74 65 73 74 2c 76 20 31   fts3ae.test,v 1
0130: 2e 31 20 32 30 30 37 2f 30 38 2f 32 30 20 31 37  .1 2007/08/20 17
0140: 3a 33 38 3a 34 32 20 73 68 65 73 73 20 45 78 70  :38:42 shess Exp
0150: 20 24 0a 23 0a 0a 73 65 74 20 74 65 73 74 64 69   $.#..set testdi
0160: 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  r [file dirname 
0170: 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24  $argv0].source $
0180: 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74  testdir/tester.t
0190: 63 6c 0a 0a 23 20 49 66 20 53 51 4c 49 54 45 5f  cl..# If SQLITE_
01a0: 45 4e 41 42 4c 45 5f 46 54 53 33 20 69 73 20 64  ENABLE_FTS3 is d
01b0: 65 66 69 6e 65 64 2c 20 6f 6d 69 74 20 74 68 69  efined, omit thi
01c0: 73 20 66 69 6c 65 2e 0a 69 66 63 61 70 61 62 6c  s file..ifcapabl
01d0: 65 20 21 66 74 73 33 20 7b 0a 20 20 66 69 6e 69  e !fts3 {.  fini
01e0: 73 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e  sh_test.  return
01f0: 0a 7d 0a 0a 23 20 43 6f 6e 73 74 72 75 63 74 20  .}..# Construct 
0200: 61 20 66 75 6c 6c 2d 74 65 78 74 20 73 65 61 72  a full-text sear
0210: 63 68 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e  ch table contain
0220: 69 6e 67 20 6b 65 79 77 6f 72 64 73 20 77 68 69  ing keywords whi
0230: 63 68 20 61 72 65 20 74 68 65 0a 23 20 6f 72 64  ch are the.# ord
0240: 69 6e 61 6c 20 6e 75 6d 62 65 72 73 20 6f 66 20  inal numbers of 
0250: 74 68 65 20 62 69 74 20 70 6f 73 69 74 69 6f 6e  the bit position
0260: 73 20 73 65 74 20 66 6f 72 20 61 20 73 65 71 75  s set for a sequ
0270: 65 6e 63 65 20 6f 66 20 69 6e 74 65 67 65 72 73  ence of integers
0280: 2c 0a 23 20 77 68 69 63 68 20 61 72 65 20 75 73  ,.# which are us
0290: 65 64 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  ed for the rowid
02a0: 2e 20 20 54 68 65 72 65 20 61 72 65 20 61 20 74  .  There are a t
02b0: 6f 74 61 6c 20 6f 66 20 33 30 20 49 4e 53 45 52  otal of 30 INSER
02c0: 54 20 61 6e 64 0a 23 20 44 45 4c 45 54 45 20 73  T and.# DELETE s
02d0: 74 61 74 65 6d 65 6e 74 73 2c 20 73 6f 20 74 68  tatements, so th
02e0: 61 74 20 77 65 27 6c 6c 20 74 65 73 74 20 62 6f  at we'll test bo
02f0: 74 68 20 74 68 65 20 73 65 67 6d 65 6e 74 4d 65  th the segmentMe
0300: 72 67 65 28 29 20 6d 65 72 67 65 0a 23 20 28 6f  rge() merge.# (o
0310: 76 65 72 20 74 68 65 20 66 69 72 73 74 20 31 36  ver the first 16
0320: 29 20 61 6e 64 20 74 68 65 20 74 65 72 6d 53 65  ) and the termSe
0330: 6c 65 63 74 28 29 20 6d 65 72 67 65 20 28 6f 76  lect() merge (ov
0340: 65 72 20 74 68 65 20 6c 65 76 65 6c 2d 31 0a 23  er the level-1.#
0350: 20 73 65 67 6d 65 6e 74 20 61 6e 64 20 31 34 20   segment and 14 
0360: 6c 65 76 65 6c 2d 30 20 73 65 67 6d 65 6e 74 73  level-0 segments
0370: 29 2e 0a 64 62 20 65 76 61 6c 20 7b 0a 20 20 43  )..db eval {.  C
0380: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
0390: 42 4c 45 20 74 31 20 55 53 49 4e 47 20 66 74 73  BLE t1 USING fts
03a0: 33 28 63 6f 6e 74 65 6e 74 29 3b 0a 20 20 49 4e  3(content);.  IN
03b0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 72 6f  SERT INTO t1 (ro
03c0: 77 69 64 2c 20 63 6f 6e 74 65 6e 74 29 20 56 41  wid, content) VA
03d0: 4c 55 45 53 28 31 2c 20 27 6f 6e 65 27 29 3b 0a  LUES(1, 'one');.
03e0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
03f0: 20 28 72 6f 77 69 64 2c 20 63 6f 6e 74 65 6e 74   (rowid, content
0400: 29 20 56 41 4c 55 45 53 28 32 2c 20 27 74 77 6f  ) VALUES(2, 'two
0410: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
0420: 4f 20 74 31 20 28 72 6f 77 69 64 2c 20 63 6f 6e  O t1 (rowid, con
0430: 74 65 6e 74 29 20 56 41 4c 55 45 53 28 33 2c 20  tent) VALUES(3, 
0440: 27 6f 6e 65 20 74 77 6f 27 29 3b 0a 20 20 49 4e  'one two');.  IN
0450: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 72 6f  SERT INTO t1 (ro
0460: 77 69 64 2c 20 63 6f 6e 74 65 6e 74 29 20 56 41  wid, content) VA
0470: 4c 55 45 53 28 34 2c 20 27 74 68 72 65 65 27 29  LUES(4, 'three')
0480: 3b 0a 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20  ;.  DELETE FROM 
0490: 74 31 20 57 48 45 52 45 20 72 6f 77 69 64 20 3d  t1 WHERE rowid =
04a0: 20 31 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54   1;.  INSERT INT
04b0: 4f 20 74 31 20 28 72 6f 77 69 64 2c 20 63 6f 6e  O t1 (rowid, con
04c0: 74 65 6e 74 29 20 56 41 4c 55 45 53 28 35 2c 20  tent) VALUES(5, 
04d0: 27 6f 6e 65 20 74 68 72 65 65 27 29 3b 0a 20 20  'one three');.  
04e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28  INSERT INTO t1 (
04f0: 72 6f 77 69 64 2c 20 63 6f 6e 74 65 6e 74 29 20  rowid, content) 
0500: 56 41 4c 55 45 53 28 36 2c 20 27 74 77 6f 20 74  VALUES(6, 'two t
0510: 68 72 65 65 27 29 3b 0a 20 20 49 4e 53 45 52 54  hree');.  INSERT
0520: 20 49 4e 54 4f 20 74 31 20 28 72 6f 77 69 64 2c   INTO t1 (rowid,
0530: 20 63 6f 6e 74 65 6e 74 29 20 56 41 4c 55 45 53   content) VALUES
0540: 28 37 2c 20 27 6f 6e 65 20 74 77 6f 20 74 68 72  (7, 'one two thr
0550: 65 65 27 29 3b 0a 20 20 44 45 4c 45 54 45 20 46  ee');.  DELETE F
0560: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 72 6f 77  ROM t1 WHERE row
0570: 69 64 20 3d 20 34 3b 0a 20 20 49 4e 53 45 52 54  id = 4;.  INSERT
0580: 20 49 4e 54 4f 20 74 31 20 28 72 6f 77 69 64 2c   INTO t1 (rowid,
0590: 20 63 6f 6e 74 65 6e 74 29 20 56 41 4c 55 45 53   content) VALUES
05a0: 28 38 2c 20 27 66 6f 75 72 27 29 3b 0a 20 20 49  (8, 'four');.  I
05b0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 72  NSERT INTO t1 (r
05c0: 6f 77 69 64 2c 20 63 6f 6e 74 65 6e 74 29 20 56  owid, content) V
05d0: 41 4c 55 45 53 28 39 2c 20 27 6f 6e 65 20 66 6f  ALUES(9, 'one fo
05e0: 75 72 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  ur');.  INSERT I
05f0: 4e 54 4f 20 74 31 20 28 72 6f 77 69 64 2c 20 63  NTO t1 (rowid, c
0600: 6f 6e 74 65 6e 74 29 20 56 41 4c 55 45 53 28 31  ontent) VALUES(1
0610: 30 2c 20 27 74 77 6f 20 66 6f 75 72 27 29 3b 0a  0, 'two four');.
0620: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
0630: 20 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20 37   WHERE rowid = 7
0640: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
0650: 74 31 20 28 72 6f 77 69 64 2c 20 63 6f 6e 74 65  t1 (rowid, conte
0660: 6e 74 29 20 56 41 4c 55 45 53 28 31 31 2c 20 27  nt) VALUES(11, '
0670: 6f 6e 65 20 74 77 6f 20 66 6f 75 72 27 29 3b 0a  one two four');.
0680: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0690: 20 28 72 6f 77 69 64 2c 20 63 6f 6e 74 65 6e 74   (rowid, content
06a0: 29 20 56 41 4c 55 45 53 28 31 32 2c 20 27 74 68  ) VALUES(12, 'th
06b0: 72 65 65 20 66 6f 75 72 27 29 3b 0a 20 20 49 4e  ree four');.  IN
06c0: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 72 6f  SERT INTO t1 (ro
06d0: 77 69 64 2c 20 63 6f 6e 74 65 6e 74 29 20 56 41  wid, content) VA
06e0: 4c 55 45 53 28 31 33 2c 20 27 6f 6e 65 20 74 68  LUES(13, 'one th
06f0: 72 65 65 20 66 6f 75 72 27 29 3b 0a 20 20 44 45  ree four');.  DE
0700: 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48 45  LETE FROM t1 WHE
0710: 52 45 20 72 6f 77 69 64 20 3d 20 31 30 3b 0a 20  RE rowid = 10;. 
0720: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0730: 28 72 6f 77 69 64 2c 20 63 6f 6e 74 65 6e 74 29  (rowid, content)
0740: 20 56 41 4c 55 45 53 28 31 34 2c 20 27 74 77 6f   VALUES(14, 'two
0750: 20 74 68 72 65 65 20 66 6f 75 72 27 29 3b 0a 20   three four');. 
0760: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0770: 28 72 6f 77 69 64 2c 20 63 6f 6e 74 65 6e 74 29  (rowid, content)
0780: 20 56 41 4c 55 45 53 28 31 35 2c 20 27 6f 6e 65   VALUES(15, 'one
0790: 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72 27   two three four'
07a0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
07b0: 20 74 31 20 28 72 6f 77 69 64 2c 20 63 6f 6e 74   t1 (rowid, cont
07c0: 65 6e 74 29 20 56 41 4c 55 45 53 28 31 36 2c 20  ent) VALUES(16, 
07d0: 27 66 69 76 65 27 29 3b 0a 20 20 44 45 4c 45 54  'five');.  DELET
07e0: 45 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  E FROM t1 WHERE 
07f0: 72 6f 77 69 64 20 3d 20 31 33 3b 0a 20 20 49 4e  rowid = 13;.  IN
0800: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 72 6f  SERT INTO t1 (ro
0810: 77 69 64 2c 20 63 6f 6e 74 65 6e 74 29 20 56 41  wid, content) VA
0820: 4c 55 45 53 28 31 37 2c 20 27 6f 6e 65 20 66 69  LUES(17, 'one fi
0830: 76 65 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  ve');.  INSERT I
0840: 4e 54 4f 20 74 31 20 28 72 6f 77 69 64 2c 20 63  NTO t1 (rowid, c
0850: 6f 6e 74 65 6e 74 29 20 56 41 4c 55 45 53 28 31  ontent) VALUES(1
0860: 38 2c 20 27 74 77 6f 20 66 69 76 65 27 29 3b 0a  8, 'two five');.
0870: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0880: 20 28 72 6f 77 69 64 2c 20 63 6f 6e 74 65 6e 74   (rowid, content
0890: 29 20 56 41 4c 55 45 53 28 31 39 2c 20 27 6f 6e  ) VALUES(19, 'on
08a0: 65 20 74 77 6f 20 66 69 76 65 27 29 3b 0a 20 20  e two five');.  
08b0: 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57  DELETE FROM t1 W
08c0: 48 45 52 45 20 72 6f 77 69 64 20 3d 20 31 36 3b  HERE rowid = 16;
08d0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
08e0: 31 20 28 72 6f 77 69 64 2c 20 63 6f 6e 74 65 6e  1 (rowid, conten
08f0: 74 29 20 56 41 4c 55 45 53 28 32 30 2c 20 27 74  t) VALUES(20, 't
0900: 68 72 65 65 20 66 69 76 65 27 29 3b 0a 20 20 49  hree five');.  I
0910: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 72  NSERT INTO t1 (r
0920: 6f 77 69 64 2c 20 63 6f 6e 74 65 6e 74 29 20 56  owid, content) V
0930: 41 4c 55 45 53 28 32 31 2c 20 27 6f 6e 65 20 74  ALUES(21, 'one t
0940: 68 72 65 65 20 66 69 76 65 27 29 3b 0a 20 20 49  hree five');.  I
0950: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20 28 72  NSERT INTO t1 (r
0960: 6f 77 69 64 2c 20 63 6f 6e 74 65 6e 74 29 20 56  owid, content) V
0970: 41 4c 55 45 53 28 32 32 2c 20 27 74 77 6f 20 74  ALUES(22, 'two t
0980: 68 72 65 65 20 66 69 76 65 27 29 3b 0a 20 20 44  hree five');.  D
0990: 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48  ELETE FROM t1 WH
09a0: 45 52 45 20 72 6f 77 69 64 20 3d 20 31 39 3b 0a  ERE rowid = 19;.
09b0: 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31    DELETE FROM t1
09c0: 20 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20 32   WHERE rowid = 2
09d0: 32 3b 0a 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 74  2;.}..do_test ft
09e0: 73 33 61 66 2d 31 2e 31 20 7b 0a 20 20 65 78 65  s3af-1.1 {.  exe
09f0: 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 43 4f 55  csql {SELECT COU
0a00: 4e 54 28 2a 29 20 46 52 4f 4d 20 74 31 7d 0a 7d  NT(*) FROM t1}.}
0a10: 20 7b 31 34 7d 0a 0a 64 6f 5f 74 65 73 74 20 66   {14}..do_test f
0a20: 74 73 33 61 65 2d 32 2e 31 20 7b 0a 20 20 65 78  ts3ae-2.1 {.  ex
0a30: 65 63 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f  ecsql {SELECT ro
0a40: 77 69 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52  wid FROM t1 WHER
0a50: 45 20 63 6f 6e 74 65 6e 74 20 4d 41 54 43 48 20  E content MATCH 
0a60: 27 6f 6e 65 27 7d 0a 7d 20 7b 33 20 35 20 39 20  'one'}.} {3 5 9 
0a70: 31 31 20 31 35 20 31 37 20 32 31 7d 0a 0a 64 6f  11 15 17 21}..do
0a80: 5f 74 65 73 74 20 66 74 73 33 61 65 2d 32 2e 32  _test fts3ae-2.2
0a90: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53 45   {.  execsql {SE
0aa0: 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20  LECT rowid FROM 
0ab0: 74 31 20 57 48 45 52 45 20 63 6f 6e 74 65 6e 74  t1 WHERE content
0ac0: 20 4d 41 54 43 48 20 27 74 77 6f 27 7d 0a 7d 20   MATCH 'two'}.} 
0ad0: 7b 32 20 33 20 36 20 31 31 20 31 34 20 31 35 20  {2 3 6 11 14 15 
0ae0: 31 38 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 74 73  18}..do_test fts
0af0: 33 61 65 2d 32 2e 33 20 7b 0a 20 20 65 78 65 63  3ae-2.3 {.  exec
0b00: 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69  sql {SELECT rowi
0b10: 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  d FROM t1 WHERE 
0b20: 63 6f 6e 74 65 6e 74 20 4d 41 54 43 48 20 27 74  content MATCH 't
0b30: 68 72 65 65 27 7d 0a 7d 20 7b 35 20 36 20 31 32  hree'}.} {5 6 12
0b40: 20 31 34 20 31 35 20 32 30 20 32 31 7d 0a 0a 64   14 15 20 21}..d
0b50: 6f 5f 74 65 73 74 20 66 74 73 33 61 65 2d 32 2e  o_test fts3ae-2.
0b60: 34 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 7b 53  4 {.  execsql {S
0b70: 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d  ELECT rowid FROM
0b80: 20 74 31 20 57 48 45 52 45 20 63 6f 6e 74 65 6e   t1 WHERE conten
0b90: 74 20 4d 41 54 43 48 20 27 66 6f 75 72 27 7d 0a  t MATCH 'four'}.
0ba0: 7d 20 7b 38 20 39 20 31 31 20 31 32 20 31 34 20  } {8 9 11 12 14 
0bb0: 31 35 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 74 73  15}..do_test fts
0bc0: 33 61 65 2d 32 2e 35 20 7b 0a 20 20 65 78 65 63  3ae-2.5 {.  exec
0bd0: 73 71 6c 20 7b 53 45 4c 45 43 54 20 72 6f 77 69  sql {SELECT rowi
0be0: 64 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  d FROM t1 WHERE 
0bf0: 63 6f 6e 74 65 6e 74 20 4d 41 54 43 48 20 27 66  content MATCH 'f
0c00: 69 76 65 27 7d 0a 7d 20 7b 31 37 20 31 38 20 32  ive'}.} {17 18 2
0c10: 30 20 32 31 7d 0a 0a 66 69 6e 69 73 68 5f 74 65  0 21}..finish_te
0c20: 73 74 0a                                         st.