/ Hex Artifact Content
Login

Artifact 789d97d9c7886c1c287cf51666061973b6cae04be5168a8d8b8bdc1a3fd20a8a:


0000: 23 20 32 30 30 36 20 53 65 70 74 65 6d 62 65 72  # 2006 September
0010: 20 39 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f   9.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 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 2a 2a 0a 23 20 54 68 69  **********.# Thi
0170: 73 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  s file implement
0180: 73 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  s regression tes
0190: 74 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69  ts for SQLite li
01a0: 62 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f  brary.  The.# fo
01b0: 63 75 73 20 6f 66 20 74 68 69 73 20 73 63 72 69  cus of this scri
01c0: 70 74 20 69 73 20 74 65 73 74 69 6e 67 20 74 68  pt is testing th
01d0: 65 20 46 54 53 33 20 6d 6f 64 75 6c 65 2e 0a 23  e FTS3 module..#
01e0: 0a 23 20 24 49 64 3a 20 66 74 73 33 61 61 2e 74  .# $Id: fts3aa.t
01f0: 65 73 74 2c 76 20 31 2e 31 20 32 30 30 37 2f 30  est,v 1.1 2007/0
0200: 38 2f 32 30 20 31 37 3a 33 38 3a 34 32 20 73 68  8/20 17:38:42 sh
0210: 65 73 73 20 45 78 70 20 24 0a 23 0a 0a 73 65 74  ess Exp $.#..set
0220: 20 74 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64   testdir [file d
0230: 69 72 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73  irname $argv0].s
0240: 6f 75 72 63 65 20 24 74 65 73 74 64 69 72 2f 74  ource $testdir/t
0250: 65 73 74 65 72 2e 74 63 6c 0a 73 65 74 20 74 65  ester.tcl.set te
0260: 73 74 70 72 65 66 69 78 20 66 74 73 33 63 6f 72  stprefix fts3cor
0270: 72 75 70 74 34 0a 0a 23 20 49 66 20 53 51 4c 49  rupt4..# If SQLI
0280: 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 69  TE_ENABLE_FTS3 i
0290: 73 20 64 65 66 69 6e 65 64 2c 20 6f 6d 69 74 20  s defined, omit 
02a0: 74 68 69 73 20 66 69 6c 65 2e 0a 69 66 63 61 70  this file..ifcap
02b0: 61 62 6c 65 20 21 66 74 73 33 20 7b 0a 20 20 66  able !fts3 {.  f
02c0: 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74  inish_test.  ret
02d0: 75 72 6e 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  urn.}..do_execsq
02e0: 6c 5f 74 65 73 74 20 31 2e 30 20 7b 0a 20 20 42  l_test 1.0 {.  B
02f0: 45 47 49 4e 3b 0a 20 20 20 20 43 52 45 41 54 45  EGIN;.    CREATE
0300: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 66   VIRTUAL TABLE f
0310: 74 20 55 53 49 4e 47 20 66 74 73 33 3b 0a 20 20  t USING fts3;.  
0320: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74    INSERT INTO ft
0330: 20 56 41 4c 55 45 53 28 27 61 62 61 63 6b 27 29   VALUES('aback')
0340: 3b 0a 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.    INSERT INT
0350: 4f 20 66 74 20 56 41 4c 55 45 53 28 27 61 62 61  O ft VALUES('aba
0360: 66 74 27 29 3b 0a 20 20 20 20 49 4e 53 45 52 54  ft');.    INSERT
0370: 20 49 4e 54 4f 20 66 74 20 56 41 4c 55 45 53 28   INTO ft VALUES(
0380: 27 61 62 61 6e 64 6f 6e 27 29 3b 0a 20 20 43 4f  'abandon');.  CO
0390: 4d 4d 49 54 3b 0a 7d 0a 0a 70 72 6f 63 20 62 6c  MMIT;.}..proc bl
03a0: 6f 62 20 7b 61 7d 20 7b 20 62 69 6e 61 72 79 20  ob {a} { binary 
03b0: 64 65 63 6f 64 65 20 68 65 78 20 24 61 20 7d 0a  decode hex $a }.
03c0: 64 62 20 66 75 6e 63 20 62 6c 6f 62 20 62 6c 6f  db func blob blo
03d0: 62 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  b..do_execsql_te
03e0: 73 74 20 31 2e 31 20 7b 0a 20 20 53 45 4c 45 43  st 1.1 {.  SELEC
03f0: 54 20 71 75 6f 74 65 28 72 6f 6f 74 29 20 46 52  T quote(root) FR
0400: 4f 4d 20 66 74 5f 73 65 67 64 69 72 3b 0a 7d 20  OM ft_segdir;.} 
0410: 7b 58 27 30 30 30 35 36 31 36 32 36 31 36 33 36  {X'0005616261636
0420: 42 30 33 30 31 30 32 30 30 30 33 30 32 36 36 37  B030102000302667
0430: 34 30 33 30 32 30 32 30 30 30 33 30 34 36 45 36  40302020003046E6
0440: 34 36 46 36 45 30 33 30 33 30 32 30 30 27 7d 0a  46F6E03030200'}.
0450: 0a 73 71 6c 69 74 65 33 5f 64 62 5f 63 6f 6e 66  .sqlite3_db_conf
0460: 69 67 20 64 62 20 44 45 46 45 4e 53 49 56 45 20  ig db DEFENSIVE 
0470: 30 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  0.do_execsql_tes
0480: 74 20 31 2e 32 20 7b 0a 20 20 55 50 44 41 54 45  t 1.2 {.  UPDATE
0490: 20 66 74 5f 73 65 67 64 69 72 20 53 45 54 20 72   ft_segdir SET r
04a0: 6f 6f 74 20 3d 20 62 6c 6f 62 28 0a 20 20 20 20  oot = blob(.    
04b0: 27 30 30 30 35 36 31 36 32 36 31 36 33 36 42 30  '0005616261636B0
04c0: 33 30 31 30 32 30 30 20 46 46 46 46 46 46 46 46  3010200 FFFFFFFF
04d0: 30 37 30 32 20 36 36 37 34 30 33 30 32 30 32 30  0702 66740302020
04e0: 30 30 33 30 34 36 45 36 34 36 46 36 45 30 33 30  003046E646F6E030
04f0: 33 30 32 30 30 27 0a 20 20 29 3b 0a 7d 0a 0a 64  30200'.  );.}..d
0500: 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20  o_catchsql_test 
0510: 31 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 2a  1.3 {.  SELECT *
0520: 20 46 52 4f 4d 20 66 74 20 57 48 45 52 45 20 66   FROM ft WHERE f
0530: 74 20 4d 41 54 43 48 20 27 61 62 61 6e 64 6f 6e  t MATCH 'abandon
0540: 27 3b 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61 73  ';.} {1 {databas
0550: 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73 20  e disk image is 
0560: 6d 61 6c 66 6f 72 6d 65 64 7d 7d 0a 0a 23 2d 2d  malformed}}..#--
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: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
05b0: 2d 2d 2d 2d 2d 2d 2d 0a 72 65 73 65 74 5f 64 62  -------.reset_db
05c0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
05d0: 20 32 2e 30 2e 30 20 7b 0a 20 20 43 52 45 41 54   2.0.0 {.  CREAT
05e0: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
05f0: 66 74 20 55 53 49 4e 47 20 66 74 73 33 3b 0a 20  ft USING fts3;. 
0600: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 28   INSERT INTO ft(
0610: 66 74 29 20 56 41 4c 55 45 53 28 27 6e 6f 64 65  ft) VALUES('node
0620: 73 69 7a 65 3d 33 32 27 29 3b 0a 7d 0a 64 6f 5f  size=32');.}.do_
0630: 74 65 73 74 20 32 2e 30 2e 31 20 7b 0a 20 20 66  test 2.0.1 {.  f
0640: 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69  or {set i 0} {$i
0650: 20 3c 20 31 32 7d 20 7b 69 6e 63 72 20 69 7d 20   < 12} {incr i} 
0660: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
0670: 20 20 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20        BEGIN;.   
0680: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
0690: 20 66 74 20 56 41 4c 55 45 53 28 27 61 62 63 27   ft VALUES('abc'
06a0: 20 7c 7c 20 24 69 29 3b 0a 20 20 20 20 20 20 20   || $i);.       
06b0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 20   INSERT INTO ft 
06c0: 56 41 4c 55 45 53 28 27 61 62 63 27 20 7c 7c 20  VALUES('abc' || 
06d0: 24 69 20 7c 7c 20 27 78 27 20 29 3b 0a 20 20 20  $i || 'x' );.   
06e0: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
06f0: 20 66 74 20 56 41 4c 55 45 53 28 27 61 62 63 27   ft VALUES('abc'
0700: 20 7c 7c 20 24 69 20 7c 7c 20 27 78 78 27 20 29   || $i || 'xx' )
0710: 3b 0a 20 20 20 20 20 20 43 4f 4d 4d 49 54 0a 20  ;.      COMMIT. 
0720: 20 20 20 7d 0a 20 20 7d 0a 20 20 65 78 65 63 73     }.  }.  execs
0730: 71 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  ql {.    SELECT 
0740: 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 66 74  count(*) FROM ft
0750: 5f 73 65 67 64 69 72 3b 0a 20 20 20 20 53 45 4c  _segdir;.    SEL
0760: 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f  ECT count(*) FRO
0770: 4d 20 66 74 5f 73 65 67 6d 65 6e 74 73 3b 0a 20  M ft_segments;. 
0780: 20 7d 0a 7d 20 7b 31 32 20 30 7d 0a 0a 64 6f 5f   }.} {12 0}..do_
0790: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 31  execsql_test 2.1
07a0: 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f   {.  INSERT INTO
07b0: 20 66 74 28 66 74 29 20 56 41 4c 55 45 53 28 27   ft(ft) VALUES('
07c0: 6d 65 72 67 65 3d 31 2c 34 27 29 3b 0a 20 20 53  merge=1,4');.  S
07d0: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
07e0: 52 4f 4d 20 66 74 5f 73 65 67 64 69 72 3b 0a 20  ROM ft_segdir;. 
07f0: 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29   SELECT count(*)
0800: 20 46 52 4f 4d 20 66 74 5f 73 65 67 6d 65 6e 74   FROM ft_segment
0810: 73 3b 0a 7d 20 7b 31 32 20 33 7d 0a 0a 64 6f 5f  s;.} {12 3}..do_
0820: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 32  execsql_test 2.2
0830: 20 7b 0a 20 20 53 45 4c 45 43 54 20 71 75 6f 74   {.  SELECT quot
0840: 65 28 62 6c 6f 63 6b 29 20 46 52 4f 4d 20 66 74  e(block) FROM ft
0850: 5f 73 65 67 6d 65 6e 74 73 20 57 48 45 52 45 20  _segments WHERE 
0860: 62 6c 6f 63 6b 69 64 3d 32 0a 7d 20 7b 58 27 30  blockid=2.} {X'0
0870: 30 30 35 36 31 36 32 36 33 33 31 33 30 30 33 31  0056162633130031
0880: 46 30 32 30 30 27 7d 0a 0a 64 62 20 66 75 6e 63  F0200'}..db func
0890: 20 62 6c 6f 62 20 62 6c 6f 62 0a 73 71 6c 69 74   blob blob.sqlit
08a0: 65 33 5f 64 62 5f 63 6f 6e 66 69 67 20 64 62 20  e3_db_config db 
08b0: 44 45 46 45 4e 53 49 56 45 20 30 0a 64 6f 5f 65  DEFENSIVE 0.do_e
08c0: 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 33 2e  xecsql_test 2.3.
08d0: 31 20 7b 0a 20 20 55 50 44 41 54 45 20 66 74 5f  1 {.  UPDATE ft_
08e0: 73 65 67 6d 65 6e 74 73 20 53 45 54 20 62 6c 6f  segments SET blo
08f0: 63 6b 20 3d 20 0a 20 20 20 20 62 6c 6f 62 28 27  ck = .    blob('
0900: 30 30 30 35 36 31 36 32 36 33 33 31 33 30 30 33  0005616263313003
0910: 31 46 30 32 30 30 20 46 46 46 46 46 46 46 46 30  1F0200 FFFFFFFF0
0920: 37 46 46 35 35 20 36 36 37 34 30 33 30 32 30 32  7FF55 6674030202
0930: 30 30 30 33 30 34 36 45 36 34 36 46 36 45 30 33  0003046E646F6E03
0940: 30 33 30 32 30 30 27 29 0a 20 20 20 20 57 48 45  030200').    WHE
0950: 52 45 20 62 6c 6f 63 6b 69 64 3d 32 3b 0a 7d 20  RE blockid=2;.} 
0960: 7b 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74  {}.do_catchsql_t
0970: 65 73 74 20 32 2e 33 2e 32 20 7b 0a 20 20 49 4e  est 2.3.2 {.  IN
0980: 53 45 52 54 20 49 4e 54 4f 20 66 74 28 66 74 29  SERT INTO ft(ft)
0990: 20 56 41 4c 55 45 53 28 27 6d 65 72 67 65 3d 31   VALUES('merge=1
09a0: 2c 34 27 29 3b 0a 7d 20 7b 31 20 7b 64 61 74 61  ,4');.} {1 {data
09b0: 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65 20  base disk image 
09c0: 69 73 20 6d 61 6c 66 6f 72 6d 65 64 7d 7d 0a 0a  is malformed}}..
09d0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
09e0: 32 2e 34 2e 31 20 7b 0a 20 20 55 50 44 41 54 45  2.4.1 {.  UPDATE
09f0: 20 66 74 5f 73 65 67 6d 65 6e 74 73 20 53 45 54   ft_segments SET
0a00: 20 62 6c 6f 63 6b 20 3d 20 0a 20 20 20 20 62 6c   block = .    bl
0a10: 6f 62 28 27 30 30 30 35 36 31 36 32 36 33 33 31  ob('000561626331
0a20: 33 30 30 33 31 46 30 32 30 30 20 30 32 46 46 46  30031F0200 02FFF
0a30: 46 46 46 46 46 30 37 20 36 36 37 34 30 33 30 32  FFFFF07 66740302
0a40: 30 32 30 30 30 33 30 34 36 45 36 34 36 46 36 45  020003046E646F6E
0a50: 30 33 30 33 30 32 30 30 27 29 0a 20 20 20 20 57  03030200').    W
0a60: 48 45 52 45 20 62 6c 6f 63 6b 69 64 3d 32 3b 0a  HERE blockid=2;.
0a70: 7d 20 7b 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c  } {}.do_catchsql
0a80: 5f 74 65 73 74 20 32 2e 34 2e 32 20 7b 0a 20 20  _test 2.4.2 {.  
0a90: 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 28 66  INSERT INTO ft(f
0aa0: 74 29 20 56 41 4c 55 45 53 28 27 6d 65 72 67 65  t) VALUES('merge
0ab0: 3d 31 2c 34 27 29 3b 0a 7d 20 7b 31 20 7b 64 61  =1,4');.} {1 {da
0ac0: 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67  tabase disk imag
0ad0: 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 7d 7d  e is malformed}}
0ae0: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
0af0: 74 20 32 2e 35 2e 31 20 7b 0a 20 20 55 50 44 41  t 2.5.1 {.  UPDA
0b00: 54 45 20 66 74 5f 73 65 67 6d 65 6e 74 73 20 53  TE ft_segments S
0b10: 45 54 20 62 6c 6f 63 6b 20 3d 20 0a 20 20 20 20  ET block = .    
0b20: 62 6c 6f 62 28 27 30 30 30 35 36 31 36 32 36 33  blob('0005616263
0b30: 33 31 33 30 30 33 31 46 30 32 30 30 20 30 32 30  3130031F0200 020
0b40: 32 20 36 36 37 34 20 46 46 46 46 46 46 30 37 30  2 6674 FFFFFF070
0b50: 33 30 32 30 32 30 30 30 33 30 34 36 45 36 34 36  302020003046E646
0b60: 46 36 45 30 33 30 32 30 30 27 29 0a 20 20 20 20  F6E030200').    
0b70: 57 48 45 52 45 20 62 6c 6f 63 6b 69 64 3d 32 3b  WHERE blockid=2;
0b80: 0a 7d 20 7b 7d 0a 64 6f 5f 63 61 74 63 68 73 71  .} {}.do_catchsq
0b90: 6c 5f 74 65 73 74 20 32 2e 35 2e 32 20 7b 0a 20  l_test 2.5.2 {. 
0ba0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 28   INSERT INTO ft(
0bb0: 66 74 29 20 56 41 4c 55 45 53 28 27 6d 65 72 67  ft) VALUES('merg
0bc0: 65 3d 31 2c 34 27 29 3b 0a 7d 20 7b 31 20 7b 64  e=1,4');.} {1 {d
0bd0: 61 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61  atabase disk ima
0be0: 67 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 7d  ge is malformed}
0bf0: 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }..#------------
0c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 72 65  -------------.re
0c40: 73 65 74 5f 64 62 0a 64 6f 5f 65 78 65 63 73 71  set_db.do_execsq
0c50: 6c 5f 74 65 73 74 20 33 2e 30 2e 30 20 7b 0a 20  l_test 3.0.0 {. 
0c60: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
0c70: 54 41 42 4c 45 20 66 74 20 55 53 49 4e 47 20 66  TABLE ft USING f
0c80: 74 73 33 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  ts3;.  INSERT IN
0c90: 54 4f 20 66 74 28 66 74 29 20 56 41 4c 55 45 53  TO ft(ft) VALUES
0ca0: 28 27 6e 6f 64 65 73 69 7a 65 3d 33 32 27 29 3b  ('nodesize=32');
0cb0: 0a 7d 0a 64 6f 5f 74 65 73 74 20 33 2e 30 2e 31  .}.do_test 3.0.1
0cc0: 20 7b 0a 20 20 65 78 65 63 73 71 6c 20 42 45 47   {.  execsql BEG
0cd0: 49 4e 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20  IN.  for {set i 
0ce0: 30 7d 20 7b 24 69 20 3c 20 32 30 7d 20 7b 69 6e  0} {$i < 20} {in
0cf0: 63 72 20 69 7d 20 7b 0a 20 20 20 20 65 78 65 63  cr i} {.    exec
0d00: 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54  sql { INSERT INT
0d10: 4f 20 66 74 20 56 41 4c 55 45 53 28 27 61 62 63  O ft VALUES('abc
0d20: 27 20 7c 7c 20 24 69 29 20 7d 0a 20 20 7d 0a 20  ' || $i) }.  }. 
0d30: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 43   execsql {.    C
0d40: 4f 4d 4d 49 54 3b 0a 20 20 20 20 53 45 4c 45 43  OMMIT;.    SELEC
0d50: 54 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  T count(*) FROM 
0d60: 66 74 5f 73 65 67 64 69 72 3b 0a 20 20 20 20 53  ft_segdir;.    S
0d70: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
0d80: 52 4f 4d 20 66 74 5f 73 65 67 6d 65 6e 74 73 3b  ROM ft_segments;
0d90: 0a 20 20 7d 0a 7d 20 7b 31 20 35 7d 0a 0a 64 6f  .  }.} {1 5}..do
0da0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33 2e  _execsql_test 3.
0db0: 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 71 75 6f  1 {.  SELECT quo
0dc0: 74 65 28 72 6f 6f 74 29 20 46 52 4f 4d 20 66 74  te(root) FROM ft
0dd0: 5f 73 65 67 64 69 72 0a 7d 20 7b 58 27 30 31 30  _segdir.} {X'010
0de0: 31 30 35 36 31 36 32 36 33 33 31 33 32 30 34 30  1056162633132040
0df0: 31 33 36 30 33 30 31 33 32 30 33 30 31 33 36 27  136030132030136'
0e00: 7d 0a 0a 64 62 20 66 75 6e 63 20 62 6c 6f 62 20  }..db func blob 
0e10: 62 6c 6f 62 0a 73 71 6c 69 74 65 33 5f 64 62 5f  blob.sqlite3_db_
0e20: 63 6f 6e 66 69 67 20 64 62 20 44 45 46 45 4e 53  config db DEFENS
0e30: 49 56 45 20 30 0a 64 6f 5f 65 78 65 63 73 71 6c  IVE 0.do_execsql
0e40: 5f 74 65 73 74 20 33 2e 32 20 7b 0a 20 20 55 50  _test 3.2 {.  UP
0e50: 44 41 54 45 20 66 74 5f 73 65 67 64 69 72 20 0a  DATE ft_segdir .
0e60: 20 20 53 45 54 20 72 6f 6f 74 20 3d 20 62 6c 6f    SET root = blo
0e70: 62 28 27 30 31 30 31 30 35 36 31 36 32 36 33 33  b('0101056162633
0e80: 31 33 32 46 46 46 46 46 46 46 46 30 37 30 32 33  132FFFFFFFF07023
0e90: 36 30 33 30 31 33 32 30 33 30 31 33 36 27 29 3b  6030132030136');
0ea0: 0a 7d 0a 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f  .}..do_catchsql_
0eb0: 74 65 73 74 20 33 2e 31 20 7b 0a 20 20 53 45 4c  test 3.1 {.  SEL
0ec0: 45 43 54 20 2a 20 46 52 4f 4d 20 66 74 20 57 48  ECT * FROM ft WH
0ed0: 45 52 45 20 66 74 20 4d 41 54 43 48 20 27 61 62  ERE ft MATCH 'ab
0ee0: 63 32 30 27 0a 7d 20 7b 31 20 7b 64 61 74 61 62  c20'.} {1 {datab
0ef0: 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69  ase disk image i
0f00: 73 20 6d 61 6c 66 6f 72 6d 65 64 7d 7d 0a 0a 23  s malformed}}..#
0f10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0f20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0f30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 72 65 73 65 74 5f  ---------.reset_
0f60: 64 62 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  db.do_execsql_te
0f70: 73 74 20 34 2e 30 20 7b 0a 20 20 43 52 45 41 54  st 4.0 {.  CREAT
0f80: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
0f90: 74 31 20 55 53 49 4e 47 20 66 74 73 33 28 29 3b  t1 USING fts3();
0fa0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
0fb0: 31 20 56 41 4c 55 45 53 28 27 6f 6e 65 20 74 77  1 VALUES('one tw
0fc0: 6f 20 74 68 72 65 65 27 29 3b 0a 20 20 55 50 44  o three');.  UPD
0fd0: 41 54 45 20 74 31 5f 73 65 67 64 69 72 20 53 45  ATE t1_segdir SE
0fe0: 54 20 73 74 61 72 74 5f 62 6c 6f 63 6b 20 3d 20  T start_block = 
0ff0: 31 3b 0a 7d 0a 0a 64 6f 5f 63 61 74 63 68 73 71  1;.}..do_catchsq
1000: 6c 5f 74 65 73 74 20 34 2e 31 20 7b 20 0a 20 20  l_test 4.1 { .  
1010: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31  SELECT * FROM t1
1020: 20 57 48 45 52 45 20 74 31 20 4d 41 54 43 48 20   WHERE t1 MATCH 
1030: 27 6f 6e 65 27 3b 20 0a 7d 20 7b 31 20 7b 64 61  'one'; .} {1 {da
1040: 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67  tabase disk imag
1050: 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 7d 7d  e is malformed}}
1060: 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73  .do_catchsql_tes
1070: 74 20 34 2e 32 20 7b 20 0a 20 20 53 45 4c 45 43  t 4.2 { .  SELEC
1080: 54 20 2a 20 46 52 4f 4d 20 74 31 20 57 48 45 52  T * FROM t1 WHER
1090: 45 20 74 31 20 4d 41 54 43 48 20 27 74 77 6f 27  E t1 MATCH 'two'
10a0: 3b 20 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61 73  ; .} {1 {databas
10b0: 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73 20  e disk image is 
10c0: 6d 61 6c 66 6f 72 6d 65 64 7d 7d 0a 64 6f 5f 63  malformed}}.do_c
10d0: 61 74 63 68 73 71 6c 5f 74 65 73 74 20 34 2e 33  atchsql_test 4.3
10e0: 20 7b 20 0a 20 20 53 45 4c 45 43 54 20 2a 20 46   { .  SELECT * F
10f0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 20  ROM t1 WHERE t1 
1100: 4d 41 54 43 48 20 27 74 68 72 65 65 27 3b 20 0a  MATCH 'three'; .
1110: 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20 64  } {1 {database d
1120: 69 73 6b 20 69 6d 61 67 65 20 69 73 20 6d 61 6c  isk image is mal
1130: 66 6f 72 6d 65 64 7d 7d 0a 64 6f 5f 65 78 65 63  formed}}.do_exec
1140: 73 71 6c 5f 74 65 73 74 20 34 2e 34 20 7b 0a 20  sql_test 4.4 {. 
1150: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28   INSERT INTO t1(
1160: 74 31 29 20 56 41 4c 55 45 53 28 27 6f 70 74 69  t1) VALUES('opti
1170: 6d 69 7a 65 27 29 3b 0a 7d 0a 0a 0a 66 69 6e 69  mize');.}...fini
1180: 73 68 5f 74 65 73 74 0a                          sh_test.