/ Hex Artifact Content
Login

Artifact 4e353a0bd886ea984e56fce9e77724fc923b8d0d:


0000: 23 20 32 30 31 32 20 4d 61 72 63 68 20 32 36 0a  # 2012 March 26.
0010: 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64  #.# The author d
0020: 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67  isclaims copyrig
0030: 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63  ht to this sourc
0040: 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63  e code.  In plac
0050: 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e  e of.# a legal n
0060: 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61  otice, here is a
0070: 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20   blessing:.#.#  
0080: 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f    May you do goo
0090: 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a  d and not evil..
00a0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e  #    May you fin
00b0: 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f  d forgiveness fo
00c0: 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66  r yourself and f
00d0: 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23  orgive others..#
00e0: 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72      May you shar
00f0: 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20  e freely, never 
0100: 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e  taking more than
0110: 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 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 2a 0a 23 0a 0a 73 65 74 20 74  *******.#..set t
0170: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
0180: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
0190: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
01a0: 74 65 72 2e 74 63 6c 0a 73 6f 75 72 63 65 20 24  ter.tcl.source $
01b0: 74 65 73 74 64 69 72 2f 66 74 73 33 5f 63 6f 6d  testdir/fts3_com
01c0: 6d 6f 6e 2e 74 63 6c 0a 73 65 74 20 3a 3a 74 65  mon.tcl.set ::te
01d0: 73 74 70 72 65 66 69 78 20 66 74 73 34 69 6e 63  stprefix fts4inc
01e0: 72 0a 0a 23 20 49 66 20 53 51 4c 49 54 45 5f 45  r..# If SQLITE_E
01f0: 4e 41 42 4c 45 5f 46 54 53 33 20 69 73 20 64 65  NABLE_FTS3 is de
0200: 66 69 6e 65 64 2c 20 6f 6d 69 74 20 74 68 69 73  fined, omit this
0210: 20 66 69 6c 65 2e 0a 69 66 63 61 70 61 62 6c 65   file..ifcapable
0220: 20 21 66 74 73 33 20 7b 0a 20 20 66 69 6e 69 73   !fts3 {.  finis
0230: 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a  h_test.  return.
0240: 7d 0a 0a 23 20 43 72 65 61 74 65 20 74 68 65 20  }..# Create the 
0250: 66 74 73 5f 6b 6a 76 5f 67 65 6e 65 73 69 73 20  fts_kjv_genesis 
0260: 70 72 6f 63 65 64 75 72 65 20 77 68 69 63 68 20  procedure which 
0270: 66 69 6c 6c 73 20 61 6e 64 20 46 54 53 33 2f 34  fills and FTS3/4
0280: 20 74 61 62 6c 65 20 0a 23 20 77 69 74 68 20 74   table .# with t
0290: 68 65 20 63 6f 6d 70 6c 65 74 65 20 74 65 78 74  he complete text
02a0: 20 6f 66 20 74 68 65 20 42 6f 6f 6b 20 6f 66 20   of the Book of 
02b0: 47 65 6e 65 73 69 73 2e 0a 23 0a 73 6f 75 72 63  Genesis..#.sourc
02c0: 65 20 24 74 65 73 74 64 69 72 2f 67 65 6e 65 73  e $testdir/genes
02d0: 69 73 2e 74 63 6c 0a 0a 64 6f 5f 74 65 73 74 20  is.tcl..do_test 
02e0: 31 2e 30 20 7b 0a 20 20 65 78 65 63 73 71 6c 20  1.0 {.  execsql 
02f0: 7b 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c  { CREATE VIRTUAL
0300: 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20   TABLE t1 USING 
0310: 66 74 73 34 28 77 6f 72 64 73 29 20 7d 0a 20 20  fts4(words) }.  
0320: 66 74 73 5f 6b 6a 76 5f 67 65 6e 65 73 69 73 0a  fts_kjv_genesis.
0330: 7d 20 7b 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c  } {}..do_execsql
0340: 5f 74 65 73 74 20 31 2e 31 20 7b 0a 20 20 53 45  _test 1.1 {.  SE
0350: 4c 45 43 54 20 6d 69 6e 28 64 6f 63 69 64 29 2c  LECT min(docid),
0360: 20 6d 61 78 28 64 6f 63 69 64 29 20 46 52 4f 4d   max(docid) FROM
0370: 20 74 31 3b 0a 7d 20 7b 31 30 30 31 30 30 31 20   t1;.} {1001001 
0380: 31 30 35 30 30 32 36 7d 0a 0a 66 6f 72 65 61 63  1050026}..foreac
0390: 68 20 7b 74 6e 20 71 20 72 65 73 7d 20 7b 0a 20  h {tn q res} {. 
03a0: 20 31 20 7b 20 53 45 4c 45 43 54 20 63 6f 75 6e   1 { SELECT coun
03b0: 74 28 2a 29 20 46 52 4f 4d 20 74 31 20 57 48 45  t(*) FROM t1 WHE
03c0: 52 45 20 74 31 20 4d 41 54 43 48 20 27 61 6e 64  RE t1 MATCH 'and
03d0: 27 20 41 4e 44 20 64 6f 63 69 64 20 3c 20 31 30  ' AND docid < 10
03e0: 31 30 30 30 30 7d 20 32 32 34 0a 20 20 32 20 7b  10000} 224.  2 {
03f0: 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29   SELECT count(*)
0400: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74   FROM t1 WHERE t
0410: 31 20 4d 41 54 43 48 20 27 22 69 6e 20 74 68 65  1 MATCH '"in the
0420: 22 27 20 41 4e 44 20 64 6f 63 69 64 20 3c 20 31  "' AND docid < 1
0430: 30 31 30 30 30 30 7d 20 34 37 0a 20 20 33 20 7b  010000} 47.  3 {
0440: 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29   SELECT count(*)
0450: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74   FROM t1 WHERE t
0460: 31 20 4d 41 54 43 48 20 27 22 41 6e 64 20 47 6f  1 MATCH '"And Go
0470: 64 22 27 20 41 4e 44 20 64 6f 63 69 64 20 3c 20  d"' AND docid < 
0480: 31 30 31 30 30 30 30 7d 20 33 33 0a 20 20 34 20  1010000} 33.  4 
0490: 7b 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a  { SELECT count(*
04a0: 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20  ) FROM t1 WHERE 
04b0: 74 31 20 0a 20 20 20 20 20 20 4d 41 54 43 48 20  t1 .      MATCH 
04c0: 27 22 6c 61 6e 64 20 6f 66 20 63 61 6e 61 61 6e  '"land of canaan
04d0: 22 27 20 41 4e 44 20 64 6f 63 69 64 20 3c 20 31  "' AND docid < 1
04e0: 30 33 30 30 30 30 20 7d 20 37 0a 7d 20 7b 0a 20  030000 } 7.} {. 
04f0: 20 66 6f 72 65 61 63 68 20 73 20 7b 30 20 31 7d   foreach s {0 1}
0500: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 22   {.    execsql "
0510: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28 74  INSERT INTO t1(t
0520: 31 29 20 56 41 4c 55 45 53 28 27 74 65 73 74 2d  1) VALUES('test-
0530: 6e 6f 2d 69 6e 63 72 2d 64 6f 63 6c 69 73 74 3d  no-incr-doclist=
0540: 24 73 27 29 22 0a 20 20 20 20 64 6f 5f 65 78 65  $s')".    do_exe
0550: 63 73 71 6c 5f 74 65 73 74 20 32 2e 24 74 6e 2e  csql_test 2.$tn.
0560: 24 73 20 24 71 20 24 72 65 73 0a 20 20 20 20 73  $s $q $res.    s
0570: 65 74 20 74 28 24 73 29 20 5b 6c 69 6e 64 65 78  et t($s) [lindex
0580: 20 5b 74 69 6d 65 20 5b 6c 69 73 74 20 65 78 65   [time [list exe
0590: 63 73 71 6c 20 24 71 5d 20 31 30 30 5d 20 30 5d  csql $q] 100] 0]
05a0: 0a 20 20 7d 0a 20 20 69 66 20 7b 30 7d 20 7b 0a  .  }.  if {0} {.
05b0: 20 20 20 20 70 75 74 73 20 22 77 69 74 68 20 6f      puts "with o
05c0: 70 74 69 6d 69 7a 61 74 69 6f 6e 3a 20 24 74 28  ptimization: $t(
05d0: 30 29 20 20 20 20 77 69 74 68 6f 75 74 3a 20 24  0)    without: $
05e0: 74 28 31 29 22 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f  t(1)".  }.}..do_
05f0: 74 65 73 74 20 32 2e 31 20 7b 0a 20 20 65 78 65  test 2.1 {.  exe
0600: 63 73 71 6c 20 7b 0a 20 20 20 20 43 52 45 41 54  csql {.    CREAT
0610: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
0620: 74 32 20 55 53 49 4e 47 20 66 74 73 34 28 6f 72  t2 USING fts4(or
0630: 64 65 72 3d 44 45 53 43 29 3b 0a 20 20 7d 0a 20  der=DESC);.  }. 
0640: 20 73 65 74 20 6e 75 6d 20 5b 6c 69 73 74 20 6f   set num [list o
0650: 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75  ne two three fou
0660: 72 20 66 69 76 65 20 73 69 78 20 73 65 76 65 6e  r five six seven
0670: 20 65 69 67 68 74 20 6e 69 6e 65 20 74 65 6e 5d   eight nine ten]
0680: 0a 20 20 65 78 65 63 73 71 6c 20 42 45 47 49 4e  .  execsql BEGIN
0690: 0a 20 20 66 6f 72 20 7b 73 65 74 20 69 20 30 7d  .  for {set i 0}
06a0: 20 7b 24 69 20 3c 20 31 30 30 30 30 7d 20 7b 69   {$i < 10000} {i
06b0: 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 73 65 74  ncr i} {.    set
06c0: 20 78 20 22 5b 6c 69 6e 64 65 78 20 24 6e 75 6d   x "[lindex $num
06d0: 20 5b 65 78 70 72 20 24 69 25 31 30 5d 5d 20 7a   [expr $i%10]] z
06e0: 65 72 6f 22 0a 20 20 20 20 65 78 65 63 73 71 6c  ero".    execsql
06f0: 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74   { INSERT INTO t
0700: 32 28 64 6f 63 69 64 2c 20 63 6f 6e 74 65 6e 74  2(docid, content
0710: 29 20 56 41 4c 55 45 53 28 24 69 2c 20 24 78 29  ) VALUES($i, $x)
0720: 20 7d 0a 20 20 7d 0a 20 20 65 78 65 63 73 71 6c   }.  }.  execsql
0730: 20 43 4f 4d 4d 49 54 0a 20 20 65 78 65 63 73 71   COMMIT.  execsq
0740: 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  l { INSERT INTO 
0750: 74 32 28 74 32 29 20 56 41 4c 55 45 53 28 27 6f  t2(t2) VALUES('o
0760: 70 74 69 6d 69 7a 65 27 29 20 7d 0a 7d 20 7b 7d  ptimize') }.} {}
0770: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
0780: 74 20 32 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54  t 2.2 {.  SELECT
0790: 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74   count(*) FROM t
07a0: 32 20 57 48 45 52 45 20 74 32 20 4d 41 54 43 48  2 WHERE t2 MATCH
07b0: 20 27 22 6e 65 76 65 72 20 7a 65 72 6f 22 27 0a   '"never zero"'.
07c0: 7d 20 7b 30 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  } {0}..do_execsq
07d0: 6c 5f 74 65 73 74 20 32 2e 33 20 7b 0a 20 20 53  l_test 2.3 {.  S
07e0: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
07f0: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 74 32 20  ROM t2 WHERE t2 
0800: 4d 41 54 43 48 20 27 22 74 77 6f 20 7a 65 72 6f  MATCH '"two zero
0810: 22 27 0a 7d 20 7b 31 30 30 30 7d 0a 0a 66 69 6e  "'.} {1000}..fin
0820: 69 73 68 5f 74 65 73 74 0a                       ish_test.