/ Hex Artifact Content
Login

Artifact 10aac8e9d62c7357590acfabe3fad01e9a9ce1cb:


0000: 23 20 32 30 31 30 20 46 65 62 72 75 61 72 79 20  # 2010 February 
0010: 30 32 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  02.#.# 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 34 20 6d 6f 64 75 6c 65 2e 0a 23  e FTS4 module..#
01e0: 0a 23 0a 0a 73 65 74 20 74 65 73 74 64 69 72 20  .#..set testdir 
01f0: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 61  [file dirname $a
0200: 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24 74 65  rgv0].source $te
0210: 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74 63 6c  stdir/tester.tcl
0220: 0a 0a 23 20 49 66 20 53 51 4c 49 54 45 5f 45 4e  ..# If SQLITE_EN
0230: 41 42 4c 45 5f 46 54 53 33 20 69 73 20 64 65 66  ABLE_FTS3 is def
0240: 69 6e 65 64 2c 20 6f 6d 69 74 20 74 68 69 73 20  ined, omit this 
0250: 66 69 6c 65 2e 0a 69 66 63 61 70 61 62 6c 65 20  file..ifcapable 
0260: 21 66 74 73 33 20 7b 0a 20 20 66 69 6e 69 73 68  !fts3 {.  finish
0270: 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d  _test.  return.}
0280: 0a 0a 23 20 43 72 65 61 74 65 20 74 68 65 20 66  ..# Create the f
0290: 74 73 5f 6b 6a 76 5f 67 65 6e 65 73 69 73 20 70  ts_kjv_genesis p
02a0: 72 6f 63 65 64 75 72 65 20 77 68 69 63 68 20 66  rocedure which f
02b0: 69 6c 6c 73 20 61 6e 64 20 46 54 53 33 2f 34 20  ills and FTS3/4 
02c0: 74 61 62 6c 65 20 77 69 74 68 0a 23 20 74 68 65  table with.# the
02d0: 20 63 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f   complete text o
02e0: 66 20 74 68 65 20 42 6f 6f 6b 20 6f 66 20 47 65  f the Book of Ge
02f0: 6e 65 73 69 73 2e 0a 23 0a 73 6f 75 72 63 65 20  nesis..#.source 
0300: 24 74 65 73 74 64 69 72 2f 67 65 6e 65 73 69 73  $testdir/genesis
0310: 2e 74 63 6c 0a 0a 23 20 54 68 65 20 66 6f 6c 6c  .tcl..# The foll
0320: 6f 77 69 6e 67 20 69 73 20 61 20 6c 69 73 74 20  owing is a list 
0330: 6f 66 20 71 75 65 72 69 65 73 20 74 6f 20 70 65  of queries to pe
0340: 72 66 6f 72 6d 20 61 67 61 69 6e 73 74 20 74 68  rform against th
0350: 65 20 61 62 6f 76 65 0a 23 20 46 54 53 33 2f 46  e above.# FTS3/F
0360: 54 53 34 20 64 61 74 61 62 61 73 65 2e 20 20 57  TS4 database.  W
0370: 65 20 77 69 6c 6c 20 62 65 20 74 72 79 69 6e 67  e will be trying
0380: 20 74 68 65 73 65 20 71 75 65 72 69 65 73 20 69   these queries i
0390: 6e 20 76 61 72 69 6f 75 73 0a 23 20 63 6f 6e 66  n various.# conf
03a0: 69 67 75 72 61 74 69 6f 6e 73 20 74 6f 20 65 6e  igurations to en
03b0: 73 75 72 65 20 74 68 61 74 20 74 68 65 79 20 61  sure that they a
03c0: 6c 77 61 79 73 20 72 65 74 75 72 6e 20 74 68 65  lways return the
03d0: 20 73 61 6d 65 20 61 6e 73 77 65 72 73 2e 0a 23   same answers..#
03e0: 0a 73 65 74 20 66 74 73 34 61 61 5f 71 75 65 72  .set fts4aa_quer
03f0: 69 65 73 20 7b 0a 20 20 7b 61 62 72 61 68 61 6d  ies {.  {abraham
0400: 7d 0a 20 20 7b 74 68 65 20 6b 69 6e 67 7d 0a 20  }.  {the king}. 
0410: 20 7b 22 74 68 65 20 6b 69 6e 67 22 7d 0a 20 20   {"the king"}.  
0420: 7b 61 62 72 61 68 61 6d 20 4f 52 20 6a 6f 73 65  {abraham OR jose
0430: 70 68 7d 0a 20 20 7b 61 62 2a 20 4f 52 20 6a 6f  ph}.  {ab* OR jo
0440: 73 2a 7d 0a 20 20 7b 6c 69 76 65 64 20 74 2a 7d  s*}.  {lived t*}
0450: 0a 20 20 7b 73 70 61 6b 65 20 68 65 62 72 65 77  .  {spake hebrew
0460: 7d 0a 20 20 7b 6d 65 6c 63 68 69 7a 65 64 65 6b  }.  {melchizedek
0470: 7d 0a 20 20 7b 74 2a 20 6d 65 6c 63 68 69 7a 65  }.  {t* melchize
0480: 64 65 6b 7d 0a 20 20 7b 6d 65 6c 63 68 69 7a 65  dek}.  {melchize
0490: 64 65 6b 20 74 2a 7d 0a 7d 0a 75 6e 73 65 74 20  dek t*}.}.unset 
04a0: 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 66 74 73 34  -nocomplain fts4
04b0: 61 61 5f 72 65 73 0a 0a 23 20 53 65 74 20 75 70  aa_res..# Set up
04c0: 20 74 68 65 20 62 61 73 65 6c 69 6e 65 20 72 65   the baseline re
04d0: 73 75 6c 74 73 0a 23 0a 64 6f 5f 74 65 73 74 20  sults.#.do_test 
04e0: 66 74 73 34 61 61 2d 31 2e 30 20 7b 0a 20 20 64  fts4aa-1.0 {.  d
04f0: 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 43 52 45  b eval {.    CRE
0500: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
0510: 45 20 74 31 20 55 53 49 4e 47 20 66 74 73 34 28  E t1 USING fts4(
0520: 77 6f 72 64 73 2c 20 74 6f 6b 65 6e 69 7a 65 20  words, tokenize 
0530: 70 6f 72 74 65 72 29 3b 0a 20 20 7d 0a 20 20 66  porter);.  }.  f
0540: 74 73 5f 6b 6a 76 5f 67 65 6e 65 73 69 73 0a 20  ts_kjv_genesis. 
0550: 20 66 6f 72 65 61 63 68 20 71 20 24 3a 3a 66 74   foreach q $::ft
0560: 73 34 61 61 5f 71 75 65 72 69 65 73 20 7b 0a 20  s4aa_queries {. 
0570: 20 20 20 73 65 74 20 72 20 5b 64 62 20 65 76 61     set r [db eva
0580: 6c 20 7b 53 45 4c 45 43 54 20 64 6f 63 69 64 20  l {SELECT docid 
0590: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77 6f  FROM t1 WHERE wo
05a0: 72 64 73 20 4d 41 54 43 48 20 24 71 20 4f 52 44  rds MATCH $q ORD
05b0: 45 52 20 42 59 20 64 6f 63 69 64 7d 5d 0a 20 20  ER BY docid}].  
05c0: 20 20 73 65 74 20 3a 3a 66 74 73 34 61 61 5f 72    set ::fts4aa_r
05d0: 65 73 28 24 71 29 20 24 72 0a 20 20 7d 0a 7d 20  es($q) $r.  }.} 
05e0: 7b 7d 0a 0a 23 20 4c 65 67 61 63 79 20 74 65 73  {}..# Legacy tes
05f0: 74 20 63 61 73 65 73 0a 23 0a 64 6f 5f 74 65 73  t cases.#.do_tes
0600: 74 20 66 74 73 34 61 61 2d 31 2e 31 20 7b 0a 20  t fts4aa-1.1 {. 
0610: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53   db eval {.    S
0620: 45 4c 45 43 54 20 64 6f 63 69 64 20 46 52 4f 4d  ELECT docid FROM
0630: 20 74 31 20 45 58 43 45 50 54 20 53 45 4c 45 43   t1 EXCEPT SELEC
0640: 54 20 64 6f 63 69 64 20 46 52 4f 4d 20 74 31 5f  T docid FROM t1_
0650: 64 6f 63 73 69 7a 65 0a 20 20 7d 0a 7d 20 7b 7d  docsize.  }.} {}
0660: 0a 64 6f 5f 74 65 73 74 20 66 74 73 34 61 61 2d  .do_test fts4aa-
0670: 31 2e 32 20 7b 0a 20 20 64 62 20 65 76 61 6c 20  1.2 {.  db eval 
0680: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 64 6f 63  {.    SELECT doc
0690: 69 64 20 46 52 4f 4d 20 74 31 5f 64 6f 63 73 69  id FROM t1_docsi
06a0: 7a 65 20 45 58 43 45 50 54 20 53 45 4c 45 43 54  ze EXCEPT SELECT
06b0: 20 64 6f 63 69 64 20 46 52 4f 4d 20 74 31 0a 20   docid FROM t1. 
06c0: 20 7d 0a 7d 20 7b 7d 0a 0a 70 72 6f 63 20 6d 69   }.} {}..proc mi
06d0: 74 20 7b 62 6c 6f 62 7d 20 7b 0a 20 20 73 65 74  t {blob} {.  set
06e0: 20 73 63 61 6e 28 6c 69 74 74 6c 65 45 6e 64 69   scan(littleEndi
06f0: 61 6e 29 20 69 2a 0a 20 20 73 65 74 20 73 63 61  an) i*.  set sca
0700: 6e 28 62 69 67 45 6e 64 69 61 6e 29 20 49 2a 0a  n(bigEndian) I*.
0710: 20 20 62 69 6e 61 72 79 20 73 63 61 6e 20 24 62    binary scan $b
0720: 6c 6f 62 20 24 73 63 61 6e 28 24 3a 3a 74 63 6c  lob $scan($::tcl
0730: 5f 70 6c 61 74 66 6f 72 6d 28 62 79 74 65 4f 72  _platform(byteOr
0740: 64 65 72 29 29 20 72 0a 20 20 72 65 74 75 72 6e  der)) r.  return
0750: 20 24 72 0a 7d 0a 64 62 20 66 75 6e 63 20 6d 69   $r.}.db func mi
0760: 74 20 6d 69 74 0a 0a 64 6f 5f 74 65 73 74 20 66  t mit..do_test f
0770: 74 73 34 61 61 2d 31 2e 33 20 7b 0a 20 20 64 62  ts4aa-1.3 {.  db
0780: 20 65 76 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45   eval {.    SELE
0790: 43 54 20 64 6f 63 69 64 2c 20 6d 69 74 28 6d 61  CT docid, mit(ma
07a0: 74 63 68 69 6e 66 6f 28 74 31 2c 20 27 70 63 78  tchinfo(t1, 'pcx
07b0: 6e 61 6c 27 29 29 20 46 52 4f 4d 20 74 31 20 57  nal')) FROM t1 W
07c0: 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 27 6d  HERE t1 MATCH 'm
07d0: 65 6c 63 68 69 7a 65 64 65 6b 27 3b 0a 20 20 7d  elchizedek';.  }
07e0: 0a 7d 20 7b 31 30 31 34 30 31 38 20 7b 31 20 31  .} {1014018 {1 1
07f0: 20 31 20 31 20 31 20 31 35 33 33 20 32 35 20 32   1 1 1 1533 25 2
0800: 30 7d 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 34  0}}.do_test fts4
0810: 61 61 2d 31 2e 34 20 7b 0a 20 20 64 62 20 65 76  aa-1.4 {.  db ev
0820: 61 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  al {.    SELECT 
0830: 64 6f 63 69 64 2c 20 6d 69 74 28 6d 61 74 63 68  docid, mit(match
0840: 69 6e 66 6f 28 74 31 2c 20 27 70 63 78 6e 61 6c  info(t1, 'pcxnal
0850: 27 29 29 20 46 52 4f 4d 20 74 31 0a 20 20 20 20  ')) FROM t1.    
0860: 20 57 48 45 52 45 20 74 31 20 4d 41 54 43 48 20   WHERE t1 MATCH 
0870: 27 73 70 61 6b 65 20 68 65 62 72 65 77 27 0a 20  'spake hebrew'. 
0880: 20 20 20 20 4f 52 44 45 52 20 42 59 20 64 6f 63      ORDER BY doc
0890: 69 64 3b 0a 20 20 7d 0a 7d 20 7b 31 30 33 39 30  id;.  }.} {10390
08a0: 31 34 20 7b 32 20 31 20 31 20 34 30 20 34 30 20  14 {2 1 1 40 40 
08b0: 31 20 36 20 36 20 31 35 33 33 20 32 35 20 34 32  1 6 6 1533 25 42
08c0: 7d 20 31 30 33 39 30 31 37 20 7b 32 20 31 20 31  } 1039017 {2 1 1
08d0: 20 34 30 20 34 30 20 31 20 36 20 36 20 31 35 33   40 40 1 6 6 153
08e0: 33 20 32 35 20 32 36 7d 7d 0a 64 6f 5f 74 65 73  3 25 26}}.do_tes
08f0: 74 20 66 74 73 34 61 61 2d 31 2e 35 20 7b 0a 20  t fts4aa-1.5 {. 
0900: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53   db eval {.    S
0910: 45 4c 45 43 54 20 64 6f 63 69 64 2c 20 6d 69 74  ELECT docid, mit
0920: 28 6d 61 74 63 68 69 6e 66 6f 28 74 31 2c 20 27  (matchinfo(t1, '
0930: 70 63 78 6e 61 6c 27 29 29 20 46 52 4f 4d 20 74  pcxnal')) FROM t
0940: 31 0a 20 20 20 20 20 57 48 45 52 45 20 74 31 20  1.     WHERE t1 
0950: 4d 41 54 43 48 20 27 6c 61 62 61 6e 20 6f 76 65  MATCH 'laban ove
0960: 72 74 6f 6f 6b 20 6a 61 63 6f 62 27 0a 20 20 20  rtook jacob'.   
0970: 20 20 4f 52 44 45 52 20 42 59 20 64 6f 63 69 64    ORDER BY docid
0980: 3b 0a 20 20 7d 0a 7d 20 7b 31 30 33 31 30 32 35  ;.  }.} {1031025
0990: 20 7b 33 20 31 20 32 20 35 34 20 34 36 20 31 20   {3 1 2 54 46 1 
09a0: 33 20 33 20 32 20 31 38 31 20 31 36 30 20 31 35  3 3 2 181 160 15
09b0: 33 33 20 32 35 20 32 34 7d 7d 0a 0a 64 6f 5f 74  33 25 24}}..do_t
09c0: 65 73 74 20 66 74 73 34 61 61 2d 31 2e 36 20 7b  est fts4aa-1.6 {
09d0: 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  .  db eval {.   
09e0: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74 31 20   DELETE FROM t1 
09f0: 57 48 45 52 45 20 64 6f 63 69 64 21 3d 31 30 35  WHERE docid!=105
0a00: 30 30 32 36 3b 0a 20 20 20 20 53 45 4c 45 43 54  0026;.    SELECT
0a10: 20 68 65 78 28 73 69 7a 65 29 20 46 52 4f 4d 20   hex(size) FROM 
0a20: 74 31 5f 64 6f 63 73 69 7a 65 3b 0a 20 20 20 20  t1_docsize;.    
0a30: 53 45 4c 45 43 54 20 68 65 78 28 76 61 6c 75 65  SELECT hex(value
0a40: 29 20 46 52 4f 4d 20 74 31 5f 73 74 61 74 3b 0a  ) FROM t1_stat;.
0a50: 20 20 7d 0a 7d 20 7b 31 37 20 30 31 31 37 36 46    }.} {17 01176F
0a60: 7d 0a 0a 64 6f 5f 74 65 73 74 20 66 74 73 34 61  }..do_test fts4a
0a70: 61 2d 31 2e 37 20 7b 0a 20 20 64 62 20 65 76 61  a-1.7 {.  db eva
0a80: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 64  l {.    SELECT d
0a90: 6f 63 69 64 20 46 52 4f 4d 20 74 31 20 45 58 43  ocid FROM t1 EXC
0aa0: 45 50 54 20 53 45 4c 45 43 54 20 64 6f 63 69 64  EPT SELECT docid
0ab0: 20 46 52 4f 4d 20 74 31 5f 64 6f 63 73 69 7a 65   FROM t1_docsize
0ac0: 0a 20 20 7d 0a 7d 20 7b 7d 0a 64 6f 5f 74 65 73  .  }.} {}.do_tes
0ad0: 74 20 66 74 73 34 61 61 2d 31 2e 38 20 7b 0a 20  t fts4aa-1.8 {. 
0ae0: 20 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20 53   db eval {.    S
0af0: 45 4c 45 43 54 20 64 6f 63 69 64 20 46 52 4f 4d  ELECT docid FROM
0b00: 20 74 31 5f 64 6f 63 73 69 7a 65 20 45 58 43 45   t1_docsize EXCE
0b10: 50 54 20 53 45 4c 45 43 54 20 64 6f 63 69 64 20  PT SELECT docid 
0b20: 46 52 4f 4d 20 74 31 0a 20 20 7d 0a 7d 20 7b 7d  FROM t1.  }.} {}
0b30: 0a 69 66 63 61 70 61 62 6c 65 20 66 74 73 34 5f  .ifcapable fts4_
0b40: 64 65 66 65 72 72 65 64 20 7b 0a 20 20 64 6f 5f  deferred {.  do_
0b50: 74 65 73 74 20 66 74 73 34 61 61 2d 31 2e 39 20  test fts4aa-1.9 
0b60: 7b 0a 20 20 20 20 23 20 4e 6f 74 65 3a 20 54 6f  {.    # Note: To
0b70: 6b 65 6e 20 27 69 6e 27 20 69 73 20 62 65 69 6e  ken 'in' is bein
0b80: 67 20 64 65 66 65 72 72 65 64 20 69 6e 20 74 68  g deferred in th
0b90: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 71 75 65 72  e following quer
0ba0: 79 2e 20 0a 20 20 20 20 64 62 20 65 76 61 6c 20  y. .    db eval 
0bb0: 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20 64  {.      SELECT d
0bc0: 6f 63 69 64 2c 20 6d 69 74 28 6d 61 74 63 68 69  ocid, mit(matchi
0bd0: 6e 66 6f 28 74 31 2c 20 27 70 63 78 6e 61 6c 27  nfo(t1, 'pcxnal'
0be0: 29 29 20 46 52 4f 4d 20 74 31 0a 20 20 20 20 20  )) FROM t1.     
0bf0: 20 20 57 48 45 52 45 20 74 31 20 4d 41 54 43 48    WHERE t1 MATCH
0c00: 20 27 6a 6f 73 65 70 68 20 64 69 65 64 20 69 6e   'joseph died in
0c10: 20 65 67 79 70 74 27 0a 20 20 20 20 20 20 20 4f   egypt'.       O
0c20: 52 44 45 52 20 42 59 20 64 6f 63 69 64 3b 0a 20  RDER BY docid;. 
0c30: 20 20 20 7d 0a 20 20 7d 20 7b 31 30 35 30 30 32     }.  } {105002
0c40: 36 20 7b 34 20 31 20 31 20 31 20 31 20 31 20 31  6 {4 1 1 1 1 1 1
0c50: 20 31 20 32 20 31 20 31 20 31 20 31 20 31 20 31   1 2 1 1 1 1 1 1
0c60: 20 32 33 20 32 33 7d 7d 0a 7d 0a 0a 23 20 53 68   23 23}}.}..# Sh
0c70: 6f 75 6c 64 20 67 65 74 20 74 68 65 20 73 61 6d  ould get the sam
0c80: 65 20 73 65 61 72 63 68 20 72 65 73 75 6c 74 73  e search results
0c90: 20 66 72 6f 6d 20 46 54 53 33 0a 23 0a 64 6f 5f   from FTS3.#.do_
0ca0: 74 65 73 74 20 66 74 73 34 61 61 2d 32 2e 30 20  test fts4aa-2.0 
0cb0: 7b 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20 20  {.  db eval {.  
0cc0: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31 3b    DROP TABLE t1;
0cd0: 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54  .    CREATE VIRT
0ce0: 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55 53 49  UAL TABLE t1 USI
0cf0: 4e 47 20 66 74 73 33 28 77 6f 72 64 73 2c 20 74  NG fts3(words, t
0d00: 6f 6b 65 6e 69 7a 65 20 70 6f 72 74 65 72 29 3b  okenize porter);
0d10: 0a 20 20 7d 0a 20 20 66 74 73 5f 6b 6a 76 5f 67  .  }.  fts_kjv_g
0d20: 65 6e 65 73 69 73 0a 7d 20 7b 7d 0a 75 6e 73 65  enesis.} {}.unse
0d30: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 69 69  t -nocomplain ii
0d40: 0a 73 65 74 20 69 69 20 30 0a 66 6f 72 65 61 63  .set ii 0.foreac
0d50: 68 20 7b 71 20 72 7d 20 5b 61 72 72 61 79 20 67  h {q r} [array g
0d60: 65 74 20 66 74 73 34 61 61 5f 72 65 73 5d 20 7b  et fts4aa_res] {
0d70: 0a 20 20 69 6e 63 72 20 69 69 0a 20 20 64 6f 5f  .  incr ii.  do_
0d80: 74 65 73 74 20 66 74 73 34 61 61 2d 32 2e 24 69  test fts4aa-2.$i
0d90: 69 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c 20  i {.    db eval 
0da0: 7b 53 45 4c 45 43 54 20 64 6f 63 69 64 20 46 52  {SELECT docid FR
0db0: 4f 4d 20 74 31 20 57 48 45 52 45 20 77 6f 72 64  OM t1 WHERE word
0dc0: 73 20 4d 41 54 43 48 20 24 3a 3a 71 20 4f 52 44  s MATCH $::q ORD
0dd0: 45 52 20 42 59 20 64 6f 63 69 64 7d 0a 20 20 7d  ER BY docid}.  }
0de0: 20 24 72 0a 7d 0a 0a 23 20 53 68 6f 75 6c 64 20   $r.}..# Should 
0df0: 67 65 74 20 74 68 65 20 73 61 6d 65 20 73 65 61  get the same sea
0e00: 72 63 68 20 72 65 73 75 6c 74 73 20 77 68 65 6e  rch results when
0e10: 20 74 68 65 20 70 61 67 65 20 73 69 7a 65 20 69   the page size i
0e20: 73 20 76 65 72 79 20 6c 61 72 67 65 0a 23 0a 64  s very large.#.d
0e30: 6f 5f 74 65 73 74 20 66 74 73 34 61 61 2d 33 2e  o_test fts4aa-3.
0e40: 30 20 7b 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20  0 {.  db close. 
0e50: 20 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73   forcedelete tes
0e60: 74 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 20 64  t.db.  sqlite3 d
0e70: 62 20 74 65 73 74 2e 64 62 0a 20 20 64 62 20 65  b test.db.  db e
0e80: 76 61 6c 20 7b 0a 20 20 20 20 50 52 41 47 4d 41  val {.    PRAGMA
0e90: 20 70 61 67 65 5f 73 69 7a 65 3d 36 35 35 33 36   page_size=65536
0ea0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 52  ;.    CREATE VIR
0eb0: 54 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55 53  TUAL TABLE t1 US
0ec0: 49 4e 47 20 66 74 73 34 28 77 6f 72 64 73 2c 20  ING fts4(words, 
0ed0: 74 6f 6b 65 6e 69 7a 65 20 70 6f 72 74 65 72 29  tokenize porter)
0ee0: 3b 0a 20 20 7d 0a 20 20 66 74 73 5f 6b 6a 76 5f  ;.  }.  fts_kjv_
0ef0: 67 65 6e 65 73 69 73 0a 7d 20 7b 7d 0a 75 6e 73  genesis.} {}.uns
0f00: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 69  et -nocomplain i
0f10: 69 0a 73 65 74 20 69 69 20 30 0a 66 6f 72 65 61  i.set ii 0.forea
0f20: 63 68 20 7b 71 20 72 7d 20 5b 61 72 72 61 79 20  ch {q r} [array 
0f30: 67 65 74 20 66 74 73 34 61 61 5f 72 65 73 5d 20  get fts4aa_res] 
0f40: 7b 0a 20 20 69 6e 63 72 20 69 69 0a 20 20 64 6f  {.  incr ii.  do
0f50: 5f 74 65 73 74 20 66 74 73 34 61 61 2d 33 2e 24  _test fts4aa-3.$
0f60: 69 69 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c  ii {.    db eval
0f70: 20 7b 53 45 4c 45 43 54 20 64 6f 63 69 64 20 46   {SELECT docid F
0f80: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77 6f 72  ROM t1 WHERE wor
0f90: 64 73 20 4d 41 54 43 48 20 24 3a 3a 71 20 4f 52  ds MATCH $::q OR
0fa0: 44 45 52 20 42 59 20 64 6f 63 69 64 7d 0a 20 20  DER BY docid}.  
0fb0: 7d 20 24 72 0a 7d 0a 0a 23 20 53 68 6f 75 6c 64  } $r.}..# Should
0fc0: 20 67 65 74 20 74 68 65 20 73 61 6d 65 20 73 65   get the same se
0fd0: 61 72 63 68 20 72 65 73 75 6c 74 73 20 77 68 65  arch results whe
0fe0: 6e 20 61 6e 20 61 75 74 68 6f 72 69 7a 65 72 20  n an authorizer 
0ff0: 70 72 65 76 65 6e 74 73 0a 23 20 61 6c 6c 20 50  prevents.# all P
1000: 52 41 47 4d 41 20 73 74 61 74 65 6d 65 6e 74 73  RAGMA statements
1010: 2e 0a 23 0a 70 72 6f 63 20 6e 6f 5f 70 72 61 67  ..#.proc no_prag
1020: 6d 61 5f 61 75 74 68 20 7b 63 6f 64 65 20 61 72  ma_auth {code ar
1030: 67 31 20 61 72 67 32 20 61 72 67 33 20 61 72 67  g1 arg2 arg3 arg
1040: 34 20 61 72 67 73 7d 20 7b 0a 20 20 69 66 20 7b  4 args} {.  if {
1050: 24 63 6f 64 65 3d 3d 22 53 51 4c 49 54 45 5f 50  $code=="SQLITE_P
1060: 52 41 47 4d 41 22 7d 20 7b 72 65 74 75 72 6e 20  RAGMA"} {return 
1070: 53 51 4c 49 54 45 5f 44 45 4e 59 7d 0a 20 20 72  SQLITE_DENY}.  r
1080: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
1090: 0a 7d 0a 64 6f 5f 74 65 73 74 20 66 74 73 34 61  .}.do_test fts4a
10a0: 61 2d 34 2e 30 20 7b 0a 20 20 64 62 20 61 75 74  a-4.0 {.  db aut
10b0: 68 20 3a 3a 6e 6f 5f 70 72 61 67 6d 61 5f 61 75  h ::no_pragma_au
10c0: 74 68 0a 20 20 64 62 20 65 76 61 6c 20 7b 0a 20  th.  db eval {. 
10d0: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 74 31     DROP TABLE t1
10e0: 3b 0a 20 20 20 20 43 52 45 41 54 45 20 56 49 52  ;.    CREATE VIR
10f0: 54 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55 53  TUAL TABLE t1 US
1100: 49 4e 47 20 66 74 73 34 28 77 6f 72 64 73 2c 20  ING fts4(words, 
1110: 74 6f 6b 65 6e 69 7a 65 20 70 6f 72 74 65 72 29  tokenize porter)
1120: 3b 0a 20 20 7d 0a 20 20 66 74 73 5f 6b 6a 76 5f  ;.  }.  fts_kjv_
1130: 67 65 6e 65 73 69 73 0a 7d 20 7b 7d 0a 75 6e 73  genesis.} {}.uns
1140: 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 69  et -nocomplain i
1150: 69 0a 73 65 74 20 69 69 20 30 0a 66 6f 72 65 61  i.set ii 0.forea
1160: 63 68 20 7b 71 20 72 7d 20 5b 61 72 72 61 79 20  ch {q r} [array 
1170: 67 65 74 20 66 74 73 34 61 61 5f 72 65 73 5d 20  get fts4aa_res] 
1180: 7b 0a 20 20 69 6e 63 72 20 69 69 0a 20 20 64 6f  {.  incr ii.  do
1190: 5f 74 65 73 74 20 66 74 73 34 61 61 2d 34 2e 24  _test fts4aa-4.$
11a0: 69 69 20 7b 0a 20 20 20 20 64 62 20 65 76 61 6c  ii {.    db eval
11b0: 20 7b 53 45 4c 45 43 54 20 64 6f 63 69 64 20 46   {SELECT docid F
11c0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 77 6f 72  ROM t1 WHERE wor
11d0: 64 73 20 4d 41 54 43 48 20 24 3a 3a 71 20 4f 52  ds MATCH $::q OR
11e0: 44 45 52 20 42 59 20 64 6f 63 69 64 7d 0a 20 20  DER BY docid}.  
11f0: 7d 20 24 72 0a 7d 0a 0a 66 69 6e 69 73 68 5f 74  } $r.}..finish_t
1200: 65 73 74 0a                                      est.