/ Hex Artifact Content
Login

Artifact dace744104d1a44dc12dc9dd10b8d7542342df503d96942b7c4a55034e761789:


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 73 71 6c 69 74  on case:.  sqlit
1f90: 65 33 5f 64 62 5f 63 6f 6e 66 69 67 20 64 62 20  e3_db_config db 
1fa0: 44 45 46 45 4e 53 49 56 45 20 30 0a 20 20 65 78  DEFENSIVE 0.  ex
1fb0: 65 63 73 71 6c 20 7b 20 55 50 44 41 54 45 20 66  ecsql { UPDATE f
1fc0: 74 5f 63 6f 6e 74 65 6e 74 20 53 45 54 20 63 31  t_content SET c1
1fd0: 62 20 3d 20 27 68 65 6c 6c 6f 20 77 6f 72 6c 64  b = 'hello world
1fe0: 27 20 57 48 45 52 45 20 63 31 62 20 3d 20 24 6e  ' WHERE c1b = $n
1ff0: 75 6d 62 65 72 73 20 7d 0a 20 20 64 6f 5f 65 72  umbers }.  do_er
2000: 72 6f 72 5f 74 65 73 74 20 24 54 2e 32 2e 33 20  ror_test $T.2.3 
2010: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6f 66 66  {.    SELECT off
2020: 73 65 74 73 28 66 74 29 20 46 52 4f 4d 20 66 74  sets(ft) FROM ft
2030: 20 57 48 45 52 45 20 66 74 20 4d 41 54 43 48 20   WHERE ft MATCH 
2040: 27 6f 6e 65 68 75 6e 64 72 65 64 27 0a 20 20 7d  'onehundred'.  }
2050: 20 7b 64 61 74 61 62 61 73 65 20 64 69 73 6b 20   {database disk 
2060: 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f 72 6d  image is malform
2070: 65 64 7d 0a 20 20 0a 20 20 23 23 23 23 23 23 23  ed}.  .  #######
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: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20c0: 23 23 23 0a 20 20 23 20 54 65 73 74 20 74 68 65  ###.  # Test the
20d0: 20 73 6e 69 70 70 65 74 20 66 75 6e 63 74 69 6f   snippet functio
20e0: 6e 2e 0a 20 20 23 0a 20 20 70 72 6f 63 20 64 6f  n..  #.  proc do
20f0: 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20 7b 6e  _snippet_test {n
2100: 61 6d 65 20 65 78 70 72 20 69 43 6f 6c 20 6e 54  ame expr iCol nT
2110: 6f 6b 20 61 72 67 73 7d 20 7b 0a 20 20 20 20 73  ok args} {.    s
2120: 65 74 20 72 65 73 20 5b 6c 69 73 74 5d 0a 20 20  et res [list].  
2130: 20 20 66 6f 72 65 61 63 68 20 61 20 24 61 72 67    foreach a $arg
2140: 73 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73 20  s { lappend res 
2150: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 61 5d  [string trim $a]
2160: 20 7d 0a 20 20 20 20 64 6f 5f 73 65 6c 65 63 74   }.    do_select
2170: 5f 74 65 73 74 20 24 6e 61 6d 65 20 7b 0a 20 20  _test $name {.  
2180: 20 20 20 20 53 45 4c 45 43 54 20 73 6e 69 70 70      SELECT snipp
2190: 65 74 28 66 74 2c 27 7b 27 2c 27 7d 27 2c 27 2e  et(ft,'{','}','.
21a0: 2e 2e 27 2c 24 69 43 6f 6c 2c 24 6e 54 6f 6b 29  ..',$iCol,$nTok)
21b0: 20 46 52 4f 4d 20 66 74 20 57 48 45 52 45 20 66   FROM ft WHERE f
21c0: 74 20 4d 41 54 43 48 20 24 65 78 70 72 0a 20 20  t MATCH $expr.  
21d0: 20 20 7d 20 24 72 65 73 0a 20 20 7d 0a 20 20 64    } $res.  }.  d
21e0: 6f 5f 74 65 73 74 20 24 54 2e 33 2e 31 20 7b 0a  o_test $T.3.1 {.
21f0: 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20      execsql {.  
2200: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49      DROP TABLE I
2210: 46 20 45 58 49 53 54 53 20 66 74 3b 0a 20 20 20  F EXISTS ft;.   
2220: 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41     CREATE VIRTUA
2230: 4c 20 54 41 42 4c 45 20 66 74 20 55 53 49 4e 47  L TABLE ft USING
2240: 20 66 74 73 33 3b 0a 20 20 20 20 20 20 49 4e 53   fts3;.      INS
2250: 45 52 54 20 49 4e 54 4f 20 66 74 20 56 41 4c 55  ERT INTO ft VALU
2260: 45 53 28 27 6f 6e 65 20 74 77 6f 20 74 68 72 65  ES('one two thre
2270: 65 20 66 6f 75 72 20 66 69 76 65 20 73 69 78 20  e four five six 
2280: 73 65 76 65 6e 20 65 69 67 68 74 20 6e 69 6e 65  seven eight nine
2290: 20 74 65 6e 27 29 3b 0a 20 20 20 20 7d 0a 20 20   ten');.    }.  
22a0: 7d 20 7b 7d 0a 20 20 64 6f 5f 73 6e 69 70 70 65  } {}.  do_snippe
22b0: 74 5f 74 65 73 74 20 24 54 2e 33 2e 32 20 20 6f  t_test $T.3.2  o
22c0: 6e 65 20 20 20 20 30 20 35 20 22 7b 6f 6e 65 7d  ne    0 5 "{one}
22d0: 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72 20   two three four 
22e0: 66 69 76 65 2e 2e 2e 22 0a 20 20 64 6f 5f 73 6e  five...".  do_sn
22f0: 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e 33 2e  ippet_test $T.3.
2300: 33 20 20 74 77 6f 20 20 20 20 30 20 35 20 22 6f  3  two    0 5 "o
2310: 6e 65 20 7b 74 77 6f 7d 20 74 68 72 65 65 20 66  ne {two} three f
2320: 6f 75 72 20 66 69 76 65 2e 2e 2e 22 0a 20 20 64  our five...".  d
2330: 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24  o_snippet_test $
2340: 54 2e 33 2e 34 20 20 74 68 72 65 65 20 20 30 20  T.3.4  three  0 
2350: 35 20 22 6f 6e 65 20 74 77 6f 20 7b 74 68 72 65  5 "one two {thre
2360: 65 7d 20 66 6f 75 72 20 66 69 76 65 2e 2e 2e 22  e} four five..."
2370: 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65  .  do_snippet_te
2380: 73 74 20 24 54 2e 33 2e 35 20 20 66 6f 75 72 20  st $T.3.5  four 
2390: 20 20 30 20 35 20 22 2e 2e 2e 74 77 6f 20 74 68    0 5 "...two th
23a0: 72 65 65 20 7b 66 6f 75 72 7d 20 66 69 76 65 20  ree {four} five 
23b0: 73 69 78 2e 2e 2e 22 0a 20 20 64 6f 5f 73 6e 69  six...".  do_sni
23c0: 70 70 65 74 5f 74 65 73 74 20 24 54 2e 33 2e 36  ppet_test $T.3.6
23d0: 20 20 66 69 76 65 20 20 20 30 20 35 20 22 2e 2e    five   0 5 "..
23e0: 2e 74 68 72 65 65 20 66 6f 75 72 20 7b 66 69 76  .three four {fiv
23f0: 65 7d 20 73 69 78 20 73 65 76 65 6e 2e 2e 2e 22  e} six seven..."
2400: 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65  .  do_snippet_te
2410: 73 74 20 24 54 2e 33 2e 37 20 20 73 69 78 20 20  st $T.3.7  six  
2420: 20 20 30 20 35 20 22 2e 2e 2e 66 6f 75 72 20 66    0 5 "...four f
2430: 69 76 65 20 7b 73 69 78 7d 20 73 65 76 65 6e 20  ive {six} seven 
2440: 65 69 67 68 74 2e 2e 2e 22 0a 20 20 64 6f 5f 73  eight...".  do_s
2450: 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e 33  nippet_test $T.3
2460: 2e 38 20 20 73 65 76 65 6e 20 20 30 20 35 20 22  .8  seven  0 5 "
2470: 2e 2e 2e 66 69 76 65 20 73 69 78 20 7b 73 65 76  ...five six {sev
2480: 65 6e 7d 20 65 69 67 68 74 20 6e 69 6e 65 2e 2e  en} eight nine..
2490: 2e 22 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f  .".  do_snippet_
24a0: 74 65 73 74 20 24 54 2e 33 2e 39 20 20 65 69 67  test $T.3.9  eig
24b0: 68 74 20 20 30 20 35 20 22 2e 2e 2e 73 69 78 20  ht  0 5 "...six 
24c0: 73 65 76 65 6e 20 7b 65 69 67 68 74 7d 20 6e 69  seven {eight} ni
24d0: 6e 65 20 74 65 6e 22 0a 20 20 64 6f 5f 73 6e 69  ne ten".  do_sni
24e0: 70 70 65 74 5f 74 65 73 74 20 24 54 2e 33 2e 31  ppet_test $T.3.1
24f0: 30 20 6e 69 6e 65 20 20 20 30 20 35 20 22 2e 2e  0 nine   0 5 "..
2500: 2e 73 69 78 20 73 65 76 65 6e 20 65 69 67 68 74  .six seven eight
2510: 20 7b 6e 69 6e 65 7d 20 74 65 6e 22 0a 20 20 64   {nine} ten".  d
2520: 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24  o_snippet_test $
2530: 54 2e 33 2e 31 31 20 74 65 6e 20 20 20 20 30 20  T.3.11 ten    0 
2540: 35 20 22 2e 2e 2e 73 69 78 20 73 65 76 65 6e 20  5 "...six seven 
2550: 65 69 67 68 74 20 6e 69 6e 65 20 7b 74 65 6e 7d  eight nine {ten}
2560: 22 0a 20 20 0a 20 20 64 6f 5f 74 65 73 74 20 24  ".  .  do_test $
2570: 54 2e 34 2e 31 20 7b 0a 20 20 20 20 65 78 65 63  T.4.1 {.    exec
2580: 73 71 6c 20 7b 0a 20 20 20 20 20 20 49 4e 53 45  sql {.      INSE
2590: 52 54 20 49 4e 54 4f 20 66 74 20 56 41 4c 55 45  RT INTO ft VALUE
25a0: 53 28 0a 20 20 20 20 20 20 20 20 20 20 20 27 6f  S(.           'o
25b0: 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75  ne two three fou
25c0: 72 20 66 69 76 65 20 27 0a 20 20 20 20 20 20 20  r five '.       
25d0: 20 7c 7c 20 27 73 69 78 20 73 65 76 65 6e 20 65   || 'six seven e
25e0: 69 67 68 74 20 6e 69 6e 65 20 74 65 6e 20 27 0a  ight nine ten '.
25f0: 20 20 20 20 20 20 20 20 7c 7c 20 27 65 6c 65 76          || 'elev
2600: 65 6e 20 74 77 65 6c 76 65 20 74 68 69 72 74 65  en twelve thirte
2610: 65 6e 20 66 6f 75 72 74 65 65 6e 20 66 69 66 74  en fourteen fift
2620: 65 65 6e 20 27 0a 20 20 20 20 20 20 20 20 7c 7c  een '.        ||
2630: 20 27 73 69 78 74 65 65 6e 20 73 65 76 65 6e 74   'sixteen sevent
2640: 65 65 6e 20 65 69 67 68 74 65 65 6e 20 6e 69 6e  een eighteen nin
2650: 65 74 65 65 6e 20 74 77 65 6e 74 79 20 27 0a 20  eteen twenty '. 
2660: 20 20 20 20 20 20 20 7c 7c 20 27 6f 6e 65 20 74         || 'one t
2670: 77 6f 20 74 68 72 65 65 20 66 6f 75 72 20 66 69  wo three four fi
2680: 76 65 20 27 0a 20 20 20 20 20 20 20 20 7c 7c 20  ve '.        || 
2690: 27 73 69 78 20 73 65 76 65 6e 20 65 69 67 68 74  'six seven eight
26a0: 20 6e 69 6e 65 20 74 65 6e 20 27 0a 20 20 20 20   nine ten '.    
26b0: 20 20 20 20 7c 7c 20 27 65 6c 65 76 65 6e 20 74      || 'eleven t
26c0: 77 65 6c 76 65 20 74 68 69 72 74 65 65 6e 20 66  welve thirteen f
26d0: 6f 75 72 74 65 65 6e 20 66 69 66 74 65 65 6e 20  ourteen fifteen 
26e0: 27 0a 20 20 20 20 20 20 20 20 7c 7c 20 27 73 69  '.        || 'si
26f0: 78 74 65 65 6e 20 73 65 76 65 6e 74 65 65 6e 20  xteen seventeen 
2700: 65 69 67 68 74 65 65 6e 20 6e 69 6e 65 74 65 65  eighteen ninetee
2710: 6e 20 74 77 65 6e 74 79 27 0a 20 20 20 20 20 20  n twenty'.      
2720: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a  );.    }.  } {}.
2730: 20 20 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f    .  do_snippet_
2740: 74 65 73 74 20 24 54 2e 34 2e 32 20 7b 6f 6e 65  test $T.4.2 {one
2750: 20 6e 69 6e 65 7d 20 30 20 35 20 7b 0a 20 20 20   nine} 0 5 {.   
2760: 20 20 7b 6f 6e 65 7d 20 74 77 6f 20 74 68 72 65    {one} two thre
2770: 65 2e 2e 2e 65 69 67 68 74 20 7b 6e 69 6e 65 7d  e...eight {nine}
2780: 20 74 65 6e 0a 20 20 7d 20 7b 0a 20 20 20 20 20   ten.  } {.     
2790: 7b 6f 6e 65 7d 20 74 77 6f 20 74 68 72 65 65 2e  {one} two three.
27a0: 2e 2e 65 69 67 68 74 20 7b 6e 69 6e 65 7d 20 74  ..eight {nine} t
27b0: 65 6e 2e 2e 2e 0a 20 20 7d 0a 20 20 0a 20 20 64  en....  }.  .  d
27c0: 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24  o_snippet_test $
27d0: 54 2e 34 2e 33 20 7b 6f 6e 65 20 6e 69 6e 65 7d  T.4.3 {one nine}
27e0: 20 30 20 2d 35 20 7b 0a 20 20 20 20 20 7b 6f 6e   0 -5 {.     {on
27f0: 65 7d 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75  e} two three fou
2800: 72 20 66 69 76 65 2e 2e 2e 73 69 78 20 73 65 76  r five...six sev
2810: 65 6e 20 65 69 67 68 74 20 7b 6e 69 6e 65 7d 20  en eight {nine} 
2820: 74 65 6e 0a 20 20 7d 20 7b 0a 20 20 20 20 20 7b  ten.  } {.     {
2830: 6f 6e 65 7d 20 74 77 6f 20 74 68 72 65 65 20 66  one} two three f
2840: 6f 75 72 20 66 69 76 65 2e 2e 2e 73 65 76 65 6e  our five...seven
2850: 20 65 69 67 68 74 20 7b 6e 69 6e 65 7d 20 74 65   eight {nine} te
2860: 6e 20 65 6c 65 76 65 6e 2e 2e 2e 0a 20 20 7d 0a  n eleven....  }.
2870: 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73    do_snippet_tes
2880: 74 20 24 54 2e 34 2e 33 20 7b 6f 6e 65 20 6e 69  t $T.4.3 {one ni
2890: 6e 65 74 65 65 6e 7d 20 30 20 2d 35 20 7b 0a 20  neteen} 0 -5 {. 
28a0: 20 20 20 20 2e 2e 2e 65 69 67 68 74 65 65 6e 20      ...eighteen 
28b0: 7b 6e 69 6e 65 74 65 65 6e 7d 20 74 77 65 6e 74  {nineteen} twent
28c0: 79 20 7b 6f 6e 65 7d 20 74 77 6f 2e 2e 2e 0a 20  y {one} two.... 
28d0: 20 7d 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f   }.  do_snippet_
28e0: 74 65 73 74 20 24 54 2e 34 2e 34 20 7b 74 77 6f  test $T.4.4 {two
28f0: 20 6e 69 6e 65 74 65 65 6e 7d 20 30 20 2d 35 20   nineteen} 0 -5 
2900: 7b 0a 20 20 20 20 20 2e 2e 2e 65 69 67 68 74 65  {.     ...eighte
2910: 65 6e 20 7b 6e 69 6e 65 74 65 65 6e 7d 20 74 77  en {nineteen} tw
2920: 65 6e 74 79 20 6f 6e 65 20 7b 74 77 6f 7d 2e 2e  enty one {two}..
2930: 2e 0a 20 20 7d 0a 20 20 64 6f 5f 73 6e 69 70 70  ..  }.  do_snipp
2940: 65 74 5f 74 65 73 74 20 24 54 2e 34 2e 35 20 7b  et_test $T.4.5 {
2950: 74 68 72 65 65 20 6e 69 6e 65 74 65 65 6e 7d 20  three nineteen} 
2960: 30 20 2d 35 20 7b 0a 20 20 20 20 20 2e 2e 2e 7b  0 -5 {.     ...{
2970: 6e 69 6e 65 74 65 65 6e 7d 20 74 77 65 6e 74 79  nineteen} twenty
2980: 20 6f 6e 65 20 74 77 6f 20 7b 74 68 72 65 65 7d   one two {three}
2990: 2e 2e 2e 0a 20 20 7d 0a 20 20 0a 20 20 64 6f 5f  ....  }.  .  do_
29a0: 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e  snippet_test $T.
29b0: 34 2e 36 20 7b 66 6f 75 72 20 6e 69 6e 65 74 65  4.6 {four ninete
29c0: 65 6e 7d 20 30 20 2d 35 20 7b 0a 20 20 20 20 20  en} 0 -5 {.     
29d0: 2e 2e 2e 74 77 6f 20 74 68 72 65 65 20 7b 66 6f  ...two three {fo
29e0: 75 72 7d 20 66 69 76 65 20 73 69 78 2e 2e 2e 73  ur} five six...s
29f0: 65 76 65 6e 74 65 65 6e 20 65 69 67 68 74 65 65  eventeen eightee
2a00: 6e 20 7b 6e 69 6e 65 74 65 65 6e 7d 20 74 77 65  n {nineteen} twe
2a10: 6e 74 79 20 6f 6e 65 2e 2e 2e 0a 20 20 7d 0a 20  nty one....  }. 
2a20: 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74   do_snippet_test
2a30: 20 24 54 2e 34 2e 37 20 7b 66 6f 75 72 20 4e 45   $T.4.7 {four NE
2a40: 41 52 20 6e 69 6e 65 74 65 65 6e 7d 20 30 20 2d  AR nineteen} 0 -
2a50: 35 20 7b 0a 20 20 20 20 20 2e 2e 2e 73 65 76 65  5 {.     ...seve
2a60: 6e 74 65 65 6e 20 65 69 67 68 74 65 65 6e 20 7b  nteen eighteen {
2a70: 6e 69 6e 65 74 65 65 6e 7d 20 74 77 65 6e 74 79  nineteen} twenty
2a80: 20 6f 6e 65 2e 2e 2e 74 77 6f 20 74 68 72 65 65   one...two three
2a90: 20 7b 66 6f 75 72 7d 20 66 69 76 65 20 73 69 78   {four} five six
2aa0: 2e 2e 2e 0a 20 20 7d 0a 20 20 0a 20 20 64 6f 5f  ....  }.  .  do_
2ab0: 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e  snippet_test $T.
2ac0: 34 2e 38 20 7b 66 6f 75 72 20 6e 69 6e 65 74 65  4.8 {four ninete
2ad0: 65 6e 7d 20 30 20 35 20 7b 0a 20 20 20 20 20 2e  en} 0 5 {.     .
2ae0: 2e 2e 74 68 72 65 65 20 7b 66 6f 75 72 7d 20 66  ..three {four} f
2af0: 69 76 65 2e 2e 2e 65 69 67 68 74 65 65 6e 20 7b  ive...eighteen {
2b00: 6e 69 6e 65 74 65 65 6e 7d 20 74 77 65 6e 74 79  nineteen} twenty
2b10: 2e 2e 2e 0a 20 20 7d 0a 20 20 64 6f 5f 73 6e 69  ....  }.  do_sni
2b20: 70 70 65 74 5f 74 65 73 74 20 24 54 2e 34 2e 39  ppet_test $T.4.9
2b30: 20 7b 66 6f 75 72 20 4e 45 41 52 20 6e 69 6e 65   {four NEAR nine
2b40: 74 65 65 6e 7d 20 30 20 35 20 7b 0a 20 20 20 20  teen} 0 5 {.    
2b50: 20 2e 2e 2e 65 69 67 68 74 65 65 6e 20 7b 6e 69   ...eighteen {ni
2b60: 6e 65 74 65 65 6e 7d 20 74 77 65 6e 74 79 2e 2e  neteen} twenty..
2b70: 2e 74 68 72 65 65 20 7b 66 6f 75 72 7d 20 66 69  .three {four} fi
2b80: 76 65 2e 2e 2e 0a 20 20 7d 0a 20 20 64 6f 5f 73  ve....  }.  do_s
2b90: 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e 34  nippet_test $T.4
2ba0: 2e 31 30 20 7b 66 6f 75 72 20 4e 45 41 52 20 6e  .10 {four NEAR n
2bb0: 69 6e 65 74 65 65 6e 7d 20 30 20 2d 35 20 7b 0a  ineteen} 0 -5 {.
2bc0: 20 20 20 20 20 2e 2e 2e 73 65 76 65 6e 74 65 65       ...seventee
2bd0: 6e 20 65 69 67 68 74 65 65 6e 20 7b 6e 69 6e 65  n eighteen {nine
2be0: 74 65 65 6e 7d 20 74 77 65 6e 74 79 20 6f 6e 65  teen} twenty one
2bf0: 2e 2e 2e 74 77 6f 20 74 68 72 65 65 20 7b 66 6f  ...two three {fo
2c00: 75 72 7d 20 66 69 76 65 20 73 69 78 2e 2e 2e 0a  ur} five six....
2c10: 20 20 7d 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74    }.  do_snippet
2c20: 5f 74 65 73 74 20 24 54 2e 34 2e 31 31 20 7b 66  _test $T.4.11 {f
2c30: 6f 75 72 20 4e 4f 54 20 28 6e 69 6e 65 74 65 65  our NOT (ninetee
2c40: 6e 20 74 77 65 6e 74 79 6f 6e 65 29 7d 20 30 20  n twentyone)} 0 
2c50: 35 20 7b 0a 20 20 20 20 20 2e 2e 2e 74 77 6f 20  5 {.     ...two 
2c60: 74 68 72 65 65 20 7b 66 6f 75 72 7d 20 66 69 76  three {four} fiv
2c70: 65 20 73 69 78 2e 2e 2e 0a 20 20 7d 20 7b 0a 20  e six....  } {. 
2c80: 20 20 20 20 2e 2e 2e 74 77 6f 20 74 68 72 65 65      ...two three
2c90: 20 7b 66 6f 75 72 7d 20 66 69 76 65 20 73 69 78   {four} five six
2ca0: 2e 2e 2e 0a 20 20 7d 0a 20 20 64 6f 5f 73 6e 69  ....  }.  do_sni
2cb0: 70 70 65 74 5f 74 65 73 74 20 24 54 2e 34 2e 31  ppet_test $T.4.1
2cc0: 32 20 7b 66 6f 75 72 20 4f 52 20 6e 69 6e 65 74  2 {four OR ninet
2cd0: 65 65 6e 20 4e 45 41 52 20 74 77 65 6e 74 79 6f  een NEAR twentyo
2ce0: 6e 65 7d 20 30 20 35 20 7b 0a 20 20 20 20 20 2e  ne} 0 5 {.     .
2cf0: 2e 2e 74 77 6f 20 74 68 72 65 65 20 7b 66 6f 75  ..two three {fou
2d00: 72 7d 20 66 69 76 65 20 73 69 78 2e 2e 2e 0a 20  r} five six.... 
2d10: 20 7d 20 7b 0a 20 20 20 20 20 2e 2e 2e 74 77 6f   } {.     ...two
2d20: 20 74 68 72 65 65 20 7b 66 6f 75 72 7d 20 66 69   three {four} fi
2d30: 76 65 20 73 69 78 2e 2e 2e 0a 20 20 7d 0a 20 20  ve six....  }.  
2d40: 0a 20 20 64 6f 5f 74 65 73 74 20 24 54 2e 35 2e  .  do_test $T.5.
2d50: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1 {.    execsql 
2d60: 7b 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41 42  {.      DROP TAB
2d70: 4c 45 20 49 46 20 45 58 49 53 54 53 20 66 74 3b  LE IF EXISTS ft;
2d80: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 56 49  .      CREATE VI
2d90: 52 54 55 41 4c 20 54 41 42 4c 45 20 66 74 20 55  RTUAL TABLE ft U
2da0: 53 49 4e 47 20 66 74 73 33 28 61 2c 20 62 2c 20  SING fts3(a, b, 
2db0: 63 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54  c);.      INSERT
2dc0: 20 49 4e 54 4f 20 66 74 20 56 41 4c 55 45 53 28   INTO ft VALUES(
2dd0: 0a 20 20 20 20 20 20 20 20 27 6f 6e 65 20 74 77  .        'one tw
2de0: 6f 20 74 68 72 65 65 20 66 6f 75 72 20 66 69 76  o three four fiv
2df0: 65 27 2c 20 0a 20 20 20 20 20 20 20 20 27 66 6f  e', .        'fo
2e00: 75 72 20 66 69 76 65 20 73 69 78 20 73 65 76 65  ur five six seve
2e10: 6e 20 65 69 67 68 74 27 2c 20 0a 20 20 20 20 20  n eight', .     
2e20: 20 20 20 27 73 65 76 65 6e 20 65 69 67 68 74 20     'seven eight 
2e30: 6e 69 6e 65 20 74 65 6e 20 65 6c 65 76 65 6e 27  nine ten eleven'
2e40: 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 7d 0a  .      );.    }.
2e50: 20 20 7d 20 7b 7d 0a 20 20 0a 20 20 64 6f 5f 73    } {}.  .  do_s
2e60: 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e 35  nippet_test $T.5
2e70: 2e 32 20 7b 66 69 76 65 7d 20 2d 31 20 33 20 7b  .2 {five} -1 3 {
2e80: 2e 2e 2e 74 68 72 65 65 20 66 6f 75 72 20 7b 66  ...three four {f
2e90: 69 76 65 7d 7d 0a 20 20 64 6f 5f 73 6e 69 70 70  ive}}.  do_snipp
2ea0: 65 74 5f 74 65 73 74 20 24 54 2e 35 2e 33 20 7b  et_test $T.5.3 {
2eb0: 66 69 76 65 7d 20 20 30 20 33 20 7b 2e 2e 2e 74  five}  0 3 {...t
2ec0: 68 72 65 65 20 66 6f 75 72 20 7b 66 69 76 65 7d  hree four {five}
2ed0: 7d 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74  }.  do_snippet_t
2ee0: 65 73 74 20 24 54 2e 35 2e 34 20 7b 66 69 76 65  est $T.5.4 {five
2ef0: 7d 20 20 31 20 33 20 7b 66 6f 75 72 20 7b 66 69  }  1 3 {four {fi
2f00: 76 65 7d 20 73 69 78 2e 2e 2e 7d 0a 20 20 64 6f  ve} six...}.  do
2f10: 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54  _snippet_test $T
2f20: 2e 35 2e 35 20 7b 66 69 76 65 7d 20 20 32 20 33  .5.5 {five}  2 3
2f30: 20 7b 73 65 76 65 6e 20 65 69 67 68 74 20 6e 69   {seven eight ni
2f40: 6e 65 2e 2e 2e 7d 0a 20 20 0a 20 20 64 6f 5f 74  ne...}.  .  do_t
2f50: 65 73 74 20 24 54 2e 35 2e 36 20 7b 0a 20 20 20  est $T.5.6 {.   
2f60: 20 65 78 65 63 73 71 6c 20 7b 20 55 50 44 41 54   execsql { UPDAT
2f70: 45 20 66 74 20 53 45 54 20 62 20 3d 20 4e 55 4c  E ft SET b = NUL
2f80: 4c 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 0a 20 20  L }.  } {}.  .  
2f90: 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20  do_snippet_test 
2fa0: 24 54 2e 35 2e 37 20 20 7b 66 69 76 65 7d 20 2d  $T.5.7  {five} -
2fb0: 31 20 33 20 7b 2e 2e 2e 74 68 72 65 65 20 66 6f  1 3 {...three fo
2fc0: 75 72 20 7b 66 69 76 65 7d 7d 0a 20 20 64 6f 5f  ur {five}}.  do_
2fd0: 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e  snippet_test $T.
2fe0: 35 2e 38 20 20 7b 66 69 76 65 7d 20 20 30 20 33  5.8  {five}  0 3
2ff0: 20 7b 2e 2e 2e 74 68 72 65 65 20 66 6f 75 72 20   {...three four 
3000: 7b 66 69 76 65 7d 7d 0a 20 20 64 6f 5f 73 6e 69  {five}}.  do_sni
3010: 70 70 65 74 5f 74 65 73 74 20 24 54 2e 35 2e 39  ppet_test $T.5.9
3020: 20 20 7b 66 69 76 65 7d 20 20 31 20 33 20 7b 7d    {five}  1 3 {}
3030: 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65  .  do_snippet_te
3040: 73 74 20 24 54 2e 35 2e 31 30 20 7b 66 69 76 65  st $T.5.10 {five
3050: 7d 20 20 32 20 33 20 7b 73 65 76 65 6e 20 65 69  }  2 3 {seven ei
3060: 67 68 74 20 6e 69 6e 65 2e 2e 2e 7d 0a 20 20 0a  ght nine...}.  .
3070: 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73    do_snippet_tes
3080: 74 20 24 54 2e 35 2e 31 31 20 7b 6f 6e 65 20 22  t $T.5.11 {one "
3090: 73 65 76 65 6e 20 65 69 67 68 74 20 6e 69 6e 65  seven eight nine
30a0: 22 7d 20 2d 31 20 2d 33 20 7b 0a 20 20 20 20 7b  "} -1 -3 {.    {
30b0: 6f 6e 65 7d 20 74 77 6f 20 74 68 72 65 65 2e 2e  one} two three..
30c0: 2e 7b 73 65 76 65 6e 7d 20 7b 65 69 67 68 74 7d  .{seven} {eight}
30d0: 20 7b 6e 69 6e 65 7d 2e 2e 2e 0a 20 20 7d 0a 0a   {nine}....  }..
30e0: 20 20 64 6f 5f 74 65 73 74 20 24 54 2e 36 2e 31    do_test $T.6.1
30f0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
3100: 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c  .      DROP TABL
3110: 45 20 49 46 20 45 58 49 53 54 53 20 66 74 3b 0a  E IF EXISTS ft;.
3120: 20 20 20 20 20 20 43 52 45 41 54 45 20 56 49 52        CREATE VIR
3130: 54 55 41 4c 20 54 41 42 4c 45 20 66 74 20 55 53  TUAL TABLE ft US
3140: 49 4e 47 20 66 74 73 33 28 78 29 3b 0a 20 20 20  ING fts3(x);.   
3150: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66     INSERT INTO f
3160: 74 20 56 41 4c 55 45 53 28 24 6e 75 6d 62 65 72  t VALUES($number
3170: 73 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d  s);.    }.  } {}
3180: 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65  .  do_snippet_te
3190: 73 74 20 24 54 2e 36 2e 32 20 7b 0a 20 20 20 20  st $T.6.2 {.    
31a0: 6f 6e 65 20 66 69 66 74 79 20 6f 6e 65 68 75 6e  one fifty onehun
31b0: 64 72 65 64 20 6f 6e 65 68 75 6e 64 72 65 64 66  dred onehundredf
31c0: 69 66 74 79 20 74 77 6f 68 75 6e 64 72 65 64 66  ifty twohundredf
31d0: 69 66 74 79 20 74 68 72 65 65 68 75 6e 64 72 65  ifty threehundre
31e0: 64 0a 20 20 7d 20 2d 31 20 34 20 7b 0a 20 20 20  d.  } -1 4 {.   
31f0: 20 7b 6f 6e 65 7d 2e 2e 2e 7b 66 69 66 74 79 7d   {one}...{fifty}
3200: 2e 2e 2e 7b 6f 6e 65 68 75 6e 64 72 65 64 7d 2e  ...{onehundred}.
3210: 2e 2e 7b 6f 6e 65 68 75 6e 64 72 65 64 66 69 66  ..{onehundredfif
3220: 74 79 7d 2e 2e 2e 0a 20 20 7d 0a 20 20 64 6f 5f  ty}....  }.  do_
3230: 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e  snippet_test $T.
3240: 36 2e 33 20 7b 0a 20 20 20 20 6f 6e 65 20 66 69  6.3 {.    one fi
3250: 66 74 79 20 6f 6e 65 68 75 6e 64 72 65 64 20 6f  fty onehundred o
3260: 6e 65 68 75 6e 64 72 65 64 66 69 66 74 79 20 74  nehundredfifty t
3270: 77 6f 68 75 6e 64 72 65 64 66 69 66 74 79 20 74  wohundredfifty t
3280: 68 72 65 65 68 75 6e 64 72 65 64 0a 20 20 7d 20  hreehundred.  } 
3290: 2d 31 20 2d 34 20 7b 0a 20 20 20 20 7b 6f 6e 65  -1 -4 {.    {one
32a0: 7d 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72  } two three four
32b0: 2e 2e 2e 66 6f 72 74 79 65 69 67 68 74 20 66 6f  ...fortyeight fo
32c0: 72 74 79 6e 69 6e 65 20 7b 66 69 66 74 79 7d 20  rtynine {fifty} 
32d0: 66 69 66 74 79 6f 6e 65 2e 2e 2e 6e 69 6e 65 74  fiftyone...ninet
32e0: 79 65 69 67 68 74 20 6e 69 6e 65 74 79 6e 69 6e  yeight ninetynin
32f0: 65 20 7b 6f 6e 65 68 75 6e 64 72 65 64 7d 20 6f  e {onehundred} o
3300: 6e 65 68 75 6e 64 72 65 64 6f 6e 65 2e 2e 2e 6f  nehundredone...o
3310: 6e 65 68 75 6e 64 72 65 64 66 6f 72 74 79 65 69  nehundredfortyei
3320: 67 68 74 20 6f 6e 65 68 75 6e 64 72 65 64 66 6f  ght onehundredfo
3330: 72 74 79 6e 69 6e 65 20 7b 6f 6e 65 68 75 6e 64  rtynine {onehund
3340: 72 65 64 66 69 66 74 79 7d 20 6f 6e 65 68 75 6e  redfifty} onehun
3350: 64 72 65 64 66 69 66 74 79 6f 6e 65 2e 2e 2e 0a  dredfiftyone....
3360: 20 20 7d 0a 0a 20 20 64 6f 5f 74 65 73 74 20 24    }..  do_test $
3370: 54 2e 37 2e 31 20 7b 0a 20 20 20 20 65 78 65 63  T.7.1 {.    exec
3380: 73 71 6c 20 7b 0a 20 20 20 20 20 20 42 45 47 49  sql {.      BEGI
3390: 4e 3b 0a 20 20 20 20 20 20 20 20 44 52 4f 50 20  N;.        DROP 
33a0: 54 41 42 4c 45 20 49 46 20 45 58 49 53 54 53 20  TABLE IF EXISTS 
33b0: 66 74 3b 0a 20 20 20 20 20 20 20 20 43 52 45 41  ft;.        CREA
33c0: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
33d0: 20 66 74 20 55 53 49 4e 47 20 66 74 73 33 28 78   ft USING fts3(x
33e0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 65 74  );.    }.    set
33f0: 20 74 65 73 74 72 65 73 75 6c 74 73 20 5b 6c 69   testresults [li
3400: 73 74 5d 0a 20 20 20 20 66 6f 72 20 7b 73 65 74  st].    for {set
3410: 20 69 20 31 7d 20 7b 24 69 20 3c 20 31 35 30 7d   i 1} {$i < 150}
3420: 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20   {incr i} {.    
3430: 20 20 73 65 74 20 63 6f 6d 6d 61 73 20 5b 73 74    set commas [st
3440: 72 69 6e 67 20 72 65 70 65 61 74 20 2c 20 24 69  ring repeat , $i
3450: 5d 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  ].      execsql 
3460: 7b 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 20  {INSERT INTO ft 
3470: 56 41 4c 55 45 53 28 27 6f 6e 65 27 20 7c 7c 20  VALUES('one' || 
3480: 24 63 6f 6d 6d 61 73 20 7c 7c 20 27 74 77 6f 27  $commas || 'two'
3490: 29 7d 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64  )}.      lappend
34a0: 20 74 65 73 74 72 65 73 75 6c 74 73 20 22 7b 6f   testresults "{o
34b0: 6e 65 7d 24 63 6f 6d 6d 61 73 7b 74 77 6f 7d 22  ne}$commas{two}"
34c0: 0a 20 20 20 20 7d 0a 20 20 20 20 65 78 65 63 73  .    }.    execs
34d0: 71 6c 20 43 4f 4d 4d 49 54 0a 20 20 7d 20 7b 7d  ql COMMIT.  } {}
34e0: 0a 20 20 65 76 61 6c 20 5b 6c 69 73 74 20 64 6f  .  eval [list do
34f0: 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54  _snippet_test $T
3500: 2e 37 2e 32 20 7b 6f 6e 65 20 74 77 6f 7d 20 2d  .7.2 {one two} -
3510: 31 20 33 5d 20 24 74 65 73 74 72 65 73 75 6c 74  1 3] $testresult
3520: 73 0a 20 20 0a 20 20 23 23 23 23 23 23 23 23 23  s.  .  #########
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 23 23  ################
3550: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3570: 23 0a 20 20 23 20 54 65 73 74 20 74 68 65 20 6d  #.  # Test the m
3580: 61 74 63 68 69 6e 66 6f 20 66 75 6e 63 74 69 6f  atchinfo functio
3590: 6e 2e 0a 20 20 23 0a 20 20 70 72 6f 63 20 6d 69  n..  #.  proc mi
35a0: 74 20 7b 62 6c 6f 62 7d 20 7b 0a 20 20 20 20 73  t {blob} {.    s
35b0: 65 74 20 73 63 61 6e 28 6c 69 74 74 6c 65 45 6e  et scan(littleEn
35c0: 64 69 61 6e 29 20 69 2a 0a 20 20 20 20 73 65 74  dian) i*.    set
35d0: 20 73 63 61 6e 28 62 69 67 45 6e 64 69 61 6e 29   scan(bigEndian)
35e0: 20 49 2a 0a 20 20 20 20 62 69 6e 61 72 79 20 73   I*.    binary s
35f0: 63 61 6e 20 24 62 6c 6f 62 20 24 73 63 61 6e 28  can $blob $scan(
3600: 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  $::tcl_platform(
3610: 62 79 74 65 4f 72 64 65 72 29 29 20 72 0a 20 20  byteOrder)) r.  
3620: 20 20 72 65 74 75 72 6e 20 24 72 0a 20 20 7d 0a    return $r.  }.
3630: 20 20 64 62 20 66 75 6e 63 20 6d 69 74 20 6d 69    db func mit mi
3640: 74 0a 20 20 70 72 6f 63 20 64 6f 5f 6d 61 74 63  t.  proc do_matc
3650: 68 69 6e 66 6f 5f 74 65 73 74 20 7b 6e 61 6d 65  hinfo_test {name
3660: 20 65 78 70 72 20 61 72 67 73 7d 20 7b 0a 20 20   expr args} {.  
3670: 20 20 73 65 74 20 72 65 73 20 5b 6c 69 73 74 5d    set res [list]
3680: 0a 20 20 20 20 66 6f 72 65 61 63 68 20 61 20 24  .    foreach a $
3690: 61 72 67 73 20 7b 20 6c 61 70 70 65 6e 64 20 72  args { lappend r
36a0: 65 73 20 5b 6e 6f 72 6d 61 6c 69 7a 65 20 24 61  es [normalize $a
36b0: 5d 20 7d 0a 20 20 20 20 64 6f 5f 73 65 6c 65 63  ] }.    do_selec
36c0: 74 5f 74 65 73 74 20 24 6e 61 6d 65 20 7b 0a 20  t_test $name {. 
36d0: 20 20 20 20 20 53 45 4c 45 43 54 20 6d 69 74 28       SELECT mit(
36e0: 6d 61 74 63 68 69 6e 66 6f 28 66 74 29 29 20 46  matchinfo(ft)) F
36f0: 52 4f 4d 20 66 74 20 57 48 45 52 45 20 66 74 20  ROM ft WHERE ft 
3700: 4d 41 54 43 48 20 24 65 78 70 72 0a 20 20 20 20  MATCH $expr.    
3710: 7d 20 24 72 65 73 0a 20 20 7d 0a 20 20 64 6f 5f  } $res.  }.  do_
3720: 74 65 73 74 20 24 54 2e 38 2e 31 20 7b 0a 20 20  test $T.8.1 {.  
3730: 20 20 73 65 74 20 74 65 6e 20 7b 6f 6e 65 20 74    set ten {one t
3740: 77 6f 20 74 68 72 65 65 20 66 6f 75 72 20 66 69  wo three four fi
3750: 76 65 20 73 69 78 20 73 65 76 65 6e 20 65 69 67  ve six seven eig
3760: 68 74 20 6e 69 6e 65 20 74 65 6e 7d 0a 20 20 20  ht nine ten}.   
3770: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
3780: 20 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45   DROP TABLE IF E
3790: 58 49 53 54 53 20 66 74 3b 0a 20 20 20 20 20 20  XISTS ft;.      
37a0: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
37b0: 41 42 4c 45 20 66 74 20 55 53 49 4e 47 20 66 74  ABLE ft USING ft
37c0: 73 33 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54  s3;.      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 29 3b 0a 20 20 20 20 20 20 49 4e 53  $ten);.      INS
37f0: 45 52 54 20 49 4e 54 4f 20 66 74 20 56 41 4c 55  ERT INTO ft VALU
3800: 45 53 28 24 74 65 6e 20 7c 7c 20 27 20 27 20 7c  ES($ten || ' ' |
3810: 7c 20 24 74 65 6e 29 3b 0a 20 20 20 20 7d 0a 20  | $ten);.    }. 
3820: 20 7d 20 7b 7d 0a 20 20 0a 20 20 64 6f 5f 6d 61   } {}.  .  do_ma
3830: 74 63 68 69 6e 66 6f 5f 74 65 73 74 20 24 54 2e  tchinfo_test $T.
3840: 38 2e 32 20 22 6f 6e 65 22 20 7b 31 20 31 20 20  8.2 "one" {1 1  
3850: 31 20 33 20 32 7d 20 7b 31 20 31 20 20 32 20 33  1 3 2} {1 1  2 3
3860: 20 32 7d 0a 20 20 64 6f 5f 6d 61 74 63 68 69 6e   2}.  do_matchin
3870: 66 6f 5f 74 65 73 74 20 24 54 2e 38 2e 33 20 22  fo_test $T.8.3 "
3880: 6f 6e 65 20 4e 45 41 52 2f 33 20 74 65 6e 22 20  one NEAR/3 ten" 
3890: 7b 32 20 31 20 20 31 20 31 20 31 20 31 20 31 20  {2 1  1 1 1 1 1 
38a0: 31 7d 0a 20 20 64 6f 5f 6d 61 74 63 68 69 6e 66  1}.  do_matchinf
38b0: 6f 5f 74 65 73 74 20 24 54 2e 38 2e 34 20 22 66  o_test $T.8.4 "f
38c0: 69 76 65 20 4e 45 41 52 2f 34 20 74 65 6e 22 20  ive NEAR/4 ten" 
38d0: 5c 0a 20 20 20 20 7b 32 20 31 20 20 31 20 33 20  \.    {2 1  1 3 
38e0: 32 20 20 31 20 33 20 32 7d 20 7b 32 20 31 20 20  2  1 3 2} {2 1  
38f0: 32 20 33 20 32 20 20 32 20 33 20 32 7d 0a 20 20  2 3 2  2 3 2}.  
3900: 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73  do_matchinfo_tes
3910: 74 20 24 54 2e 38 2e 35 20 22 73 69 78 20 4e 45  t $T.8.5 "six NE
3920: 41 52 2f 33 20 74 65 6e 20 4e 45 41 52 2f 33 20  AR/3 ten NEAR/3 
3930: 74 77 6f 22 20 5c 0a 20 20 20 20 7b 33 20 31 20  two" \.    {3 1 
3940: 20 31 20 31 20 31 20 20 31 20 31 20 31 20 20 31   1 1 1  1 1 1  1
3950: 20 31 20 31 7d 0a 20 20 64 6f 5f 6d 61 74 63 68   1 1}.  do_match
3960: 69 6e 66 6f 5f 74 65 73 74 20 24 54 2e 38 2e 36  info_test $T.8.6
3970: 20 22 66 69 76 65 20 4e 45 41 52 2f 34 20 74 65   "five NEAR/4 te
3980: 6e 20 4e 45 41 52 2f 33 20 74 77 6f 22 20 5c 0a  n NEAR/3 two" \.
3990: 20 20 20 20 7b 33 20 31 20 20 32 20 32 20 31 20      {3 1  2 2 1 
39a0: 20 31 20 31 20 31 20 20 31 20 31 20 31 7d 0a 0a   1 1 1  1 1 1}..
39b0: 20 20 64 6f 5f 74 65 73 74 20 24 54 2e 39 2e 31    do_test $T.9.1
39c0: 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b   {.    execsql {
39d0: 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c  .      DROP TABL
39e0: 45 20 49 46 20 45 58 49 53 54 53 20 66 74 3b 0a  E IF EXISTS ft;.
39f0: 20 20 20 20 20 20 43 52 45 41 54 45 20 56 49 52        CREATE VIR
3a00: 54 55 41 4c 20 54 41 42 4c 45 20 66 74 20 55 53  TUAL TABLE ft US
3a10: 49 4e 47 20 66 74 73 33 28 78 2c 20 79 29 3b 0a  ING fts3(x, y);.
3a20: 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 65 61 63      }.    foreac
3a30: 68 20 6e 20 7b 31 20 32 20 33 7d 20 7b 0a 20 20  h n {1 2 3} {.  
3a40: 20 20 20 20 73 65 74 20 76 31 20 5b 6c 72 61 6e      set v1 [lran
3a50: 67 65 20 24 6e 75 6d 62 65 72 73 20 30 20 5b 65  ge $numbers 0 [e
3a60: 78 70 72 20 24 6e 2a 31 30 30 5d 5d 0a 20 20 20  xpr $n*100]].   
3a70: 20 20 20 73 65 74 20 76 32 20 5b 73 74 72 69 6e     set v2 [strin
3a80: 67 20 74 72 69 6d 20 5b 73 74 72 69 6e 67 20 72  g trim [string r
3a90: 65 70 65 61 74 20 22 24 6e 75 6d 62 65 72 73 20  epeat "$numbers 
3aa0: 22 20 24 6e 5d 5d 0a 20 20 20 20 20 20 73 65 74  " $n]].      set
3ab0: 20 64 6f 63 69 64 20 5b 65 78 70 72 20 24 6e 20   docid [expr $n 
3ac0: 2a 20 31 30 30 30 30 30 30 5d 0a 20 20 20 20 20  * 1000000].     
3ad0: 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52   execsql { INSER
3ae0: 54 20 49 4e 54 4f 20 66 74 28 64 6f 63 69 64 2c  T INTO ft(docid,
3af0: 20 78 2c 20 79 29 20 56 41 4c 55 45 53 28 24 64   x, y) VALUES($d
3b00: 6f 63 69 64 2c 20 24 76 31 2c 20 24 76 32 29 20  ocid, $v1, $v2) 
3b10: 7d 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20  }.    }.  } {}. 
3b20: 20 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65   do_matchinfo_te
3b30: 73 74 20 24 54 2e 39 2e 32 20 7b 74 77 6f 2a 7d  st $T.9.2 {two*}
3b40: 20 20 20 20 20 5c 0a 20 20 20 20 7b 20 31 20 32       \.    { 1 2
3b50: 20 20 20 20 31 20 20 20 31 30 35 20 33 20 20 20      1   105 3   
3b60: 31 30 31 20 36 30 36 20 33 7d 20 20 20 5c 0a 20  101 606 3}   \. 
3b70: 20 20 20 7b 20 31 20 32 20 20 20 20 33 20 20 20     { 1 2    3   
3b80: 31 30 35 20 33 20 20 20 32 30 32 20 36 30 36 20  105 3   202 606 
3b90: 33 7d 20 20 20 5c 0a 20 20 20 20 7b 20 31 20 32  3}   \.    { 1 2
3ba0: 20 20 20 20 31 30 31 20 31 30 35 20 33 20 20 20      101 105 3   
3bb0: 33 30 33 20 36 30 36 20 33 7d 0a 0a 20 20 64 6f  303 606 3}..  do
3bc0: 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73 74 20  _matchinfo_test 
3bd0: 24 54 2e 39 2e 34 20 7b 22 6f 6e 65 2a 20 74 77  $T.9.4 {"one* tw
3be0: 6f 2a 22 7d 20 20 5c 0a 20 20 20 20 7b 20 31 20  o*"}  \.    { 1 
3bf0: 32 20 20 20 20 31 20 35 20 33 20 20 20 32 20 31  2    1 5 3   2 1
3c00: 32 20 33 7d 20 20 20 20 20 20 20 20 20 20 20 20  2 3}            
3c10: 20 20 5c 0a 20 20 20 20 7b 20 31 20 32 20 20 20    \.    { 1 2   
3c20: 20 32 20 35 20 33 20 20 20 34 20 31 32 20 33 7d   2 5 3   4 12 3}
3c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
3c40: 20 20 20 20 7b 20 31 20 32 20 20 20 20 32 20 35      { 1 2    2 5
3c50: 20 33 20 20 20 36 20 31 32 20 33 7d 0a 0a 20 20   3   6 12 3}..  
3c60: 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73  do_matchinfo_tes
3c70: 74 20 24 54 2e 39 2e 35 20 7b 74 77 6f 68 75 6e  t $T.9.5 {twohun
3c80: 64 72 65 64 66 69 66 74 79 7d 20 20 5c 0a 20 20  dredfifty}  \.  
3c90: 20 20 7b 20 31 20 32 20 20 20 20 30 20 31 20 31    { 1 2    0 1 1
3ca0: 20 20 20 31 20 36 20 33 7d 20 20 20 20 20 20 20     1 6 3}       
3cb0: 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
3cc0: 20 20 7b 20 31 20 32 20 20 20 20 30 20 31 20 31    { 1 2    0 1 1
3cd0: 20 20 20 32 20 36 20 33 7d 20 20 20 20 20 20 20     2 6 3}       
3ce0: 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20              \.  
3cf0: 20 20 7b 20 31 20 32 20 20 20 20 31 20 31 20 31    { 1 2    1 1 1
3d00: 20 20 20 33 20 36 20 33 7d 0a 0a 20 20 64 6f 5f     3 6 3}..  do_
3d10: 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73 74 20 24  matchinfo_test $
3d20: 54 2e 39 2e 36 20 7b 22 74 68 72 65 65 68 75 6e  T.9.6 {"threehun
3d30: 64 72 65 64 20 6f 6e 65 22 7d 20 5c 0a 20 20 20  dred one"} \.   
3d40: 20 7b 20 31 20 32 20 20 20 20 30 20 30 20 30 20   { 1 2    0 0 0 
3d50: 20 20 31 20 33 20 32 7d 20 20 20 20 20 20 20 20    1 3 2}        
3d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
3d70: 20 20 20 7b 20 31 20 32 20 20 20 20 30 20 30 20     { 1 2    0 0 
3d80: 30 20 20 20 32 20 33 20 32 7d 0a 0a 20 20 64 6f  0   2 3 2}..  do
3d90: 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73 74 20  _matchinfo_test 
3da0: 24 54 2e 39 2e 37 20 7b 6f 6e 65 20 4f 52 20 66  $T.9.7 {one OR f
3db0: 69 76 65 68 75 6e 64 72 65 64 7d 20 5c 0a 20 20  ivehundred} \.  
3dc0: 20 20 7b 20 32 20 32 20 20 20 20 31 20 33 20 33    { 2 2    1 3 3
3dd0: 20 20 20 31 20 36 20 33 20 20 20 30 20 30 20 30     1 6 3   0 0 0
3de0: 20 20 20 30 20 30 20 30 20 7d 20 20 20 20 5c 0a     0 0 0 }    \.
3df0: 20 20 20 20 7b 20 32 20 32 20 20 20 20 31 20 33      { 2 2    1 3
3e00: 20 33 20 20 20 32 20 36 20 33 20 20 20 30 20 30   3   2 6 3   0 0
3e10: 20 30 20 20 20 30 20 30 20 30 20 7d 20 20 20 20   0   0 0 0 }    
3e20: 5c 0a 20 20 20 20 7b 20 32 20 32 20 20 20 20 31  \.    { 2 2    1
3e30: 20 33 20 33 20 20 20 33 20 36 20 33 20 20 20 30   3 3   3 6 3   0
3e40: 20 30 20 30 20 20 20 30 20 30 20 30 20 7d 0a 0a   0 0   0 0 0 }..
3e50: 20 20 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74    do_matchinfo_t
3e60: 65 73 74 20 24 54 2e 39 2e 38 20 7b 74 77 6f 20  est $T.9.8 {two 
3e70: 4f 52 20 22 74 68 72 65 65 68 75 6e 64 72 65 64  OR "threehundred
3e80: 20 6f 6e 65 22 7d 20 5c 0a 20 20 20 20 7b 20 32   one"} \.    { 2
3e90: 20 32 20 20 20 20 31 20 33 20 33 20 20 20 31 20   2    1 3 3   1 
3ea0: 36 20 33 20 20 20 30 20 30 20 30 20 20 20 30 20  6 3   0 0 0   0 
3eb0: 33 20 32 20 7d 20 20 20 20 20 20 20 20 20 20 20  3 2 }           
3ec0: 5c 0a 20 20 20 20 7b 20 32 20 32 20 20 20 20 31  \.    { 2 2    1
3ed0: 20 33 20 33 20 20 20 32 20 36 20 33 20 20 20 30   3 3   2 6 3   0
3ee0: 20 30 20 30 20 20 20 31 20 33 20 32 20 7d 20 20   0 0   1 3 2 }  
3ef0: 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 7b           \.    {
3f00: 20 32 20 32 20 20 20 20 31 20 33 20 33 20 20 20   2 2    1 3 3   
3f10: 33 20 36 20 33 20 20 20 30 20 30 20 30 20 20 20  3 6 3   0 0 0   
3f20: 32 20 33 20 32 20 7d 0a 0a 20 20 64 6f 5f 73 65  2 3 2 }..  do_se
3f30: 6c 65 63 74 5f 74 65 73 74 20 24 54 2e 39 2e 39  lect_test $T.9.9
3f40: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 69   {.    SELECT mi
3f50: 74 28 6d 61 74 63 68 69 6e 66 6f 28 66 74 29 29  t(matchinfo(ft))
3f60: 2c 20 6d 69 74 28 6d 61 74 63 68 69 6e 66 6f 28  , mit(matchinfo(
3f70: 66 74 29 29 0a 20 20 20 20 46 52 4f 4d 20 66 74  ft)).    FROM ft
3f80: 20 57 48 45 52 45 20 66 74 20 4d 41 54 43 48 20   WHERE ft MATCH 
3f90: 27 74 77 6f 20 4f 52 20 22 74 68 72 65 65 68 75  'two OR "threehu
3fa0: 6e 64 72 65 64 20 6f 6e 65 22 27 20 0a 20 20 7d  ndred one"' .  }
3fb0: 20 5b 6e 6f 72 6d 61 6c 69 7a 65 20 7b 0a 20 20   [normalize {.  
3fc0: 20 20 7b 32 20 32 20 31 20 33 20 33 20 31 20 36    {2 2 1 3 3 1 6
3fd0: 20 33 20 30 20 30 20 30 20 30 20 33 20 32 7d 0a   3 0 0 0 0 3 2}.
3fe0: 20 20 20 20 7b 32 20 32 20 31 20 33 20 33 20 31      {2 2 1 3 3 1
3ff0: 20 36 20 33 20 30 20 30 20 30 20 30 20 33 20 32   6 3 0 0 0 0 3 2
4000: 7d 0a 20 20 20 20 7b 32 20 32 20 31 20 33 20 33  }.    {2 2 1 3 3
4010: 20 32 20 36 20 33 20 30 20 30 20 30 20 31 20 33   2 6 3 0 0 0 1 3
4020: 20 32 7d 0a 20 20 20 20 7b 32 20 32 20 31 20 33   2}.    {2 2 1 3
4030: 20 33 20 32 20 36 20 33 20 30 20 30 20 30 20 31   3 2 6 3 0 0 0 1
4040: 20 33 20 32 7d 0a 20 20 20 20 7b 32 20 32 20 31   3 2}.    {2 2 1
4050: 20 33 20 33 20 33 20 36 20 33 20 30 20 30 20 30   3 3 3 6 3 0 0 0
4060: 20 32 20 33 20 32 7d 20 20 20 20 20 20 20 20 20   2 3 2}         
4070: 20 0a 20 20 20 20 7b 32 20 32 20 31 20 33 20 33   .    {2 2 1 3 3
4080: 20 33 20 36 20 33 20 30 20 30 20 30 20 32 20 33   3 6 3 0 0 0 2 3
4090: 20 32 7d 0a 20 20 7d 5d 0a 0a 20 20 23 20 45 56   2}.  }]..  # EV
40a0: 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 34 30 36  IDENCE-OF: R-406
40b0: 33 30 2d 30 32 32 36 38 20 49 66 20 75 73 65 64  30-02268 If used
40c0: 20 77 69 74 68 69 6e 20 61 20 53 45 4c 45 43 54   within a SELECT
40d0: 20 74 68 61 74 20 75 73 65 73 20 74 68 65 0a 20   that uses the. 
40e0: 20 23 20 22 71 75 65 72 79 20 62 79 20 72 6f 77   # "query by row
40f0: 69 64 22 20 6f 72 20 22 6c 69 6e 65 61 72 20 73  id" or "linear s
4100: 63 61 6e 22 20 73 74 72 61 74 65 67 69 65 73 2c  can" strategies,
4110: 20 74 68 65 6e 20 74 68 65 20 73 6e 69 70 70 65   then the snippe
4120: 74 20 61 6e 64 0a 20 20 23 20 6f 66 66 73 65 74  t and.  # offset
4130: 73 20 62 6f 74 68 20 72 65 74 75 72 6e 20 61 6e  s both return an
4140: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2c 20 61   empty string, a
4150: 6e 64 20 74 68 65 20 6d 61 74 63 68 69 6e 66 6f  nd the matchinfo
4160: 20 66 75 6e 63 74 69 6f 6e 0a 20 20 23 20 72 65   function.  # re
4170: 74 75 72 6e 73 20 61 20 62 6c 6f 62 20 76 61 6c  turns a blob val
4180: 75 65 20 7a 65 72 6f 20 62 79 74 65 73 20 69 6e  ue zero bytes in
4190: 20 73 69 7a 65 2e 0a 20 20 23 0a 20 20 73 65 74   size..  #.  set
41a0: 20 72 20 31 30 30 30 30 30 30 20 20 20 20 20 20   r 1000000      
41b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 23 20               ;# 
41c0: 41 20 72 6f 77 69 64 20 74 68 61 74 20 65 78 69  A rowid that exi
41d0: 73 74 73 20 69 6e 20 74 61 62 6c 65 20 66 74 0a  sts in table ft.
41e0: 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74 65 73 74    do_select_test
41f0: 20 24 54 2e 31 30 2e 30 20 7b 20 53 45 4c 45 43   $T.10.0 { SELEC
4200: 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 66 74 20  T rowid FROM ft 
4210: 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20 24 72  WHERE rowid = $r
4220: 20 7d 20 24 72 0a 20 20 64 6f 5f 73 65 6c 65 63   } $r.  do_selec
4230: 74 5f 74 65 73 74 20 24 54 2e 31 30 2e 31 20 7b  t_test $T.10.1 {
4240: 0a 20 20 20 20 53 45 4c 45 43 54 20 6c 65 6e 67  .    SELECT leng
4250: 74 68 28 6f 66 66 73 65 74 73 28 66 74 29 29 2c  th(offsets(ft)),
4260: 20 74 79 70 65 6f 66 28 6f 66 66 73 65 74 73 28   typeof(offsets(
4270: 66 74 29 29 20 46 52 4f 4d 20 66 74 3b 0a 20 20  ft)) FROM ft;.  
4280: 7d 20 7b 30 20 74 65 78 74 20 30 20 74 65 78 74  } {0 text 0 text
4290: 20 30 20 74 65 78 74 7d 0a 20 20 64 6f 5f 73 65   0 text}.  do_se
42a0: 6c 65 63 74 5f 74 65 73 74 20 24 54 2e 31 30 2e  lect_test $T.10.
42b0: 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6c  2 {.    SELECT l
42c0: 65 6e 67 74 68 28 6f 66 66 73 65 74 73 28 66 74  ength(offsets(ft
42d0: 29 29 2c 20 74 79 70 65 6f 66 28 6f 66 66 73 65  )), typeof(offse
42e0: 74 73 28 66 74 29 29 20 46 52 4f 4d 20 66 74 20  ts(ft)) FROM ft 
42f0: 57 48 45 52 45 20 72 6f 77 69 64 20 3d 20 24 72  WHERE rowid = $r
4300: 0a 20 20 7d 20 7b 30 20 74 65 78 74 7d 0a 20 20  .  } {0 text}.  
4310: 64 6f 5f 73 65 6c 65 63 74 5f 74 65 73 74 20 24  do_select_test $
4320: 54 2e 31 30 2e 33 20 7b 0a 20 20 20 20 53 45 4c  T.10.3 {.    SEL
4330: 45 43 54 20 6c 65 6e 67 74 68 28 73 6e 69 70 70  ECT length(snipp
4340: 65 74 28 66 74 29 29 2c 20 74 79 70 65 6f 66 28  et(ft)), typeof(
4350: 73 6e 69 70 70 65 74 28 66 74 29 29 20 46 52 4f  snippet(ft)) FRO
4360: 4d 20 66 74 3b 0a 20 20 7d 20 7b 30 20 74 65 78  M ft;.  } {0 tex
4370: 74 20 30 20 74 65 78 74 20 30 20 74 65 78 74 7d  t 0 text 0 text}
4380: 0a 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74 65 73  .  do_select_tes
4390: 74 20 24 54 2e 31 30 2e 34 20 7b 0a 20 20 20 20  t $T.10.4 {.    
43a0: 53 45 4c 45 43 54 20 6c 65 6e 67 74 68 28 73 6e  SELECT length(sn
43b0: 69 70 70 65 74 28 66 74 29 29 2c 20 74 79 70 65  ippet(ft)), type
43c0: 6f 66 28 73 6e 69 70 70 65 74 28 66 74 29 29 20  of(snippet(ft)) 
43d0: 46 52 4f 4d 20 66 74 20 57 48 45 52 45 20 72 6f  FROM ft WHERE ro
43e0: 77 69 64 20 3d 20 24 72 3b 0a 20 20 7d 20 7b 30  wid = $r;.  } {0
43f0: 20 74 65 78 74 7d 0a 20 20 64 6f 5f 73 65 6c 65   text}.  do_sele
4400: 63 74 5f 74 65 73 74 20 24 54 2e 31 30 2e 35 20  ct_test $T.10.5 
4410: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6c 65 6e  {.    SELECT len
4420: 67 74 68 28 6d 61 74 63 68 69 6e 66 6f 28 66 74  gth(matchinfo(ft
4430: 29 29 2c 20 74 79 70 65 6f 66 28 6d 61 74 63 68  )), typeof(match
4440: 69 6e 66 6f 28 66 74 29 29 20 46 52 4f 4d 20 66  info(ft)) FROM f
4450: 74 3b 0a 20 20 7d 20 7b 30 20 62 6c 6f 62 20 30  t;.  } {0 blob 0
4460: 20 62 6c 6f 62 20 30 20 62 6c 6f 62 7d 0a 20 20   blob 0 blob}.  
4470: 64 6f 5f 73 65 6c 65 63 74 5f 74 65 73 74 20 24  do_select_test $
4480: 54 2e 31 30 2e 36 20 7b 0a 20 20 20 20 53 45 4c  T.10.6 {.    SEL
4490: 45 43 54 20 6c 65 6e 67 74 68 28 6d 61 74 63 68  ECT length(match
44a0: 69 6e 66 6f 28 66 74 29 29 2c 20 74 79 70 65 6f  info(ft)), typeo
44b0: 66 28 6d 61 74 63 68 69 6e 66 6f 28 66 74 29 29  f(matchinfo(ft))
44c0: 20 46 52 4f 4d 20 66 74 20 57 48 45 52 45 20 72   FROM ft WHERE r
44d0: 6f 77 69 64 20 3d 20 24 72 0a 20 20 7d 20 7b 30  owid = $r.  } {0
44e0: 20 62 6c 6f 62 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d   blob}.}..#-----
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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4530: 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 61 6e 20 69  ----.# Test an i
4540: 6e 74 65 72 61 63 74 69 6f 6e 20 62 65 74 77 65  nteraction betwe
4550: 65 6e 20 74 68 65 20 73 6e 69 70 70 65 74 28 29  en the snippet()
4560: 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64 20 4f 52   function and OR
4570: 20 63 6c 61 75 73 65 73 2e 0a 23 0a 64 6f 5f 65   clauses..#.do_e
4580: 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 31 20  xecsql_test 2.1 
4590: 7b 0a 20 20 43 52 45 41 54 45 20 56 49 52 54 55  {.  CREATE VIRTU
45a0: 41 4c 20 54 41 42 4c 45 20 74 32 20 55 53 49 4e  AL TABLE t2 USIN
45b0: 47 20 66 74 73 34 3b 0a 20 20 49 4e 53 45 52 54  G fts4;.  INSERT
45c0: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
45d0: 27 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66  'one two three f
45e0: 6f 75 72 20 66 69 76 65 27 29 3b 0a 20 20 49 4e  our five');.  IN
45f0: 53 45 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c  SERT INTO t2 VAL
4600: 55 45 53 28 27 74 77 6f 20 74 68 72 65 65 20 66  UES('two three f
4610: 6f 75 72 20 66 69 76 65 20 6f 6e 65 27 29 3b 0a  our five one');.
4620: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
4630: 20 56 41 4c 55 45 53 28 27 74 68 72 65 65 20 66   VALUES('three f
4640: 6f 75 72 20 66 69 76 65 20 6f 6e 65 20 74 77 6f  our five one two
4650: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
4660: 4f 20 74 32 20 56 41 4c 55 45 53 28 27 66 6f 75  O t2 VALUES('fou
4670: 72 20 66 69 76 65 20 6f 6e 65 20 74 77 6f 20 74  r five one two t
4680: 68 72 65 65 27 29 3b 0a 20 20 49 4e 53 45 52 54  hree');.  INSERT
4690: 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28   INTO t2 VALUES(
46a0: 27 66 69 76 65 20 6f 6e 65 20 74 77 6f 20 74 68  'five one two th
46b0: 72 65 65 20 66 6f 75 72 27 29 3b 0a 7d 0a 0a 64  ree four');.}..d
46c0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32  o_execsql_test 2
46d0: 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 73 6e  .2 {.  SELECT sn
46e0: 69 70 70 65 74 28 74 32 2c 20 27 5b 27 2c 20 27  ippet(t2, '[', '
46f0: 5d 27 29 20 46 52 4f 4d 20 74 32 20 57 48 45 52  ]') FROM t2 WHER
4700: 45 20 74 32 20 4d 41 54 43 48 20 27 6f 6e 65 20  E t2 MATCH 'one 
4710: 4f 52 20 28 66 6f 75 72 20 41 4e 44 20 73 69 78  OR (four AND six
4720: 29 27 0a 7d 20 7b 0a 20 20 7b 5b 6f 6e 65 5d 20  )'.} {.  {[one] 
4730: 74 77 6f 20 74 68 72 65 65 20 5b 66 6f 75 72 5d  two three [four]
4740: 20 66 69 76 65 7d 0a 20 20 7b 74 77 6f 20 74 68   five}.  {two th
4750: 72 65 65 20 5b 66 6f 75 72 5d 20 66 69 76 65 20  ree [four] five 
4760: 5b 6f 6e 65 5d 7d 0a 20 20 7b 74 68 72 65 65 20  [one]}.  {three 
4770: 5b 66 6f 75 72 5d 20 66 69 76 65 20 5b 6f 6e 65  [four] five [one
4780: 5d 20 74 77 6f 7d 0a 20 20 7b 5b 66 6f 75 72 5d  ] two}.  {[four]
4790: 20 66 69 76 65 20 5b 6f 6e 65 5d 20 74 77 6f 20   five [one] two 
47a0: 74 68 72 65 65 7d 0a 20 20 7b 66 69 76 65 20 5b  three}.  {five [
47b0: 6f 6e 65 5d 20 74 77 6f 20 74 68 72 65 65 20 5b  one] two three [
47c0: 66 6f 75 72 5d 7d 0a 7d 0a 0a 64 6f 5f 65 78 65  four]}.}..do_exe
47d0: 63 73 71 6c 5f 74 65 73 74 20 32 2e 33 20 7b 0a  csql_test 2.3 {.
47e0: 20 20 53 45 4c 45 43 54 20 73 6e 69 70 70 65 74    SELECT snippet
47f0: 28 74 32 2c 20 27 5b 27 2c 20 27 5d 27 29 20 46  (t2, '[', ']') F
4800: 52 4f 4d 20 74 32 20 0a 20 20 57 48 45 52 45 20  ROM t2 .  WHERE 
4810: 74 32 20 4d 41 54 43 48 20 27 6f 6e 65 20 4f 52  t2 MATCH 'one OR
4820: 20 28 66 6f 75 72 20 41 4e 44 20 73 69 78 29 27   (four AND six)'
4830: 20 0a 20 20 4f 52 44 45 52 20 42 59 20 64 6f 63   .  ORDER BY doc
4840: 69 64 20 44 45 53 43 0a 7d 20 7b 0a 20 20 7b 66  id DESC.} {.  {f
4850: 69 76 65 20 5b 6f 6e 65 5d 20 74 77 6f 20 74 68  ive [one] two th
4860: 72 65 65 20 5b 66 6f 75 72 5d 7d 0a 20 20 7b 5b  ree [four]}.  {[
4870: 66 6f 75 72 5d 20 66 69 76 65 20 5b 6f 6e 65 5d  four] five [one]
4880: 20 74 77 6f 20 74 68 72 65 65 7d 0a 20 20 7b 74   two three}.  {t
4890: 68 72 65 65 20 5b 66 6f 75 72 5d 20 66 69 76 65  hree [four] five
48a0: 20 5b 6f 6e 65 5d 20 74 77 6f 7d 0a 20 20 7b 74   [one] two}.  {t
48b0: 77 6f 20 74 68 72 65 65 20 5b 66 6f 75 72 5d 20  wo three [four] 
48c0: 66 69 76 65 20 5b 6f 6e 65 5d 7d 0a 20 20 7b 5b  five [one]}.  {[
48d0: 6f 6e 65 5d 20 74 77 6f 20 74 68 72 65 65 20 5b  one] two three [
48e0: 66 6f 75 72 5d 20 66 69 76 65 7d 0a 7d 0a 0a 64  four] five}.}..d
48f0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 32  o_execsql_test 2
4900: 2e 34 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e  .4 {.  INSERT IN
4910: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27 73 69  TO t2 VALUES('si
4920: 78 27 29 3b 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73  x');.}..do_execs
4930: 71 6c 5f 74 65 73 74 20 32 2e 35 20 7b 0a 20 20  ql_test 2.5 {.  
4940: 53 45 4c 45 43 54 20 73 6e 69 70 70 65 74 28 74  SELECT snippet(t
4950: 32 2c 20 27 5b 27 2c 20 27 5d 27 29 20 46 52 4f  2, '[', ']') FRO
4960: 4d 20 74 32 20 57 48 45 52 45 20 74 32 20 4d 41  M t2 WHERE t2 MA
4970: 54 43 48 20 27 6f 6e 65 20 4f 52 20 28 66 6f 75  TCH 'one OR (fou
4980: 72 20 41 4e 44 20 73 69 78 29 27 0a 7d 20 7b 0a  r AND six)'.} {.
4990: 20 20 7b 5b 6f 6e 65 5d 20 74 77 6f 20 74 68 72    {[one] two thr
49a0: 65 65 20 5b 66 6f 75 72 5d 20 66 69 76 65 7d 0a  ee [four] five}.
49b0: 20 20 7b 74 77 6f 20 74 68 72 65 65 20 5b 66 6f    {two three [fo
49c0: 75 72 5d 20 66 69 76 65 20 5b 6f 6e 65 5d 7d 0a  ur] five [one]}.
49d0: 20 20 7b 74 68 72 65 65 20 5b 66 6f 75 72 5d 20    {three [four] 
49e0: 66 69 76 65 20 5b 6f 6e 65 5d 20 74 77 6f 7d 0a  five [one] two}.
49f0: 20 20 7b 5b 66 6f 75 72 5d 20 66 69 76 65 20 5b    {[four] five [
4a00: 6f 6e 65 5d 20 74 77 6f 20 74 68 72 65 65 7d 0a  one] two three}.
4a10: 20 20 7b 66 69 76 65 20 5b 6f 6e 65 5d 20 74 77    {five [one] tw
4a20: 6f 20 74 68 72 65 65 20 5b 66 6f 75 72 5d 7d 0a  o three [four]}.
4a30: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
4a40: 73 74 20 32 2e 36 20 7b 0a 20 20 53 45 4c 45 43  st 2.6 {.  SELEC
4a50: 54 20 73 6e 69 70 70 65 74 28 74 32 2c 20 27 5b  T snippet(t2, '[
4a60: 27 2c 20 27 5d 27 29 20 46 52 4f 4d 20 74 32 20  ', ']') FROM t2 
4a70: 0a 20 20 57 48 45 52 45 20 74 32 20 4d 41 54 43  .  WHERE t2 MATC
4a80: 48 20 27 6f 6e 65 20 4f 52 20 28 66 6f 75 72 20  H 'one OR (four 
4a90: 41 4e 44 20 73 69 78 29 27 20 0a 20 20 4f 52 44  AND six)' .  ORD
4aa0: 45 52 20 42 59 20 64 6f 63 69 64 20 44 45 53 43  ER BY docid DESC
4ab0: 0a 7d 20 7b 0a 20 20 7b 66 69 76 65 20 5b 6f 6e  .} {.  {five [on
4ac0: 65 5d 20 74 77 6f 20 74 68 72 65 65 20 5b 66 6f  e] two three [fo
4ad0: 75 72 5d 7d 0a 20 20 7b 5b 66 6f 75 72 5d 20 66  ur]}.  {[four] f
4ae0: 69 76 65 20 5b 6f 6e 65 5d 20 74 77 6f 20 74 68  ive [one] two th
4af0: 72 65 65 7d 0a 20 20 7b 74 68 72 65 65 20 5b 66  ree}.  {three [f
4b00: 6f 75 72 5d 20 66 69 76 65 20 5b 6f 6e 65 5d 20  our] five [one] 
4b10: 74 77 6f 7d 0a 20 20 7b 74 77 6f 20 74 68 72 65  two}.  {two thre
4b20: 65 20 5b 66 6f 75 72 5d 20 66 69 76 65 20 5b 6f  e [four] five [o
4b30: 6e 65 5d 7d 0a 20 20 7b 5b 6f 6e 65 5d 20 74 77  ne]}.  {[one] tw
4b40: 6f 20 74 68 72 65 65 20 5b 66 6f 75 72 5d 20 66  o three [four] f
4b50: 69 76 65 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  ive}.}..#-------
4b60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4b70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4b80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4b90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4ba0: 2d 2d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  --.do_execsql_te
4bb0: 73 74 20 33 20 7b 0a 20 20 43 52 45 41 54 45 20  st 3 {.  CREATE 
4bc0: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 33  VIRTUAL TABLE t3
4bd0: 20 55 53 49 4e 47 20 66 74 73 34 3b 0a 20 20 49   USING fts4;.  I
4be0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41  NSERT INTO t3 VA
4bf0: 4c 55 45 53 28 27 5b 6f 6e 65 20 74 77 6f 20 74  LUES('[one two t
4c00: 68 72 65 65 5d 27 29 3b 0a 7d 0a 64 6f 5f 65 78  hree]');.}.do_ex
4c10: 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 31 20 7b  ecsql_test 3.1 {
4c20: 0a 20 20 53 45 4c 45 43 54 20 73 6e 69 70 70 65  .  SELECT snippe
4c30: 74 28 74 33 29 20 46 52 4f 4d 20 74 33 20 57 48  t(t3) FROM t3 WH
4c40: 45 52 45 20 74 33 20 4d 41 54 43 48 20 27 6f 6e  ERE t3 MATCH 'on
4c50: 65 27 3b 0a 7d 20 7b 7b 5b 3c 62 3e 6f 6e 65 3c  e';.} {{[<b>one<
4c60: 2f 62 3e 20 74 77 6f 20 74 68 72 65 65 5d 7d 7d  /b> two three]}}
4c70: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
4c80: 20 33 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20   3.2 {.  SELECT 
4c90: 73 6e 69 70 70 65 74 28 74 33 29 20 46 52 4f 4d  snippet(t3) FROM
4ca0: 20 74 33 20 57 48 45 52 45 20 74 33 20 4d 41 54   t3 WHERE t3 MAT
4cb0: 43 48 20 27 74 77 6f 27 3b 0a 7d 20 7b 7b 5b 6f  CH 'two';.} {{[o
4cc0: 6e 65 20 3c 62 3e 74 77 6f 3c 2f 62 3e 20 74 68  ne <b>two</b> th
4cd0: 72 65 65 5d 7d 7d 0a 64 6f 5f 65 78 65 63 73 71  ree]}}.do_execsq
4ce0: 6c 5f 74 65 73 74 20 33 2e 33 20 7b 0a 20 20 53  l_test 3.3 {.  S
4cf0: 45 4c 45 43 54 20 73 6e 69 70 70 65 74 28 74 33  ELECT snippet(t3
4d00: 29 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20  ) FROM t3 WHERE 
4d10: 74 33 20 4d 41 54 43 48 20 27 74 68 72 65 65 27  t3 MATCH 'three'
4d20: 3b 0a 7d 20 7b 7b 5b 6f 6e 65 20 74 77 6f 20 3c  ;.} {{[one two <
4d30: 62 3e 74 68 72 65 65 3c 2f 62 3e 5d 7d 7d 0a 64  b>three</b>]}}.d
4d40: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33  o_execsql_test 3
4d50: 2e 34 20 7b 0a 20 20 53 45 4c 45 43 54 20 73 6e  .4 {.  SELECT sn
4d60: 69 70 70 65 74 28 74 33 29 20 46 52 4f 4d 20 74  ippet(t3) FROM t
4d70: 33 20 57 48 45 52 45 20 74 33 20 4d 41 54 43 48  3 WHERE t3 MATCH
4d80: 20 27 6f 6e 65 20 4f 52 20 74 77 6f 20 4f 52 20   'one OR two OR 
4d90: 74 68 72 65 65 27 3b 0a 7d 20 7b 7b 5b 3c 62 3e  three';.} {{[<b>
4da0: 6f 6e 65 3c 2f 62 3e 20 3c 62 3e 74 77 6f 3c 2f  one</b> <b>two</
4db0: 62 3e 20 3c 62 3e 74 68 72 65 65 3c 2f 62 3e 5d  b> <b>three</b>]
4dc0: 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }}..#-----------
4dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4df0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4e00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
4e10: 20 52 65 71 75 65 73 74 20 61 20 73 6e 69 70 70   Request a snipp
4e20: 65 74 20 30 20 74 6f 6b 65 6e 73 20 69 6e 20 73  et 0 tokens in s
4e30: 69 7a 65 2e 20 54 68 69 73 20 69 73 20 61 6c 77  ize. This is alw
4e40: 61 79 73 20 61 6e 20 65 6d 70 74 79 20 73 74 72  ays an empty str
4e50: 69 6e 67 2e 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  ing..do_execsql_
4e60: 74 65 73 74 20 34 2e 31 20 7b 0a 20 20 43 52 45  test 4.1 {.  CRE
4e70: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
4e80: 45 20 74 34 20 55 53 49 4e 47 20 66 74 73 34 3b  E t4 USING fts4;
4e90: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
4ea0: 34 20 56 41 4c 55 45 53 28 27 61 20 62 20 63 20  4 VALUES('a b c 
4eb0: 64 27 29 3b 0a 20 20 53 45 4c 45 43 54 20 73 6e  d');.  SELECT sn
4ec0: 69 70 70 65 74 28 74 34 2c 20 27 5b 27 2c 20 27  ippet(t4, '[', '
4ed0: 5d 27 2c 20 27 2e 2e 2e 27 2c 20 30 2c 20 30 29  ]', '...', 0, 0)
4ee0: 20 46 52 4f 4d 20 74 34 20 57 48 45 52 45 20 74   FROM t4 WHERE t
4ef0: 34 20 4d 41 54 43 48 20 27 62 27 3b 0a 7d 20 7b  4 MATCH 'b';.} {
4f00: 7b 7d 7d 0a 0a 64 6f 5f 74 65 73 74 20 34 2e 32  {}}..do_test 4.2
4f10: 20 7b 0a 20 20 73 65 74 20 78 33 35 20 5b 73 74   {.  set x35 [st
4f20: 72 69 6e 67 20 74 72 69 6d 20 5b 73 74 72 69 6e  ring trim [strin
4f30: 67 20 72 65 70 65 61 74 20 22 78 20 22 20 33 35  g repeat "x " 35
4f40: 5d 5d 0a 20 20 65 78 65 63 73 71 6c 20 22 49 4e  ]].  execsql "IN
4f50: 53 45 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c  SERT INTO t4 VAL
4f60: 55 45 53 28 27 24 78 33 35 20 45 20 24 78 33 35  UES('$x35 E $x35
4f70: 20 46 20 24 78 33 35 20 47 20 24 78 33 35 27 29   F $x35 G $x35')
4f80: 3b 22 0a 20 20 6c 6c 65 6e 67 74 68 20 5b 64 62  ;".  llength [db
4f90: 20 6f 6e 65 20 7b 0a 20 20 20 20 53 45 4c 45 43   one {.    SELEC
4fa0: 54 20 73 6e 69 70 70 65 74 28 74 34 2c 20 27 27  T snippet(t4, ''
4fb0: 2c 20 27 27 2c 20 27 27 2c 20 30 2c 20 36 34 29  , '', '', 0, 64)
4fc0: 20 46 52 4f 4d 20 74 34 20 57 48 45 52 45 20 74   FROM t4 WHERE t
4fd0: 34 20 4d 41 54 43 48 20 27 45 27 0a 20 20 7d 5d  4 MATCH 'E'.  }]
4fe0: 0a 7d 20 7b 36 34 7d 0a 0a 64 6f 5f 74 65 73 74  .} {64}..do_test
4ff0: 20 34 2e 33 20 7b 0a 20 20 6c 6c 65 6e 67 74 68   4.3 {.  llength
5000: 20 5b 64 62 20 6f 6e 65 20 7b 0a 20 20 20 20 53   [db one {.    S
5010: 45 4c 45 43 54 20 73 6e 69 70 70 65 74 28 74 34  ELECT snippet(t4
5020: 2c 20 27 27 2c 20 27 27 2c 20 27 27 2c 20 30 2c  , '', '', '', 0,
5030: 20 31 35 30 29 20 46 52 4f 4d 20 74 34 20 57 48   150) FROM t4 WH
5040: 45 52 45 20 74 34 20 4d 41 54 43 48 20 27 45 27  ERE t4 MATCH 'E'
5050: 0a 20 20 7d 5d 0a 7d 20 7b 36 34 7d 0a 0a 0a 0a  .  }].} {64}....
5060: 73 65 74 20 73 71 6c 69 74 65 5f 66 74 73 33 5f  set sqlite_fts3_
5070: 65 6e 61 62 6c 65 5f 70 61 72 65 6e 74 68 65 73  enable_parenthes
5080: 65 73 20 30 0a 66 69 6e 69 73 68 5f 74 65 73 74  es 0.finish_test
5090: 0a                                               .