/ Hex Artifact Content
Login

Artifact d524af6bcef4714e059ef559113dbdc924cd33d1:


0000: 23 20 32 30 31 30 20 4a 61 6e 75 61 72 79 20 30  # 2010 January 0
0010: 37 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72  7.#.# 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 20 20 49 6e 20 70 6c  rce code.  In pl
0050: 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c  ace of.# a legal
0060: 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73   notice, here is
0070: 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23   a blessing:.#.#
0080: 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67      May you do g
0090: 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c  ood and not evil
00a0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66  ..#    May you f
00b0: 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20  ind forgiveness 
00c0: 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64  for yourself and
00d0: 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e   forgive others.
00e0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68  .#    May you sh
00f0: 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65  are freely, neve
0100: 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68  r taking more th
0110: 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23  an 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 2a 0a 23 0a 23 20 54 68  *********.#.# Th
0170: 65 20 74 65 73 74 73 20 69 6e 20 74 68 69 73 20  e tests in this 
0180: 66 69 6c 65 20 74 65 73 74 20 74 68 65 20 46 54  file test the FT
0190: 53 33 20 61 75 78 69 6c 6c 61 72 79 20 66 75 6e  S3 auxillary fun
01a0: 63 74 69 6f 6e 73 20 6f 66 66 73 65 74 73 28 29  ctions offsets()
01b0: 2c 20 0a 23 20 73 6e 69 70 70 65 74 28 29 20 61  , .# snippet() a
01c0: 6e 64 20 6d 61 74 63 68 69 6e 66 6f 28 29 20 77  nd matchinfo() w
01d0: 6f 72 6b 2e 20 41 74 20 74 69 6d 65 20 6f 66 20  ork. At time of 
01e0: 77 72 69 74 69 6e 67 2c 20 72 75 6e 6e 69 6e 67  writing, running
01f0: 20 74 68 69 73 20 66 69 6c 65 20 0a 23 20 70 72   this file .# pr
0200: 6f 76 69 64 65 73 20 66 75 6c 6c 20 63 6f 76 65  ovides full cove
0210: 72 61 67 65 20 6f 66 20 66 74 73 33 5f 73 6e 69  rage of fts3_sni
0220: 70 70 65 74 2e 63 2e 0a 23 0a 0a 73 65 74 20 74  ppet.c..#..set t
0230: 65 73 74 64 69 72 20 5b 66 69 6c 65 20 64 69 72  estdir [file dir
0240: 6e 61 6d 65 20 24 61 72 67 76 30 5d 0a 73 6f 75  name $argv0].sou
0250: 72 63 65 20 24 74 65 73 74 64 69 72 2f 74 65 73  rce $testdir/tes
0260: 74 65 72 2e 74 63 6c 0a 73 65 74 20 74 65 73 74  ter.tcl.set test
0270: 70 72 65 66 69 78 20 66 74 73 33 73 6e 69 70 70  prefix fts3snipp
0280: 65 74 0a 0a 23 20 49 66 20 53 51 4c 49 54 45 5f  et..# If SQLITE_
0290: 45 4e 41 42 4c 45 5f 46 54 53 33 20 69 73 20 6e  ENABLE_FTS3 is n
02a0: 6f 74 20 64 65 66 69 6e 65 64 2c 20 6f 6d 69 74  ot defined, omit
02b0: 20 74 68 69 73 20 66 69 6c 65 2e 0a 69 66 63 61   this file..ifca
02c0: 70 61 62 6c 65 20 21 66 74 73 33 20 7b 20 66 69  pable !fts3 { fi
02d0: 6e 69 73 68 5f 74 65 73 74 20 3b 20 72 65 74 75  nish_test ; retu
02e0: 72 6e 20 7d 0a 73 6f 75 72 63 65 20 24 74 65 73  rn }.source $tes
02f0: 74 64 69 72 2f 66 74 73 33 5f 63 6f 6d 6d 6f 6e  tdir/fts3_common
0300: 2e 74 63 6c 0a 0a 73 65 74 20 73 71 6c 69 74 65  .tcl..set sqlite
0310: 5f 66 74 73 33 5f 65 6e 61 62 6c 65 5f 70 61 72  _fts3_enable_par
0320: 65 6e 74 68 65 73 65 73 20 31 0a 73 65 74 20 44  entheses 1.set D
0330: 4f 5f 4d 41 4c 4c 4f 43 5f 54 45 53 54 20 30 0a  O_MALLOC_TEST 0.
0340: 0a 23 20 54 72 61 6e 73 66 6f 72 6d 20 74 68 65  .# Transform the
0350: 20 6c 69 73 74 20 24 4c 20 74 6f 20 69 74 73 20   list $L to its 
0360: 22 6e 6f 72 6d 61 6c 22 20 66 6f 72 6d 2e 20 53  "normal" form. S
0370: 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62 65  o that it can be
0380: 20 63 6f 6d 70 61 72 65 64 20 74 6f 0a 23 20 61   compared to.# a
0390: 6e 6f 74 68 65 72 20 6c 69 73 74 20 77 69 74 68  nother list with
03a0: 20 74 68 65 20 73 61 6d 65 20 73 65 74 20 6f 66   the same set of
03b0: 20 65 6c 65 6d 65 6e 74 73 20 75 73 69 6e 67 20   elements using 
03c0: 5b 73 74 72 69 6e 67 20 63 6f 6d 70 61 72 65 5d  [string compare]
03d0: 2e 0a 23 0a 70 72 6f 63 20 6e 6f 72 6d 61 6c 69  ..#.proc normali
03e0: 7a 65 20 7b 4c 7d 20 7b 0a 20 20 73 65 74 20 72  ze {L} {.  set r
03f0: 65 74 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65  et [list].  fore
0400: 61 63 68 20 6c 20 24 4c 20 7b 6c 61 70 70 65 6e  ach l $L {lappen
0410: 64 20 72 65 74 20 24 6c 7d 0a 20 20 72 65 74 75  d ret $l}.  retu
0420: 72 6e 20 24 72 65 74 0a 7d 0a 0a 70 72 6f 63 20  rn $ret.}..proc 
0430: 64 6f 5f 6f 66 66 73 65 74 73 5f 74 65 73 74 20  do_offsets_test 
0440: 7b 6e 61 6d 65 20 65 78 70 72 20 61 72 67 73 7d  {name expr args}
0450: 20 7b 0a 20 20 73 65 74 20 72 65 73 75 6c 74 20   {.  set result 
0460: 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68  [list].  foreach
0470: 20 61 20 24 61 72 67 73 20 7b 0a 20 20 20 20 6c   a $args {.    l
0480: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 6e  append result [n
0490: 6f 72 6d 61 6c 69 7a 65 20 24 61 5d 0a 20 20 7d  ormalize $a].  }
04a0: 0a 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74 65 73  .  do_select_tes
04b0: 74 20 24 6e 61 6d 65 20 7b 0a 20 20 20 20 53 45  t $name {.    SE
04c0: 4c 45 43 54 20 6f 66 66 73 65 74 73 28 66 74 29  LECT offsets(ft)
04d0: 20 46 52 4f 4d 20 66 74 20 57 48 45 52 45 20 66   FROM ft WHERE f
04e0: 74 20 4d 41 54 43 48 20 24 65 78 70 72 0a 20 20  t MATCH $expr.  
04f0: 7d 20 24 72 65 73 75 6c 74 0a 7d 0a 20 20 0a 23  } $result.}.  .#
0500: 20 44 6f 63 75 6d 65 6e 74 20 74 65 78 74 20 75   Document text u
0510: 73 65 64 20 62 79 20 61 20 66 65 77 20 74 65 73  sed by a few tes
0520: 74 73 2e 20 43 6f 6e 74 61 69 6e 73 20 74 68 65  ts. Contains the
0530: 20 45 6e 67 6c 69 73 68 20 6e 61 6d 65 73 20 6f   English names o
0540: 66 20 61 6c 6c 0a 23 20 69 6e 74 65 67 65 72 73  f all.# integers
0550: 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 33   between 1 and 3
0560: 30 30 2e 0a 23 0a 73 65 74 20 6e 75 6d 62 65 72  00..#.set number
0570: 73 20 5b 6e 6f 72 6d 61 6c 69 7a 65 20 7b 0a 20  s [normalize {. 
0580: 20 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66   one two three f
0590: 6f 75 72 20 66 69 76 65 20 73 69 78 20 73 65 76  our five six sev
05a0: 65 6e 20 65 69 67 68 74 20 6e 69 6e 65 20 74 65  en eight nine te
05b0: 6e 20 65 6c 65 76 65 6e 20 74 77 65 6c 76 65 20  n eleven twelve 
05c0: 74 68 69 72 74 65 65 6e 0a 20 20 66 6f 75 72 74  thirteen.  fourt
05d0: 65 65 6e 20 66 69 66 74 65 65 6e 20 73 69 78 74  een fifteen sixt
05e0: 65 65 6e 20 73 65 76 65 6e 74 65 65 6e 20 65 69  een seventeen ei
05f0: 67 68 74 65 65 6e 20 6e 69 6e 65 74 65 65 6e 20  ghteen nineteen 
0600: 74 77 65 6e 74 79 20 74 77 65 6e 74 79 6f 6e 65  twenty twentyone
0610: 0a 20 20 74 77 65 6e 74 79 74 77 6f 20 74 77 65  .  twentytwo twe
0620: 6e 74 79 74 68 72 65 65 20 74 77 65 6e 74 79 66  ntythree twentyf
0630: 6f 75 72 20 74 77 65 6e 74 79 66 69 76 65 20 74  our twentyfive t
0640: 77 65 6e 74 79 73 69 78 20 74 77 65 6e 74 79 73  wentysix twentys
0650: 65 76 65 6e 0a 20 20 74 77 65 6e 74 79 65 69 67  even.  twentyeig
0660: 68 74 20 74 77 65 6e 74 79 6e 69 6e 65 20 74 68  ht twentynine th
0670: 69 72 74 79 20 74 68 69 72 74 79 6f 6e 65 20 74  irty thirtyone t
0680: 68 69 72 74 79 74 77 6f 20 74 68 69 72 74 79 74  hirtytwo thirtyt
0690: 68 72 65 65 20 74 68 69 72 74 79 66 6f 75 72 0a  hree thirtyfour.
06a0: 20 20 74 68 69 72 74 79 66 69 76 65 20 74 68 69    thirtyfive thi
06b0: 72 74 79 73 69 78 20 74 68 69 72 74 79 73 65 76  rtysix thirtysev
06c0: 65 6e 20 74 68 69 72 74 79 65 69 67 68 74 20 74  en thirtyeight t
06d0: 68 69 72 74 79 6e 69 6e 65 20 66 6f 72 74 79 20  hirtynine forty 
06e0: 66 6f 72 74 79 6f 6e 65 0a 20 20 66 6f 72 74 79  fortyone.  forty
06f0: 74 77 6f 20 66 6f 72 74 79 74 68 72 65 65 20 66  two fortythree f
0700: 6f 72 74 79 66 6f 75 72 20 66 6f 72 74 79 66 69  ortyfour fortyfi
0710: 76 65 20 66 6f 72 74 79 73 69 78 20 66 6f 72 74  ve fortysix fort
0720: 79 73 65 76 65 6e 20 66 6f 72 74 79 65 69 67 68  yseven fortyeigh
0730: 74 0a 20 20 66 6f 72 74 79 6e 69 6e 65 20 66 69  t.  fortynine fi
0740: 66 74 79 20 66 69 66 74 79 6f 6e 65 20 66 69 66  fty fiftyone fif
0750: 74 79 74 77 6f 20 66 69 66 74 79 74 68 72 65 65  tytwo fiftythree
0760: 20 66 69 66 74 79 66 6f 75 72 20 66 69 66 74 79   fiftyfour fifty
0770: 66 69 76 65 20 66 69 66 74 79 73 69 78 0a 20 20  five fiftysix.  
0780: 66 69 66 74 79 73 65 76 65 6e 20 66 69 66 74 79  fiftyseven fifty
0790: 65 69 67 68 74 20 66 69 66 74 79 6e 69 6e 65 20  eight fiftynine 
07a0: 73 69 78 74 79 20 73 69 78 74 79 6f 6e 65 20 73  sixty sixtyone s
07b0: 69 78 74 79 74 77 6f 20 73 69 78 74 79 74 68 72  ixtytwo sixtythr
07c0: 65 65 20 73 69 78 74 79 66 6f 75 72 0a 20 20 73  ee sixtyfour.  s
07d0: 69 78 74 79 66 69 76 65 20 73 69 78 74 79 73 69  ixtyfive sixtysi
07e0: 78 20 73 69 78 74 79 73 65 76 65 6e 20 73 69 78  x sixtyseven six
07f0: 74 79 65 69 67 68 74 20 73 69 78 74 79 6e 69 6e  tyeight sixtynin
0800: 65 20 73 65 76 65 6e 74 79 20 73 65 76 65 6e 74  e seventy sevent
0810: 79 6f 6e 65 0a 20 20 73 65 76 65 6e 74 79 74 77  yone.  seventytw
0820: 6f 20 73 65 76 65 6e 74 79 74 68 72 65 65 20 73  o seventythree s
0830: 65 76 65 6e 74 79 66 6f 75 72 20 73 65 76 65 6e  eventyfour seven
0840: 74 79 66 69 76 65 20 73 65 76 65 6e 74 79 73 69  tyfive seventysi
0850: 78 20 73 65 76 65 6e 74 79 73 65 76 65 6e 0a 20  x seventyseven. 
0860: 20 73 65 76 65 6e 74 79 65 69 67 68 74 20 73 65   seventyeight se
0870: 76 65 6e 74 79 6e 69 6e 65 20 65 69 67 68 74 79  ventynine eighty
0880: 20 65 69 67 68 74 79 6f 6e 65 20 65 69 67 68 74   eightyone eight
0890: 79 74 77 6f 20 65 69 67 68 74 79 74 68 72 65 65  ytwo eightythree
08a0: 20 65 69 67 68 74 79 66 6f 75 72 0a 20 20 65 69   eightyfour.  ei
08b0: 67 68 74 79 66 69 76 65 20 65 69 67 68 74 79 73  ghtyfive eightys
08c0: 69 78 20 65 69 67 68 74 79 73 65 76 65 6e 20 65  ix eightyseven e
08d0: 69 67 68 74 79 65 69 67 68 74 20 65 69 67 68 74  ightyeight eight
08e0: 79 6e 69 6e 65 20 6e 69 6e 65 74 79 20 6e 69 6e  ynine ninety nin
08f0: 65 74 79 6f 6e 65 0a 20 20 6e 69 6e 65 74 79 74  etyone.  ninetyt
0900: 77 6f 20 6e 69 6e 65 74 79 74 68 72 65 65 20 6e  wo ninetythree n
0910: 69 6e 65 74 79 66 6f 75 72 20 6e 69 6e 65 74 79  inetyfour ninety
0920: 66 69 76 65 20 6e 69 6e 65 74 79 73 69 78 20 6e  five ninetysix n
0930: 69 6e 65 74 79 73 65 76 65 6e 0a 20 20 6e 69 6e  inetyseven.  nin
0940: 65 74 79 65 69 67 68 74 20 6e 69 6e 65 74 79 6e  etyeight ninetyn
0950: 69 6e 65 20 6f 6e 65 68 75 6e 64 72 65 64 20 6f  ine onehundred o
0960: 6e 65 68 75 6e 64 72 65 64 6f 6e 65 20 6f 6e 65  nehundredone one
0970: 68 75 6e 64 72 65 64 74 77 6f 0a 20 20 6f 6e 65  hundredtwo.  one
0980: 68 75 6e 64 72 65 64 74 68 72 65 65 20 6f 6e 65  hundredthree one
0990: 68 75 6e 64 72 65 64 66 6f 75 72 20 6f 6e 65 68  hundredfour oneh
09a0: 75 6e 64 72 65 64 66 69 76 65 20 6f 6e 65 68 75  undredfive onehu
09b0: 6e 64 72 65 64 73 69 78 20 6f 6e 65 68 75 6e 64  ndredsix onehund
09c0: 72 65 64 73 65 76 65 6e 0a 20 20 6f 6e 65 68 75  redseven.  onehu
09d0: 6e 64 72 65 64 65 69 67 68 74 20 6f 6e 65 68 75  ndredeight onehu
09e0: 6e 64 72 65 64 6e 69 6e 65 20 6f 6e 65 68 75 6e  ndrednine onehun
09f0: 64 72 65 64 74 65 6e 20 6f 6e 65 68 75 6e 64 72  dredten onehundr
0a00: 65 64 65 6c 65 76 65 6e 0a 20 20 6f 6e 65 68 75  edeleven.  onehu
0a10: 6e 64 72 65 64 74 77 65 6c 76 65 20 6f 6e 65 68  ndredtwelve oneh
0a20: 75 6e 64 72 65 64 74 68 69 72 74 65 65 6e 20 6f  undredthirteen o
0a30: 6e 65 68 75 6e 64 72 65 64 66 6f 75 72 74 65 65  nehundredfourtee
0a40: 6e 20 6f 6e 65 68 75 6e 64 72 65 64 66 69 66 74  n onehundredfift
0a50: 65 65 6e 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64  een.  onehundred
0a60: 73 69 78 74 65 65 6e 20 6f 6e 65 68 75 6e 64 72  sixteen onehundr
0a70: 65 64 73 65 76 65 6e 74 65 65 6e 20 6f 6e 65 68  edseventeen oneh
0a80: 75 6e 64 72 65 64 65 69 67 68 74 65 65 6e 20 6f  undredeighteen o
0a90: 6e 65 68 75 6e 64 72 65 64 6e 69 6e 65 74 65 65  nehundredninetee
0aa0: 6e 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64 74 77  n.  onehundredtw
0ab0: 65 6e 74 79 20 6f 6e 65 68 75 6e 64 72 65 64 74  enty onehundredt
0ac0: 77 65 6e 74 79 6f 6e 65 20 6f 6e 65 68 75 6e 64  wentyone onehund
0ad0: 72 65 64 74 77 65 6e 74 79 74 77 6f 0a 20 20 6f  redtwentytwo.  o
0ae0: 6e 65 68 75 6e 64 72 65 64 74 77 65 6e 74 79 74  nehundredtwentyt
0af0: 68 72 65 65 20 6f 6e 65 68 75 6e 64 72 65 64 74  hree onehundredt
0b00: 77 65 6e 74 79 66 6f 75 72 20 6f 6e 65 68 75 6e  wentyfour onehun
0b10: 64 72 65 64 74 77 65 6e 74 79 66 69 76 65 0a 20  dredtwentyfive. 
0b20: 20 6f 6e 65 68 75 6e 64 72 65 64 74 77 65 6e 74   onehundredtwent
0b30: 79 73 69 78 20 6f 6e 65 68 75 6e 64 72 65 64 74  ysix onehundredt
0b40: 77 65 6e 74 79 73 65 76 65 6e 20 6f 6e 65 68 75  wentyseven onehu
0b50: 6e 64 72 65 64 74 77 65 6e 74 79 65 69 67 68 74  ndredtwentyeight
0b60: 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64 74 77 65  .  onehundredtwe
0b70: 6e 74 79 6e 69 6e 65 20 6f 6e 65 68 75 6e 64 72  ntynine onehundr
0b80: 65 64 74 68 69 72 74 79 20 6f 6e 65 68 75 6e 64  edthirty onehund
0b90: 72 65 64 74 68 69 72 74 79 6f 6e 65 0a 20 20 6f  redthirtyone.  o
0ba0: 6e 65 68 75 6e 64 72 65 64 74 68 69 72 74 79 74  nehundredthirtyt
0bb0: 77 6f 20 6f 6e 65 68 75 6e 64 72 65 64 74 68 69  wo onehundredthi
0bc0: 72 74 79 74 68 72 65 65 20 6f 6e 65 68 75 6e 64  rtythree onehund
0bd0: 72 65 64 74 68 69 72 74 79 66 6f 75 72 0a 20 20  redthirtyfour.  
0be0: 6f 6e 65 68 75 6e 64 72 65 64 74 68 69 72 74 79  onehundredthirty
0bf0: 66 69 76 65 20 6f 6e 65 68 75 6e 64 72 65 64 74  five onehundredt
0c00: 68 69 72 74 79 73 69 78 20 6f 6e 65 68 75 6e 64  hirtysix onehund
0c10: 72 65 64 74 68 69 72 74 79 73 65 76 65 6e 0a 20  redthirtyseven. 
0c20: 20 6f 6e 65 68 75 6e 64 72 65 64 74 68 69 72 74   onehundredthirt
0c30: 79 65 69 67 68 74 20 6f 6e 65 68 75 6e 64 72 65  yeight onehundre
0c40: 64 74 68 69 72 74 79 6e 69 6e 65 20 6f 6e 65 68  dthirtynine oneh
0c50: 75 6e 64 72 65 64 66 6f 72 74 79 0a 20 20 6f 6e  undredforty.  on
0c60: 65 68 75 6e 64 72 65 64 66 6f 72 74 79 6f 6e 65  ehundredfortyone
0c70: 20 6f 6e 65 68 75 6e 64 72 65 64 66 6f 72 74 79   onehundredforty
0c80: 74 77 6f 20 6f 6e 65 68 75 6e 64 72 65 64 66 6f  two onehundredfo
0c90: 72 74 79 74 68 72 65 65 0a 20 20 6f 6e 65 68 75  rtythree.  onehu
0ca0: 6e 64 72 65 64 66 6f 72 74 79 66 6f 75 72 20 6f  ndredfortyfour o
0cb0: 6e 65 68 75 6e 64 72 65 64 66 6f 72 74 79 66 69  nehundredfortyfi
0cc0: 76 65 20 6f 6e 65 68 75 6e 64 72 65 64 66 6f 72  ve onehundredfor
0cd0: 74 79 73 69 78 0a 20 20 6f 6e 65 68 75 6e 64 72  tysix.  onehundr
0ce0: 65 64 66 6f 72 74 79 73 65 76 65 6e 20 6f 6e 65  edfortyseven one
0cf0: 68 75 6e 64 72 65 64 66 6f 72 74 79 65 69 67 68  hundredfortyeigh
0d00: 74 20 6f 6e 65 68 75 6e 64 72 65 64 66 6f 72 74  t onehundredfort
0d10: 79 6e 69 6e 65 0a 20 20 6f 6e 65 68 75 6e 64 72  ynine.  onehundr
0d20: 65 64 66 69 66 74 79 20 6f 6e 65 68 75 6e 64 72  edfifty onehundr
0d30: 65 64 66 69 66 74 79 6f 6e 65 20 6f 6e 65 68 75  edfiftyone onehu
0d40: 6e 64 72 65 64 66 69 66 74 79 74 77 6f 20 6f 6e  ndredfiftytwo on
0d50: 65 68 75 6e 64 72 65 64 66 69 66 74 79 74 68 72  ehundredfiftythr
0d60: 65 65 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64 66  ee.  onehundredf
0d70: 69 66 74 79 66 6f 75 72 20 6f 6e 65 68 75 6e 64  iftyfour onehund
0d80: 72 65 64 66 69 66 74 79 66 69 76 65 20 6f 6e 65  redfiftyfive one
0d90: 68 75 6e 64 72 65 64 66 69 66 74 79 73 69 78 0a  hundredfiftysix.
0da0: 20 20 6f 6e 65 68 75 6e 64 72 65 64 66 69 66 74    onehundredfift
0db0: 79 73 65 76 65 6e 20 6f 6e 65 68 75 6e 64 72 65  yseven onehundre
0dc0: 64 66 69 66 74 79 65 69 67 68 74 20 6f 6e 65 68  dfiftyeight oneh
0dd0: 75 6e 64 72 65 64 66 69 66 74 79 6e 69 6e 65 0a  undredfiftynine.
0de0: 20 20 6f 6e 65 68 75 6e 64 72 65 64 73 69 78 74    onehundredsixt
0df0: 79 20 6f 6e 65 68 75 6e 64 72 65 64 73 69 78 74  y onehundredsixt
0e00: 79 6f 6e 65 20 6f 6e 65 68 75 6e 64 72 65 64 73  yone onehundreds
0e10: 69 78 74 79 74 77 6f 20 6f 6e 65 68 75 6e 64 72  ixtytwo onehundr
0e20: 65 64 73 69 78 74 79 74 68 72 65 65 0a 20 20 6f  edsixtythree.  o
0e30: 6e 65 68 75 6e 64 72 65 64 73 69 78 74 79 66 6f  nehundredsixtyfo
0e40: 75 72 20 6f 6e 65 68 75 6e 64 72 65 64 73 69 78  ur onehundredsix
0e50: 74 79 66 69 76 65 20 6f 6e 65 68 75 6e 64 72 65  tyfive onehundre
0e60: 64 73 69 78 74 79 73 69 78 0a 20 20 6f 6e 65 68  dsixtysix.  oneh
0e70: 75 6e 64 72 65 64 73 69 78 74 79 73 65 76 65 6e  undredsixtyseven
0e80: 20 6f 6e 65 68 75 6e 64 72 65 64 73 69 78 74 79   onehundredsixty
0e90: 65 69 67 68 74 20 6f 6e 65 68 75 6e 64 72 65 64  eight onehundred
0ea0: 73 69 78 74 79 6e 69 6e 65 0a 20 20 6f 6e 65 68  sixtynine.  oneh
0eb0: 75 6e 64 72 65 64 73 65 76 65 6e 74 79 20 6f 6e  undredseventy on
0ec0: 65 68 75 6e 64 72 65 64 73 65 76 65 6e 74 79 6f  ehundredseventyo
0ed0: 6e 65 20 6f 6e 65 68 75 6e 64 72 65 64 73 65 76  ne onehundredsev
0ee0: 65 6e 74 79 74 77 6f 0a 20 20 6f 6e 65 68 75 6e  entytwo.  onehun
0ef0: 64 72 65 64 73 65 76 65 6e 74 79 74 68 72 65 65  dredseventythree
0f00: 20 6f 6e 65 68 75 6e 64 72 65 64 73 65 76 65 6e   onehundredseven
0f10: 74 79 66 6f 75 72 20 6f 6e 65 68 75 6e 64 72 65  tyfour onehundre
0f20: 64 73 65 76 65 6e 74 79 66 69 76 65 0a 20 20 6f  dseventyfive.  o
0f30: 6e 65 68 75 6e 64 72 65 64 73 65 76 65 6e 74 79  nehundredseventy
0f40: 73 69 78 20 6f 6e 65 68 75 6e 64 72 65 64 73 65  six onehundredse
0f50: 76 65 6e 74 79 73 65 76 65 6e 20 6f 6e 65 68 75  ventyseven onehu
0f60: 6e 64 72 65 64 73 65 76 65 6e 74 79 65 69 67 68  ndredseventyeigh
0f70: 74 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64 73 65  t.  onehundredse
0f80: 76 65 6e 74 79 6e 69 6e 65 20 6f 6e 65 68 75 6e  ventynine onehun
0f90: 64 72 65 64 65 69 67 68 74 79 20 6f 6e 65 68 75  dredeighty onehu
0fa0: 6e 64 72 65 64 65 69 67 68 74 79 6f 6e 65 0a 20  ndredeightyone. 
0fb0: 20 6f 6e 65 68 75 6e 64 72 65 64 65 69 67 68 74   onehundredeight
0fc0: 79 74 77 6f 20 6f 6e 65 68 75 6e 64 72 65 64 65  ytwo onehundrede
0fd0: 69 67 68 74 79 74 68 72 65 65 20 6f 6e 65 68 75  ightythree onehu
0fe0: 6e 64 72 65 64 65 69 67 68 74 79 66 6f 75 72 0a  ndredeightyfour.
0ff0: 20 20 6f 6e 65 68 75 6e 64 72 65 64 65 69 67 68    onehundredeigh
1000: 74 79 66 69 76 65 20 6f 6e 65 68 75 6e 64 72 65  tyfive onehundre
1010: 64 65 69 67 68 74 79 73 69 78 20 6f 6e 65 68 75  deightysix onehu
1020: 6e 64 72 65 64 65 69 67 68 74 79 73 65 76 65 6e  ndredeightyseven
1030: 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64 65 69 67  .  onehundredeig
1040: 68 74 79 65 69 67 68 74 20 6f 6e 65 68 75 6e 64  htyeight onehund
1050: 72 65 64 65 69 67 68 74 79 6e 69 6e 65 20 6f 6e  redeightynine on
1060: 65 68 75 6e 64 72 65 64 6e 69 6e 65 74 79 0a 20  ehundredninety. 
1070: 20 6f 6e 65 68 75 6e 64 72 65 64 6e 69 6e 65 74   onehundredninet
1080: 79 6f 6e 65 20 6f 6e 65 68 75 6e 64 72 65 64 6e  yone onehundredn
1090: 69 6e 65 74 79 74 77 6f 20 6f 6e 65 68 75 6e 64  inetytwo onehund
10a0: 72 65 64 6e 69 6e 65 74 79 74 68 72 65 65 0a 20  redninetythree. 
10b0: 20 6f 6e 65 68 75 6e 64 72 65 64 6e 69 6e 65 74   onehundredninet
10c0: 79 66 6f 75 72 20 6f 6e 65 68 75 6e 64 72 65 64  yfour onehundred
10d0: 6e 69 6e 65 74 79 66 69 76 65 20 6f 6e 65 68 75  ninetyfive onehu
10e0: 6e 64 72 65 64 6e 69 6e 65 74 79 73 69 78 0a 20  ndredninetysix. 
10f0: 20 6f 6e 65 68 75 6e 64 72 65 64 6e 69 6e 65 74   onehundredninet
1100: 79 73 65 76 65 6e 20 6f 6e 65 68 75 6e 64 72 65  yseven onehundre
1110: 64 6e 69 6e 65 74 79 65 69 67 68 74 20 6f 6e 65  dninetyeight one
1120: 68 75 6e 64 72 65 64 6e 69 6e 65 74 79 6e 69 6e  hundredninetynin
1130: 65 20 74 77 6f 68 75 6e 64 72 65 64 0a 20 20 74  e twohundred.  t
1140: 77 6f 68 75 6e 64 72 65 64 6f 6e 65 20 74 77 6f  wohundredone two
1150: 68 75 6e 64 72 65 64 74 77 6f 20 74 77 6f 68 75  hundredtwo twohu
1160: 6e 64 72 65 64 74 68 72 65 65 20 74 77 6f 68 75  ndredthree twohu
1170: 6e 64 72 65 64 66 6f 75 72 20 74 77 6f 68 75 6e  ndredfour twohun
1180: 64 72 65 64 66 69 76 65 0a 20 20 74 77 6f 68 75  dredfive.  twohu
1190: 6e 64 72 65 64 73 69 78 20 74 77 6f 68 75 6e 64  ndredsix twohund
11a0: 72 65 64 73 65 76 65 6e 20 74 77 6f 68 75 6e 64  redseven twohund
11b0: 72 65 64 65 69 67 68 74 20 74 77 6f 68 75 6e 64  redeight twohund
11c0: 72 65 64 6e 69 6e 65 20 74 77 6f 68 75 6e 64 72  rednine twohundr
11d0: 65 64 74 65 6e 0a 20 20 74 77 6f 68 75 6e 64 72  edten.  twohundr
11e0: 65 64 65 6c 65 76 65 6e 20 74 77 6f 68 75 6e 64  edeleven twohund
11f0: 72 65 64 74 77 65 6c 76 65 20 74 77 6f 68 75 6e  redtwelve twohun
1200: 64 72 65 64 74 68 69 72 74 65 65 6e 20 74 77 6f  dredthirteen two
1210: 68 75 6e 64 72 65 64 66 6f 75 72 74 65 65 6e 0a  hundredfourteen.
1220: 20 20 74 77 6f 68 75 6e 64 72 65 64 66 69 66 74    twohundredfift
1230: 65 65 6e 20 74 77 6f 68 75 6e 64 72 65 64 73 69  een twohundredsi
1240: 78 74 65 65 6e 20 74 77 6f 68 75 6e 64 72 65 64  xteen twohundred
1250: 73 65 76 65 6e 74 65 65 6e 20 74 77 6f 68 75 6e  seventeen twohun
1260: 64 72 65 64 65 69 67 68 74 65 65 6e 0a 20 20 74  dredeighteen.  t
1270: 77 6f 68 75 6e 64 72 65 64 6e 69 6e 65 74 65 65  wohundredninetee
1280: 6e 20 74 77 6f 68 75 6e 64 72 65 64 74 77 65 6e  n twohundredtwen
1290: 74 79 20 74 77 6f 68 75 6e 64 72 65 64 74 77 65  ty twohundredtwe
12a0: 6e 74 79 6f 6e 65 20 74 77 6f 68 75 6e 64 72 65  ntyone twohundre
12b0: 64 74 77 65 6e 74 79 74 77 6f 0a 20 20 74 77 6f  dtwentytwo.  two
12c0: 68 75 6e 64 72 65 64 74 77 65 6e 74 79 74 68 72  hundredtwentythr
12d0: 65 65 20 74 77 6f 68 75 6e 64 72 65 64 74 77 65  ee twohundredtwe
12e0: 6e 74 79 66 6f 75 72 20 74 77 6f 68 75 6e 64 72  ntyfour twohundr
12f0: 65 64 74 77 65 6e 74 79 66 69 76 65 0a 20 20 74  edtwentyfive.  t
1300: 77 6f 68 75 6e 64 72 65 64 74 77 65 6e 74 79 73  wohundredtwentys
1310: 69 78 20 74 77 6f 68 75 6e 64 72 65 64 74 77 65  ix twohundredtwe
1320: 6e 74 79 73 65 76 65 6e 20 74 77 6f 68 75 6e 64  ntyseven twohund
1330: 72 65 64 74 77 65 6e 74 79 65 69 67 68 74 0a 20  redtwentyeight. 
1340: 20 74 77 6f 68 75 6e 64 72 65 64 74 77 65 6e 74   twohundredtwent
1350: 79 6e 69 6e 65 20 74 77 6f 68 75 6e 64 72 65 64  ynine twohundred
1360: 74 68 69 72 74 79 20 74 77 6f 68 75 6e 64 72 65  thirty twohundre
1370: 64 74 68 69 72 74 79 6f 6e 65 0a 20 20 74 77 6f  dthirtyone.  two
1380: 68 75 6e 64 72 65 64 74 68 69 72 74 79 74 77 6f  hundredthirtytwo
1390: 20 74 77 6f 68 75 6e 64 72 65 64 74 68 69 72 74   twohundredthirt
13a0: 79 74 68 72 65 65 20 74 77 6f 68 75 6e 64 72 65  ythree twohundre
13b0: 64 74 68 69 72 74 79 66 6f 75 72 0a 20 20 74 77  dthirtyfour.  tw
13c0: 6f 68 75 6e 64 72 65 64 74 68 69 72 74 79 66 69  ohundredthirtyfi
13d0: 76 65 20 74 77 6f 68 75 6e 64 72 65 64 74 68 69  ve twohundredthi
13e0: 72 74 79 73 69 78 20 74 77 6f 68 75 6e 64 72 65  rtysix twohundre
13f0: 64 74 68 69 72 74 79 73 65 76 65 6e 0a 20 20 74  dthirtyseven.  t
1400: 77 6f 68 75 6e 64 72 65 64 74 68 69 72 74 79 65  wohundredthirtye
1410: 69 67 68 74 20 74 77 6f 68 75 6e 64 72 65 64 74  ight twohundredt
1420: 68 69 72 74 79 6e 69 6e 65 20 74 77 6f 68 75 6e  hirtynine twohun
1430: 64 72 65 64 66 6f 72 74 79 0a 20 20 74 77 6f 68  dredforty.  twoh
1440: 75 6e 64 72 65 64 66 6f 72 74 79 6f 6e 65 20 74  undredfortyone t
1450: 77 6f 68 75 6e 64 72 65 64 66 6f 72 74 79 74 77  wohundredfortytw
1460: 6f 20 74 77 6f 68 75 6e 64 72 65 64 66 6f 72 74  o twohundredfort
1470: 79 74 68 72 65 65 0a 20 20 74 77 6f 68 75 6e 64  ythree.  twohund
1480: 72 65 64 66 6f 72 74 79 66 6f 75 72 20 74 77 6f  redfortyfour two
1490: 68 75 6e 64 72 65 64 66 6f 72 74 79 66 69 76 65  hundredfortyfive
14a0: 20 74 77 6f 68 75 6e 64 72 65 64 66 6f 72 74 79   twohundredforty
14b0: 73 69 78 0a 20 20 74 77 6f 68 75 6e 64 72 65 64  six.  twohundred
14c0: 66 6f 72 74 79 73 65 76 65 6e 20 74 77 6f 68 75  fortyseven twohu
14d0: 6e 64 72 65 64 66 6f 72 74 79 65 69 67 68 74 20  ndredfortyeight 
14e0: 74 77 6f 68 75 6e 64 72 65 64 66 6f 72 74 79 6e  twohundredfortyn
14f0: 69 6e 65 0a 20 20 74 77 6f 68 75 6e 64 72 65 64  ine.  twohundred
1500: 66 69 66 74 79 20 74 77 6f 68 75 6e 64 72 65 64  fifty twohundred
1510: 66 69 66 74 79 6f 6e 65 20 74 77 6f 68 75 6e 64  fiftyone twohund
1520: 72 65 64 66 69 66 74 79 74 77 6f 20 74 77 6f 68  redfiftytwo twoh
1530: 75 6e 64 72 65 64 66 69 66 74 79 74 68 72 65 65  undredfiftythree
1540: 0a 20 20 74 77 6f 68 75 6e 64 72 65 64 66 69 66  .  twohundredfif
1550: 74 79 66 6f 75 72 20 74 77 6f 68 75 6e 64 72 65  tyfour twohundre
1560: 64 66 69 66 74 79 66 69 76 65 20 74 77 6f 68 75  dfiftyfive twohu
1570: 6e 64 72 65 64 66 69 66 74 79 73 69 78 0a 20 20  ndredfiftysix.  
1580: 74 77 6f 68 75 6e 64 72 65 64 66 69 66 74 79 73  twohundredfiftys
1590: 65 76 65 6e 20 74 77 6f 68 75 6e 64 72 65 64 66  even twohundredf
15a0: 69 66 74 79 65 69 67 68 74 20 74 77 6f 68 75 6e  iftyeight twohun
15b0: 64 72 65 64 66 69 66 74 79 6e 69 6e 65 0a 20 20  dredfiftynine.  
15c0: 74 77 6f 68 75 6e 64 72 65 64 73 69 78 74 79 20  twohundredsixty 
15d0: 74 77 6f 68 75 6e 64 72 65 64 73 69 78 74 79 6f  twohundredsixtyo
15e0: 6e 65 20 74 77 6f 68 75 6e 64 72 65 64 73 69 78  ne twohundredsix
15f0: 74 79 74 77 6f 20 74 77 6f 68 75 6e 64 72 65 64  tytwo twohundred
1600: 73 69 78 74 79 74 68 72 65 65 0a 20 20 74 77 6f  sixtythree.  two
1610: 68 75 6e 64 72 65 64 73 69 78 74 79 66 6f 75 72  hundredsixtyfour
1620: 20 74 77 6f 68 75 6e 64 72 65 64 73 69 78 74 79   twohundredsixty
1630: 66 69 76 65 20 74 77 6f 68 75 6e 64 72 65 64 73  five twohundreds
1640: 69 78 74 79 73 69 78 0a 20 20 74 77 6f 68 75 6e  ixtysix.  twohun
1650: 64 72 65 64 73 69 78 74 79 73 65 76 65 6e 20 74  dredsixtyseven t
1660: 77 6f 68 75 6e 64 72 65 64 73 69 78 74 79 65 69  wohundredsixtyei
1670: 67 68 74 20 74 77 6f 68 75 6e 64 72 65 64 73 69  ght twohundredsi
1680: 78 74 79 6e 69 6e 65 0a 20 20 74 77 6f 68 75 6e  xtynine.  twohun
1690: 64 72 65 64 73 65 76 65 6e 74 79 20 74 77 6f 68  dredseventy twoh
16a0: 75 6e 64 72 65 64 73 65 76 65 6e 74 79 6f 6e 65  undredseventyone
16b0: 20 74 77 6f 68 75 6e 64 72 65 64 73 65 76 65 6e   twohundredseven
16c0: 74 79 74 77 6f 0a 20 20 74 77 6f 68 75 6e 64 72  tytwo.  twohundr
16d0: 65 64 73 65 76 65 6e 74 79 74 68 72 65 65 20 74  edseventythree t
16e0: 77 6f 68 75 6e 64 72 65 64 73 65 76 65 6e 74 79  wohundredseventy
16f0: 66 6f 75 72 20 74 77 6f 68 75 6e 64 72 65 64 73  four twohundreds
1700: 65 76 65 6e 74 79 66 69 76 65 0a 20 20 74 77 6f  eventyfive.  two
1710: 68 75 6e 64 72 65 64 73 65 76 65 6e 74 79 73 69  hundredseventysi
1720: 78 20 74 77 6f 68 75 6e 64 72 65 64 73 65 76 65  x twohundredseve
1730: 6e 74 79 73 65 76 65 6e 20 74 77 6f 68 75 6e 64  ntyseven twohund
1740: 72 65 64 73 65 76 65 6e 74 79 65 69 67 68 74 0a  redseventyeight.
1750: 20 20 74 77 6f 68 75 6e 64 72 65 64 73 65 76 65    twohundredseve
1760: 6e 74 79 6e 69 6e 65 20 74 77 6f 68 75 6e 64 72  ntynine twohundr
1770: 65 64 65 69 67 68 74 79 20 74 77 6f 68 75 6e 64  edeighty twohund
1780: 72 65 64 65 69 67 68 74 79 6f 6e 65 0a 20 20 74  redeightyone.  t
1790: 77 6f 68 75 6e 64 72 65 64 65 69 67 68 74 79 74  wohundredeightyt
17a0: 77 6f 20 74 77 6f 68 75 6e 64 72 65 64 65 69 67  wo twohundredeig
17b0: 68 74 79 74 68 72 65 65 20 74 77 6f 68 75 6e 64  htythree twohund
17c0: 72 65 64 65 69 67 68 74 79 66 6f 75 72 0a 20 20  redeightyfour.  
17d0: 74 77 6f 68 75 6e 64 72 65 64 65 69 67 68 74 79  twohundredeighty
17e0: 66 69 76 65 20 74 77 6f 68 75 6e 64 72 65 64 65  five twohundrede
17f0: 69 67 68 74 79 73 69 78 20 74 77 6f 68 75 6e 64  ightysix twohund
1800: 72 65 64 65 69 67 68 74 79 73 65 76 65 6e 0a 20  redeightyseven. 
1810: 20 74 77 6f 68 75 6e 64 72 65 64 65 69 67 68 74   twohundredeight
1820: 79 65 69 67 68 74 20 74 77 6f 68 75 6e 64 72 65  yeight twohundre
1830: 64 65 69 67 68 74 79 6e 69 6e 65 20 74 77 6f 68  deightynine twoh
1840: 75 6e 64 72 65 64 6e 69 6e 65 74 79 0a 20 20 74  undredninety.  t
1850: 77 6f 68 75 6e 64 72 65 64 6e 69 6e 65 74 79 6f  wohundredninetyo
1860: 6e 65 20 74 77 6f 68 75 6e 64 72 65 64 6e 69 6e  ne twohundrednin
1870: 65 74 79 74 77 6f 20 74 77 6f 68 75 6e 64 72 65  etytwo twohundre
1880: 64 6e 69 6e 65 74 79 74 68 72 65 65 0a 20 20 74  dninetythree.  t
1890: 77 6f 68 75 6e 64 72 65 64 6e 69 6e 65 74 79 66  wohundredninetyf
18a0: 6f 75 72 20 74 77 6f 68 75 6e 64 72 65 64 6e 69  our twohundredni
18b0: 6e 65 74 79 66 69 76 65 20 74 77 6f 68 75 6e 64  netyfive twohund
18c0: 72 65 64 6e 69 6e 65 74 79 73 69 78 0a 20 20 74  redninetysix.  t
18d0: 77 6f 68 75 6e 64 72 65 64 6e 69 6e 65 74 79 73  wohundredninetys
18e0: 65 76 65 6e 20 74 77 6f 68 75 6e 64 72 65 64 6e  even twohundredn
18f0: 69 6e 65 74 79 65 69 67 68 74 20 74 77 6f 68 75  inetyeight twohu
1900: 6e 64 72 65 64 6e 69 6e 65 74 79 6e 69 6e 65 0a  ndredninetynine.
1910: 20 20 74 68 72 65 65 68 75 6e 64 72 65 64 0a 7d    threehundred.}
1920: 5d 0a 0a 66 6f 72 65 61 63 68 20 7b 44 4f 5f 4d  ]..foreach {DO_M
1930: 41 4c 4c 4f 43 5f 54 45 53 54 20 65 6e 63 7d 20  ALLOC_TEST enc} 
1940: 7b 0a 20 20 30 20 75 74 66 38 0a 20 20 31 20 75  {.  0 utf8.  1 u
1950: 74 66 38 0a 20 20 31 20 75 74 66 31 36 0a 7d 20  tf8.  1 utf16.} 
1960: 7b 0a 0a 20 20 64 62 20 63 6c 6f 73 65 0a 20 20  {..  db close.  
1970: 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74  forcedelete test
1980: 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 20 64 62  .db.  sqlite3 db
1990: 20 74 65 73 74 2e 64 62 0a 20 20 73 71 6c 69 74   test.db.  sqlit
19a0: 65 33 5f 64 62 5f 63 6f 6e 66 69 67 5f 6c 6f 6f  e3_db_config_loo
19b0: 6b 61 73 69 64 65 20 64 62 20 30 20 30 20 30 0a  kaside db 0 0 0.
19c0: 20 20 64 62 20 65 76 61 6c 20 22 50 52 41 47 4d    db eval "PRAGM
19d0: 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 5c 22 24  A encoding = \"$
19e0: 65 6e 63 5c 22 22 0a 0a 20 20 23 20 53 65 74 20  enc\""..  # Set 
19f0: 76 61 72 69 61 62 6c 65 20 24 54 20 74 6f 20 74  variable $T to t
1a00: 68 65 20 74 65 73 74 20 6e 61 6d 65 20 70 72 65  he test name pre
1a10: 66 69 78 20 66 6f 72 20 74 68 69 73 20 69 74 65  fix for this ite
1a20: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 6f  ration of the lo
1a30: 6f 70 2e 0a 20 20 23 0a 20 20 73 65 74 20 54 20  op..  #.  set T 
1a40: 22 66 74 73 33 73 6e 69 70 70 65 74 2d 31 2e 24  "fts3snippet-1.$
1a50: 65 6e 63 22 0a 0a 20 20 23 23 23 23 23 23 23 23  enc"..  ########
1a60: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a80: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1a90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1aa0: 23 23 0a 20 20 23 20 54 65 73 74 20 74 68 65 20  ##.  # Test the 
1ab0: 6f 66 66 73 65 74 20 66 75 6e 63 74 69 6f 6e 2e  offset function.
1ac0: 0a 20 20 23 0a 20 20 64 6f 5f 74 65 73 74 20 24  .  #.  do_test $
1ad0: 54 2e 31 2e 31 20 7b 0a 20 20 20 20 65 78 65 63  T.1.1 {.    exec
1ae0: 73 71 6c 20 7b 0a 20 20 20 20 20 20 43 52 45 41  sql {.      CREA
1af0: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
1b00: 20 66 74 20 55 53 49 4e 47 20 66 74 73 33 3b 0a   ft USING fts3;.
1b10: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
1b20: 4f 20 66 74 20 56 41 4c 55 45 53 28 27 78 78 78  O ft VALUES('xxx
1b30: 20 78 78 78 20 78 78 78 20 78 78 78 27 29 3b 0a   xxx xxx xxx');.
1b40: 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64      }.  } {}.  d
1b50: 6f 5f 6f 66 66 73 65 74 73 5f 74 65 73 74 20 24  o_offsets_test $
1b60: 54 2e 31 2e 32 20 7b 78 78 78 7d 20 7b 30 20 30  T.1.2 {xxx} {0 0
1b70: 20 30 20 33 20 30 20 30 20 34 20 33 20 30 20 30   0 3 0 0 4 3 0 0
1b80: 20 38 20 33 20 30 20 30 20 31 32 20 33 7d 0a 20   8 3 0 0 12 3}. 
1b90: 20 64 6f 5f 6f 66 66 73 65 74 73 5f 74 65 73 74   do_offsets_test
1ba0: 20 24 54 2e 31 2e 33 20 7b 22 78 78 78 20 78 78   $T.1.3 {"xxx xx
1bb0: 78 22 7d 20 7b 0a 20 20 20 20 20 20 30 20 30 20  x"} {.      0 0 
1bc0: 20 30 20 33 20 20 20 20 20 30 20 30 20 20 34 20   0 3     0 0  4 
1bd0: 33 20 20 20 20 20 30 20 31 20 20 34 20 33 20 20  3     0 1  4 3  
1be0: 20 20 20 30 20 30 20 20 38 20 33 20 0a 20 20 20     0 0  8 3 .   
1bf0: 20 20 20 30 20 31 20 20 38 20 33 20 20 20 20 20     0 1  8 3     
1c00: 30 20 31 20 31 32 20 33 0a 20 20 7d 0a 20 20 64  0 1 12 3.  }.  d
1c10: 6f 5f 6f 66 66 73 65 74 73 5f 74 65 73 74 20 24  o_offsets_test $
1c20: 54 2e 31 2e 34 20 7b 22 78 78 78 20 78 78 78 22  T.1.4 {"xxx xxx"
1c30: 20 78 78 78 7d 20 7b 0a 20 20 20 20 20 20 30 20   xxx} {.      0 
1c40: 30 20 20 30 20 33 20 20 20 20 20 30 20 32 20 20  0  0 3     0 2  
1c50: 30 20 33 20 20 20 20 20 30 20 30 20 20 34 20 33  0 3     0 0  4 3
1c60: 20 20 20 20 20 30 20 31 20 20 34 20 33 20 0a 20       0 1  4 3 . 
1c70: 20 20 20 20 20 30 20 32 20 20 34 20 33 20 20 20       0 2  4 3   
1c80: 20 20 30 20 30 20 20 38 20 33 20 20 20 20 20 30    0 0  8 3     0
1c90: 20 31 20 20 38 20 33 20 20 20 20 20 30 20 32 20   1  8 3     0 2 
1ca0: 20 38 20 33 20 0a 20 20 20 20 20 20 30 20 31 20   8 3 .      0 1 
1cb0: 31 32 20 33 20 20 20 20 20 30 20 32 20 31 32 20  12 3     0 2 12 
1cc0: 33 0a 20 20 7d 0a 20 20 64 6f 5f 6f 66 66 73 65  3.  }.  do_offse
1cd0: 74 73 5f 74 65 73 74 20 24 54 2e 31 2e 35 20 7b  ts_test $T.1.5 {
1ce0: 78 78 78 20 22 78 78 78 20 78 78 78 22 7d 20 7b  xxx "xxx xxx"} {
1cf0: 0a 20 20 20 20 20 20 30 20 30 20 20 30 20 33 20  .      0 0  0 3 
1d00: 20 20 20 20 30 20 31 20 20 30 20 33 20 20 20 20      0 1  0 3    
1d10: 20 30 20 30 20 20 34 20 33 20 20 20 20 20 30 20   0 0  4 3     0 
1d20: 31 20 20 34 20 33 20 0a 20 20 20 20 20 20 30 20  1  4 3 .      0 
1d30: 32 20 20 34 20 33 20 20 20 20 20 30 20 30 20 20  2  4 3     0 0  
1d40: 38 20 33 20 20 20 20 20 30 20 31 20 20 38 20 33  8 3     0 1  8 3
1d50: 20 20 20 20 20 30 20 32 20 20 38 20 33 20 0a 20       0 2  8 3 . 
1d60: 20 20 20 20 20 30 20 30 20 31 32 20 33 20 20 20       0 0 12 3   
1d70: 20 20 30 20 32 20 31 32 20 33 0a 20 20 7d 0a 0a    0 2 12 3.  }..
1d80: 20 20 64 6f 5f 74 65 73 74 20 24 54 2e 32 2e 31    do_test $T.2.1
1d90: 20 7b 0a 20 20 20 20 73 65 74 20 76 31 20 5b 6c   {.    set v1 [l
1da0: 72 61 6e 67 65 20 24 6e 75 6d 62 65 72 73 20 30  range $numbers 0
1db0: 20 39 39 5d 0a 20 20 20 20 65 78 65 63 73 71 6c   99].    execsql
1dc0: 20 7b 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41   {.      DROP TA
1dd0: 42 4c 45 20 49 46 20 45 58 49 53 54 53 20 66 74  BLE IF EXISTS ft
1de0: 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 56  ;.      CREATE V
1df0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 66 74 20  IRTUAL TABLE ft 
1e00: 55 53 49 4e 47 20 66 74 73 33 28 61 2c 20 62 29  USING fts3(a, b)
1e10: 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  ;.      INSERT I
1e20: 4e 54 4f 20 66 74 20 56 41 4c 55 45 53 28 24 76  NTO ft VALUES($v
1e30: 31 2c 20 24 6e 75 6d 62 65 72 73 29 3b 0a 20 20  1, $numbers);.  
1e40: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1e50: 66 74 20 56 41 4c 55 45 53 28 24 76 31 2c 20 4e  ft VALUES($v1, N
1e60: 55 4c 4c 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  ULL);.    }.  } 
1e70: 7b 7d 0a 0a 20 20 73 65 74 20 6f 66 66 20 5b 73  {}..  set off [s
1e80: 74 72 69 6e 67 20 66 69 72 73 74 20 22 74 77 6f  tring first "two
1e90: 68 75 6e 64 72 65 64 20 22 20 24 6e 75 6d 62 65  hundred " $numbe
1ea0: 72 73 5d 0a 20 20 64 6f 5f 6f 66 66 73 65 74 73  rs].  do_offsets
1eb0: 5f 74 65 73 74 20 24 54 2e 32 2e 31 20 7b 74 77  _test $T.2.1 {tw
1ec0: 6f 68 75 6e 64 72 65 64 7d 20 5b 6c 69 73 74 20  ohundred} [list 
1ed0: 31 20 30 20 24 6f 66 66 20 31 30 5d 0a 0a 20 20  1 0 $off 10]..  
1ee0: 73 65 74 20 6f 66 66 20 5b 73 74 72 69 6e 67 20  set off [string 
1ef0: 66 69 72 73 74 20 22 6f 6e 65 68 75 6e 64 72 65  first "onehundre
1f00: 64 20 22 20 24 6e 75 6d 62 65 72 73 5d 0a 20 20  d " $numbers].  
1f10: 64 6f 5f 6f 66 66 73 65 74 73 5f 74 65 73 74 20  do_offsets_test 
1f20: 24 54 2e 32 2e 32 20 7b 6f 6e 65 68 75 6e 64 72  $T.2.2 {onehundr
1f30: 65 64 7d 20 5c 0a 20 20 20 20 5b 6c 69 73 74 20  ed} \.    [list 
1f40: 30 20 30 20 24 6f 66 66 20 31 30 20 31 20 30 20  0 0 $off 10 1 0 
1f50: 24 6f 66 66 20 31 30 5d 20 5b 6c 69 73 74 20 30  $off 10] [list 0
1f60: 20 30 20 24 6f 66 66 20 31 30 5d 0a 0a 20 20 23   0 $off 10]..  #
1f70: 20 54 65 73 74 20 61 20 63 6f 72 72 75 70 74 69   Test a corrupti
1f80: 6f 6e 20 63 61 73 65 3a 0a 20 20 65 78 65 63 73  on case:.  execs
1f90: 71 6c 20 7b 20 55 50 44 41 54 45 20 66 74 5f 63  ql { UPDATE ft_c
1fa0: 6f 6e 74 65 6e 74 20 53 45 54 20 63 31 62 20 3d  ontent SET c1b =
1fb0: 20 27 68 65 6c 6c 6f 20 77 6f 72 6c 64 27 20 57   'hello world' W
1fc0: 48 45 52 45 20 63 31 62 20 3d 20 24 6e 75 6d 62  HERE c1b = $numb
1fd0: 65 72 73 20 7d 0a 20 20 64 6f 5f 65 72 72 6f 72  ers }.  do_error
1fe0: 5f 74 65 73 74 20 24 54 2e 32 2e 33 20 7b 0a 20  _test $T.2.3 {. 
1ff0: 20 20 20 53 45 4c 45 43 54 20 6f 66 66 73 65 74     SELECT offset
2000: 73 28 66 74 29 20 46 52 4f 4d 20 66 74 20 57 48  s(ft) FROM ft WH
2010: 45 52 45 20 66 74 20 4d 41 54 43 48 20 27 6f 6e  ERE ft MATCH 'on
2020: 65 68 75 6e 64 72 65 64 27 0a 20 20 7d 20 7b 64  ehundred'.  } {d
2030: 61 74 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61  atabase disk ima
2040: 67 65 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 7d  ge is malformed}
2050: 0a 20 20 0a 20 20 23 23 23 23 23 23 23 23 23 23  .  .  ##########
2060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2080: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20a0: 0a 20 20 23 20 54 65 73 74 20 74 68 65 20 73 6e  .  # Test the sn
20b0: 69 70 70 65 74 20 66 75 6e 63 74 69 6f 6e 2e 0a  ippet function..
20c0: 20 20 23 0a 20 20 70 72 6f 63 20 64 6f 5f 73 6e    #.  proc do_sn
20d0: 69 70 70 65 74 5f 74 65 73 74 20 7b 6e 61 6d 65  ippet_test {name
20e0: 20 65 78 70 72 20 69 43 6f 6c 20 6e 54 6f 6b 20   expr iCol nTok 
20f0: 61 72 67 73 7d 20 7b 0a 20 20 20 20 73 65 74 20  args} {.    set 
2100: 72 65 73 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66  res [list].    f
2110: 6f 72 65 61 63 68 20 61 20 24 61 72 67 73 20 7b  oreach a $args {
2120: 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 73 74   lappend res [st
2130: 72 69 6e 67 20 74 72 69 6d 20 24 61 5d 20 7d 0a  ring trim $a] }.
2140: 20 20 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74 65      do_select_te
2150: 73 74 20 24 6e 61 6d 65 20 7b 0a 20 20 20 20 20  st $name {.     
2160: 20 53 45 4c 45 43 54 20 73 6e 69 70 70 65 74 28   SELECT snippet(
2170: 66 74 2c 27 7b 27 2c 27 7d 27 2c 27 2e 2e 2e 27  ft,'{','}','...'
2180: 2c 24 69 43 6f 6c 2c 24 6e 54 6f 6b 29 20 46 52  ,$iCol,$nTok) FR
2190: 4f 4d 20 66 74 20 57 48 45 52 45 20 66 74 20 4d  OM ft WHERE ft M
21a0: 41 54 43 48 20 24 65 78 70 72 0a 20 20 20 20 7d  ATCH $expr.    }
21b0: 20 24 72 65 73 0a 20 20 7d 0a 20 20 64 6f 5f 74   $res.  }.  do_t
21c0: 65 73 74 20 24 54 2e 33 2e 31 20 7b 0a 20 20 20  est $T.3.1 {.   
21d0: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
21e0: 20 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45   DROP TABLE IF E
21f0: 58 49 53 54 53 20 66 74 3b 0a 20 20 20 20 20 20  XISTS ft;.      
2200: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
2210: 41 42 4c 45 20 66 74 20 55 53 49 4e 47 20 66 74  ABLE ft USING ft
2220: 73 33 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54  s3;.      INSERT
2230: 20 49 4e 54 4f 20 66 74 20 56 41 4c 55 45 53 28   INTO ft VALUES(
2240: 27 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66  'one two three f
2250: 6f 75 72 20 66 69 76 65 20 73 69 78 20 73 65 76  our five six sev
2260: 65 6e 20 65 69 67 68 74 20 6e 69 6e 65 20 74 65  en eight nine te
2270: 6e 27 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b  n');.    }.  } {
2280: 7d 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74  }.  do_snippet_t
2290: 65 73 74 20 24 54 2e 33 2e 32 20 20 6f 6e 65 20  est $T.3.2  one 
22a0: 20 20 20 30 20 35 20 22 7b 6f 6e 65 7d 20 74 77     0 5 "{one} tw
22b0: 6f 20 74 68 72 65 65 20 66 6f 75 72 20 66 69 76  o three four fiv
22c0: 65 2e 2e 2e 22 0a 20 20 64 6f 5f 73 6e 69 70 70  e...".  do_snipp
22d0: 65 74 5f 74 65 73 74 20 24 54 2e 33 2e 33 20 20  et_test $T.3.3  
22e0: 74 77 6f 20 20 20 20 30 20 35 20 22 6f 6e 65 20  two    0 5 "one 
22f0: 7b 74 77 6f 7d 20 74 68 72 65 65 20 66 6f 75 72  {two} three four
2300: 20 66 69 76 65 2e 2e 2e 22 0a 20 20 64 6f 5f 73   five...".  do_s
2310: 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e 33  nippet_test $T.3
2320: 2e 34 20 20 74 68 72 65 65 20 20 30 20 35 20 22  .4  three  0 5 "
2330: 6f 6e 65 20 74 77 6f 20 7b 74 68 72 65 65 7d 20  one two {three} 
2340: 66 6f 75 72 20 66 69 76 65 2e 2e 2e 22 0a 20 20  four five...".  
2350: 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20  do_snippet_test 
2360: 24 54 2e 33 2e 35 20 20 66 6f 75 72 20 20 20 30  $T.3.5  four   0
2370: 20 35 20 22 2e 2e 2e 74 77 6f 20 74 68 72 65 65   5 "...two three
2380: 20 7b 66 6f 75 72 7d 20 66 69 76 65 20 73 69 78   {four} five six
2390: 2e 2e 2e 22 0a 20 20 64 6f 5f 73 6e 69 70 70 65  ...".  do_snippe
23a0: 74 5f 74 65 73 74 20 24 54 2e 33 2e 36 20 20 66  t_test $T.3.6  f
23b0: 69 76 65 20 20 20 30 20 35 20 22 2e 2e 2e 74 68  ive   0 5 "...th
23c0: 72 65 65 20 66 6f 75 72 20 7b 66 69 76 65 7d 20  ree four {five} 
23d0: 73 69 78 20 73 65 76 65 6e 2e 2e 2e 22 0a 20 20  six seven...".  
23e0: 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20  do_snippet_test 
23f0: 24 54 2e 33 2e 37 20 20 73 69 78 20 20 20 20 30  $T.3.7  six    0
2400: 20 35 20 22 2e 2e 2e 66 6f 75 72 20 66 69 76 65   5 "...four five
2410: 20 7b 73 69 78 7d 20 73 65 76 65 6e 20 65 69 67   {six} seven eig
2420: 68 74 2e 2e 2e 22 0a 20 20 64 6f 5f 73 6e 69 70  ht...".  do_snip
2430: 70 65 74 5f 74 65 73 74 20 24 54 2e 33 2e 38 20  pet_test $T.3.8 
2440: 20 73 65 76 65 6e 20 20 30 20 35 20 22 2e 2e 2e   seven  0 5 "...
2450: 66 69 76 65 20 73 69 78 20 7b 73 65 76 65 6e 7d  five six {seven}
2460: 20 65 69 67 68 74 20 6e 69 6e 65 2e 2e 2e 22 0a   eight nine...".
2470: 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73    do_snippet_tes
2480: 74 20 24 54 2e 33 2e 39 20 20 65 69 67 68 74 20  t $T.3.9  eight 
2490: 20 30 20 35 20 22 2e 2e 2e 73 69 78 20 73 65 76   0 5 "...six sev
24a0: 65 6e 20 7b 65 69 67 68 74 7d 20 6e 69 6e 65 20  en {eight} nine 
24b0: 74 65 6e 22 0a 20 20 64 6f 5f 73 6e 69 70 70 65  ten".  do_snippe
24c0: 74 5f 74 65 73 74 20 24 54 2e 33 2e 31 30 20 6e  t_test $T.3.10 n
24d0: 69 6e 65 20 20 20 30 20 35 20 22 2e 2e 2e 73 69  ine   0 5 "...si
24e0: 78 20 73 65 76 65 6e 20 65 69 67 68 74 20 7b 6e  x seven eight {n
24f0: 69 6e 65 7d 20 74 65 6e 22 0a 20 20 64 6f 5f 73  ine} ten".  do_s
2500: 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e 33  nippet_test $T.3
2510: 2e 31 31 20 74 65 6e 20 20 20 20 30 20 35 20 22  .11 ten    0 5 "
2520: 2e 2e 2e 73 69 78 20 73 65 76 65 6e 20 65 69 67  ...six seven eig
2530: 68 74 20 6e 69 6e 65 20 7b 74 65 6e 7d 22 0a 20  ht nine {ten}". 
2540: 20 0a 20 20 64 6f 5f 74 65 73 74 20 24 54 2e 34   .  do_test $T.4
2550: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
2560: 20 7b 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20   {.      INSERT 
2570: 49 4e 54 4f 20 66 74 20 56 41 4c 55 45 53 28 0a  INTO ft VALUES(.
2580: 20 20 20 20 20 20 20 20 20 20 20 27 6f 6e 65 20             'one 
2590: 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72 20 66  two three four f
25a0: 69 76 65 20 27 0a 20 20 20 20 20 20 20 20 7c 7c  ive '.        ||
25b0: 20 27 73 69 78 20 73 65 76 65 6e 20 65 69 67 68   'six seven eigh
25c0: 74 20 6e 69 6e 65 20 74 65 6e 20 27 0a 20 20 20  t nine ten '.   
25d0: 20 20 20 20 20 7c 7c 20 27 65 6c 65 76 65 6e 20       || 'eleven 
25e0: 74 77 65 6c 76 65 20 74 68 69 72 74 65 65 6e 20  twelve thirteen 
25f0: 66 6f 75 72 74 65 65 6e 20 66 69 66 74 65 65 6e  fourteen fifteen
2600: 20 27 0a 20 20 20 20 20 20 20 20 7c 7c 20 27 73   '.        || 's
2610: 69 78 74 65 65 6e 20 73 65 76 65 6e 74 65 65 6e  ixteen seventeen
2620: 20 65 69 67 68 74 65 65 6e 20 6e 69 6e 65 74 65   eighteen ninete
2630: 65 6e 20 74 77 65 6e 74 79 20 27 0a 20 20 20 20  en twenty '.    
2640: 20 20 20 20 7c 7c 20 27 6f 6e 65 20 74 77 6f 20      || 'one two 
2650: 74 68 72 65 65 20 66 6f 75 72 20 66 69 76 65 20  three four five 
2660: 27 0a 20 20 20 20 20 20 20 20 7c 7c 20 27 73 69  '.        || 'si
2670: 78 20 73 65 76 65 6e 20 65 69 67 68 74 20 6e 69  x seven eight ni
2680: 6e 65 20 74 65 6e 20 27 0a 20 20 20 20 20 20 20  ne ten '.       
2690: 20 7c 7c 20 27 65 6c 65 76 65 6e 20 74 77 65 6c   || 'eleven twel
26a0: 76 65 20 74 68 69 72 74 65 65 6e 20 66 6f 75 72  ve thirteen four
26b0: 74 65 65 6e 20 66 69 66 74 65 65 6e 20 27 0a 20  teen fifteen '. 
26c0: 20 20 20 20 20 20 20 7c 7c 20 27 73 69 78 74 65         || 'sixte
26d0: 65 6e 20 73 65 76 65 6e 74 65 65 6e 20 65 69 67  en seventeen eig
26e0: 68 74 65 65 6e 20 6e 69 6e 65 74 65 65 6e 20 74  hteen nineteen t
26f0: 77 65 6e 74 79 27 0a 20 20 20 20 20 20 29 3b 0a  wenty'.      );.
2700: 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 0a      }.  } {}.  .
2710: 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73    do_snippet_tes
2720: 74 20 24 54 2e 34 2e 32 20 7b 6f 6e 65 20 6e 69  t $T.4.2 {one ni
2730: 6e 65 7d 20 30 20 35 20 7b 0a 20 20 20 20 20 7b  ne} 0 5 {.     {
2740: 6f 6e 65 7d 20 74 77 6f 20 74 68 72 65 65 2e 2e  one} two three..
2750: 2e 65 69 67 68 74 20 7b 6e 69 6e 65 7d 20 74 65  .eight {nine} te
2760: 6e 0a 20 20 7d 20 7b 0a 20 20 20 20 20 7b 6f 6e  n.  } {.     {on
2770: 65 7d 20 74 77 6f 20 74 68 72 65 65 2e 2e 2e 65  e} two three...e
2780: 69 67 68 74 20 7b 6e 69 6e 65 7d 20 74 65 6e 2e  ight {nine} ten.
2790: 2e 2e 0a 20 20 7d 0a 20 20 0a 20 20 64 6f 5f 73  ...  }.  .  do_s
27a0: 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e 34  nippet_test $T.4
27b0: 2e 33 20 7b 6f 6e 65 20 6e 69 6e 65 7d 20 30 20  .3 {one nine} 0 
27c0: 2d 35 20 7b 0a 20 20 20 20 20 7b 6f 6e 65 7d 20  -5 {.     {one} 
27d0: 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72 20 66  two three four f
27e0: 69 76 65 2e 2e 2e 73 69 78 20 73 65 76 65 6e 20  ive...six seven 
27f0: 65 69 67 68 74 20 7b 6e 69 6e 65 7d 20 74 65 6e  eight {nine} ten
2800: 0a 20 20 7d 20 7b 0a 20 20 20 20 20 7b 6f 6e 65  .  } {.     {one
2810: 7d 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72  } two three four
2820: 20 66 69 76 65 2e 2e 2e 73 65 76 65 6e 20 65 69   five...seven ei
2830: 67 68 74 20 7b 6e 69 6e 65 7d 20 74 65 6e 20 65  ght {nine} ten e
2840: 6c 65 76 65 6e 2e 2e 2e 0a 20 20 7d 0a 20 20 64  leven....  }.  d
2850: 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24  o_snippet_test $
2860: 54 2e 34 2e 33 20 7b 6f 6e 65 20 6e 69 6e 65 74  T.4.3 {one ninet
2870: 65 65 6e 7d 20 30 20 2d 35 20 7b 0a 20 20 20 20  een} 0 -5 {.    
2880: 20 2e 2e 2e 65 69 67 68 74 65 65 6e 20 7b 6e 69   ...eighteen {ni
2890: 6e 65 74 65 65 6e 7d 20 74 77 65 6e 74 79 20 7b  neteen} twenty {
28a0: 6f 6e 65 7d 20 74 77 6f 2e 2e 2e 0a 20 20 7d 0a  one} two....  }.
28b0: 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73    do_snippet_tes
28c0: 74 20 24 54 2e 34 2e 34 20 7b 74 77 6f 20 6e 69  t $T.4.4 {two ni
28d0: 6e 65 74 65 65 6e 7d 20 30 20 2d 35 20 7b 0a 20  neteen} 0 -5 {. 
28e0: 20 20 20 20 2e 2e 2e 65 69 67 68 74 65 65 6e 20      ...eighteen 
28f0: 7b 6e 69 6e 65 74 65 65 6e 7d 20 74 77 65 6e 74  {nineteen} twent
2900: 79 20 6f 6e 65 20 7b 74 77 6f 7d 2e 2e 2e 0a 20  y one {two}.... 
2910: 20 7d 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f   }.  do_snippet_
2920: 74 65 73 74 20 24 54 2e 34 2e 35 20 7b 74 68 72  test $T.4.5 {thr
2930: 65 65 20 6e 69 6e 65 74 65 65 6e 7d 20 30 20 2d  ee nineteen} 0 -
2940: 35 20 7b 0a 20 20 20 20 20 2e 2e 2e 7b 6e 69 6e  5 {.     ...{nin
2950: 65 74 65 65 6e 7d 20 74 77 65 6e 74 79 20 6f 6e  eteen} twenty on
2960: 65 20 74 77 6f 20 7b 74 68 72 65 65 7d 2e 2e 2e  e two {three}...
2970: 0a 20 20 7d 0a 20 20 0a 20 20 64 6f 5f 73 6e 69  .  }.  .  do_sni
2980: 70 70 65 74 5f 74 65 73 74 20 24 54 2e 34 2e 36  ppet_test $T.4.6
2990: 20 7b 66 6f 75 72 20 6e 69 6e 65 74 65 65 6e 7d   {four nineteen}
29a0: 20 30 20 2d 35 20 7b 0a 20 20 20 20 20 2e 2e 2e   0 -5 {.     ...
29b0: 74 77 6f 20 74 68 72 65 65 20 7b 66 6f 75 72 7d  two three {four}
29c0: 20 66 69 76 65 20 73 69 78 2e 2e 2e 73 65 76 65   five six...seve
29d0: 6e 74 65 65 6e 20 65 69 67 68 74 65 65 6e 20 7b  nteen eighteen {
29e0: 6e 69 6e 65 74 65 65 6e 7d 20 74 77 65 6e 74 79  nineteen} twenty
29f0: 20 6f 6e 65 2e 2e 2e 0a 20 20 7d 0a 20 20 64 6f   one....  }.  do
2a00: 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54  _snippet_test $T
2a10: 2e 34 2e 37 20 7b 66 6f 75 72 20 4e 45 41 52 20  .4.7 {four NEAR 
2a20: 6e 69 6e 65 74 65 65 6e 7d 20 30 20 2d 35 20 7b  nineteen} 0 -5 {
2a30: 0a 20 20 20 20 20 2e 2e 2e 73 65 76 65 6e 74 65  .     ...sevente
2a40: 65 6e 20 65 69 67 68 74 65 65 6e 20 7b 6e 69 6e  en eighteen {nin
2a50: 65 74 65 65 6e 7d 20 74 77 65 6e 74 79 20 6f 6e  eteen} twenty on
2a60: 65 2e 2e 2e 74 77 6f 20 74 68 72 65 65 20 7b 66  e...two three {f
2a70: 6f 75 72 7d 20 66 69 76 65 20 73 69 78 2e 2e 2e  our} five six...
2a80: 0a 20 20 7d 0a 20 20 0a 20 20 64 6f 5f 73 6e 69  .  }.  .  do_sni
2a90: 70 70 65 74 5f 74 65 73 74 20 24 54 2e 34 2e 38  ppet_test $T.4.8
2aa0: 20 7b 66 6f 75 72 20 6e 69 6e 65 74 65 65 6e 7d   {four nineteen}
2ab0: 20 30 20 35 20 7b 0a 20 20 20 20 20 2e 2e 2e 74   0 5 {.     ...t
2ac0: 68 72 65 65 20 7b 66 6f 75 72 7d 20 66 69 76 65  hree {four} five
2ad0: 2e 2e 2e 65 69 67 68 74 65 65 6e 20 7b 6e 69 6e  ...eighteen {nin
2ae0: 65 74 65 65 6e 7d 20 74 77 65 6e 74 79 2e 2e 2e  eteen} twenty...
2af0: 0a 20 20 7d 0a 20 20 64 6f 5f 73 6e 69 70 70 65  .  }.  do_snippe
2b00: 74 5f 74 65 73 74 20 24 54 2e 34 2e 39 20 7b 66  t_test $T.4.9 {f
2b10: 6f 75 72 20 4e 45 41 52 20 6e 69 6e 65 74 65 65  our NEAR ninetee
2b20: 6e 7d 20 30 20 35 20 7b 0a 20 20 20 20 20 2e 2e  n} 0 5 {.     ..
2b30: 2e 65 69 67 68 74 65 65 6e 20 7b 6e 69 6e 65 74  .eighteen {ninet
2b40: 65 65 6e 7d 20 74 77 65 6e 74 79 2e 2e 2e 74 68  een} twenty...th
2b50: 72 65 65 20 7b 66 6f 75 72 7d 20 66 69 76 65 2e  ree {four} five.
2b60: 2e 2e 0a 20 20 7d 0a 20 20 64 6f 5f 73 6e 69 70  ...  }.  do_snip
2b70: 70 65 74 5f 74 65 73 74 20 24 54 2e 34 2e 31 30  pet_test $T.4.10
2b80: 20 7b 66 6f 75 72 20 4e 45 41 52 20 6e 69 6e 65   {four NEAR nine
2b90: 74 65 65 6e 7d 20 30 20 2d 35 20 7b 0a 20 20 20  teen} 0 -5 {.   
2ba0: 20 20 2e 2e 2e 73 65 76 65 6e 74 65 65 6e 20 65    ...seventeen e
2bb0: 69 67 68 74 65 65 6e 20 7b 6e 69 6e 65 74 65 65  ighteen {ninetee
2bc0: 6e 7d 20 74 77 65 6e 74 79 20 6f 6e 65 2e 2e 2e  n} twenty one...
2bd0: 74 77 6f 20 74 68 72 65 65 20 7b 66 6f 75 72 7d  two three {four}
2be0: 20 66 69 76 65 20 73 69 78 2e 2e 2e 0a 20 20 7d   five six....  }
2bf0: 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65  .  do_snippet_te
2c00: 73 74 20 24 54 2e 34 2e 31 31 20 7b 66 6f 75 72  st $T.4.11 {four
2c10: 20 4e 4f 54 20 28 6e 69 6e 65 74 65 65 6e 20 74   NOT (nineteen t
2c20: 77 65 6e 74 79 6f 6e 65 29 7d 20 30 20 35 20 7b  wentyone)} 0 5 {
2c30: 0a 20 20 20 20 20 2e 2e 2e 74 77 6f 20 74 68 72  .     ...two thr
2c40: 65 65 20 7b 66 6f 75 72 7d 20 66 69 76 65 20 73  ee {four} five s
2c50: 69 78 2e 2e 2e 0a 20 20 7d 20 7b 0a 20 20 20 20  ix....  } {.    
2c60: 20 2e 2e 2e 74 77 6f 20 74 68 72 65 65 20 7b 66   ...two three {f
2c70: 6f 75 72 7d 20 66 69 76 65 20 73 69 78 2e 2e 2e  our} five six...
2c80: 0a 20 20 7d 0a 20 20 64 6f 5f 73 6e 69 70 70 65  .  }.  do_snippe
2c90: 74 5f 74 65 73 74 20 24 54 2e 34 2e 31 32 20 7b  t_test $T.4.12 {
2ca0: 66 6f 75 72 20 4f 52 20 6e 69 6e 65 74 65 65 6e  four OR nineteen
2cb0: 20 4e 45 41 52 20 74 77 65 6e 74 79 6f 6e 65 7d   NEAR twentyone}
2cc0: 20 30 20 35 20 7b 0a 20 20 20 20 20 2e 2e 2e 74   0 5 {.     ...t
2cd0: 77 6f 20 74 68 72 65 65 20 7b 66 6f 75 72 7d 20  wo three {four} 
2ce0: 66 69 76 65 20 73 69 78 2e 2e 2e 0a 20 20 7d 20  five six....  } 
2cf0: 7b 0a 20 20 20 20 20 2e 2e 2e 74 77 6f 20 74 68  {.     ...two th
2d00: 72 65 65 20 7b 66 6f 75 72 7d 20 66 69 76 65 20  ree {four} five 
2d10: 73 69 78 2e 2e 2e 0a 20 20 7d 0a 20 20 0a 20 20  six....  }.  .  
2d20: 64 6f 5f 74 65 73 74 20 24 54 2e 35 2e 31 20 7b  do_test $T.5.1 {
2d30: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
2d40: 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20       DROP TABLE 
2d50: 49 46 20 45 58 49 53 54 53 20 66 74 3b 0a 20 20  IF EXISTS ft;.  
2d60: 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55      CREATE VIRTU
2d70: 41 4c 20 54 41 42 4c 45 20 66 74 20 55 53 49 4e  AL TABLE ft USIN
2d80: 47 20 66 74 73 33 28 61 2c 20 62 2c 20 63 29 3b  G fts3(a, b, c);
2d90: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
2da0: 54 4f 20 66 74 20 56 41 4c 55 45 53 28 0a 20 20  TO ft VALUES(.  
2db0: 20 20 20 20 20 20 27 6f 6e 65 20 74 77 6f 20 74        'one two t
2dc0: 68 72 65 65 20 66 6f 75 72 20 66 69 76 65 27 2c  hree four five',
2dd0: 20 0a 20 20 20 20 20 20 20 20 27 66 6f 75 72 20   .        'four 
2de0: 66 69 76 65 20 73 69 78 20 73 65 76 65 6e 20 65  five six seven e
2df0: 69 67 68 74 27 2c 20 0a 20 20 20 20 20 20 20 20  ight', .        
2e00: 27 73 65 76 65 6e 20 65 69 67 68 74 20 6e 69 6e  'seven eight nin
2e10: 65 20 74 65 6e 20 65 6c 65 76 65 6e 27 0a 20 20  e ten eleven'.  
2e20: 20 20 20 20 29 3b 0a 20 20 20 20 7d 0a 20 20 7d      );.    }.  }
2e30: 20 7b 7d 0a 20 20 0a 20 20 64 6f 5f 73 6e 69 70   {}.  .  do_snip
2e40: 70 65 74 5f 74 65 73 74 20 24 54 2e 35 2e 32 20  pet_test $T.5.2 
2e50: 7b 66 69 76 65 7d 20 2d 31 20 33 20 7b 2e 2e 2e  {five} -1 3 {...
2e60: 74 68 72 65 65 20 66 6f 75 72 20 7b 66 69 76 65  three four {five
2e70: 7d 7d 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f  }}.  do_snippet_
2e80: 74 65 73 74 20 24 54 2e 35 2e 33 20 7b 66 69 76  test $T.5.3 {fiv
2e90: 65 7d 20 20 30 20 33 20 7b 2e 2e 2e 74 68 72 65  e}  0 3 {...thre
2ea0: 65 20 66 6f 75 72 20 7b 66 69 76 65 7d 7d 0a 20  e four {five}}. 
2eb0: 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74   do_snippet_test
2ec0: 20 24 54 2e 35 2e 34 20 7b 66 69 76 65 7d 20 20   $T.5.4 {five}  
2ed0: 31 20 33 20 7b 66 6f 75 72 20 7b 66 69 76 65 7d  1 3 {four {five}
2ee0: 20 73 69 78 2e 2e 2e 7d 0a 20 20 64 6f 5f 73 6e   six...}.  do_sn
2ef0: 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e 35 2e  ippet_test $T.5.
2f00: 35 20 7b 66 69 76 65 7d 20 20 32 20 33 20 7b 73  5 {five}  2 3 {s
2f10: 65 76 65 6e 20 65 69 67 68 74 20 6e 69 6e 65 2e  even eight nine.
2f20: 2e 2e 7d 0a 20 20 0a 20 20 64 6f 5f 74 65 73 74  ..}.  .  do_test
2f30: 20 24 54 2e 35 2e 36 20 7b 0a 20 20 20 20 65 78   $T.5.6 {.    ex
2f40: 65 63 73 71 6c 20 7b 20 55 50 44 41 54 45 20 66  ecsql { UPDATE f
2f50: 74 20 53 45 54 20 62 20 3d 20 4e 55 4c 4c 20 7d  t SET b = NULL }
2f60: 0a 20 20 7d 20 7b 7d 0a 20 20 0a 20 20 64 6f 5f  .  } {}.  .  do_
2f70: 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e  snippet_test $T.
2f80: 35 2e 37 20 20 7b 66 69 76 65 7d 20 2d 31 20 33  5.7  {five} -1 3
2f90: 20 7b 2e 2e 2e 74 68 72 65 65 20 66 6f 75 72 20   {...three four 
2fa0: 7b 66 69 76 65 7d 7d 0a 20 20 64 6f 5f 73 6e 69  {five}}.  do_sni
2fb0: 70 70 65 74 5f 74 65 73 74 20 24 54 2e 35 2e 38  ppet_test $T.5.8
2fc0: 20 20 7b 66 69 76 65 7d 20 20 30 20 33 20 7b 2e    {five}  0 3 {.
2fd0: 2e 2e 74 68 72 65 65 20 66 6f 75 72 20 7b 66 69  ..three four {fi
2fe0: 76 65 7d 7d 0a 20 20 64 6f 5f 73 6e 69 70 70 65  ve}}.  do_snippe
2ff0: 74 5f 74 65 73 74 20 24 54 2e 35 2e 39 20 20 7b  t_test $T.5.9  {
3000: 66 69 76 65 7d 20 20 31 20 33 20 7b 7d 0a 20 20  five}  1 3 {}.  
3010: 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20  do_snippet_test 
3020: 24 54 2e 35 2e 31 30 20 7b 66 69 76 65 7d 20 20  $T.5.10 {five}  
3030: 32 20 33 20 7b 73 65 76 65 6e 20 65 69 67 68 74  2 3 {seven eight
3040: 20 6e 69 6e 65 2e 2e 2e 7d 0a 20 20 0a 20 20 64   nine...}.  .  d
3050: 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24  o_snippet_test $
3060: 54 2e 35 2e 31 31 20 7b 6f 6e 65 20 22 73 65 76  T.5.11 {one "sev
3070: 65 6e 20 65 69 67 68 74 20 6e 69 6e 65 22 7d 20  en eight nine"} 
3080: 2d 31 20 2d 33 20 7b 0a 20 20 20 20 7b 6f 6e 65  -1 -3 {.    {one
3090: 7d 20 74 77 6f 20 74 68 72 65 65 2e 2e 2e 7b 73  } two three...{s
30a0: 65 76 65 6e 7d 20 7b 65 69 67 68 74 7d 20 7b 6e  even} {eight} {n
30b0: 69 6e 65 7d 2e 2e 2e 0a 20 20 7d 0a 0a 20 20 64  ine}....  }..  d
30c0: 6f 5f 74 65 73 74 20 24 54 2e 36 2e 31 20 7b 0a  o_test $T.6.1 {.
30d0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
30e0: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49      DROP TABLE I
30f0: 46 20 45 58 49 53 54 53 20 66 74 3b 0a 20 20 20  F EXISTS ft;.   
3100: 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41     CREATE VIRTUA
3110: 4c 20 54 41 42 4c 45 20 66 74 20 55 53 49 4e 47  L TABLE ft USING
3120: 20 66 74 73 33 28 78 29 3b 0a 20 20 20 20 20 20   fts3(x);.      
3130: 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 20 56  INSERT INTO ft V
3140: 41 4c 55 45 53 28 24 6e 75 6d 62 65 72 73 29 3b  ALUES($numbers);
3150: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20  .    }.  } {}.  
3160: 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20  do_snippet_test 
3170: 24 54 2e 36 2e 32 20 7b 0a 20 20 20 20 6f 6e 65  $T.6.2 {.    one
3180: 20 66 69 66 74 79 20 6f 6e 65 68 75 6e 64 72 65   fifty onehundre
3190: 64 20 6f 6e 65 68 75 6e 64 72 65 64 66 69 66 74  d onehundredfift
31a0: 79 20 74 77 6f 68 75 6e 64 72 65 64 66 69 66 74  y twohundredfift
31b0: 79 20 74 68 72 65 65 68 75 6e 64 72 65 64 0a 20  y threehundred. 
31c0: 20 7d 20 2d 31 20 34 20 7b 0a 20 20 20 20 7b 6f   } -1 4 {.    {o
31d0: 6e 65 7d 2e 2e 2e 7b 66 69 66 74 79 7d 2e 2e 2e  ne}...{fifty}...
31e0: 7b 6f 6e 65 68 75 6e 64 72 65 64 7d 2e 2e 2e 7b  {onehundred}...{
31f0: 6f 6e 65 68 75 6e 64 72 65 64 66 69 66 74 79 7d  onehundredfifty}
3200: 2e 2e 2e 0a 20 20 7d 0a 20 20 64 6f 5f 73 6e 69  ....  }.  do_sni
3210: 70 70 65 74 5f 74 65 73 74 20 24 54 2e 36 2e 33  ppet_test $T.6.3
3220: 20 7b 0a 20 20 20 20 6f 6e 65 20 66 69 66 74 79   {.    one fifty
3230: 20 6f 6e 65 68 75 6e 64 72 65 64 20 6f 6e 65 68   onehundred oneh
3240: 75 6e 64 72 65 64 66 69 66 74 79 20 74 77 6f 68  undredfifty twoh
3250: 75 6e 64 72 65 64 66 69 66 74 79 20 74 68 72 65  undredfifty thre
3260: 65 68 75 6e 64 72 65 64 0a 20 20 7d 20 2d 31 20  ehundred.  } -1 
3270: 2d 34 20 7b 0a 20 20 20 20 7b 6f 6e 65 7d 20 74  -4 {.    {one} t
3280: 77 6f 20 74 68 72 65 65 20 66 6f 75 72 2e 2e 2e  wo three four...
3290: 66 6f 72 74 79 65 69 67 68 74 20 66 6f 72 74 79  fortyeight forty
32a0: 6e 69 6e 65 20 7b 66 69 66 74 79 7d 20 66 69 66  nine {fifty} fif
32b0: 74 79 6f 6e 65 2e 2e 2e 6e 69 6e 65 74 79 65 69  tyone...ninetyei
32c0: 67 68 74 20 6e 69 6e 65 74 79 6e 69 6e 65 20 7b  ght ninetynine {
32d0: 6f 6e 65 68 75 6e 64 72 65 64 7d 20 6f 6e 65 68  onehundred} oneh
32e0: 75 6e 64 72 65 64 6f 6e 65 2e 2e 2e 6f 6e 65 68  undredone...oneh
32f0: 75 6e 64 72 65 64 66 6f 72 74 79 65 69 67 68 74  undredfortyeight
3300: 20 6f 6e 65 68 75 6e 64 72 65 64 66 6f 72 74 79   onehundredforty
3310: 6e 69 6e 65 20 7b 6f 6e 65 68 75 6e 64 72 65 64  nine {onehundred
3320: 66 69 66 74 79 7d 20 6f 6e 65 68 75 6e 64 72 65  fifty} onehundre
3330: 64 66 69 66 74 79 6f 6e 65 2e 2e 2e 0a 20 20 7d  dfiftyone....  }
3340: 0a 0a 20 20 64 6f 5f 74 65 73 74 20 24 54 2e 37  ..  do_test $T.7
3350: 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c  .1 {.    execsql
3360: 20 7b 0a 20 20 20 20 20 20 42 45 47 49 4e 3b 0a   {.      BEGIN;.
3370: 20 20 20 20 20 20 20 20 44 52 4f 50 20 54 41 42          DROP TAB
3380: 4c 45 20 49 46 20 45 58 49 53 54 53 20 66 74 3b  LE IF EXISTS ft;
3390: 0a 20 20 20 20 20 20 20 20 43 52 45 41 54 45 20  .        CREATE 
33a0: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 66 74  VIRTUAL TABLE ft
33b0: 20 55 53 49 4e 47 20 66 74 73 33 28 78 29 3b 0a   USING fts3(x);.
33c0: 20 20 20 20 7d 0a 20 20 20 20 73 65 74 20 74 65      }.    set te
33d0: 73 74 72 65 73 75 6c 74 73 20 5b 6c 69 73 74 5d  stresults [list]
33e0: 0a 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20  .    for {set i 
33f0: 31 7d 20 7b 24 69 20 3c 20 31 35 30 7d 20 7b 69  1} {$i < 150} {i
3400: 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 20 20 73  ncr i} {.      s
3410: 65 74 20 63 6f 6d 6d 61 73 20 5b 73 74 72 69 6e  et commas [strin
3420: 67 20 72 65 70 65 61 74 20 2c 20 24 69 5d 0a 20  g repeat , $i]. 
3430: 20 20 20 20 20 65 78 65 63 73 71 6c 20 7b 49 4e       execsql {IN
3440: 53 45 52 54 20 49 4e 54 4f 20 66 74 20 56 41 4c  SERT INTO ft VAL
3450: 55 45 53 28 27 6f 6e 65 27 20 7c 7c 20 24 63 6f  UES('one' || $co
3460: 6d 6d 61 73 20 7c 7c 20 27 74 77 6f 27 29 7d 0a  mmas || 'two')}.
3470: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 74 65        lappend te
3480: 73 74 72 65 73 75 6c 74 73 20 22 7b 6f 6e 65 7d  stresults "{one}
3490: 24 63 6f 6d 6d 61 73 7b 74 77 6f 7d 22 0a 20 20  $commas{two}".  
34a0: 20 20 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20    }.    execsql 
34b0: 43 4f 4d 4d 49 54 0a 20 20 7d 20 7b 7d 0a 20 20  COMMIT.  } {}.  
34c0: 65 76 61 6c 20 5b 6c 69 73 74 20 64 6f 5f 73 6e  eval [list do_sn
34d0: 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e 37 2e  ippet_test $T.7.
34e0: 32 20 7b 6f 6e 65 20 74 77 6f 7d 20 2d 31 20 33  2 {one two} -1 3
34f0: 5d 20 24 74 65 73 74 72 65 73 75 6c 74 73 0a 20  ] $testresults. 
3500: 20 0a 20 20 23 23 23 23 23 23 23 23 23 23 23 23   .  ############
3510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3520: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3530: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3540: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20  ##############. 
3550: 20 23 20 54 65 73 74 20 74 68 65 20 6d 61 74 63   # Test the matc
3560: 68 69 6e 66 6f 20 66 75 6e 63 74 69 6f 6e 2e 0a  hinfo function..
3570: 20 20 23 0a 20 20 70 72 6f 63 20 6d 69 74 20 7b    #.  proc mit {
3580: 62 6c 6f 62 7d 20 7b 0a 20 20 20 20 73 65 74 20  blob} {.    set 
3590: 73 63 61 6e 28 6c 69 74 74 6c 65 45 6e 64 69 61  scan(littleEndia
35a0: 6e 29 20 69 2a 0a 20 20 20 20 73 65 74 20 73 63  n) i*.    set sc
35b0: 61 6e 28 62 69 67 45 6e 64 69 61 6e 29 20 49 2a  an(bigEndian) I*
35c0: 0a 20 20 20 20 62 69 6e 61 72 79 20 73 63 61 6e  .    binary scan
35d0: 20 24 62 6c 6f 62 20 24 73 63 61 6e 28 24 3a 3a   $blob $scan($::
35e0: 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 62 79 74  tcl_platform(byt
35f0: 65 4f 72 64 65 72 29 29 20 72 0a 20 20 20 20 72  eOrder)) r.    r
3600: 65 74 75 72 6e 20 24 72 0a 20 20 7d 0a 20 20 64  eturn $r.  }.  d
3610: 62 20 66 75 6e 63 20 6d 69 74 20 6d 69 74 0a 20  b func mit mit. 
3620: 20 70 72 6f 63 20 64 6f 5f 6d 61 74 63 68 69 6e   proc do_matchin
3630: 66 6f 5f 74 65 73 74 20 7b 6e 61 6d 65 20 65 78  fo_test {name ex
3640: 70 72 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 73  pr args} {.    s
3650: 65 74 20 72 65 73 20 5b 6c 69 73 74 5d 0a 20 20  et res [list].  
3660: 20 20 66 6f 72 65 61 63 68 20 61 20 24 61 72 67    foreach a $arg
3670: 73 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73 20  s { lappend res 
3680: 5b 6e 6f 72 6d 61 6c 69 7a 65 20 24 61 5d 20 7d  [normalize $a] }
3690: 0a 20 20 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74  .    do_select_t
36a0: 65 73 74 20 24 6e 61 6d 65 20 7b 0a 20 20 20 20  est $name {.    
36b0: 20 20 53 45 4c 45 43 54 20 6d 69 74 28 6d 61 74    SELECT mit(mat
36c0: 63 68 69 6e 66 6f 28 66 74 29 29 20 46 52 4f 4d  chinfo(ft)) FROM
36d0: 20 66 74 20 57 48 45 52 45 20 66 74 20 4d 41 54   ft WHERE ft MAT
36e0: 43 48 20 24 65 78 70 72 0a 20 20 20 20 7d 20 24  CH $expr.    } $
36f0: 72 65 73 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73  res.  }.  do_tes
3700: 74 20 24 54 2e 38 2e 31 20 7b 0a 20 20 20 20 73  t $T.8.1 {.    s
3710: 65 74 20 74 65 6e 20 7b 6f 6e 65 20 74 77 6f 20  et ten {one two 
3720: 74 68 72 65 65 20 66 6f 75 72 20 66 69 76 65 20  three four five 
3730: 73 69 78 20 73 65 76 65 6e 20 65 69 67 68 74 20  six seven eight 
3740: 6e 69 6e 65 20 74 65 6e 7d 0a 20 20 20 20 65 78  nine ten}.    ex
3750: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 52  ecsql {.      DR
3760: 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49 53  OP TABLE IF EXIS
3770: 54 53 20 66 74 3b 0a 20 20 20 20 20 20 43 52 45  TS ft;.      CRE
3780: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
3790: 45 20 66 74 20 55 53 49 4e 47 20 66 74 73 33 3b  E ft USING fts3;
37a0: 0a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  .      INSERT IN
37b0: 54 4f 20 66 74 20 56 41 4c 55 45 53 28 24 74 65  TO ft VALUES($te
37c0: 6e 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54  n);.      INSERT
37d0: 20 49 4e 54 4f 20 66 74 20 56 41 4c 55 45 53 28   INTO ft VALUES(
37e0: 24 74 65 6e 20 7c 7c 20 27 20 27 20 7c 7c 20 24  $ten || ' ' || $
37f0: 74 65 6e 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20  ten);.    }.  } 
3800: 7b 7d 0a 20 20 0a 20 20 64 6f 5f 6d 61 74 63 68  {}.  .  do_match
3810: 69 6e 66 6f 5f 74 65 73 74 20 24 54 2e 38 2e 32  info_test $T.8.2
3820: 20 22 6f 6e 65 22 20 7b 31 20 31 20 20 31 20 33   "one" {1 1  1 3
3830: 20 32 7d 20 7b 31 20 31 20 20 32 20 33 20 32 7d   2} {1 1  2 3 2}
3840: 0a 20 20 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f  .  do_matchinfo_
3850: 74 65 73 74 20 24 54 2e 38 2e 33 20 22 6f 6e 65  test $T.8.3 "one
3860: 20 4e 45 41 52 2f 33 20 74 65 6e 22 20 7b 32 20   NEAR/3 ten" {2 
3870: 31 20 20 31 20 31 20 31 20 31 20 31 20 31 7d 0a  1  1 1 1 1 1 1}.
3880: 20 20 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74    do_matchinfo_t
3890: 65 73 74 20 24 54 2e 38 2e 34 20 22 66 69 76 65  est $T.8.4 "five
38a0: 20 4e 45 41 52 2f 34 20 74 65 6e 22 20 5c 0a 20   NEAR/4 ten" \. 
38b0: 20 20 20 7b 32 20 31 20 20 31 20 33 20 32 20 20     {2 1  1 3 2  
38c0: 31 20 33 20 32 7d 20 7b 32 20 31 20 20 32 20 33  1 3 2} {2 1  2 3
38d0: 20 32 20 20 32 20 33 20 32 7d 0a 20 20 64 6f 5f   2  2 3 2}.  do_
38e0: 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73 74 20 24  matchinfo_test $
38f0: 54 2e 38 2e 35 20 22 73 69 78 20 4e 45 41 52 2f  T.8.5 "six NEAR/
3900: 33 20 74 65 6e 20 4e 45 41 52 2f 33 20 74 77 6f  3 ten NEAR/3 two
3910: 22 20 5c 0a 20 20 20 20 7b 33 20 31 20 20 31 20  " \.    {3 1  1 
3920: 31 20 31 20 20 31 20 31 20 31 20 20 31 20 31 20  1 1  1 1 1  1 1 
3930: 31 7d 0a 20 20 64 6f 5f 6d 61 74 63 68 69 6e 66  1}.  do_matchinf
3940: 6f 5f 74 65 73 74 20 24 54 2e 38 2e 36 20 22 66  o_test $T.8.6 "f
3950: 69 76 65 20 4e 45 41 52 2f 34 20 74 65 6e 20 4e  ive NEAR/4 ten N
3960: 45 41 52 2f 33 20 74 77 6f 22 20 5c 0a 20 20 20  EAR/3 two" \.   
3970: 20 7b 33 20 31 20 20 32 20 32 20 31 20 20 31 20   {3 1  2 2 1  1 
3980: 31 20 31 20 20 31 20 31 20 31 7d 0a 0a 20 20 64  1 1  1 1 1}..  d
3990: 6f 5f 74 65 73 74 20 24 54 2e 39 2e 31 20 7b 0a  o_test $T.9.1 {.
39a0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
39b0: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49      DROP TABLE I
39c0: 46 20 45 58 49 53 54 53 20 66 74 3b 0a 20 20 20  F EXISTS ft;.   
39d0: 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41     CREATE VIRTUA
39e0: 4c 20 54 41 42 4c 45 20 66 74 20 55 53 49 4e 47  L TABLE ft USING
39f0: 20 66 74 73 33 28 78 2c 20 79 29 3b 0a 20 20 20   fts3(x, y);.   
3a00: 20 7d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 6e   }.    foreach n
3a10: 20 7b 31 20 32 20 33 7d 20 7b 0a 20 20 20 20 20   {1 2 3} {.     
3a20: 20 73 65 74 20 76 31 20 5b 6c 72 61 6e 67 65 20   set v1 [lrange 
3a30: 24 6e 75 6d 62 65 72 73 20 30 20 5b 65 78 70 72  $numbers 0 [expr
3a40: 20 24 6e 2a 31 30 30 5d 5d 0a 20 20 20 20 20 20   $n*100]].      
3a50: 73 65 74 20 76 32 20 5b 73 74 72 69 6e 67 20 74  set v2 [string t
3a60: 72 69 6d 20 5b 73 74 72 69 6e 67 20 72 65 70 65  rim [string repe
3a70: 61 74 20 22 24 6e 75 6d 62 65 72 73 20 22 20 24  at "$numbers " $
3a80: 6e 5d 5d 0a 20 20 20 20 20 20 73 65 74 20 64 6f  n]].      set do
3a90: 63 69 64 20 5b 65 78 70 72 20 24 6e 20 2a 20 31  cid [expr $n * 1
3aa0: 30 30 30 30 30 30 5d 0a 20 20 20 20 20 20 65 78  000000].      ex
3ab0: 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49  ecsql { INSERT I
3ac0: 4e 54 4f 20 66 74 28 64 6f 63 69 64 2c 20 78 2c  NTO ft(docid, x,
3ad0: 20 79 29 20 56 41 4c 55 45 53 28 24 64 6f 63 69   y) VALUES($doci
3ae0: 64 2c 20 24 76 31 2c 20 24 76 32 29 20 7d 0a 20  d, $v1, $v2) }. 
3af0: 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f     }.  } {}.  do
3b00: 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73 74 20  _matchinfo_test 
3b10: 24 54 2e 39 2e 32 20 7b 74 77 6f 2a 7d 20 20 20  $T.9.2 {two*}   
3b20: 20 20 5c 0a 20 20 20 20 7b 20 31 20 32 20 20 20    \.    { 1 2   
3b30: 20 31 20 20 20 31 30 35 20 33 20 20 20 31 30 31   1   105 3   101
3b40: 20 36 30 36 20 33 7d 20 20 20 5c 0a 20 20 20 20   606 3}   \.    
3b50: 7b 20 31 20 32 20 20 20 20 33 20 20 20 31 30 35  { 1 2    3   105
3b60: 20 33 20 20 20 32 30 32 20 36 30 36 20 33 7d 20   3   202 606 3} 
3b70: 20 20 5c 0a 20 20 20 20 7b 20 31 20 32 20 20 20    \.    { 1 2   
3b80: 20 31 30 31 20 31 30 35 20 33 20 20 20 33 30 33   101 105 3   303
3b90: 20 36 30 36 20 33 7d 0a 0a 20 20 64 6f 5f 6d 61   606 3}..  do_ma
3ba0: 74 63 68 69 6e 66 6f 5f 74 65 73 74 20 24 54 2e  tchinfo_test $T.
3bb0: 39 2e 34 20 7b 22 6f 6e 65 2a 20 74 77 6f 2a 22  9.4 {"one* two*"
3bc0: 7d 20 20 5c 0a 20 20 20 20 7b 20 31 20 32 20 20  }  \.    { 1 2  
3bd0: 20 20 31 20 35 20 33 20 20 20 32 20 31 32 20 33    1 5 3   2 12 3
3be0: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c  }              \
3bf0: 0a 20 20 20 20 7b 20 31 20 32 20 20 20 20 32 20  .    { 1 2    2 
3c00: 35 20 33 20 20 20 34 20 31 32 20 33 7d 20 20 20  5 3   4 12 3}   
3c10: 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20             \.   
3c20: 20 7b 20 31 20 32 20 20 20 20 32 20 35 20 33 20   { 1 2    2 5 3 
3c30: 20 20 36 20 31 32 20 33 7d 0a 0a 20 20 64 6f 5f    6 12 3}..  do_
3c40: 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73 74 20 24  matchinfo_test $
3c50: 54 2e 39 2e 35 20 7b 74 77 6f 68 75 6e 64 72 65  T.9.5 {twohundre
3c60: 64 66 69 66 74 79 7d 20 20 5c 0a 20 20 20 20 7b  dfifty}  \.    {
3c70: 20 31 20 32 20 20 20 20 30 20 31 20 31 20 20 20   1 2    0 1 1   
3c80: 31 20 36 20 33 7d 20 20 20 20 20 20 20 20 20 20  1 6 3}          
3c90: 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 7b           \.    {
3ca0: 20 31 20 32 20 20 20 20 30 20 31 20 31 20 20 20   1 2    0 1 1   
3cb0: 32 20 36 20 33 7d 20 20 20 20 20 20 20 20 20 20  2 6 3}          
3cc0: 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 7b           \.    {
3cd0: 20 31 20 32 20 20 20 20 31 20 31 20 31 20 20 20   1 2    1 1 1   
3ce0: 33 20 36 20 33 7d 0a 0a 20 20 64 6f 5f 6d 61 74  3 6 3}..  do_mat
3cf0: 63 68 69 6e 66 6f 5f 74 65 73 74 20 24 54 2e 39  chinfo_test $T.9
3d00: 2e 36 20 7b 22 74 68 72 65 65 68 75 6e 64 72 65  .6 {"threehundre
3d10: 64 20 6f 6e 65 22 7d 20 5c 0a 20 20 20 20 7b 20  d one"} \.    { 
3d20: 31 20 32 20 20 20 20 30 20 30 20 30 20 20 20 31  1 2    0 0 0   1
3d30: 20 33 20 32 7d 20 20 20 20 20 20 20 20 20 20 20   3 2}           
3d40: 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20            \.    
3d50: 7b 20 31 20 32 20 20 20 20 30 20 30 20 30 20 20  { 1 2    0 0 0  
3d60: 20 32 20 33 20 32 7d 0a 0a 20 20 64 6f 5f 6d 61   2 3 2}..  do_ma
3d70: 74 63 68 69 6e 66 6f 5f 74 65 73 74 20 24 54 2e  tchinfo_test $T.
3d80: 39 2e 37 20 7b 6f 6e 65 20 4f 52 20 66 69 76 65  9.7 {one OR five
3d90: 68 75 6e 64 72 65 64 7d 20 5c 0a 20 20 20 20 7b  hundred} \.    {
3da0: 20 32 20 32 20 20 20 20 31 20 33 20 33 20 20 20   2 2    1 3 3   
3db0: 31 20 36 20 33 20 20 20 30 20 30 20 30 20 20 20  1 6 3   0 0 0   
3dc0: 30 20 30 20 30 20 7d 20 20 20 20 5c 0a 20 20 20  0 0 0 }    \.   
3dd0: 20 7b 20 32 20 32 20 20 20 20 31 20 33 20 33 20   { 2 2    1 3 3 
3de0: 20 20 32 20 36 20 33 20 20 20 30 20 30 20 30 20    2 6 3   0 0 0 
3df0: 20 20 30 20 30 20 30 20 7d 20 20 20 20 5c 0a 20    0 0 0 }    \. 
3e00: 20 20 20 7b 20 32 20 32 20 20 20 20 31 20 33 20     { 2 2    1 3 
3e10: 33 20 20 20 33 20 36 20 33 20 20 20 30 20 30 20  3   3 6 3   0 0 
3e20: 30 20 20 20 30 20 30 20 30 20 7d 0a 0a 20 20 64  0   0 0 0 }..  d
3e30: 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73 74  o_matchinfo_test
3e40: 20 24 54 2e 39 2e 38 20 7b 74 77 6f 20 4f 52 20   $T.9.8 {two OR 
3e50: 22 74 68 72 65 65 68 75 6e 64 72 65 64 20 6f 6e  "threehundred on
3e60: 65 22 7d 20 5c 0a 20 20 20 20 7b 20 32 20 32 20  e"} \.    { 2 2 
3e70: 20 20 20 31 20 33 20 33 20 20 20 31 20 36 20 33     1 3 3   1 6 3
3e80: 20 20 20 30 20 30 20 30 20 20 20 30 20 33 20 32     0 0 0   0 3 2
3e90: 20 7d 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20   }           \. 
3ea0: 20 20 20 7b 20 32 20 32 20 20 20 20 31 20 33 20     { 2 2    1 3 
3eb0: 33 20 20 20 32 20 36 20 33 20 20 20 30 20 30 20  3   2 6 3   0 0 
3ec0: 30 20 20 20 31 20 33 20 32 20 7d 20 20 20 20 20  0   1 3 2 }     
3ed0: 20 20 20 20 20 20 5c 0a 20 20 20 20 7b 20 32 20        \.    { 2 
3ee0: 32 20 20 20 20 31 20 33 20 33 20 20 20 33 20 36  2    1 3 3   3 6
3ef0: 20 33 20 20 20 30 20 30 20 30 20 20 20 32 20 33   3   0 0 0   2 3
3f00: 20 32 20 7d 0a 0a 20 20 64 6f 5f 73 65 6c 65 63   2 }..  do_selec
3f10: 74 5f 74 65 73 74 20 24 54 2e 39 2e 39 20 7b 0a  t_test $T.9.9 {.
3f20: 20 20 20 20 53 45 4c 45 43 54 20 6d 69 74 28 6d      SELECT mit(m
3f30: 61 74 63 68 69 6e 66 6f 28 66 74 29 29 2c 20 6d  atchinfo(ft)), m
3f40: 69 74 28 6d 61 74 63 68 69 6e 66 6f 28 66 74 29  it(matchinfo(ft)
3f50: 29 0a 20 20 20 20 46 52 4f 4d 20 66 74 20 57 48  ).    FROM ft WH
3f60: 45 52 45 20 66 74 20 4d 41 54 43 48 20 27 74 77  ERE ft MATCH 'tw
3f70: 6f 20 4f 52 20 22 74 68 72 65 65 68 75 6e 64 72  o OR "threehundr
3f80: 65 64 20 6f 6e 65 22 27 20 0a 20 20 7d 20 5b 6e  ed one"' .  } [n
3f90: 6f 72 6d 61 6c 69 7a 65 20 7b 0a 20 20 20 20 7b  ormalize {.    {
3fa0: 32 20 32 20 31 20 33 20 33 20 31 20 36 20 33 20  2 2 1 3 3 1 6 3 
3fb0: 30 20 30 20 30 20 30 20 33 20 32 7d 0a 20 20 20  0 0 0 0 3 2}.   
3fc0: 20 7b 32 20 32 20 31 20 33 20 33 20 31 20 36 20   {2 2 1 3 3 1 6 
3fd0: 33 20 30 20 30 20 30 20 30 20 33 20 32 7d 0a 20  3 0 0 0 0 3 2}. 
3fe0: 20 20 20 7b 32 20 32 20 31 20 33 20 33 20 32 20     {2 2 1 3 3 2 
3ff0: 36 20 33 20 30 20 30 20 30 20 31 20 33 20 32 7d  6 3 0 0 0 1 3 2}
4000: 0a 20 20 20 20 7b 32 20 32 20 31 20 33 20 33 20  .    {2 2 1 3 3 
4010: 32 20 36 20 33 20 30 20 30 20 30 20 31 20 33 20  2 6 3 0 0 0 1 3 
4020: 32 7d 0a 20 20 20 20 7b 32 20 32 20 31 20 33 20  2}.    {2 2 1 3 
4030: 33 20 33 20 36 20 33 20 30 20 30 20 30 20 32 20  3 3 6 3 0 0 0 2 
4040: 33 20 32 7d 20 20 20 20 20 20 20 20 20 20 0a 20  3 2}          . 
4050: 20 20 20 7b 32 20 32 20 31 20 33 20 33 20 33 20     {2 2 1 3 3 3 
4060: 36 20 33 20 30 20 30 20 30 20 32 20 33 20 32 7d  6 3 0 0 0 2 3 2}
4070: 0a 20 20 7d 5d 0a 0a 20 20 23 20 45 56 49 44 45  .  }]..  # EVIDE
4080: 4e 43 45 2d 4f 46 3a 20 52 2d 34 30 36 33 30 2d  NCE-OF: R-40630-
4090: 30 32 32 36 38 20 49 66 20 75 73 65 64 20 77 69  02268 If used wi
40a0: 74 68 69 6e 20 61 20 53 45 4c 45 43 54 20 74 68  thin a SELECT th
40b0: 61 74 20 75 73 65 73 20 74 68 65 0a 20 20 23 20  at uses the.  # 
40c0: 22 71 75 65 72 79 20 62 79 20 72 6f 77 69 64 22  "query by rowid"
40d0: 20 6f 72 20 22 6c 69 6e 65 61 72 20 73 63 61 6e   or "linear scan
40e0: 22 20 73 74 72 61 74 65 67 69 65 73 2c 20 74 68  " strategies, th
40f0: 65 6e 20 74 68 65 20 73 6e 69 70 70 65 74 20 61  en the snippet a
4100: 6e 64 0a 20 20 23 20 6f 66 66 73 65 74 73 20 62  nd.  # offsets b
4110: 6f 74 68 20 72 65 74 75 72 6e 20 61 6e 20 65 6d  oth return an em
4120: 70 74 79 20 73 74 72 69 6e 67 2c 20 61 6e 64 20  pty string, and 
4130: 74 68 65 20 6d 61 74 63 68 69 6e 66 6f 20 66 75  the matchinfo fu
4140: 6e 63 74 69 6f 6e 0a 20 20 23 20 72 65 74 75 72  nction.  # retur
4150: 6e 73 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 20  ns a blob value 
4160: 7a 65 72 6f 20 62 79 74 65 73 20 69 6e 20 73 69  zero bytes in si
4170: 7a 65 2e 0a 20 20 23 0a 20 20 73 65 74 20 72 20  ze..  #.  set r 
4180: 31 30 30 30 30 30 30 20 20 20 20 20 20 20 20 20  1000000         
4190: 20 20 20 20 20 20 20 20 20 20 3b 23 20 41 20 72            ;# A r
41a0: 6f 77 69 64 20 74 68 61 74 20 65 78 69 73 74 73  owid that exists
41b0: 20 69 6e 20 74 61 62 6c 65 20 66 74 0a 20 20 64   in table ft.  d
41c0: 6f 5f 73 65 6c 65 63 74 5f 74 65 73 74 20 24 54  o_select_test $T
41d0: 2e 31 30 2e 30 20 7b 20 53 45 4c 45 43 54 20 72  .10.0 { SELECT r
41e0: 6f 77 69 64 20 46 52 4f 4d 20 66 74 20 57 48 45  owid FROM ft WHE
41f0: 52 45 20 72 6f 77 69 64 20 3d 20 24 72 20 7d 20  RE rowid = $r } 
4200: 24 72 0a 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74  $r.  do_select_t
4210: 65 73 74 20 24 54 2e 31 30 2e 31 20 7b 0a 20 20  est $T.10.1 {.  
4220: 20 20 53 45 4c 45 43 54 20 6c 65 6e 67 74 68 28    SELECT length(
4230: 6f 66 66 73 65 74 73 28 66 74 29 29 2c 20 74 79  offsets(ft)), ty
4240: 70 65 6f 66 28 6f 66 66 73 65 74 73 28 66 74 29  peof(offsets(ft)
4250: 29 20 46 52 4f 4d 20 66 74 3b 0a 20 20 7d 20 7b  ) FROM ft;.  } {
4260: 30 20 74 65 78 74 20 30 20 74 65 78 74 20 30 20  0 text 0 text 0 
4270: 74 65 78 74 7d 0a 20 20 64 6f 5f 73 65 6c 65 63  text}.  do_selec
4280: 74 5f 74 65 73 74 20 24 54 2e 31 30 2e 32 20 7b  t_test $T.10.2 {
4290: 0a 20 20 20 20 53 45 4c 45 43 54 20 6c 65 6e 67  .    SELECT leng
42a0: 74 68 28 6f 66 66 73 65 74 73 28 66 74 29 29 2c  th(offsets(ft)),
42b0: 20 74 79 70 65 6f 66 28 6f 66 66 73 65 74 73 28   typeof(offsets(
42c0: 66 74 29 29 20 46 52 4f 4d 20 66 74 20 57 48 45  ft)) FROM ft WHE
42d0: 52 45 20 72 6f 77 69 64 20 3d 20 24 72 0a 20 20  RE rowid = $r.  
42e0: 7d 20 7b 30 20 74 65 78 74 7d 0a 20 20 64 6f 5f  } {0 text}.  do_
42f0: 73 65 6c 65 63 74 5f 74 65 73 74 20 24 54 2e 31  select_test $T.1
4300: 30 2e 33 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  0.3 {.    SELECT
4310: 20 6c 65 6e 67 74 68 28 73 6e 69 70 70 65 74 28   length(snippet(
4320: 66 74 29 29 2c 20 74 79 70 65 6f 66 28 73 6e 69  ft)), typeof(sni
4330: 70 70 65 74 28 66 74 29 29 20 46 52 4f 4d 20 66  ppet(ft)) FROM f
4340: 74 3b 0a 20 20 7d 20 7b 30 20 74 65 78 74 20 30  t;.  } {0 text 0
4350: 20 74 65 78 74 20 30 20 74 65 78 74 7d 0a 20 20   text 0 text}.  
4360: 64 6f 5f 73 65 6c 65 63 74 5f 74 65 73 74 20 24  do_select_test $
4370: 54 2e 31 30 2e 34 20 7b 0a 20 20 20 20 53 45 4c  T.10.4 {.    SEL
4380: 45 43 54 20 6c 65 6e 67 74 68 28 73 6e 69 70 70  ECT length(snipp
4390: 65 74 28 66 74 29 29 2c 20 74 79 70 65 6f 66 28  et(ft)), typeof(
43a0: 73 6e 69 70 70 65 74 28 66 74 29 29 20 46 52 4f  snippet(ft)) FRO
43b0: 4d 20 66 74 20 57 48 45 52 45 20 72 6f 77 69 64  M ft WHERE rowid
43c0: 20 3d 20 24 72 3b 0a 20 20 7d 20 7b 30 20 74 65   = $r;.  } {0 te
43d0: 78 74 7d 0a 20 20 64 6f 5f 73 65 6c 65 63 74 5f  xt}.  do_select_
43e0: 74 65 73 74 20 24 54 2e 31 30 2e 35 20 7b 0a 20  test $T.10.5 {. 
43f0: 20 20 20 53 45 4c 45 43 54 20 6c 65 6e 67 74 68     SELECT length
4400: 28 6d 61 74 63 68 69 6e 66 6f 28 66 74 29 29 2c  (matchinfo(ft)),
4410: 20 74 79 70 65 6f 66 28 6d 61 74 63 68 69 6e 66   typeof(matchinf
4420: 6f 28 66 74 29 29 20 46 52 4f 4d 20 66 74 3b 0a  o(ft)) FROM ft;.
4430: 20 20 7d 20 7b 30 20 62 6c 6f 62 20 30 20 62 6c    } {0 blob 0 bl
4440: 6f 62 20 30 20 62 6c 6f 62 7d 0a 20 20 64 6f 5f  ob 0 blob}.  do_
4450: 73 65 6c 65 63 74 5f 74 65 73 74 20 24 54 2e 31  select_test $T.1
4460: 30 2e 36 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  0.6 {.    SELECT
4470: 20 6c 65 6e 67 74 68 28 6d 61 74 63 68 69 6e 66   length(matchinf
4480: 6f 28 66 74 29 29 2c 20 74 79 70 65 6f 66 28 6d  o(ft)), typeof(m
4490: 61 74 63 68 69 6e 66 6f 28 66 74 29 29 20 46 52  atchinfo(ft)) FR
44a0: 4f 4d 20 66 74 20 57 48 45 52 45 20 72 6f 77 69  OM ft WHERE rowi
44b0: 64 20 3d 20 24 72 0a 20 20 7d 20 7b 30 20 62 6c  d = $r.  } {0 bl
44c0: 6f 62 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  ob}.}..#--------
44d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
44e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
44f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4500: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4510: 2d 0a 23 20 54 65 73 74 20 61 6e 20 69 6e 74 65  -.# Test an inte
4520: 72 61 63 74 69 6f 6e 20 62 65 74 77 65 65 6e 20  raction between 
4530: 74 68 65 20 73 6e 69 70 70 65 74 28 29 20 66 75  the snippet() fu
4540: 6e 63 74 69 6f 6e 20 61 6e 64 20 4f 52 20 63 6c  nction and OR cl
4550: 61 75 73 65 73 2e 0a 23 0a 64 6f 5f 65 78 65 63  auses..#.do_exec
4560: 73 71 6c 5f 74 65 73 74 20 32 2e 31 20 7b 0a 20  sql_test 2.1 {. 
4570: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
4580: 54 41 42 4c 45 20 74 32 20 55 53 49 4e 47 20 66  TABLE t2 USING f
4590: 74 73 34 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  ts4;.  INSERT IN
45a0: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27 6f 6e  TO t2 VALUES('on
45b0: 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72  e two three four
45c0: 20 66 69 76 65 27 29 3b 0a 20 20 49 4e 53 45 52   five');.  INSER
45d0: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
45e0: 28 27 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72  ('two three four
45f0: 20 66 69 76 65 20 6f 6e 65 27 29 3b 0a 20 20 49   five one');.  I
4600: 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41  NSERT INTO t2 VA
4610: 4c 55 45 53 28 27 74 68 72 65 65 20 66 6f 75 72  LUES('three four
4620: 20 66 69 76 65 20 6f 6e 65 20 74 77 6f 27 29 3b   five one two');
4630: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
4640: 32 20 56 41 4c 55 45 53 28 27 66 6f 75 72 20 66  2 VALUES('four f
4650: 69 76 65 20 6f 6e 65 20 74 77 6f 20 74 68 72 65  ive one two thre
4660: 65 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  e');.  INSERT IN
4670: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27 66 69  TO t2 VALUES('fi
4680: 76 65 20 6f 6e 65 20 74 77 6f 20 74 68 72 65 65  ve one two three
4690: 20 66 6f 75 72 27 29 3b 0a 7d 0a 0a 64 6f 5f 65   four');.}..do_e
46a0: 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 32 20  xecsql_test 2.2 
46b0: 7b 0a 20 20 53 45 4c 45 43 54 20 73 6e 69 70 70  {.  SELECT snipp
46c0: 65 74 28 74 32 2c 20 27 5b 27 2c 20 27 5d 27 29  et(t2, '[', ']')
46d0: 20 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 74   FROM t2 WHERE t
46e0: 32 20 4d 41 54 43 48 20 27 6f 6e 65 20 4f 52 20  2 MATCH 'one OR 
46f0: 28 66 6f 75 72 20 41 4e 44 20 73 69 78 29 27 0a  (four AND six)'.
4700: 7d 20 7b 0a 20 20 7b 5b 6f 6e 65 5d 20 74 77 6f  } {.  {[one] two
4710: 20 74 68 72 65 65 20 5b 66 6f 75 72 5d 20 66 69   three [four] fi
4720: 76 65 7d 0a 20 20 7b 74 77 6f 20 74 68 72 65 65  ve}.  {two three
4730: 20 5b 66 6f 75 72 5d 20 66 69 76 65 20 5b 6f 6e   [four] five [on
4740: 65 5d 7d 0a 20 20 7b 74 68 72 65 65 20 5b 66 6f  e]}.  {three [fo
4750: 75 72 5d 20 66 69 76 65 20 5b 6f 6e 65 5d 20 74  ur] five [one] t
4760: 77 6f 7d 0a 20 20 7b 5b 66 6f 75 72 5d 20 66 69  wo}.  {[four] fi
4770: 76 65 20 5b 6f 6e 65 5d 20 74 77 6f 20 74 68 72  ve [one] two thr
4780: 65 65 7d 0a 20 20 7b 66 69 76 65 20 5b 6f 6e 65  ee}.  {five [one
4790: 5d 20 74 77 6f 20 74 68 72 65 65 20 5b 66 6f 75  ] two three [fou
47a0: 72 5d 7d 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  r]}.}..do_execsq
47b0: 6c 5f 74 65 73 74 20 32 2e 33 20 7b 0a 20 20 53  l_test 2.3 {.  S
47c0: 45 4c 45 43 54 20 73 6e 69 70 70 65 74 28 74 32  ELECT snippet(t2
47d0: 2c 20 27 5b 27 2c 20 27 5d 27 29 20 46 52 4f 4d  , '[', ']') FROM
47e0: 20 74 32 20 0a 20 20 57 48 45 52 45 20 74 32 20   t2 .  WHERE t2 
47f0: 4d 41 54 43 48 20 27 6f 6e 65 20 4f 52 20 28 66  MATCH 'one OR (f
4800: 6f 75 72 20 41 4e 44 20 73 69 78 29 27 20 0a 20  our AND six)' . 
4810: 20 4f 52 44 45 52 20 42 59 20 64 6f 63 69 64 20   ORDER BY docid 
4820: 44 45 53 43 0a 7d 20 7b 0a 20 20 7b 66 69 76 65  DESC.} {.  {five
4830: 20 5b 6f 6e 65 5d 20 74 77 6f 20 74 68 72 65 65   [one] two three
4840: 20 5b 66 6f 75 72 5d 7d 0a 20 20 7b 5b 66 6f 75   [four]}.  {[fou
4850: 72 5d 20 66 69 76 65 20 5b 6f 6e 65 5d 20 74 77  r] five [one] tw
4860: 6f 20 74 68 72 65 65 7d 0a 20 20 7b 74 68 72 65  o three}.  {thre
4870: 65 20 5b 66 6f 75 72 5d 20 66 69 76 65 20 5b 6f  e [four] five [o
4880: 6e 65 5d 20 74 77 6f 7d 0a 20 20 7b 74 77 6f 20  ne] two}.  {two 
4890: 74 68 72 65 65 20 5b 66 6f 75 72 5d 20 66 69 76  three [four] fiv
48a0: 65 20 5b 6f 6e 65 5d 7d 0a 20 20 7b 5b 6f 6e 65  e [one]}.  {[one
48b0: 5d 20 74 77 6f 20 74 68 72 65 65 20 5b 66 6f 75  ] two three [fou
48c0: 72 5d 20 66 69 76 65 7d 0a 7d 0a 0a 64 6f 5f 65  r] five}.}..do_e
48d0: 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 34 20  xecsql_test 2.4 
48e0: 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  {.  INSERT INTO 
48f0: 74 32 20 56 41 4c 55 45 53 28 27 73 69 78 27 29  t2 VALUES('six')
4900: 3b 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  ;.}..do_execsql_
4910: 74 65 73 74 20 32 2e 35 20 7b 0a 20 20 53 45 4c  test 2.5 {.  SEL
4920: 45 43 54 20 73 6e 69 70 70 65 74 28 74 32 2c 20  ECT snippet(t2, 
4930: 27 5b 27 2c 20 27 5d 27 29 20 46 52 4f 4d 20 74  '[', ']') FROM t
4940: 32 20 57 48 45 52 45 20 74 32 20 4d 41 54 43 48  2 WHERE t2 MATCH
4950: 20 27 6f 6e 65 20 4f 52 20 28 66 6f 75 72 20 41   'one OR (four A
4960: 4e 44 20 73 69 78 29 27 0a 7d 20 7b 0a 20 20 7b  ND six)'.} {.  {
4970: 5b 6f 6e 65 5d 20 74 77 6f 20 74 68 72 65 65 20  [one] two three 
4980: 5b 66 6f 75 72 5d 20 66 69 76 65 7d 0a 20 20 7b  [four] five}.  {
4990: 74 77 6f 20 74 68 72 65 65 20 5b 66 6f 75 72 5d  two three [four]
49a0: 20 66 69 76 65 20 5b 6f 6e 65 5d 7d 0a 20 20 7b   five [one]}.  {
49b0: 74 68 72 65 65 20 5b 66 6f 75 72 5d 20 66 69 76  three [four] fiv
49c0: 65 20 5b 6f 6e 65 5d 20 74 77 6f 7d 0a 20 20 7b  e [one] two}.  {
49d0: 5b 66 6f 75 72 5d 20 66 69 76 65 20 5b 6f 6e 65  [four] five [one
49e0: 5d 20 74 77 6f 20 74 68 72 65 65 7d 0a 20 20 7b  ] two three}.  {
49f0: 66 69 76 65 20 5b 6f 6e 65 5d 20 74 77 6f 20 74  five [one] two t
4a00: 68 72 65 65 20 5b 66 6f 75 72 5d 7d 0a 7d 0a 0a  hree [four]}.}..
4a10: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
4a20: 32 2e 36 20 7b 0a 20 20 53 45 4c 45 43 54 20 73  2.6 {.  SELECT s
4a30: 6e 69 70 70 65 74 28 74 32 2c 20 27 5b 27 2c 20  nippet(t2, '[', 
4a40: 27 5d 27 29 20 46 52 4f 4d 20 74 32 20 0a 20 20  ']') FROM t2 .  
4a50: 57 48 45 52 45 20 74 32 20 4d 41 54 43 48 20 27  WHERE t2 MATCH '
4a60: 6f 6e 65 20 4f 52 20 28 66 6f 75 72 20 41 4e 44  one OR (four AND
4a70: 20 73 69 78 29 27 20 0a 20 20 4f 52 44 45 52 20   six)' .  ORDER 
4a80: 42 59 20 64 6f 63 69 64 20 44 45 53 43 0a 7d 20  BY docid DESC.} 
4a90: 7b 0a 20 20 7b 66 69 76 65 20 5b 6f 6e 65 5d 20  {.  {five [one] 
4aa0: 74 77 6f 20 74 68 72 65 65 20 5b 66 6f 75 72 5d  two three [four]
4ab0: 7d 0a 20 20 7b 5b 66 6f 75 72 5d 20 66 69 76 65  }.  {[four] five
4ac0: 20 5b 6f 6e 65 5d 20 74 77 6f 20 74 68 72 65 65   [one] two three
4ad0: 7d 0a 20 20 7b 74 68 72 65 65 20 5b 66 6f 75 72  }.  {three [four
4ae0: 5d 20 66 69 76 65 20 5b 6f 6e 65 5d 20 74 77 6f  ] five [one] two
4af0: 7d 0a 20 20 7b 74 77 6f 20 74 68 72 65 65 20 5b  }.  {two three [
4b00: 66 6f 75 72 5d 20 66 69 76 65 20 5b 6f 6e 65 5d  four] five [one]
4b10: 7d 0a 20 20 7b 5b 6f 6e 65 5d 20 74 77 6f 20 74  }.  {[one] two t
4b20: 68 72 65 65 20 5b 66 6f 75 72 5d 20 66 69 76 65  hree [four] five
4b30: 7d 0a 7d 0a 0a 73 65 74 20 73 71 6c 69 74 65 5f  }.}..set sqlite_
4b40: 66 74 73 33 5f 65 6e 61 62 6c 65 5f 70 61 72 65  fts3_enable_pare
4b50: 6e 74 68 65 73 65 73 20 30 0a 66 69 6e 69 73 68  ntheses 0.finish
4b60: 5f 74 65 73 74 0a                                _test.