/ Hex Artifact Content
Login

Artifact 9f9a4a7e396c5d8ce2898be65ebabc429555430f:


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 0a 23 20 49 66 20 53 51  ter.tcl..# If SQ
0270: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33  LITE_ENABLE_FTS3
0280: 20 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2c   is not defined,
0290: 20 6f 6d 69 74 20 74 68 69 73 20 66 69 6c 65 2e   omit this file.
02a0: 0a 69 66 63 61 70 61 62 6c 65 20 21 66 74 73 33  .ifcapable !fts3
02b0: 20 7b 20 66 69 6e 69 73 68 5f 74 65 73 74 20 3b   { finish_test ;
02c0: 20 72 65 74 75 72 6e 20 7d 0a 73 6f 75 72 63 65   return }.source
02d0: 20 24 74 65 73 74 64 69 72 2f 66 74 73 33 5f 63   $testdir/fts3_c
02e0: 6f 6d 6d 6f 6e 2e 74 63 6c 0a 73 6f 75 72 63 65  ommon.tcl.source
02f0: 20 24 74 65 73 74 64 69 72 2f 6d 61 6c 6c 6f 63   $testdir/malloc
0300: 5f 63 6f 6d 6d 6f 6e 2e 74 63 6c 0a 0a 73 65 74  _common.tcl..set
0310: 20 73 71 6c 69 74 65 5f 66 74 73 33 5f 65 6e 61   sqlite_fts3_ena
0320: 62 6c 65 5f 70 61 72 65 6e 74 68 65 73 65 73 20  ble_parentheses 
0330: 31 0a 73 65 74 20 44 4f 5f 4d 41 4c 4c 4f 43 5f  1.set DO_MALLOC_
0340: 54 45 53 54 20 30 0a 0a 23 20 54 72 61 6e 73 66  TEST 0..# Transf
0350: 6f 72 6d 20 74 68 65 20 6c 69 73 74 20 24 4c 20  orm the list $L 
0360: 74 6f 20 69 74 73 20 22 6e 6f 72 6d 61 6c 22 20  to its "normal" 
0370: 66 6f 72 6d 2e 20 53 6f 20 74 68 61 74 20 69 74  form. So that it
0380: 20 63 61 6e 20 62 65 20 63 6f 6d 70 61 72 65 64   can be compared
0390: 20 74 6f 0a 23 20 61 6e 6f 74 68 65 72 20 6c 69   to.# another li
03a0: 73 74 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  st with the same
03b0: 20 73 65 74 20 6f 66 20 65 6c 65 6d 65 6e 74 73   set of elements
03c0: 20 75 73 69 6e 67 20 5b 73 74 72 69 6e 67 20 63   using [string c
03d0: 6f 6d 70 61 72 65 5d 2e 0a 23 0a 70 72 6f 63 20  ompare]..#.proc 
03e0: 6e 6f 72 6d 61 6c 69 7a 65 20 7b 4c 7d 20 7b 0a  normalize {L} {.
03f0: 20 20 73 65 74 20 72 65 74 20 5b 6c 69 73 74 5d    set ret [list]
0400: 0a 20 20 66 6f 72 65 61 63 68 20 6c 20 24 4c 20  .  foreach l $L 
0410: 7b 6c 61 70 70 65 6e 64 20 72 65 74 20 24 6c 7d  {lappend ret $l}
0420: 0a 20 20 72 65 74 75 72 6e 20 24 72 65 74 0a 7d  .  return $ret.}
0430: 0a 0a 70 72 6f 63 20 64 6f 5f 6f 66 66 73 65 74  ..proc do_offset
0440: 73 5f 74 65 73 74 20 7b 6e 61 6d 65 20 65 78 70  s_test {name exp
0450: 72 20 61 72 67 73 7d 20 7b 0a 20 20 73 65 74 20  r args} {.  set 
0460: 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0a 20 20  result [list].  
0470: 66 6f 72 65 61 63 68 20 61 20 24 61 72 67 73 20  foreach a $args 
0480: 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65  {.    lappend re
0490: 73 75 6c 74 20 5b 6e 6f 72 6d 61 6c 69 7a 65 20  sult [normalize 
04a0: 24 61 5d 0a 20 20 7d 0a 20 20 64 6f 5f 73 65 6c  $a].  }.  do_sel
04b0: 65 63 74 5f 74 65 73 74 20 24 6e 61 6d 65 20 7b  ect_test $name {
04c0: 0a 20 20 20 20 53 45 4c 45 43 54 20 6f 66 66 73  .    SELECT offs
04d0: 65 74 73 28 66 74 29 20 46 52 4f 4d 20 66 74 20  ets(ft) FROM ft 
04e0: 57 48 45 52 45 20 66 74 20 4d 41 54 43 48 20 24  WHERE ft MATCH $
04f0: 65 78 70 72 0a 20 20 7d 20 24 72 65 73 75 6c 74  expr.  } $result
0500: 0a 7d 0a 20 20 0a 23 20 44 6f 63 75 6d 65 6e 74  .}.  .# Document
0510: 20 74 65 78 74 20 75 73 65 64 20 62 79 20 61 20   text used by a 
0520: 66 65 77 20 74 65 73 74 73 2e 20 43 6f 6e 74 61  few tests. Conta
0530: 69 6e 73 20 74 68 65 20 45 6e 67 6c 69 73 68 20  ins the English 
0540: 6e 61 6d 65 73 20 6f 66 20 61 6c 6c 0a 23 20 69  names of all.# i
0550: 6e 74 65 67 65 72 73 20 62 65 74 77 65 65 6e 20  ntegers between 
0560: 31 20 61 6e 64 20 33 30 30 2e 0a 23 0a 73 65 74  1 and 300..#.set
0570: 20 6e 75 6d 62 65 72 73 20 5b 6e 6f 72 6d 61 6c   numbers [normal
0580: 69 7a 65 20 7b 0a 20 20 6f 6e 65 20 74 77 6f 20  ize {.  one two 
0590: 74 68 72 65 65 20 66 6f 75 72 20 66 69 76 65 20  three four five 
05a0: 73 69 78 20 73 65 76 65 6e 20 65 69 67 68 74 20  six seven eight 
05b0: 6e 69 6e 65 20 74 65 6e 20 65 6c 65 76 65 6e 20  nine ten eleven 
05c0: 74 77 65 6c 76 65 20 74 68 69 72 74 65 65 6e 0a  twelve thirteen.
05d0: 20 20 66 6f 75 72 74 65 65 6e 20 66 69 66 74 65    fourteen fifte
05e0: 65 6e 20 73 69 78 74 65 65 6e 20 73 65 76 65 6e  en sixteen seven
05f0: 74 65 65 6e 20 65 69 67 68 74 65 65 6e 20 6e 69  teen eighteen ni
0600: 6e 65 74 65 65 6e 20 74 77 65 6e 74 79 20 74 77  neteen twenty tw
0610: 65 6e 74 79 6f 6e 65 0a 20 20 74 77 65 6e 74 79  entyone.  twenty
0620: 74 77 6f 20 74 77 65 6e 74 79 74 68 72 65 65 20  two twentythree 
0630: 74 77 65 6e 74 79 66 6f 75 72 20 74 77 65 6e 74  twentyfour twent
0640: 79 66 69 76 65 20 74 77 65 6e 74 79 73 69 78 20  yfive twentysix 
0650: 74 77 65 6e 74 79 73 65 76 65 6e 0a 20 20 74 77  twentyseven.  tw
0660: 65 6e 74 79 65 69 67 68 74 20 74 77 65 6e 74 79  entyeight twenty
0670: 6e 69 6e 65 20 74 68 69 72 74 79 20 74 68 69 72  nine thirty thir
0680: 74 79 6f 6e 65 20 74 68 69 72 74 79 74 77 6f 20  tyone thirtytwo 
0690: 74 68 69 72 74 79 74 68 72 65 65 20 74 68 69 72  thirtythree thir
06a0: 74 79 66 6f 75 72 0a 20 20 74 68 69 72 74 79 66  tyfour.  thirtyf
06b0: 69 76 65 20 74 68 69 72 74 79 73 69 78 20 74 68  ive thirtysix th
06c0: 69 72 74 79 73 65 76 65 6e 20 74 68 69 72 74 79  irtyseven thirty
06d0: 65 69 67 68 74 20 74 68 69 72 74 79 6e 69 6e 65  eight thirtynine
06e0: 20 66 6f 72 74 79 20 66 6f 72 74 79 6f 6e 65 0a   forty fortyone.
06f0: 20 20 66 6f 72 74 79 74 77 6f 20 66 6f 72 74 79    fortytwo forty
0700: 74 68 72 65 65 20 66 6f 72 74 79 66 6f 75 72 20  three fortyfour 
0710: 66 6f 72 74 79 66 69 76 65 20 66 6f 72 74 79 73  fortyfive fortys
0720: 69 78 20 66 6f 72 74 79 73 65 76 65 6e 20 66 6f  ix fortyseven fo
0730: 72 74 79 65 69 67 68 74 0a 20 20 66 6f 72 74 79  rtyeight.  forty
0740: 6e 69 6e 65 20 66 69 66 74 79 20 66 69 66 74 79  nine fifty fifty
0750: 6f 6e 65 20 66 69 66 74 79 74 77 6f 20 66 69 66  one fiftytwo fif
0760: 74 79 74 68 72 65 65 20 66 69 66 74 79 66 6f 75  tythree fiftyfou
0770: 72 20 66 69 66 74 79 66 69 76 65 20 66 69 66 74  r fiftyfive fift
0780: 79 73 69 78 0a 20 20 66 69 66 74 79 73 65 76 65  ysix.  fiftyseve
0790: 6e 20 66 69 66 74 79 65 69 67 68 74 20 66 69 66  n fiftyeight fif
07a0: 74 79 6e 69 6e 65 20 73 69 78 74 79 20 73 69 78  tynine sixty six
07b0: 74 79 6f 6e 65 20 73 69 78 74 79 74 77 6f 20 73  tyone sixtytwo s
07c0: 69 78 74 79 74 68 72 65 65 20 73 69 78 74 79 66  ixtythree sixtyf
07d0: 6f 75 72 0a 20 20 73 69 78 74 79 66 69 76 65 20  our.  sixtyfive 
07e0: 73 69 78 74 79 73 69 78 20 73 69 78 74 79 73 65  sixtysix sixtyse
07f0: 76 65 6e 20 73 69 78 74 79 65 69 67 68 74 20 73  ven sixtyeight s
0800: 69 78 74 79 6e 69 6e 65 20 73 65 76 65 6e 74 79  ixtynine seventy
0810: 20 73 65 76 65 6e 74 79 6f 6e 65 0a 20 20 73 65   seventyone.  se
0820: 76 65 6e 74 79 74 77 6f 20 73 65 76 65 6e 74 79  ventytwo seventy
0830: 74 68 72 65 65 20 73 65 76 65 6e 74 79 66 6f 75  three seventyfou
0840: 72 20 73 65 76 65 6e 74 79 66 69 76 65 20 73 65  r seventyfive se
0850: 76 65 6e 74 79 73 69 78 20 73 65 76 65 6e 74 79  ventysix seventy
0860: 73 65 76 65 6e 0a 20 20 73 65 76 65 6e 74 79 65  seven.  seventye
0870: 69 67 68 74 20 73 65 76 65 6e 74 79 6e 69 6e 65  ight seventynine
0880: 20 65 69 67 68 74 79 20 65 69 67 68 74 79 6f 6e   eighty eightyon
0890: 65 20 65 69 67 68 74 79 74 77 6f 20 65 69 67 68  e eightytwo eigh
08a0: 74 79 74 68 72 65 65 20 65 69 67 68 74 79 66 6f  tythree eightyfo
08b0: 75 72 0a 20 20 65 69 67 68 74 79 66 69 76 65 20  ur.  eightyfive 
08c0: 65 69 67 68 74 79 73 69 78 20 65 69 67 68 74 79  eightysix eighty
08d0: 73 65 76 65 6e 20 65 69 67 68 74 79 65 69 67 68  seven eightyeigh
08e0: 74 20 65 69 67 68 74 79 6e 69 6e 65 20 6e 69 6e  t eightynine nin
08f0: 65 74 79 20 6e 69 6e 65 74 79 6f 6e 65 0a 20 20  ety ninetyone.  
0900: 6e 69 6e 65 74 79 74 77 6f 20 6e 69 6e 65 74 79  ninetytwo ninety
0910: 74 68 72 65 65 20 6e 69 6e 65 74 79 66 6f 75 72  three ninetyfour
0920: 20 6e 69 6e 65 74 79 66 69 76 65 20 6e 69 6e 65   ninetyfive nine
0930: 74 79 73 69 78 20 6e 69 6e 65 74 79 73 65 76 65  tysix ninetyseve
0940: 6e 0a 20 20 6e 69 6e 65 74 79 65 69 67 68 74 20  n.  ninetyeight 
0950: 6e 69 6e 65 74 79 6e 69 6e 65 20 6f 6e 65 68 75  ninetynine onehu
0960: 6e 64 72 65 64 20 6f 6e 65 68 75 6e 64 72 65 64  ndred onehundred
0970: 6f 6e 65 20 6f 6e 65 68 75 6e 64 72 65 64 74 77  one onehundredtw
0980: 6f 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64 74 68  o.  onehundredth
0990: 72 65 65 20 6f 6e 65 68 75 6e 64 72 65 64 66 6f  ree onehundredfo
09a0: 75 72 20 6f 6e 65 68 75 6e 64 72 65 64 66 69 76  ur onehundredfiv
09b0: 65 20 6f 6e 65 68 75 6e 64 72 65 64 73 69 78 20  e onehundredsix 
09c0: 6f 6e 65 68 75 6e 64 72 65 64 73 65 76 65 6e 0a  onehundredseven.
09d0: 20 20 6f 6e 65 68 75 6e 64 72 65 64 65 69 67 68    onehundredeigh
09e0: 74 20 6f 6e 65 68 75 6e 64 72 65 64 6e 69 6e 65  t onehundrednine
09f0: 20 6f 6e 65 68 75 6e 64 72 65 64 74 65 6e 20 6f   onehundredten o
0a00: 6e 65 68 75 6e 64 72 65 64 65 6c 65 76 65 6e 0a  nehundredeleven.
0a10: 20 20 6f 6e 65 68 75 6e 64 72 65 64 74 77 65 6c    onehundredtwel
0a20: 76 65 20 6f 6e 65 68 75 6e 64 72 65 64 74 68 69  ve onehundredthi
0a30: 72 74 65 65 6e 20 6f 6e 65 68 75 6e 64 72 65 64  rteen onehundred
0a40: 66 6f 75 72 74 65 65 6e 20 6f 6e 65 68 75 6e 64  fourteen onehund
0a50: 72 65 64 66 69 66 74 65 65 6e 0a 20 20 6f 6e 65  redfifteen.  one
0a60: 68 75 6e 64 72 65 64 73 69 78 74 65 65 6e 20 6f  hundredsixteen o
0a70: 6e 65 68 75 6e 64 72 65 64 73 65 76 65 6e 74 65  nehundredsevente
0a80: 65 6e 20 6f 6e 65 68 75 6e 64 72 65 64 65 69 67  en onehundredeig
0a90: 68 74 65 65 6e 20 6f 6e 65 68 75 6e 64 72 65 64  hteen onehundred
0aa0: 6e 69 6e 65 74 65 65 6e 0a 20 20 6f 6e 65 68 75  nineteen.  onehu
0ab0: 6e 64 72 65 64 74 77 65 6e 74 79 20 6f 6e 65 68  ndredtwenty oneh
0ac0: 75 6e 64 72 65 64 74 77 65 6e 74 79 6f 6e 65 20  undredtwentyone 
0ad0: 6f 6e 65 68 75 6e 64 72 65 64 74 77 65 6e 74 79  onehundredtwenty
0ae0: 74 77 6f 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64  two.  onehundred
0af0: 74 77 65 6e 74 79 74 68 72 65 65 20 6f 6e 65 68  twentythree oneh
0b00: 75 6e 64 72 65 64 74 77 65 6e 74 79 66 6f 75 72  undredtwentyfour
0b10: 20 6f 6e 65 68 75 6e 64 72 65 64 74 77 65 6e 74   onehundredtwent
0b20: 79 66 69 76 65 0a 20 20 6f 6e 65 68 75 6e 64 72  yfive.  onehundr
0b30: 65 64 74 77 65 6e 74 79 73 69 78 20 6f 6e 65 68  edtwentysix oneh
0b40: 75 6e 64 72 65 64 74 77 65 6e 74 79 73 65 76 65  undredtwentyseve
0b50: 6e 20 6f 6e 65 68 75 6e 64 72 65 64 74 77 65 6e  n onehundredtwen
0b60: 74 79 65 69 67 68 74 0a 20 20 6f 6e 65 68 75 6e  tyeight.  onehun
0b70: 64 72 65 64 74 77 65 6e 74 79 6e 69 6e 65 20 6f  dredtwentynine o
0b80: 6e 65 68 75 6e 64 72 65 64 74 68 69 72 74 79 20  nehundredthirty 
0b90: 6f 6e 65 68 75 6e 64 72 65 64 74 68 69 72 74 79  onehundredthirty
0ba0: 6f 6e 65 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64  one.  onehundred
0bb0: 74 68 69 72 74 79 74 77 6f 20 6f 6e 65 68 75 6e  thirtytwo onehun
0bc0: 64 72 65 64 74 68 69 72 74 79 74 68 72 65 65 20  dredthirtythree 
0bd0: 6f 6e 65 68 75 6e 64 72 65 64 74 68 69 72 74 79  onehundredthirty
0be0: 66 6f 75 72 0a 20 20 6f 6e 65 68 75 6e 64 72 65  four.  onehundre
0bf0: 64 74 68 69 72 74 79 66 69 76 65 20 6f 6e 65 68  dthirtyfive oneh
0c00: 75 6e 64 72 65 64 74 68 69 72 74 79 73 69 78 20  undredthirtysix 
0c10: 6f 6e 65 68 75 6e 64 72 65 64 74 68 69 72 74 79  onehundredthirty
0c20: 73 65 76 65 6e 0a 20 20 6f 6e 65 68 75 6e 64 72  seven.  onehundr
0c30: 65 64 74 68 69 72 74 79 65 69 67 68 74 20 6f 6e  edthirtyeight on
0c40: 65 68 75 6e 64 72 65 64 74 68 69 72 74 79 6e 69  ehundredthirtyni
0c50: 6e 65 20 6f 6e 65 68 75 6e 64 72 65 64 66 6f 72  ne onehundredfor
0c60: 74 79 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64 66  ty.  onehundredf
0c70: 6f 72 74 79 6f 6e 65 20 6f 6e 65 68 75 6e 64 72  ortyone onehundr
0c80: 65 64 66 6f 72 74 79 74 77 6f 20 6f 6e 65 68 75  edfortytwo onehu
0c90: 6e 64 72 65 64 66 6f 72 74 79 74 68 72 65 65 0a  ndredfortythree.
0ca0: 20 20 6f 6e 65 68 75 6e 64 72 65 64 66 6f 72 74    onehundredfort
0cb0: 79 66 6f 75 72 20 6f 6e 65 68 75 6e 64 72 65 64  yfour onehundred
0cc0: 66 6f 72 74 79 66 69 76 65 20 6f 6e 65 68 75 6e  fortyfive onehun
0cd0: 64 72 65 64 66 6f 72 74 79 73 69 78 0a 20 20 6f  dredfortysix.  o
0ce0: 6e 65 68 75 6e 64 72 65 64 66 6f 72 74 79 73 65  nehundredfortyse
0cf0: 76 65 6e 20 6f 6e 65 68 75 6e 64 72 65 64 66 6f  ven onehundredfo
0d00: 72 74 79 65 69 67 68 74 20 6f 6e 65 68 75 6e 64  rtyeight onehund
0d10: 72 65 64 66 6f 72 74 79 6e 69 6e 65 0a 20 20 6f  redfortynine.  o
0d20: 6e 65 68 75 6e 64 72 65 64 66 69 66 74 79 20 6f  nehundredfifty o
0d30: 6e 65 68 75 6e 64 72 65 64 66 69 66 74 79 6f 6e  nehundredfiftyon
0d40: 65 20 6f 6e 65 68 75 6e 64 72 65 64 66 69 66 74  e onehundredfift
0d50: 79 74 77 6f 20 6f 6e 65 68 75 6e 64 72 65 64 66  ytwo onehundredf
0d60: 69 66 74 79 74 68 72 65 65 0a 20 20 6f 6e 65 68  iftythree.  oneh
0d70: 75 6e 64 72 65 64 66 69 66 74 79 66 6f 75 72 20  undredfiftyfour 
0d80: 6f 6e 65 68 75 6e 64 72 65 64 66 69 66 74 79 66  onehundredfiftyf
0d90: 69 76 65 20 6f 6e 65 68 75 6e 64 72 65 64 66 69  ive onehundredfi
0da0: 66 74 79 73 69 78 0a 20 20 6f 6e 65 68 75 6e 64  ftysix.  onehund
0db0: 72 65 64 66 69 66 74 79 73 65 76 65 6e 20 6f 6e  redfiftyseven on
0dc0: 65 68 75 6e 64 72 65 64 66 69 66 74 79 65 69 67  ehundredfiftyeig
0dd0: 68 74 20 6f 6e 65 68 75 6e 64 72 65 64 66 69 66  ht onehundredfif
0de0: 74 79 6e 69 6e 65 0a 20 20 6f 6e 65 68 75 6e 64  tynine.  onehund
0df0: 72 65 64 73 69 78 74 79 20 6f 6e 65 68 75 6e 64  redsixty onehund
0e00: 72 65 64 73 69 78 74 79 6f 6e 65 20 6f 6e 65 68  redsixtyone oneh
0e10: 75 6e 64 72 65 64 73 69 78 74 79 74 77 6f 20 6f  undredsixtytwo o
0e20: 6e 65 68 75 6e 64 72 65 64 73 69 78 74 79 74 68  nehundredsixtyth
0e30: 72 65 65 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64  ree.  onehundred
0e40: 73 69 78 74 79 66 6f 75 72 20 6f 6e 65 68 75 6e  sixtyfour onehun
0e50: 64 72 65 64 73 69 78 74 79 66 69 76 65 20 6f 6e  dredsixtyfive on
0e60: 65 68 75 6e 64 72 65 64 73 69 78 74 79 73 69 78  ehundredsixtysix
0e70: 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64 73 69 78  .  onehundredsix
0e80: 74 79 73 65 76 65 6e 20 6f 6e 65 68 75 6e 64 72  tyseven onehundr
0e90: 65 64 73 69 78 74 79 65 69 67 68 74 20 6f 6e 65  edsixtyeight one
0ea0: 68 75 6e 64 72 65 64 73 69 78 74 79 6e 69 6e 65  hundredsixtynine
0eb0: 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64 73 65 76  .  onehundredsev
0ec0: 65 6e 74 79 20 6f 6e 65 68 75 6e 64 72 65 64 73  enty onehundreds
0ed0: 65 76 65 6e 74 79 6f 6e 65 20 6f 6e 65 68 75 6e  eventyone onehun
0ee0: 64 72 65 64 73 65 76 65 6e 74 79 74 77 6f 0a 20  dredseventytwo. 
0ef0: 20 6f 6e 65 68 75 6e 64 72 65 64 73 65 76 65 6e   onehundredseven
0f00: 74 79 74 68 72 65 65 20 6f 6e 65 68 75 6e 64 72  tythree onehundr
0f10: 65 64 73 65 76 65 6e 74 79 66 6f 75 72 20 6f 6e  edseventyfour on
0f20: 65 68 75 6e 64 72 65 64 73 65 76 65 6e 74 79 66  ehundredseventyf
0f30: 69 76 65 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64  ive.  onehundred
0f40: 73 65 76 65 6e 74 79 73 69 78 20 6f 6e 65 68 75  seventysix onehu
0f50: 6e 64 72 65 64 73 65 76 65 6e 74 79 73 65 76 65  ndredseventyseve
0f60: 6e 20 6f 6e 65 68 75 6e 64 72 65 64 73 65 76 65  n onehundredseve
0f70: 6e 74 79 65 69 67 68 74 0a 20 20 6f 6e 65 68 75  ntyeight.  onehu
0f80: 6e 64 72 65 64 73 65 76 65 6e 74 79 6e 69 6e 65  ndredseventynine
0f90: 20 6f 6e 65 68 75 6e 64 72 65 64 65 69 67 68 74   onehundredeight
0fa0: 79 20 6f 6e 65 68 75 6e 64 72 65 64 65 69 67 68  y onehundredeigh
0fb0: 74 79 6f 6e 65 0a 20 20 6f 6e 65 68 75 6e 64 72  tyone.  onehundr
0fc0: 65 64 65 69 67 68 74 79 74 77 6f 20 6f 6e 65 68  edeightytwo oneh
0fd0: 75 6e 64 72 65 64 65 69 67 68 74 79 74 68 72 65  undredeightythre
0fe0: 65 20 6f 6e 65 68 75 6e 64 72 65 64 65 69 67 68  e onehundredeigh
0ff0: 74 79 66 6f 75 72 0a 20 20 6f 6e 65 68 75 6e 64  tyfour.  onehund
1000: 72 65 64 65 69 67 68 74 79 66 69 76 65 20 6f 6e  redeightyfive on
1010: 65 68 75 6e 64 72 65 64 65 69 67 68 74 79 73 69  ehundredeightysi
1020: 78 20 6f 6e 65 68 75 6e 64 72 65 64 65 69 67 68  x onehundredeigh
1030: 74 79 73 65 76 65 6e 0a 20 20 6f 6e 65 68 75 6e  tyseven.  onehun
1040: 64 72 65 64 65 69 67 68 74 79 65 69 67 68 74 20  dredeightyeight 
1050: 6f 6e 65 68 75 6e 64 72 65 64 65 69 67 68 74 79  onehundredeighty
1060: 6e 69 6e 65 20 6f 6e 65 68 75 6e 64 72 65 64 6e  nine onehundredn
1070: 69 6e 65 74 79 0a 20 20 6f 6e 65 68 75 6e 64 72  inety.  onehundr
1080: 65 64 6e 69 6e 65 74 79 6f 6e 65 20 6f 6e 65 68  edninetyone oneh
1090: 75 6e 64 72 65 64 6e 69 6e 65 74 79 74 77 6f 20  undredninetytwo 
10a0: 6f 6e 65 68 75 6e 64 72 65 64 6e 69 6e 65 74 79  onehundredninety
10b0: 74 68 72 65 65 0a 20 20 6f 6e 65 68 75 6e 64 72  three.  onehundr
10c0: 65 64 6e 69 6e 65 74 79 66 6f 75 72 20 6f 6e 65  edninetyfour one
10d0: 68 75 6e 64 72 65 64 6e 69 6e 65 74 79 66 69 76  hundredninetyfiv
10e0: 65 20 6f 6e 65 68 75 6e 64 72 65 64 6e 69 6e 65  e onehundrednine
10f0: 74 79 73 69 78 0a 20 20 6f 6e 65 68 75 6e 64 72  tysix.  onehundr
1100: 65 64 6e 69 6e 65 74 79 73 65 76 65 6e 20 6f 6e  edninetyseven on
1110: 65 68 75 6e 64 72 65 64 6e 69 6e 65 74 79 65 69  ehundredninetyei
1120: 67 68 74 20 6f 6e 65 68 75 6e 64 72 65 64 6e 69  ght onehundredni
1130: 6e 65 74 79 6e 69 6e 65 20 74 77 6f 68 75 6e 64  netynine twohund
1140: 72 65 64 0a 20 20 74 77 6f 68 75 6e 64 72 65 64  red.  twohundred
1150: 6f 6e 65 20 74 77 6f 68 75 6e 64 72 65 64 74 77  one twohundredtw
1160: 6f 20 74 77 6f 68 75 6e 64 72 65 64 74 68 72 65  o twohundredthre
1170: 65 20 74 77 6f 68 75 6e 64 72 65 64 66 6f 75 72  e twohundredfour
1180: 20 74 77 6f 68 75 6e 64 72 65 64 66 69 76 65 0a   twohundredfive.
1190: 20 20 74 77 6f 68 75 6e 64 72 65 64 73 69 78 20    twohundredsix 
11a0: 74 77 6f 68 75 6e 64 72 65 64 73 65 76 65 6e 20  twohundredseven 
11b0: 74 77 6f 68 75 6e 64 72 65 64 65 69 67 68 74 20  twohundredeight 
11c0: 74 77 6f 68 75 6e 64 72 65 64 6e 69 6e 65 20 74  twohundrednine t
11d0: 77 6f 68 75 6e 64 72 65 64 74 65 6e 0a 20 20 74  wohundredten.  t
11e0: 77 6f 68 75 6e 64 72 65 64 65 6c 65 76 65 6e 20  wohundredeleven 
11f0: 74 77 6f 68 75 6e 64 72 65 64 74 77 65 6c 76 65  twohundredtwelve
1200: 20 74 77 6f 68 75 6e 64 72 65 64 74 68 69 72 74   twohundredthirt
1210: 65 65 6e 20 74 77 6f 68 75 6e 64 72 65 64 66 6f  een twohundredfo
1220: 75 72 74 65 65 6e 0a 20 20 74 77 6f 68 75 6e 64  urteen.  twohund
1230: 72 65 64 66 69 66 74 65 65 6e 20 74 77 6f 68 75  redfifteen twohu
1240: 6e 64 72 65 64 73 69 78 74 65 65 6e 20 74 77 6f  ndredsixteen two
1250: 68 75 6e 64 72 65 64 73 65 76 65 6e 74 65 65 6e  hundredseventeen
1260: 20 74 77 6f 68 75 6e 64 72 65 64 65 69 67 68 74   twohundredeight
1270: 65 65 6e 0a 20 20 74 77 6f 68 75 6e 64 72 65 64  een.  twohundred
1280: 6e 69 6e 65 74 65 65 6e 20 74 77 6f 68 75 6e 64  nineteen twohund
1290: 72 65 64 74 77 65 6e 74 79 20 74 77 6f 68 75 6e  redtwenty twohun
12a0: 64 72 65 64 74 77 65 6e 74 79 6f 6e 65 20 74 77  dredtwentyone tw
12b0: 6f 68 75 6e 64 72 65 64 74 77 65 6e 74 79 74 77  ohundredtwentytw
12c0: 6f 0a 20 20 74 77 6f 68 75 6e 64 72 65 64 74 77  o.  twohundredtw
12d0: 65 6e 74 79 74 68 72 65 65 20 74 77 6f 68 75 6e  entythree twohun
12e0: 64 72 65 64 74 77 65 6e 74 79 66 6f 75 72 20 74  dredtwentyfour t
12f0: 77 6f 68 75 6e 64 72 65 64 74 77 65 6e 74 79 66  wohundredtwentyf
1300: 69 76 65 0a 20 20 74 77 6f 68 75 6e 64 72 65 64  ive.  twohundred
1310: 74 77 65 6e 74 79 73 69 78 20 74 77 6f 68 75 6e  twentysix twohun
1320: 64 72 65 64 74 77 65 6e 74 79 73 65 76 65 6e 20  dredtwentyseven 
1330: 74 77 6f 68 75 6e 64 72 65 64 74 77 65 6e 74 79  twohundredtwenty
1340: 65 69 67 68 74 0a 20 20 74 77 6f 68 75 6e 64 72  eight.  twohundr
1350: 65 64 74 77 65 6e 74 79 6e 69 6e 65 20 74 77 6f  edtwentynine two
1360: 68 75 6e 64 72 65 64 74 68 69 72 74 79 20 74 77  hundredthirty tw
1370: 6f 68 75 6e 64 72 65 64 74 68 69 72 74 79 6f 6e  ohundredthirtyon
1380: 65 0a 20 20 74 77 6f 68 75 6e 64 72 65 64 74 68  e.  twohundredth
1390: 69 72 74 79 74 77 6f 20 74 77 6f 68 75 6e 64 72  irtytwo twohundr
13a0: 65 64 74 68 69 72 74 79 74 68 72 65 65 20 74 77  edthirtythree tw
13b0: 6f 68 75 6e 64 72 65 64 74 68 69 72 74 79 66 6f  ohundredthirtyfo
13c0: 75 72 0a 20 20 74 77 6f 68 75 6e 64 72 65 64 74  ur.  twohundredt
13d0: 68 69 72 74 79 66 69 76 65 20 74 77 6f 68 75 6e  hirtyfive twohun
13e0: 64 72 65 64 74 68 69 72 74 79 73 69 78 20 74 77  dredthirtysix tw
13f0: 6f 68 75 6e 64 72 65 64 74 68 69 72 74 79 73 65  ohundredthirtyse
1400: 76 65 6e 0a 20 20 74 77 6f 68 75 6e 64 72 65 64  ven.  twohundred
1410: 74 68 69 72 74 79 65 69 67 68 74 20 74 77 6f 68  thirtyeight twoh
1420: 75 6e 64 72 65 64 74 68 69 72 74 79 6e 69 6e 65  undredthirtynine
1430: 20 74 77 6f 68 75 6e 64 72 65 64 66 6f 72 74 79   twohundredforty
1440: 0a 20 20 74 77 6f 68 75 6e 64 72 65 64 66 6f 72  .  twohundredfor
1450: 74 79 6f 6e 65 20 74 77 6f 68 75 6e 64 72 65 64  tyone twohundred
1460: 66 6f 72 74 79 74 77 6f 20 74 77 6f 68 75 6e 64  fortytwo twohund
1470: 72 65 64 66 6f 72 74 79 74 68 72 65 65 0a 20 20  redfortythree.  
1480: 74 77 6f 68 75 6e 64 72 65 64 66 6f 72 74 79 66  twohundredfortyf
1490: 6f 75 72 20 74 77 6f 68 75 6e 64 72 65 64 66 6f  our twohundredfo
14a0: 72 74 79 66 69 76 65 20 74 77 6f 68 75 6e 64 72  rtyfive twohundr
14b0: 65 64 66 6f 72 74 79 73 69 78 0a 20 20 74 77 6f  edfortysix.  two
14c0: 68 75 6e 64 72 65 64 66 6f 72 74 79 73 65 76 65  hundredfortyseve
14d0: 6e 20 74 77 6f 68 75 6e 64 72 65 64 66 6f 72 74  n twohundredfort
14e0: 79 65 69 67 68 74 20 74 77 6f 68 75 6e 64 72 65  yeight twohundre
14f0: 64 66 6f 72 74 79 6e 69 6e 65 0a 20 20 74 77 6f  dfortynine.  two
1500: 68 75 6e 64 72 65 64 66 69 66 74 79 20 74 77 6f  hundredfifty two
1510: 68 75 6e 64 72 65 64 66 69 66 74 79 6f 6e 65 20  hundredfiftyone 
1520: 74 77 6f 68 75 6e 64 72 65 64 66 69 66 74 79 74  twohundredfiftyt
1530: 77 6f 20 74 77 6f 68 75 6e 64 72 65 64 66 69 66  wo twohundredfif
1540: 74 79 74 68 72 65 65 0a 20 20 74 77 6f 68 75 6e  tythree.  twohun
1550: 64 72 65 64 66 69 66 74 79 66 6f 75 72 20 74 77  dredfiftyfour tw
1560: 6f 68 75 6e 64 72 65 64 66 69 66 74 79 66 69 76  ohundredfiftyfiv
1570: 65 20 74 77 6f 68 75 6e 64 72 65 64 66 69 66 74  e twohundredfift
1580: 79 73 69 78 0a 20 20 74 77 6f 68 75 6e 64 72 65  ysix.  twohundre
1590: 64 66 69 66 74 79 73 65 76 65 6e 20 74 77 6f 68  dfiftyseven twoh
15a0: 75 6e 64 72 65 64 66 69 66 74 79 65 69 67 68 74  undredfiftyeight
15b0: 20 74 77 6f 68 75 6e 64 72 65 64 66 69 66 74 79   twohundredfifty
15c0: 6e 69 6e 65 0a 20 20 74 77 6f 68 75 6e 64 72 65  nine.  twohundre
15d0: 64 73 69 78 74 79 20 74 77 6f 68 75 6e 64 72 65  dsixty twohundre
15e0: 64 73 69 78 74 79 6f 6e 65 20 74 77 6f 68 75 6e  dsixtyone twohun
15f0: 64 72 65 64 73 69 78 74 79 74 77 6f 20 74 77 6f  dredsixtytwo two
1600: 68 75 6e 64 72 65 64 73 69 78 74 79 74 68 72 65  hundredsixtythre
1610: 65 0a 20 20 74 77 6f 68 75 6e 64 72 65 64 73 69  e.  twohundredsi
1620: 78 74 79 66 6f 75 72 20 74 77 6f 68 75 6e 64 72  xtyfour twohundr
1630: 65 64 73 69 78 74 79 66 69 76 65 20 74 77 6f 68  edsixtyfive twoh
1640: 75 6e 64 72 65 64 73 69 78 74 79 73 69 78 0a 20  undredsixtysix. 
1650: 20 74 77 6f 68 75 6e 64 72 65 64 73 69 78 74 79   twohundredsixty
1660: 73 65 76 65 6e 20 74 77 6f 68 75 6e 64 72 65 64  seven twohundred
1670: 73 69 78 74 79 65 69 67 68 74 20 74 77 6f 68 75  sixtyeight twohu
1680: 6e 64 72 65 64 73 69 78 74 79 6e 69 6e 65 0a 20  ndredsixtynine. 
1690: 20 74 77 6f 68 75 6e 64 72 65 64 73 65 76 65 6e   twohundredseven
16a0: 74 79 20 74 77 6f 68 75 6e 64 72 65 64 73 65 76  ty twohundredsev
16b0: 65 6e 74 79 6f 6e 65 20 74 77 6f 68 75 6e 64 72  entyone twohundr
16c0: 65 64 73 65 76 65 6e 74 79 74 77 6f 0a 20 20 74  edseventytwo.  t
16d0: 77 6f 68 75 6e 64 72 65 64 73 65 76 65 6e 74 79  wohundredseventy
16e0: 74 68 72 65 65 20 74 77 6f 68 75 6e 64 72 65 64  three twohundred
16f0: 73 65 76 65 6e 74 79 66 6f 75 72 20 74 77 6f 68  seventyfour twoh
1700: 75 6e 64 72 65 64 73 65 76 65 6e 74 79 66 69 76  undredseventyfiv
1710: 65 0a 20 20 74 77 6f 68 75 6e 64 72 65 64 73 65  e.  twohundredse
1720: 76 65 6e 74 79 73 69 78 20 74 77 6f 68 75 6e 64  ventysix twohund
1730: 72 65 64 73 65 76 65 6e 74 79 73 65 76 65 6e 20  redseventyseven 
1740: 74 77 6f 68 75 6e 64 72 65 64 73 65 76 65 6e 74  twohundredsevent
1750: 79 65 69 67 68 74 0a 20 20 74 77 6f 68 75 6e 64  yeight.  twohund
1760: 72 65 64 73 65 76 65 6e 74 79 6e 69 6e 65 20 74  redseventynine t
1770: 77 6f 68 75 6e 64 72 65 64 65 69 67 68 74 79 20  wohundredeighty 
1780: 74 77 6f 68 75 6e 64 72 65 64 65 69 67 68 74 79  twohundredeighty
1790: 6f 6e 65 0a 20 20 74 77 6f 68 75 6e 64 72 65 64  one.  twohundred
17a0: 65 69 67 68 74 79 74 77 6f 20 74 77 6f 68 75 6e  eightytwo twohun
17b0: 64 72 65 64 65 69 67 68 74 79 74 68 72 65 65 20  dredeightythree 
17c0: 74 77 6f 68 75 6e 64 72 65 64 65 69 67 68 74 79  twohundredeighty
17d0: 66 6f 75 72 0a 20 20 74 77 6f 68 75 6e 64 72 65  four.  twohundre
17e0: 64 65 69 67 68 74 79 66 69 76 65 20 74 77 6f 68  deightyfive twoh
17f0: 75 6e 64 72 65 64 65 69 67 68 74 79 73 69 78 20  undredeightysix 
1800: 74 77 6f 68 75 6e 64 72 65 64 65 69 67 68 74 79  twohundredeighty
1810: 73 65 76 65 6e 0a 20 20 74 77 6f 68 75 6e 64 72  seven.  twohundr
1820: 65 64 65 69 67 68 74 79 65 69 67 68 74 20 74 77  edeightyeight tw
1830: 6f 68 75 6e 64 72 65 64 65 69 67 68 74 79 6e 69  ohundredeightyni
1840: 6e 65 20 74 77 6f 68 75 6e 64 72 65 64 6e 69 6e  ne twohundrednin
1850: 65 74 79 0a 20 20 74 77 6f 68 75 6e 64 72 65 64  ety.  twohundred
1860: 6e 69 6e 65 74 79 6f 6e 65 20 74 77 6f 68 75 6e  ninetyone twohun
1870: 64 72 65 64 6e 69 6e 65 74 79 74 77 6f 20 74 77  dredninetytwo tw
1880: 6f 68 75 6e 64 72 65 64 6e 69 6e 65 74 79 74 68  ohundredninetyth
1890: 72 65 65 0a 20 20 74 77 6f 68 75 6e 64 72 65 64  ree.  twohundred
18a0: 6e 69 6e 65 74 79 66 6f 75 72 20 74 77 6f 68 75  ninetyfour twohu
18b0: 6e 64 72 65 64 6e 69 6e 65 74 79 66 69 76 65 20  ndredninetyfive 
18c0: 74 77 6f 68 75 6e 64 72 65 64 6e 69 6e 65 74 79  twohundredninety
18d0: 73 69 78 0a 20 20 74 77 6f 68 75 6e 64 72 65 64  six.  twohundred
18e0: 6e 69 6e 65 74 79 73 65 76 65 6e 20 74 77 6f 68  ninetyseven twoh
18f0: 75 6e 64 72 65 64 6e 69 6e 65 74 79 65 69 67 68  undredninetyeigh
1900: 74 20 74 77 6f 68 75 6e 64 72 65 64 6e 69 6e 65  t twohundrednine
1910: 74 79 6e 69 6e 65 0a 20 20 74 68 72 65 65 68 75  tynine.  threehu
1920: 6e 64 72 65 64 0a 7d 5d 0a 0a 66 6f 72 65 61 63  ndred.}]..foreac
1930: 68 20 7b 44 4f 5f 4d 41 4c 4c 4f 43 5f 54 45 53  h {DO_MALLOC_TES
1940: 54 20 65 6e 63 7d 20 7b 0a 20 20 30 20 75 74 66  T enc} {.  0 utf
1950: 38 0a 20 20 31 20 75 74 66 38 0a 20 20 31 20 75  8.  1 utf8.  1 u
1960: 74 66 31 36 0a 7d 20 7b 0a 0a 20 20 64 62 20 63  tf16.} {..  db c
1970: 6c 6f 73 65 0a 20 20 66 69 6c 65 20 64 65 6c 65  lose.  file dele
1980: 74 65 20 2d 66 6f 72 63 65 20 74 65 73 74 2e 64  te -force test.d
1990: 62 0a 20 20 73 71 6c 69 74 65 33 20 64 62 20 74  b.  sqlite3 db t
19a0: 65 73 74 2e 64 62 0a 20 20 73 71 6c 69 74 65 33  est.db.  sqlite3
19b0: 5f 64 62 5f 63 6f 6e 66 69 67 5f 6c 6f 6f 6b 61  _db_config_looka
19c0: 73 69 64 65 20 64 62 20 30 20 30 20 30 0a 20 20  side db 0 0 0.  
19d0: 64 62 20 65 76 61 6c 20 22 50 52 41 47 4d 41 20  db eval "PRAGMA 
19e0: 65 6e 63 6f 64 69 6e 67 20 3d 20 5c 22 24 65 6e  encoding = \"$en
19f0: 63 5c 22 22 0a 0a 20 20 23 20 53 65 74 20 76 61  c\""..  # Set va
1a00: 72 69 61 62 6c 65 20 24 54 20 74 6f 20 74 68 65  riable $T to the
1a10: 20 74 65 73 74 20 6e 61 6d 65 20 70 72 65 66 69   test name prefi
1a20: 78 20 66 6f 72 20 74 68 69 73 20 69 74 65 72 61  x for this itera
1a30: 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 6f 6f 70  tion of the loop
1a40: 2e 0a 20 20 23 0a 20 20 73 65 74 20 54 20 22 66  ..  #.  set T "f
1a50: 74 73 33 73 6e 69 70 70 65 74 2d 24 65 6e 63 22  ts3snippet-$enc"
1a60: 0a 0a 20 20 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 23 23 23 23 23 23 23 23 23 23 23 23 0a 20  ##############. 
1ab0: 20 23 20 54 65 73 74 20 74 68 65 20 6f 66 66 73   # Test the offs
1ac0: 65 74 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 23  et function..  #
1ad0: 0a 20 20 64 6f 5f 74 65 73 74 20 24 54 2e 31 2e  .  do_test $T.1.
1ae0: 31 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  1 {.    execsql 
1af0: 7b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 56  {.      CREATE V
1b00: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 66 74 20  IRTUAL TABLE ft 
1b10: 55 53 49 4e 47 20 66 74 73 33 3b 0a 20 20 20 20  USING fts3;.    
1b20: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74    INSERT INTO ft
1b30: 20 56 41 4c 55 45 53 28 27 78 78 78 20 78 78 78   VALUES('xxx xxx
1b40: 20 78 78 78 20 78 78 78 27 29 3b 0a 20 20 20 20   xxx xxx');.    
1b50: 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 6f 66  }.  } {}.  do_of
1b60: 66 73 65 74 73 5f 74 65 73 74 20 24 54 2e 31 2e  fsets_test $T.1.
1b70: 32 20 7b 78 78 78 7d 20 7b 30 20 30 20 30 20 33  2 {xxx} {0 0 0 3
1b80: 20 30 20 30 20 34 20 33 20 30 20 30 20 38 20 33   0 0 4 3 0 0 8 3
1b90: 20 30 20 30 20 31 32 20 33 7d 0a 20 20 64 6f 5f   0 0 12 3}.  do_
1ba0: 6f 66 66 73 65 74 73 5f 74 65 73 74 20 24 54 2e  offsets_test $T.
1bb0: 31 2e 33 20 7b 22 78 78 78 20 78 78 78 22 7d 20  1.3 {"xxx xxx"} 
1bc0: 7b 0a 20 20 20 20 20 20 30 20 30 20 20 30 20 33  {.      0 0  0 3
1bd0: 20 20 20 20 20 30 20 30 20 20 34 20 33 20 20 20       0 0  4 3   
1be0: 20 20 30 20 31 20 20 34 20 33 20 20 20 20 20 30    0 1  4 3     0
1bf0: 20 30 20 20 38 20 33 20 0a 20 20 20 20 20 20 30   0  8 3 .      0
1c00: 20 31 20 20 38 20 33 20 20 20 20 20 30 20 31 20   1  8 3     0 1 
1c10: 31 32 20 33 0a 20 20 7d 0a 20 20 64 6f 5f 6f 66  12 3.  }.  do_of
1c20: 66 73 65 74 73 5f 74 65 73 74 20 24 54 2e 31 2e  fsets_test $T.1.
1c30: 34 20 7b 22 78 78 78 20 78 78 78 22 20 78 78 78  4 {"xxx xxx" xxx
1c40: 7d 20 7b 0a 20 20 20 20 20 20 30 20 30 20 20 30  } {.      0 0  0
1c50: 20 33 20 20 20 20 20 30 20 32 20 20 30 20 33 20   3     0 2  0 3 
1c60: 20 20 20 20 30 20 30 20 20 34 20 33 20 20 20 20      0 0  4 3    
1c70: 20 30 20 31 20 20 34 20 33 20 0a 20 20 20 20 20   0 1  4 3 .     
1c80: 20 30 20 32 20 20 34 20 33 20 20 20 20 20 30 20   0 2  4 3     0 
1c90: 30 20 20 38 20 33 20 20 20 20 20 30 20 31 20 20  0  8 3     0 1  
1ca0: 38 20 33 20 20 20 20 20 30 20 32 20 20 38 20 33  8 3     0 2  8 3
1cb0: 20 0a 20 20 20 20 20 20 30 20 31 20 31 32 20 33   .      0 1 12 3
1cc0: 20 20 20 20 20 30 20 32 20 31 32 20 33 0a 20 20       0 2 12 3.  
1cd0: 7d 0a 20 20 64 6f 5f 6f 66 66 73 65 74 73 5f 74  }.  do_offsets_t
1ce0: 65 73 74 20 24 54 2e 31 2e 35 20 7b 78 78 78 20  est $T.1.5 {xxx 
1cf0: 22 78 78 78 20 78 78 78 22 7d 20 7b 0a 20 20 20  "xxx xxx"} {.   
1d00: 20 20 20 30 20 30 20 20 30 20 33 20 20 20 20 20     0 0  0 3     
1d10: 30 20 31 20 20 30 20 33 20 20 20 20 20 30 20 30  0 1  0 3     0 0
1d20: 20 20 34 20 33 20 20 20 20 20 30 20 31 20 20 34    4 3     0 1  4
1d30: 20 33 20 0a 20 20 20 20 20 20 30 20 32 20 20 34   3 .      0 2  4
1d40: 20 33 20 20 20 20 20 30 20 30 20 20 38 20 33 20   3     0 0  8 3 
1d50: 20 20 20 20 30 20 31 20 20 38 20 33 20 20 20 20      0 1  8 3    
1d60: 20 30 20 32 20 20 38 20 33 20 0a 20 20 20 20 20   0 2  8 3 .     
1d70: 20 30 20 30 20 31 32 20 33 20 20 20 20 20 30 20   0 0 12 3     0 
1d80: 32 20 31 32 20 33 0a 20 20 7d 0a 0a 20 20 64 6f  2 12 3.  }..  do
1d90: 5f 74 65 73 74 20 24 54 2e 32 2e 31 20 7b 0a 20  _test $T.2.1 {. 
1da0: 20 20 20 73 65 74 20 76 31 20 5b 6c 72 61 6e 67     set v1 [lrang
1db0: 65 20 24 6e 75 6d 62 65 72 73 20 30 20 39 39 5d  e $numbers 0 99]
1dc0: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
1dd0: 20 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20       DROP TABLE 
1de0: 49 46 20 45 58 49 53 54 53 20 66 74 3b 0a 20 20  IF EXISTS ft;.  
1df0: 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55      CREATE VIRTU
1e00: 41 4c 20 54 41 42 4c 45 20 66 74 20 55 53 49 4e  AL TABLE ft USIN
1e10: 47 20 66 74 73 33 28 61 2c 20 62 29 3b 0a 20 20  G fts3(a, b);.  
1e20: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1e30: 66 74 20 56 41 4c 55 45 53 28 24 76 31 2c 20 24  ft VALUES($v1, $
1e40: 6e 75 6d 62 65 72 73 29 3b 0a 20 20 20 20 20 20  numbers);.      
1e50: 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 20 56  INSERT INTO ft V
1e60: 41 4c 55 45 53 28 24 76 31 2c 20 4e 55 4c 4c 29  ALUES($v1, NULL)
1e70: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 0a  ;.    }.  } {}..
1e80: 20 20 73 65 74 20 6f 66 66 20 5b 73 74 72 69 6e    set off [strin
1e90: 67 20 66 69 72 73 74 20 22 74 77 6f 68 75 6e 64  g first "twohund
1ea0: 72 65 64 20 22 20 24 6e 75 6d 62 65 72 73 5d 0a  red " $numbers].
1eb0: 20 20 64 6f 5f 6f 66 66 73 65 74 73 5f 74 65 73    do_offsets_tes
1ec0: 74 20 24 54 2e 32 2e 31 20 7b 74 77 6f 68 75 6e  t $T.2.1 {twohun
1ed0: 64 72 65 64 7d 20 5b 6c 69 73 74 20 31 20 30 20  dred} [list 1 0 
1ee0: 24 6f 66 66 20 31 30 5d 0a 0a 20 20 73 65 74 20  $off 10]..  set 
1ef0: 6f 66 66 20 5b 73 74 72 69 6e 67 20 66 69 72 73  off [string firs
1f00: 74 20 22 6f 6e 65 68 75 6e 64 72 65 64 20 22 20  t "onehundred " 
1f10: 24 6e 75 6d 62 65 72 73 5d 0a 20 20 64 6f 5f 6f  $numbers].  do_o
1f20: 66 66 73 65 74 73 5f 74 65 73 74 20 24 54 2e 32  ffsets_test $T.2
1f30: 2e 32 20 7b 6f 6e 65 68 75 6e 64 72 65 64 7d 20  .2 {onehundred} 
1f40: 5c 0a 20 20 20 20 5b 6c 69 73 74 20 30 20 30 20  \.    [list 0 0 
1f50: 24 6f 66 66 20 31 30 20 31 20 30 20 24 6f 66 66  $off 10 1 0 $off
1f60: 20 31 30 5d 20 5b 6c 69 73 74 20 30 20 30 20 24   10] [list 0 0 $
1f70: 6f 66 66 20 31 30 5d 0a 0a 20 20 23 20 54 65 73  off 10]..  # Tes
1f80: 74 20 61 20 63 6f 72 72 75 70 74 69 6f 6e 20 63  t a corruption c
1f90: 61 73 65 3a 0a 20 20 65 78 65 63 73 71 6c 20 7b  ase:.  execsql {
1fa0: 20 55 50 44 41 54 45 20 66 74 5f 63 6f 6e 74 65   UPDATE ft_conte
1fb0: 6e 74 20 53 45 54 20 63 31 62 20 3d 20 27 68 65  nt SET c1b = 'he
1fc0: 6c 6c 6f 20 77 6f 72 6c 64 27 20 57 48 45 52 45  llo world' WHERE
1fd0: 20 63 31 62 20 3d 20 24 6e 75 6d 62 65 72 73 20   c1b = $numbers 
1fe0: 7d 0a 20 20 64 6f 5f 65 72 72 6f 72 5f 74 65 73  }.  do_error_tes
1ff0: 74 20 24 54 2e 32 2e 33 20 7b 0a 20 20 20 20 53  t $T.2.3 {.    S
2000: 45 4c 45 43 54 20 6f 66 66 73 65 74 73 28 66 74  ELECT offsets(ft
2010: 29 20 46 52 4f 4d 20 66 74 20 57 48 45 52 45 20  ) FROM ft WHERE 
2020: 66 74 20 4d 41 54 43 48 20 27 6f 6e 65 68 75 6e  ft MATCH 'onehun
2030: 64 72 65 64 27 0a 20 20 7d 20 7b 64 61 74 61 62  dred'.  } {datab
2040: 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69  ase disk image i
2050: 73 20 6d 61 6c 66 6f 72 6d 65 64 7d 0a 20 20 0a  s malformed}.  .
2060: 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
2070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2080: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20a0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 23  ############.  #
20b0: 20 54 65 73 74 20 74 68 65 20 73 6e 69 70 70 65   Test the snippe
20c0: 74 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 23 0a  t function..  #.
20d0: 20 20 70 72 6f 63 20 64 6f 5f 73 6e 69 70 70 65    proc do_snippe
20e0: 74 5f 74 65 73 74 20 7b 6e 61 6d 65 20 65 78 70  t_test {name exp
20f0: 72 20 69 43 6f 6c 20 6e 54 6f 6b 20 61 72 67 73  r iCol nTok args
2100: 7d 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 20  } {.    set res 
2110: 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61  [list].    forea
2120: 63 68 20 61 20 24 61 72 67 73 20 7b 20 6c 61 70  ch a $args { lap
2130: 70 65 6e 64 20 72 65 73 20 5b 73 74 72 69 6e 67  pend res [string
2140: 20 74 72 69 6d 20 24 61 5d 20 7d 0a 20 20 20 20   trim $a] }.    
2150: 64 6f 5f 73 65 6c 65 63 74 5f 74 65 73 74 20 24  do_select_test $
2160: 6e 61 6d 65 20 7b 0a 20 20 20 20 20 20 53 45 4c  name {.      SEL
2170: 45 43 54 20 73 6e 69 70 70 65 74 28 66 74 2c 27  ECT snippet(ft,'
2180: 7b 27 2c 27 7d 27 2c 27 2e 2e 2e 27 2c 24 69 43  {','}','...',$iC
2190: 6f 6c 2c 24 6e 54 6f 6b 29 20 46 52 4f 4d 20 66  ol,$nTok) FROM f
21a0: 74 20 57 48 45 52 45 20 66 74 20 4d 41 54 43 48  t WHERE ft MATCH
21b0: 20 24 65 78 70 72 0a 20 20 20 20 7d 20 24 72 65   $expr.    } $re
21c0: 73 0a 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20  s.  }.  do_test 
21d0: 24 54 2e 33 2e 31 20 7b 0a 20 20 20 20 65 78 65  $T.3.1 {.    exe
21e0: 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 52 4f  csql {.      DRO
21f0: 50 20 54 41 42 4c 45 20 49 46 20 45 58 49 53 54  P TABLE IF EXIST
2200: 53 20 66 74 3b 0a 20 20 20 20 20 20 43 52 45 41  S ft;.      CREA
2210: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
2220: 20 66 74 20 55 53 49 4e 47 20 66 74 73 33 3b 0a   ft USING fts3;.
2230: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
2240: 4f 20 66 74 20 56 41 4c 55 45 53 28 27 6f 6e 65  O ft VALUES('one
2250: 20 74 77 6f 20 74 68 72 65 65 20 66 6f 75 72 20   two three four 
2260: 66 69 76 65 20 73 69 78 20 73 65 76 65 6e 20 65  five six seven e
2270: 69 67 68 74 20 6e 69 6e 65 20 74 65 6e 27 29 3b  ight nine ten');
2280: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20  .    }.  } {}.  
2290: 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20  do_snippet_test 
22a0: 24 54 2e 33 2e 32 20 20 6f 6e 65 20 20 20 20 30  $T.3.2  one    0
22b0: 20 35 20 22 7b 6f 6e 65 7d 20 74 77 6f 20 74 68   5 "{one} two th
22c0: 72 65 65 20 66 6f 75 72 20 66 69 76 65 2e 2e 2e  ree four five...
22d0: 22 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74  ".  do_snippet_t
22e0: 65 73 74 20 24 54 2e 33 2e 33 20 20 74 77 6f 20  est $T.3.3  two 
22f0: 20 20 20 30 20 35 20 22 6f 6e 65 20 7b 74 77 6f     0 5 "one {two
2300: 7d 20 74 68 72 65 65 20 66 6f 75 72 20 66 69 76  } three four fiv
2310: 65 2e 2e 2e 22 0a 20 20 64 6f 5f 73 6e 69 70 70  e...".  do_snipp
2320: 65 74 5f 74 65 73 74 20 24 54 2e 33 2e 34 20 20  et_test $T.3.4  
2330: 74 68 72 65 65 20 20 30 20 35 20 22 6f 6e 65 20  three  0 5 "one 
2340: 74 77 6f 20 7b 74 68 72 65 65 7d 20 66 6f 75 72  two {three} four
2350: 20 66 69 76 65 2e 2e 2e 22 0a 20 20 64 6f 5f 73   five...".  do_s
2360: 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e 33  nippet_test $T.3
2370: 2e 35 20 20 66 6f 75 72 20 20 20 30 20 35 20 22  .5  four   0 5 "
2380: 2e 2e 2e 74 77 6f 20 74 68 72 65 65 20 7b 66 6f  ...two three {fo
2390: 75 72 7d 20 66 69 76 65 20 73 69 78 2e 2e 2e 22  ur} five six..."
23a0: 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65  .  do_snippet_te
23b0: 73 74 20 24 54 2e 33 2e 36 20 20 66 69 76 65 20  st $T.3.6  five 
23c0: 20 20 30 20 35 20 22 2e 2e 2e 74 68 72 65 65 20    0 5 "...three 
23d0: 66 6f 75 72 20 7b 66 69 76 65 7d 20 73 69 78 20  four {five} six 
23e0: 73 65 76 65 6e 2e 2e 2e 22 0a 20 20 64 6f 5f 73  seven...".  do_s
23f0: 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e 33  nippet_test $T.3
2400: 2e 37 20 20 73 69 78 20 20 20 20 30 20 35 20 22  .7  six    0 5 "
2410: 2e 2e 2e 66 6f 75 72 20 66 69 76 65 20 7b 73 69  ...four five {si
2420: 78 7d 20 73 65 76 65 6e 20 65 69 67 68 74 2e 2e  x} seven eight..
2430: 2e 22 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f  .".  do_snippet_
2440: 74 65 73 74 20 24 54 2e 33 2e 38 20 20 73 65 76  test $T.3.8  sev
2450: 65 6e 20 20 30 20 35 20 22 2e 2e 2e 66 69 76 65  en  0 5 "...five
2460: 20 73 69 78 20 7b 73 65 76 65 6e 7d 20 65 69 67   six {seven} eig
2470: 68 74 20 6e 69 6e 65 2e 2e 2e 22 0a 20 20 64 6f  ht nine...".  do
2480: 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54  _snippet_test $T
2490: 2e 33 2e 39 20 20 65 69 67 68 74 20 20 30 20 35  .3.9  eight  0 5
24a0: 20 22 2e 2e 2e 73 69 78 20 73 65 76 65 6e 20 7b   "...six seven {
24b0: 65 69 67 68 74 7d 20 6e 69 6e 65 20 74 65 6e 22  eight} nine ten"
24c0: 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65  .  do_snippet_te
24d0: 73 74 20 24 54 2e 33 2e 31 30 20 6e 69 6e 65 20  st $T.3.10 nine 
24e0: 20 20 30 20 35 20 22 2e 2e 2e 73 69 78 20 73 65    0 5 "...six se
24f0: 76 65 6e 20 65 69 67 68 74 20 7b 6e 69 6e 65 7d  ven eight {nine}
2500: 20 74 65 6e 22 0a 20 20 64 6f 5f 73 6e 69 70 70   ten".  do_snipp
2510: 65 74 5f 74 65 73 74 20 24 54 2e 33 2e 31 31 20  et_test $T.3.11 
2520: 74 65 6e 20 20 20 20 30 20 35 20 22 2e 2e 2e 73  ten    0 5 "...s
2530: 69 78 20 73 65 76 65 6e 20 65 69 67 68 74 20 6e  ix seven eight n
2540: 69 6e 65 20 7b 74 65 6e 7d 22 0a 20 20 0a 20 20  ine {ten}".  .  
2550: 64 6f 5f 74 65 73 74 20 24 54 2e 34 2e 31 20 7b  do_test $T.4.1 {
2560: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
2570: 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
2580: 20 66 74 20 56 41 4c 55 45 53 28 0a 20 20 20 20   ft VALUES(.    
2590: 20 20 20 20 20 20 20 27 6f 6e 65 20 74 77 6f 20         'one two 
25a0: 74 68 72 65 65 20 66 6f 75 72 20 66 69 76 65 20  three four five 
25b0: 27 0a 20 20 20 20 20 20 20 20 7c 7c 20 27 73 69  '.        || 'si
25c0: 78 20 73 65 76 65 6e 20 65 69 67 68 74 20 6e 69  x seven eight ni
25d0: 6e 65 20 74 65 6e 20 27 0a 20 20 20 20 20 20 20  ne ten '.       
25e0: 20 7c 7c 20 27 65 6c 65 76 65 6e 20 74 77 65 6c   || 'eleven twel
25f0: 76 65 20 74 68 69 72 74 65 65 6e 20 66 6f 75 72  ve thirteen four
2600: 74 65 65 6e 20 66 69 66 74 65 65 6e 20 27 0a 20  teen fifteen '. 
2610: 20 20 20 20 20 20 20 7c 7c 20 27 73 69 78 74 65         || 'sixte
2620: 65 6e 20 73 65 76 65 6e 74 65 65 6e 20 65 69 67  en seventeen eig
2630: 68 74 65 65 6e 20 6e 69 6e 65 74 65 65 6e 20 74  hteen nineteen t
2640: 77 65 6e 74 79 20 27 0a 20 20 20 20 20 20 20 20  wenty '.        
2650: 7c 7c 20 27 6f 6e 65 20 74 77 6f 20 74 68 72 65  || 'one two thre
2660: 65 20 66 6f 75 72 20 66 69 76 65 20 27 0a 20 20  e four five '.  
2670: 20 20 20 20 20 20 7c 7c 20 27 73 69 78 20 73 65        || 'six se
2680: 76 65 6e 20 65 69 67 68 74 20 6e 69 6e 65 20 74  ven eight nine t
2690: 65 6e 20 27 0a 20 20 20 20 20 20 20 20 7c 7c 20  en '.        || 
26a0: 27 65 6c 65 76 65 6e 20 74 77 65 6c 76 65 20 74  'eleven twelve t
26b0: 68 69 72 74 65 65 6e 20 66 6f 75 72 74 65 65 6e  hirteen fourteen
26c0: 20 66 69 66 74 65 65 6e 20 27 0a 20 20 20 20 20   fifteen '.     
26d0: 20 20 20 7c 7c 20 27 73 69 78 74 65 65 6e 20 73     || 'sixteen s
26e0: 65 76 65 6e 74 65 65 6e 20 65 69 67 68 74 65 65  eventeen eightee
26f0: 6e 20 6e 69 6e 65 74 65 65 6e 20 74 77 65 6e 74  n nineteen twent
2700: 79 27 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  y'.      );.    
2710: 7d 0a 20 20 7d 20 7b 7d 0a 20 20 0a 20 20 64 6f  }.  } {}.  .  do
2720: 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54  _snippet_test $T
2730: 2e 34 2e 32 20 7b 6f 6e 65 20 6e 69 6e 65 7d 20  .4.2 {one nine} 
2740: 30 20 35 20 7b 0a 20 20 20 20 20 7b 6f 6e 65 7d  0 5 {.     {one}
2750: 20 74 77 6f 20 74 68 72 65 65 2e 2e 2e 65 69 67   two three...eig
2760: 68 74 20 7b 6e 69 6e 65 7d 20 74 65 6e 0a 20 20  ht {nine} ten.  
2770: 7d 20 7b 0a 20 20 20 20 20 7b 6f 6e 65 7d 20 74  } {.     {one} t
2780: 77 6f 20 74 68 72 65 65 2e 2e 2e 65 69 67 68 74  wo three...eight
2790: 20 7b 6e 69 6e 65 7d 20 74 65 6e 2e 2e 2e 0a 20   {nine} ten.... 
27a0: 20 7d 0a 20 20 0a 20 20 64 6f 5f 73 6e 69 70 70   }.  .  do_snipp
27b0: 65 74 5f 74 65 73 74 20 24 54 2e 34 2e 33 20 7b  et_test $T.4.3 {
27c0: 6f 6e 65 20 6e 69 6e 65 7d 20 30 20 2d 35 20 7b  one nine} 0 -5 {
27d0: 0a 20 20 20 20 20 7b 6f 6e 65 7d 20 74 77 6f 20  .     {one} two 
27e0: 74 68 72 65 65 20 66 6f 75 72 20 66 69 76 65 2e  three four five.
27f0: 2e 2e 73 69 78 20 73 65 76 65 6e 20 65 69 67 68  ..six seven eigh
2800: 74 20 7b 6e 69 6e 65 7d 20 74 65 6e 0a 20 20 7d  t {nine} ten.  }
2810: 20 7b 0a 20 20 20 20 20 7b 6f 6e 65 7d 20 74 77   {.     {one} tw
2820: 6f 20 74 68 72 65 65 20 66 6f 75 72 20 66 69 76  o three four fiv
2830: 65 2e 2e 2e 73 65 76 65 6e 20 65 69 67 68 74 20  e...seven eight 
2840: 7b 6e 69 6e 65 7d 20 74 65 6e 20 65 6c 65 76 65  {nine} ten eleve
2850: 6e 2e 2e 2e 0a 20 20 7d 0a 20 20 64 6f 5f 73 6e  n....  }.  do_sn
2860: 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e 34 2e  ippet_test $T.4.
2870: 33 20 7b 6f 6e 65 20 6e 69 6e 65 74 65 65 6e 7d  3 {one nineteen}
2880: 20 30 20 2d 35 20 7b 0a 20 20 20 20 20 2e 2e 2e   0 -5 {.     ...
2890: 65 69 67 68 74 65 65 6e 20 7b 6e 69 6e 65 74 65  eighteen {ninete
28a0: 65 6e 7d 20 74 77 65 6e 74 79 20 7b 6f 6e 65 7d  en} twenty {one}
28b0: 20 74 77 6f 2e 2e 2e 0a 20 20 7d 0a 20 20 64 6f   two....  }.  do
28c0: 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54  _snippet_test $T
28d0: 2e 34 2e 34 20 7b 74 77 6f 20 6e 69 6e 65 74 65  .4.4 {two ninete
28e0: 65 6e 7d 20 30 20 2d 35 20 7b 0a 20 20 20 20 20  en} 0 -5 {.     
28f0: 2e 2e 2e 65 69 67 68 74 65 65 6e 20 7b 6e 69 6e  ...eighteen {nin
2900: 65 74 65 65 6e 7d 20 74 77 65 6e 74 79 20 6f 6e  eteen} twenty on
2910: 65 20 7b 74 77 6f 7d 2e 2e 2e 0a 20 20 7d 0a 20  e {two}....  }. 
2920: 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74   do_snippet_test
2930: 20 24 54 2e 34 2e 35 20 7b 74 68 72 65 65 20 6e   $T.4.5 {three n
2940: 69 6e 65 74 65 65 6e 7d 20 30 20 2d 35 20 7b 0a  ineteen} 0 -5 {.
2950: 20 20 20 20 20 2e 2e 2e 7b 6e 69 6e 65 74 65 65       ...{ninetee
2960: 6e 7d 20 74 77 65 6e 74 79 20 6f 6e 65 20 74 77  n} twenty one tw
2970: 6f 20 7b 74 68 72 65 65 7d 2e 2e 2e 0a 20 20 7d  o {three}....  }
2980: 0a 20 20 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74  .  .  do_snippet
2990: 5f 74 65 73 74 20 24 54 2e 34 2e 36 20 7b 66 6f  _test $T.4.6 {fo
29a0: 75 72 20 6e 69 6e 65 74 65 65 6e 7d 20 30 20 2d  ur nineteen} 0 -
29b0: 35 20 7b 0a 20 20 20 20 20 2e 2e 2e 74 77 6f 20  5 {.     ...two 
29c0: 74 68 72 65 65 20 7b 66 6f 75 72 7d 20 66 69 76  three {four} fiv
29d0: 65 20 73 69 78 2e 2e 2e 73 65 76 65 6e 74 65 65  e six...seventee
29e0: 6e 20 65 69 67 68 74 65 65 6e 20 7b 6e 69 6e 65  n eighteen {nine
29f0: 74 65 65 6e 7d 20 74 77 65 6e 74 79 20 6f 6e 65  teen} twenty one
2a00: 2e 2e 2e 0a 20 20 7d 0a 20 20 64 6f 5f 73 6e 69  ....  }.  do_sni
2a10: 70 70 65 74 5f 74 65 73 74 20 24 54 2e 34 2e 37  ppet_test $T.4.7
2a20: 20 7b 66 6f 75 72 20 4e 45 41 52 20 6e 69 6e 65   {four NEAR nine
2a30: 74 65 65 6e 7d 20 30 20 2d 35 20 7b 0a 20 20 20  teen} 0 -5 {.   
2a40: 20 20 2e 2e 2e 73 65 76 65 6e 74 65 65 6e 20 65    ...seventeen e
2a50: 69 67 68 74 65 65 6e 20 7b 6e 69 6e 65 74 65 65  ighteen {ninetee
2a60: 6e 7d 20 74 77 65 6e 74 79 20 6f 6e 65 2e 2e 2e  n} twenty one...
2a70: 74 77 6f 20 74 68 72 65 65 20 7b 66 6f 75 72 7d  two three {four}
2a80: 20 66 69 76 65 20 73 69 78 2e 2e 2e 0a 20 20 7d   five six....  }
2a90: 0a 20 20 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74  .  .  do_snippet
2aa0: 5f 74 65 73 74 20 24 54 2e 34 2e 38 20 7b 66 6f  _test $T.4.8 {fo
2ab0: 75 72 20 6e 69 6e 65 74 65 65 6e 7d 20 30 20 35  ur nineteen} 0 5
2ac0: 20 7b 0a 20 20 20 20 20 2e 2e 2e 74 68 72 65 65   {.     ...three
2ad0: 20 7b 66 6f 75 72 7d 20 66 69 76 65 2e 2e 2e 65   {four} five...e
2ae0: 69 67 68 74 65 65 6e 20 7b 6e 69 6e 65 74 65 65  ighteen {ninetee
2af0: 6e 7d 20 74 77 65 6e 74 79 2e 2e 2e 0a 20 20 7d  n} twenty....  }
2b00: 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65  .  do_snippet_te
2b10: 73 74 20 24 54 2e 34 2e 39 20 7b 66 6f 75 72 20  st $T.4.9 {four 
2b20: 4e 45 41 52 20 6e 69 6e 65 74 65 65 6e 7d 20 30  NEAR nineteen} 0
2b30: 20 35 20 7b 0a 20 20 20 20 20 2e 2e 2e 65 69 67   5 {.     ...eig
2b40: 68 74 65 65 6e 20 7b 6e 69 6e 65 74 65 65 6e 7d  hteen {nineteen}
2b50: 20 74 77 65 6e 74 79 2e 2e 2e 74 68 72 65 65 20   twenty...three 
2b60: 7b 66 6f 75 72 7d 20 66 69 76 65 2e 2e 2e 0a 20  {four} five.... 
2b70: 20 7d 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f   }.  do_snippet_
2b80: 74 65 73 74 20 24 54 2e 34 2e 31 30 20 7b 66 6f  test $T.4.10 {fo
2b90: 75 72 20 4e 45 41 52 20 6e 69 6e 65 74 65 65 6e  ur NEAR nineteen
2ba0: 7d 20 30 20 2d 35 20 7b 0a 20 20 20 20 20 2e 2e  } 0 -5 {.     ..
2bb0: 2e 73 65 76 65 6e 74 65 65 6e 20 65 69 67 68 74  .seventeen eight
2bc0: 65 65 6e 20 7b 6e 69 6e 65 74 65 65 6e 7d 20 74  een {nineteen} t
2bd0: 77 65 6e 74 79 20 6f 6e 65 2e 2e 2e 74 77 6f 20  wenty one...two 
2be0: 74 68 72 65 65 20 7b 66 6f 75 72 7d 20 66 69 76  three {four} fiv
2bf0: 65 20 73 69 78 2e 2e 2e 0a 20 20 7d 0a 20 20 64  e six....  }.  d
2c00: 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24  o_snippet_test $
2c10: 54 2e 34 2e 31 31 20 7b 66 6f 75 72 20 4e 4f 54  T.4.11 {four NOT
2c20: 20 28 6e 69 6e 65 74 65 65 6e 20 74 77 65 6e 74   (nineteen twent
2c30: 79 6f 6e 65 29 7d 20 30 20 35 20 7b 0a 20 20 20  yone)} 0 5 {.   
2c40: 20 20 2e 2e 2e 74 77 6f 20 74 68 72 65 65 20 7b    ...two three {
2c50: 66 6f 75 72 7d 20 66 69 76 65 20 73 69 78 2e 2e  four} five six..
2c60: 2e 0a 20 20 7d 20 7b 0a 20 20 20 20 20 2e 2e 2e  ..  } {.     ...
2c70: 74 77 6f 20 74 68 72 65 65 20 7b 66 6f 75 72 7d  two three {four}
2c80: 20 66 69 76 65 20 73 69 78 2e 2e 2e 0a 20 20 7d   five six....  }
2c90: 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65  .  do_snippet_te
2ca0: 73 74 20 24 54 2e 34 2e 31 32 20 7b 66 6f 75 72  st $T.4.12 {four
2cb0: 20 4f 52 20 6e 69 6e 65 74 65 65 6e 20 4e 45 41   OR nineteen NEA
2cc0: 52 20 74 77 65 6e 74 79 6f 6e 65 7d 20 30 20 35  R twentyone} 0 5
2cd0: 20 7b 0a 20 20 20 20 20 2e 2e 2e 74 77 6f 20 74   {.     ...two t
2ce0: 68 72 65 65 20 7b 66 6f 75 72 7d 20 66 69 76 65  hree {four} five
2cf0: 20 73 69 78 2e 2e 2e 0a 20 20 7d 20 7b 0a 20 20   six....  } {.  
2d00: 20 20 20 2e 2e 2e 74 77 6f 20 74 68 72 65 65 20     ...two three 
2d10: 7b 66 6f 75 72 7d 20 66 69 76 65 20 73 69 78 2e  {four} five six.
2d20: 2e 2e 0a 20 20 7d 0a 20 20 0a 20 20 64 6f 5f 74  ...  }.  .  do_t
2d30: 65 73 74 20 24 54 2e 35 2e 31 20 7b 0a 20 20 20  est $T.5.1 {.   
2d40: 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20   execsql {.     
2d50: 20 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45   DROP TABLE IF E
2d60: 58 49 53 54 53 20 66 74 3b 0a 20 20 20 20 20 20  XISTS ft;.      
2d70: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
2d80: 41 42 4c 45 20 66 74 20 55 53 49 4e 47 20 66 74  ABLE ft USING ft
2d90: 73 33 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20  s3(a, b, c);.   
2da0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66     INSERT INTO f
2db0: 74 20 56 41 4c 55 45 53 28 0a 20 20 20 20 20 20  t VALUES(.      
2dc0: 20 20 27 6f 6e 65 20 74 77 6f 20 74 68 72 65 65    'one two three
2dd0: 20 66 6f 75 72 20 66 69 76 65 27 2c 20 0a 20 20   four five', .  
2de0: 20 20 20 20 20 20 27 66 6f 75 72 20 66 69 76 65        'four five
2df0: 20 73 69 78 20 73 65 76 65 6e 20 65 69 67 68 74   six seven eight
2e00: 27 2c 20 0a 20 20 20 20 20 20 20 20 27 73 65 76  ', .        'sev
2e10: 65 6e 20 65 69 67 68 74 20 6e 69 6e 65 20 74 65  en eight nine te
2e20: 6e 20 65 6c 65 76 65 6e 27 0a 20 20 20 20 20 20  n eleven'.      
2e30: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a  );.    }.  } {}.
2e40: 20 20 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f    .  do_snippet_
2e50: 74 65 73 74 20 24 54 2e 35 2e 32 20 7b 66 69 76  test $T.5.2 {fiv
2e60: 65 7d 20 2d 31 20 33 20 7b 2e 2e 2e 74 68 72 65  e} -1 3 {...thre
2e70: 65 20 66 6f 75 72 20 7b 66 69 76 65 7d 7d 0a 20  e four {five}}. 
2e80: 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74   do_snippet_test
2e90: 20 24 54 2e 35 2e 33 20 7b 66 69 76 65 7d 20 20   $T.5.3 {five}  
2ea0: 30 20 33 20 7b 2e 2e 2e 74 68 72 65 65 20 66 6f  0 3 {...three fo
2eb0: 75 72 20 7b 66 69 76 65 7d 7d 0a 20 20 64 6f 5f  ur {five}}.  do_
2ec0: 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e  snippet_test $T.
2ed0: 35 2e 34 20 7b 66 69 76 65 7d 20 20 31 20 33 20  5.4 {five}  1 3 
2ee0: 7b 66 6f 75 72 20 7b 66 69 76 65 7d 20 73 69 78  {four {five} six
2ef0: 2e 2e 2e 7d 0a 20 20 64 6f 5f 73 6e 69 70 70 65  ...}.  do_snippe
2f00: 74 5f 74 65 73 74 20 24 54 2e 35 2e 35 20 7b 66  t_test $T.5.5 {f
2f10: 69 76 65 7d 20 20 32 20 33 20 7b 73 65 76 65 6e  ive}  2 3 {seven
2f20: 20 65 69 67 68 74 20 6e 69 6e 65 2e 2e 2e 7d 0a   eight nine...}.
2f30: 20 20 0a 20 20 64 6f 5f 74 65 73 74 20 24 54 2e    .  do_test $T.
2f40: 35 2e 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71  5.6 {.    execsq
2f50: 6c 20 7b 20 55 50 44 41 54 45 20 66 74 20 53 45  l { UPDATE ft SE
2f60: 54 20 62 20 3d 20 4e 55 4c 4c 20 7d 0a 20 20 7d  T b = NULL }.  }
2f70: 20 7b 7d 0a 20 20 0a 20 20 64 6f 5f 73 6e 69 70   {}.  .  do_snip
2f80: 70 65 74 5f 74 65 73 74 20 24 54 2e 35 2e 37 20  pet_test $T.5.7 
2f90: 20 7b 66 69 76 65 7d 20 2d 31 20 33 20 7b 2e 2e   {five} -1 3 {..
2fa0: 2e 74 68 72 65 65 20 66 6f 75 72 20 7b 66 69 76  .three four {fiv
2fb0: 65 7d 7d 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74  e}}.  do_snippet
2fc0: 5f 74 65 73 74 20 24 54 2e 35 2e 38 20 20 7b 66  _test $T.5.8  {f
2fd0: 69 76 65 7d 20 20 30 20 33 20 7b 2e 2e 2e 74 68  ive}  0 3 {...th
2fe0: 72 65 65 20 66 6f 75 72 20 7b 66 69 76 65 7d 7d  ree four {five}}
2ff0: 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65  .  do_snippet_te
3000: 73 74 20 24 54 2e 35 2e 39 20 20 7b 66 69 76 65  st $T.5.9  {five
3010: 7d 20 20 31 20 33 20 7b 7d 0a 20 20 64 6f 5f 73  }  1 3 {}.  do_s
3020: 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e 35  nippet_test $T.5
3030: 2e 31 30 20 7b 66 69 76 65 7d 20 20 32 20 33 20  .10 {five}  2 3 
3040: 7b 73 65 76 65 6e 20 65 69 67 68 74 20 6e 69 6e  {seven eight nin
3050: 65 2e 2e 2e 7d 0a 20 20 0a 20 20 64 6f 5f 73 6e  e...}.  .  do_sn
3060: 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e 35 2e  ippet_test $T.5.
3070: 31 31 20 7b 6f 6e 65 20 22 73 65 76 65 6e 20 65  11 {one "seven e
3080: 69 67 68 74 20 6e 69 6e 65 22 7d 20 2d 31 20 2d  ight nine"} -1 -
3090: 33 20 7b 0a 20 20 20 20 7b 6f 6e 65 7d 20 74 77  3 {.    {one} tw
30a0: 6f 20 74 68 72 65 65 2e 2e 2e 7b 73 65 76 65 6e  o three...{seven
30b0: 7d 20 7b 65 69 67 68 74 7d 20 7b 6e 69 6e 65 7d  } {eight} {nine}
30c0: 2e 2e 2e 0a 20 20 7d 0a 0a 20 20 64 6f 5f 74 65  ....  }..  do_te
30d0: 73 74 20 24 54 2e 36 2e 31 20 7b 0a 20 20 20 20  st $T.6.1 {.    
30e0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
30f0: 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58  DROP TABLE IF EX
3100: 49 53 54 53 20 66 74 3b 0a 20 20 20 20 20 20 43  ISTS ft;.      C
3110: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
3120: 42 4c 45 20 66 74 20 55 53 49 4e 47 20 66 74 73  BLE ft USING fts
3130: 33 28 78 29 3b 0a 20 20 20 20 20 20 49 4e 53 45  3(x);.      INSE
3140: 52 54 20 49 4e 54 4f 20 66 74 20 56 41 4c 55 45  RT INTO ft VALUE
3150: 53 28 24 6e 75 6d 62 65 72 73 29 3b 0a 20 20 20  S($numbers);.   
3160: 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 73   }.  } {}.  do_s
3170: 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e 36  nippet_test $T.6
3180: 2e 32 20 7b 0a 20 20 20 20 6f 6e 65 20 66 69 66  .2 {.    one fif
3190: 74 79 20 6f 6e 65 68 75 6e 64 72 65 64 20 6f 6e  ty onehundred on
31a0: 65 68 75 6e 64 72 65 64 66 69 66 74 79 20 74 77  ehundredfifty tw
31b0: 6f 68 75 6e 64 72 65 64 66 69 66 74 79 20 74 68  ohundredfifty th
31c0: 72 65 65 68 75 6e 64 72 65 64 0a 20 20 7d 20 2d  reehundred.  } -
31d0: 31 20 34 20 7b 0a 20 20 20 20 7b 6f 6e 65 7d 2e  1 4 {.    {one}.
31e0: 2e 2e 7b 66 69 66 74 79 7d 2e 2e 2e 7b 6f 6e 65  ..{fifty}...{one
31f0: 68 75 6e 64 72 65 64 7d 2e 2e 2e 7b 6f 6e 65 68  hundred}...{oneh
3200: 75 6e 64 72 65 64 66 69 66 74 79 7d 2e 2e 2e 0a  undredfifty}....
3210: 20 20 7d 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74    }.  do_snippet
3220: 5f 74 65 73 74 20 24 54 2e 36 2e 33 20 7b 0a 20  _test $T.6.3 {. 
3230: 20 20 20 6f 6e 65 20 66 69 66 74 79 20 6f 6e 65     one fifty one
3240: 68 75 6e 64 72 65 64 20 6f 6e 65 68 75 6e 64 72  hundred onehundr
3250: 65 64 66 69 66 74 79 20 74 77 6f 68 75 6e 64 72  edfifty twohundr
3260: 65 64 66 69 66 74 79 20 74 68 72 65 65 68 75 6e  edfifty threehun
3270: 64 72 65 64 0a 20 20 7d 20 2d 31 20 2d 34 20 7b  dred.  } -1 -4 {
3280: 0a 20 20 20 20 7b 6f 6e 65 7d 20 74 77 6f 20 74  .    {one} two t
3290: 68 72 65 65 20 66 6f 75 72 2e 2e 2e 66 6f 72 74  hree four...fort
32a0: 79 65 69 67 68 74 20 66 6f 72 74 79 6e 69 6e 65  yeight fortynine
32b0: 20 7b 66 69 66 74 79 7d 20 66 69 66 74 79 6f 6e   {fifty} fiftyon
32c0: 65 2e 2e 2e 6e 69 6e 65 74 79 65 69 67 68 74 20  e...ninetyeight 
32d0: 6e 69 6e 65 74 79 6e 69 6e 65 20 7b 6f 6e 65 68  ninetynine {oneh
32e0: 75 6e 64 72 65 64 7d 20 6f 6e 65 68 75 6e 64 72  undred} onehundr
32f0: 65 64 6f 6e 65 2e 2e 2e 6f 6e 65 68 75 6e 64 72  edone...onehundr
3300: 65 64 66 6f 72 74 79 65 69 67 68 74 20 6f 6e 65  edfortyeight one
3310: 68 75 6e 64 72 65 64 66 6f 72 74 79 6e 69 6e 65  hundredfortynine
3320: 20 7b 6f 6e 65 68 75 6e 64 72 65 64 66 69 66 74   {onehundredfift
3330: 79 7d 20 6f 6e 65 68 75 6e 64 72 65 64 66 69 66  y} onehundredfif
3340: 74 79 6f 6e 65 2e 2e 2e 0a 20 20 7d 0a 0a 20 20  tyone....  }..  
3350: 64 6f 5f 74 65 73 74 20 24 54 2e 37 2e 31 20 7b  do_test $T.7.1 {
3360: 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20  .    execsql {. 
3370: 20 20 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20       BEGIN;.    
3380: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49      DROP TABLE I
3390: 46 20 45 58 49 53 54 53 20 66 74 3b 0a 20 20 20  F EXISTS ft;.   
33a0: 20 20 20 20 20 43 52 45 41 54 45 20 56 49 52 54       CREATE VIRT
33b0: 55 41 4c 20 54 41 42 4c 45 20 66 74 20 55 53 49  UAL TABLE ft USI
33c0: 4e 47 20 66 74 73 33 28 78 29 3b 0a 20 20 20 20  NG fts3(x);.    
33d0: 7d 0a 20 20 20 20 73 65 74 20 74 65 73 74 72 65  }.    set testre
33e0: 73 75 6c 74 73 20 5b 6c 69 73 74 5d 0a 20 20 20  sults [list].   
33f0: 20 66 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b   for {set i 1} {
3400: 24 69 20 3c 20 31 35 30 7d 20 7b 69 6e 63 72 20  $i < 150} {incr 
3410: 69 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63  i} {.      set c
3420: 6f 6d 6d 61 73 20 5b 73 74 72 69 6e 67 20 72 65  ommas [string re
3430: 70 65 61 74 20 2c 20 24 69 5d 0a 20 20 20 20 20  peat , $i].     
3440: 20 65 78 65 63 73 71 6c 20 7b 49 4e 53 45 52 54   execsql {INSERT
3450: 20 49 4e 54 4f 20 66 74 20 56 41 4c 55 45 53 28   INTO ft VALUES(
3460: 27 6f 6e 65 27 20 7c 7c 20 24 63 6f 6d 6d 61 73  'one' || $commas
3470: 20 7c 7c 20 27 74 77 6f 27 29 7d 0a 20 20 20 20   || 'two')}.    
3480: 20 20 6c 61 70 70 65 6e 64 20 74 65 73 74 72 65    lappend testre
3490: 73 75 6c 74 73 20 22 7b 6f 6e 65 7d 24 63 6f 6d  sults "{one}$com
34a0: 6d 61 73 7b 74 77 6f 7d 22 0a 20 20 20 20 7d 0a  mas{two}".    }.
34b0: 20 20 20 20 65 78 65 63 73 71 6c 20 43 4f 4d 4d      execsql COMM
34c0: 49 54 0a 20 20 7d 20 7b 7d 0a 20 20 65 76 61 6c  IT.  } {}.  eval
34d0: 20 5b 6c 69 73 74 20 64 6f 5f 73 6e 69 70 70 65   [list do_snippe
34e0: 74 5f 74 65 73 74 20 24 54 2e 37 2e 32 20 7b 6f  t_test $T.7.2 {o
34f0: 6e 65 20 74 77 6f 7d 20 2d 31 20 33 5d 20 24 74  ne two} -1 3] $t
3500: 65 73 74 72 65 73 75 6c 74 73 0a 20 20 0a 20 20  estresults.  .  
3510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3520: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3530: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3540: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3550: 23 23 23 23 23 23 23 23 23 23 0a 20 20 23 20 54  ##########.  # T
3560: 65 73 74 20 74 68 65 20 6d 61 74 63 68 69 6e 66  est the matchinf
3570: 6f 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 23 0a  o function..  #.
3580: 20 20 70 72 6f 63 20 6d 69 74 20 7b 62 6c 6f 62    proc mit {blob
3590: 7d 20 7b 0a 20 20 20 20 73 65 74 20 73 63 61 6e  } {.    set scan
35a0: 28 6c 69 74 74 6c 65 45 6e 64 69 61 6e 29 20 69  (littleEndian) i
35b0: 2a 0a 20 20 20 20 73 65 74 20 73 63 61 6e 28 62  *.    set scan(b
35c0: 69 67 45 6e 64 69 61 6e 29 20 49 2a 0a 20 20 20  igEndian) I*.   
35d0: 20 62 69 6e 61 72 79 20 73 63 61 6e 20 24 62 6c   binary scan $bl
35e0: 6f 62 20 24 73 63 61 6e 28 24 3a 3a 74 63 6c 5f  ob $scan($::tcl_
35f0: 70 6c 61 74 66 6f 72 6d 28 62 79 74 65 4f 72 64  platform(byteOrd
3600: 65 72 29 29 20 72 0a 20 20 20 20 72 65 74 75 72  er)) r.    retur
3610: 6e 20 24 72 0a 20 20 7d 0a 20 20 64 62 20 66 75  n $r.  }.  db fu
3620: 6e 63 20 6d 69 74 20 6d 69 74 0a 20 20 70 72 6f  nc mit mit.  pro
3630: 63 20 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74  c do_matchinfo_t
3640: 65 73 74 20 7b 6e 61 6d 65 20 65 78 70 72 20 61  est {name expr a
3650: 72 67 73 7d 20 7b 0a 20 20 20 20 73 65 74 20 72  rgs} {.    set r
3660: 65 73 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f  es [list].    fo
3670: 72 65 61 63 68 20 61 20 24 61 72 67 73 20 7b 20  reach a $args { 
3680: 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 6e 6f 72  lappend res [nor
3690: 6d 61 6c 69 7a 65 20 24 61 5d 20 7d 0a 20 20 20  malize $a] }.   
36a0: 20 64 6f 5f 73 65 6c 65 63 74 5f 74 65 73 74 20   do_select_test 
36b0: 24 6e 61 6d 65 20 7b 0a 20 20 20 20 20 20 53 45  $name {.      SE
36c0: 4c 45 43 54 20 6d 69 74 28 6d 61 74 63 68 69 6e  LECT mit(matchin
36d0: 66 6f 28 66 74 29 29 20 46 52 4f 4d 20 66 74 20  fo(ft)) FROM ft 
36e0: 57 48 45 52 45 20 66 74 20 4d 41 54 43 48 20 24  WHERE ft MATCH $
36f0: 65 78 70 72 0a 20 20 20 20 7d 20 24 72 65 73 0a  expr.    } $res.
3700: 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20 24 54    }.  do_test $T
3710: 2e 38 2e 31 20 7b 0a 20 20 20 20 73 65 74 20 74  .8.1 {.    set t
3720: 65 6e 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65  en {one two thre
3730: 65 20 66 6f 75 72 20 66 69 76 65 20 73 69 78 20  e four five six 
3740: 73 65 76 65 6e 20 65 69 67 68 74 20 6e 69 6e 65  seven eight nine
3750: 20 74 65 6e 7d 0a 20 20 20 20 65 78 65 63 73 71   ten}.    execsq
3760: 6c 20 7b 0a 20 20 20 20 20 20 44 52 4f 50 20 54  l {.      DROP T
3770: 41 42 4c 45 20 49 46 20 45 58 49 53 54 53 20 66  ABLE IF EXISTS f
3780: 74 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45 20  t;.      CREATE 
3790: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 66 74  VIRTUAL TABLE ft
37a0: 20 55 53 49 4e 47 20 66 74 73 33 3b 0a 20 20 20   USING fts3;.   
37b0: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66     INSERT INTO f
37c0: 74 20 56 41 4c 55 45 53 28 24 74 65 6e 29 3b 0a  t VALUES($ten);.
37d0: 20 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54        INSERT INT
37e0: 4f 20 66 74 20 56 41 4c 55 45 53 28 24 74 65 6e  O ft VALUES($ten
37f0: 20 7c 7c 20 27 20 27 20 7c 7c 20 24 74 65 6e 29   || ' ' || $ten)
3800: 3b 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20  ;.    }.  } {}. 
3810: 20 0a 20 20 64 6f 5f 6d 61 74 63 68 69 6e 66 6f   .  do_matchinfo
3820: 5f 74 65 73 74 20 24 54 2e 38 2e 32 20 22 6f 6e  _test $T.8.2 "on
3830: 65 22 20 7b 31 20 31 20 20 31 20 33 20 32 7d 20  e" {1 1  1 3 2} 
3840: 7b 31 20 31 20 20 32 20 33 20 32 7d 0a 20 20 64  {1 1  2 3 2}.  d
3850: 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73 74  o_matchinfo_test
3860: 20 24 54 2e 38 2e 33 20 22 6f 6e 65 20 4e 45 41   $T.8.3 "one NEA
3870: 52 2f 33 20 74 65 6e 22 20 7b 32 20 31 20 20 31  R/3 ten" {2 1  1
3880: 20 31 20 31 20 31 20 31 20 31 7d 0a 20 20 64 6f   1 1 1 1 1}.  do
3890: 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73 74 20  _matchinfo_test 
38a0: 24 54 2e 38 2e 34 20 22 66 69 76 65 20 4e 45 41  $T.8.4 "five NEA
38b0: 52 2f 34 20 74 65 6e 22 20 5c 0a 20 20 20 20 7b  R/4 ten" \.    {
38c0: 32 20 31 20 20 31 20 33 20 32 20 20 31 20 33 20  2 1  1 3 2  1 3 
38d0: 32 7d 20 7b 32 20 31 20 20 32 20 33 20 32 20 20  2} {2 1  2 3 2  
38e0: 32 20 33 20 32 7d 0a 20 20 64 6f 5f 6d 61 74 63  2 3 2}.  do_matc
38f0: 68 69 6e 66 6f 5f 74 65 73 74 20 24 54 2e 38 2e  hinfo_test $T.8.
3900: 35 20 22 73 69 78 20 4e 45 41 52 2f 33 20 74 65  5 "six NEAR/3 te
3910: 6e 20 4e 45 41 52 2f 33 20 74 77 6f 22 20 5c 0a  n NEAR/3 two" \.
3920: 20 20 20 20 7b 33 20 31 20 20 31 20 31 20 31 20      {3 1  1 1 1 
3930: 20 31 20 31 20 31 20 20 31 20 31 20 31 7d 0a 20   1 1 1  1 1 1}. 
3940: 20 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65   do_matchinfo_te
3950: 73 74 20 24 54 2e 38 2e 36 20 22 66 69 76 65 20  st $T.8.6 "five 
3960: 4e 45 41 52 2f 34 20 74 65 6e 20 4e 45 41 52 2f  NEAR/4 ten NEAR/
3970: 33 20 74 77 6f 22 20 5c 0a 20 20 20 20 7b 33 20  3 two" \.    {3 
3980: 31 20 20 32 20 32 20 31 20 20 31 20 31 20 31 20  1  2 2 1  1 1 1 
3990: 20 31 20 31 20 31 7d 0a 0a 20 20 64 6f 5f 74 65   1 1 1}..  do_te
39a0: 73 74 20 24 54 2e 39 2e 31 20 7b 0a 20 20 20 20  st $T.9.1 {.    
39b0: 65 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20  execsql {.      
39c0: 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58  DROP TABLE IF EX
39d0: 49 53 54 53 20 66 74 3b 0a 20 20 20 20 20 20 43  ISTS ft;.      C
39e0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
39f0: 42 4c 45 20 66 74 20 55 53 49 4e 47 20 66 74 73  BLE ft USING fts
3a00: 33 28 78 2c 20 79 29 3b 0a 20 20 20 20 7d 0a 20  3(x, y);.    }. 
3a10: 20 20 20 66 6f 72 65 61 63 68 20 6e 20 7b 31 20     foreach n {1 
3a20: 32 20 33 7d 20 7b 0a 20 20 20 20 20 20 73 65 74  2 3} {.      set
3a30: 20 76 31 20 5b 6c 72 61 6e 67 65 20 24 6e 75 6d   v1 [lrange $num
3a40: 62 65 72 73 20 30 20 5b 65 78 70 72 20 24 6e 2a  bers 0 [expr $n*
3a50: 31 30 30 5d 5d 0a 20 20 20 20 20 20 73 65 74 20  100]].      set 
3a60: 76 32 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20  v2 [string trim 
3a70: 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74 20 22  [string repeat "
3a80: 24 6e 75 6d 62 65 72 73 20 22 20 24 6e 5d 5d 0a  $numbers " $n]].
3a90: 20 20 20 20 20 20 73 65 74 20 64 6f 63 69 64 20        set docid 
3aa0: 5b 65 78 70 72 20 24 6e 20 2a 20 31 30 30 30 30  [expr $n * 10000
3ab0: 30 30 5d 0a 20 20 20 20 20 20 65 78 65 63 73 71  00].      execsq
3ac0: 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  l { INSERT INTO 
3ad0: 66 74 28 64 6f 63 69 64 2c 20 78 2c 20 79 29 20  ft(docid, x, y) 
3ae0: 56 41 4c 55 45 53 28 24 64 6f 63 69 64 2c 20 24  VALUES($docid, $
3af0: 76 31 2c 20 24 76 32 29 20 7d 0a 20 20 20 20 7d  v1, $v2) }.    }
3b00: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 6d 61 74  .  } {}.  do_mat
3b10: 63 68 69 6e 66 6f 5f 74 65 73 74 20 24 54 2e 39  chinfo_test $T.9
3b20: 2e 32 20 7b 74 77 6f 2a 7d 20 20 20 20 20 5c 0a  .2 {two*}     \.
3b30: 20 20 20 20 7b 20 31 20 32 20 20 20 20 31 20 20      { 1 2    1  
3b40: 20 31 30 35 20 33 20 20 20 31 30 31 20 36 30 36   105 3   101 606
3b50: 20 33 7d 20 20 20 5c 0a 20 20 20 20 7b 20 31 20   3}   \.    { 1 
3b60: 32 20 20 20 20 33 20 20 20 31 30 35 20 33 20 20  2    3   105 3  
3b70: 20 32 30 32 20 36 30 36 20 33 7d 20 20 20 5c 0a   202 606 3}   \.
3b80: 20 20 20 20 7b 20 31 20 32 20 20 20 20 31 30 31      { 1 2    101
3b90: 20 31 30 35 20 33 20 20 20 33 30 33 20 36 30 36   105 3   303 606
3ba0: 20 33 7d 0a 0a 20 20 64 6f 5f 6d 61 74 63 68 69   3}..  do_matchi
3bb0: 6e 66 6f 5f 74 65 73 74 20 24 54 2e 39 2e 34 20  nfo_test $T.9.4 
3bc0: 7b 22 6f 6e 65 2a 20 74 77 6f 2a 22 7d 20 20 5c  {"one* two*"}  \
3bd0: 0a 20 20 20 20 7b 20 31 20 32 20 20 20 20 31 20  .    { 1 2    1 
3be0: 35 20 33 20 20 20 32 20 31 32 20 33 7d 20 20 20  5 3   2 12 3}   
3bf0: 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20             \.   
3c00: 20 7b 20 31 20 32 20 20 20 20 32 20 35 20 33 20   { 1 2    2 5 3 
3c10: 20 20 34 20 31 32 20 33 7d 20 20 20 20 20 20 20    4 12 3}       
3c20: 20 20 20 20 20 20 20 5c 0a 20 20 20 20 7b 20 31         \.    { 1
3c30: 20 32 20 20 20 20 32 20 35 20 33 20 20 20 36 20   2    2 5 3   6 
3c40: 31 32 20 33 7d 0a 0a 20 20 64 6f 5f 6d 61 74 63  12 3}..  do_matc
3c50: 68 69 6e 66 6f 5f 74 65 73 74 20 24 54 2e 39 2e  hinfo_test $T.9.
3c60: 35 20 7b 74 77 6f 68 75 6e 64 72 65 64 66 69 66  5 {twohundredfif
3c70: 74 79 7d 20 20 5c 0a 20 20 20 20 7b 20 31 20 32  ty}  \.    { 1 2
3c80: 20 20 20 20 30 20 31 20 31 20 20 20 31 20 36 20      0 1 1   1 6 
3c90: 33 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20  3}              
3ca0: 20 20 20 20 20 5c 0a 20 20 20 20 7b 20 31 20 32       \.    { 1 2
3cb0: 20 20 20 20 30 20 31 20 31 20 20 20 32 20 36 20      0 1 1   2 6 
3cc0: 33 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20  3}              
3cd0: 20 20 20 20 20 5c 0a 20 20 20 20 7b 20 31 20 32       \.    { 1 2
3ce0: 20 20 20 20 31 20 31 20 31 20 20 20 33 20 36 20      1 1 1   3 6 
3cf0: 33 7d 0a 0a 20 20 64 6f 5f 6d 61 74 63 68 69 6e  3}..  do_matchin
3d00: 66 6f 5f 74 65 73 74 20 24 54 2e 39 2e 36 20 7b  fo_test $T.9.6 {
3d10: 22 74 68 72 65 65 68 75 6e 64 72 65 64 20 6f 6e  "threehundred on
3d20: 65 22 7d 20 5c 0a 20 20 20 20 7b 20 31 20 32 20  e"} \.    { 1 2 
3d30: 20 20 20 30 20 30 20 30 20 20 20 31 20 33 20 32     0 0 0   1 3 2
3d40: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
3d50: 20 20 20 20 20 20 5c 0a 20 20 20 20 7b 20 31 20        \.    { 1 
3d60: 32 20 20 20 20 30 20 30 20 30 20 20 20 32 20 33  2    0 0 0   2 3
3d70: 20 32 7d 0a 0a 20 20 64 6f 5f 6d 61 74 63 68 69   2}..  do_matchi
3d80: 6e 66 6f 5f 74 65 73 74 20 24 54 2e 39 2e 37 20  nfo_test $T.9.7 
3d90: 7b 6f 6e 65 20 4f 52 20 66 69 76 65 68 75 6e 64  {one OR fivehund
3da0: 72 65 64 7d 20 5c 0a 20 20 20 20 7b 20 32 20 32  red} \.    { 2 2
3db0: 20 20 20 20 31 20 33 20 33 20 20 20 31 20 36 20      1 3 3   1 6 
3dc0: 33 20 20 20 30 20 30 20 30 20 20 20 30 20 30 20  3   0 0 0   0 0 
3dd0: 30 20 7d 20 20 20 20 5c 0a 20 20 20 20 7b 20 32  0 }    \.    { 2
3de0: 20 32 20 20 20 20 31 20 33 20 33 20 20 20 32 20   2    1 3 3   2 
3df0: 36 20 33 20 20 20 30 20 30 20 30 20 20 20 30 20  6 3   0 0 0   0 
3e00: 30 20 30 20 7d 20 20 20 20 5c 0a 20 20 20 20 7b  0 0 }    \.    {
3e10: 20 32 20 32 20 20 20 20 31 20 33 20 33 20 20 20   2 2    1 3 3   
3e20: 33 20 36 20 33 20 20 20 30 20 30 20 30 20 20 20  3 6 3   0 0 0   
3e30: 30 20 30 20 30 20 7d 0a 0a 20 20 64 6f 5f 6d 61  0 0 0 }..  do_ma
3e40: 74 63 68 69 6e 66 6f 5f 74 65 73 74 20 24 54 2e  tchinfo_test $T.
3e50: 39 2e 38 20 7b 74 77 6f 20 4f 52 20 22 74 68 72  9.8 {two OR "thr
3e60: 65 65 68 75 6e 64 72 65 64 20 6f 6e 65 22 7d 20  eehundred one"} 
3e70: 5c 0a 20 20 20 20 7b 20 32 20 32 20 20 20 20 31  \.    { 2 2    1
3e80: 20 33 20 33 20 20 20 31 20 36 20 33 20 20 20 30   3 3   1 6 3   0
3e90: 20 30 20 30 20 20 20 30 20 33 20 32 20 7d 20 20   0 0   0 3 2 }  
3ea0: 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 7b           \.    {
3eb0: 20 32 20 32 20 20 20 20 31 20 33 20 33 20 20 20   2 2    1 3 3   
3ec0: 32 20 36 20 33 20 20 20 30 20 30 20 30 20 20 20  2 6 3   0 0 0   
3ed0: 31 20 33 20 32 20 7d 20 20 20 20 20 20 20 20 20  1 3 2 }         
3ee0: 20 20 5c 0a 20 20 20 20 7b 20 32 20 32 20 20 20    \.    { 2 2   
3ef0: 20 31 20 33 20 33 20 20 20 33 20 36 20 33 20 20   1 3 3   3 6 3  
3f00: 20 30 20 30 20 30 20 20 20 32 20 33 20 32 20 7d   0 0 0   2 3 2 }
3f10: 0a 0a 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74 65  ..  do_select_te
3f20: 73 74 20 24 54 2e 39 2e 39 20 7b 0a 20 20 20 20  st $T.9.9 {.    
3f30: 53 45 4c 45 43 54 20 6d 69 74 28 6d 61 74 63 68  SELECT mit(match
3f40: 69 6e 66 6f 28 66 74 29 29 2c 20 6d 69 74 28 6d  info(ft)), mit(m
3f50: 61 74 63 68 69 6e 66 6f 28 66 74 29 29 0a 20 20  atchinfo(ft)).  
3f60: 20 20 46 52 4f 4d 20 66 74 20 57 48 45 52 45 20    FROM ft WHERE 
3f70: 66 74 20 4d 41 54 43 48 20 27 74 77 6f 20 4f 52  ft MATCH 'two OR
3f80: 20 22 74 68 72 65 65 68 75 6e 64 72 65 64 20 6f   "threehundred o
3f90: 6e 65 22 27 20 0a 20 20 7d 20 5b 6e 6f 72 6d 61  ne"' .  } [norma
3fa0: 6c 69 7a 65 20 7b 0a 20 20 20 20 7b 32 20 32 20  lize {.    {2 2 
3fb0: 31 20 33 20 33 20 31 20 36 20 33 20 30 20 30 20  1 3 3 1 6 3 0 0 
3fc0: 30 20 30 20 33 20 32 7d 0a 20 20 20 20 7b 32 20  0 0 3 2}.    {2 
3fd0: 32 20 31 20 33 20 33 20 31 20 36 20 33 20 30 20  2 1 3 3 1 6 3 0 
3fe0: 30 20 30 20 30 20 33 20 32 7d 0a 20 20 20 20 7b  0 0 0 3 2}.    {
3ff0: 32 20 32 20 31 20 33 20 33 20 32 20 36 20 33 20  2 2 1 3 3 2 6 3 
4000: 30 20 30 20 30 20 31 20 33 20 32 7d 0a 20 20 20  0 0 0 1 3 2}.   
4010: 20 7b 32 20 32 20 31 20 33 20 33 20 32 20 36 20   {2 2 1 3 3 2 6 
4020: 33 20 30 20 30 20 30 20 31 20 33 20 32 7d 0a 20  3 0 0 0 1 3 2}. 
4030: 20 20 20 7b 32 20 32 20 31 20 33 20 33 20 33 20     {2 2 1 3 3 3 
4040: 36 20 33 20 30 20 30 20 30 20 32 20 33 20 32 7d  6 3 0 0 0 2 3 2}
4050: 20 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 7b            .    {
4060: 32 20 32 20 31 20 33 20 33 20 33 20 36 20 33 20  2 2 1 3 3 3 6 3 
4070: 30 20 30 20 30 20 32 20 33 20 32 7d 0a 20 20 7d  0 0 0 2 3 2}.  }
4080: 5d 0a 0a 20 20 23 20 45 56 49 44 45 4e 43 45 2d  ]..  # EVIDENCE-
4090: 4f 46 3a 20 52 2d 35 36 31 30 31 2d 35 39 37 32  OF: R-56101-5972
40a0: 35 20 49 66 20 75 73 65 64 20 77 69 74 68 69 6e  5 If used within
40b0: 20 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 75   a SELECT that u
40c0: 73 65 73 20 74 68 65 0a 20 20 23 20 22 71 75 65  ses the.  # "que
40d0: 72 79 20 62 79 20 72 6f 77 69 64 22 20 6f 72 20  ry by rowid" or 
40e0: 22 6c 69 6e 65 61 72 20 73 63 61 6e 22 20 73 74  "linear scan" st
40f0: 72 61 74 65 67 69 65 73 2c 20 74 68 65 6e 20 74  rategies, then t
4100: 68 65 20 73 6e 69 70 70 65 74 20 61 6e 64 0a 20  he snippet and. 
4110: 20 23 20 6f 66 66 73 65 74 73 20 62 6f 74 68 20   # offsets both 
4120: 72 65 74 75 72 6e 20 61 6e 20 61 6e 20 65 6d 70  return an an emp
4130: 74 79 20 73 74 72 69 6e 67 2c 20 61 6e 64 20 74  ty string, and t
4140: 68 65 20 6d 61 74 63 68 69 6e 66 6f 20 66 75 6e  he matchinfo fun
4150: 63 74 69 6f 6e 0a 20 20 23 20 72 65 74 75 72 6e  ction.  # return
4160: 73 20 61 20 62 6c 6f 62 20 76 61 6c 75 65 20 7a  s a blob value z
4170: 65 72 6f 20 62 79 74 65 73 20 69 6e 20 73 69 7a  ero bytes in siz
4180: 65 2e 0a 20 20 23 0a 20 20 73 65 74 20 72 20 31  e..  #.  set r 1
4190: 30 30 30 30 30 30 20 20 20 20 20 20 20 20 20 20  000000          
41a0: 20 20 20 20 20 20 20 20 20 3b 23 20 41 20 72 6f           ;# A ro
41b0: 77 69 64 20 74 68 61 74 20 65 78 69 73 74 73 20  wid that exists 
41c0: 69 6e 20 74 61 62 6c 65 20 66 74 0a 20 20 64 6f  in table ft.  do
41d0: 5f 73 65 6c 65 63 74 5f 74 65 73 74 20 24 54 2e  _select_test $T.
41e0: 31 30 2e 30 20 7b 20 53 45 4c 45 43 54 20 72 6f  10.0 { SELECT ro
41f0: 77 69 64 20 46 52 4f 4d 20 66 74 20 57 48 45 52  wid FROM ft WHER
4200: 45 20 72 6f 77 69 64 20 3d 20 24 72 20 7d 20 24  E rowid = $r } $
4210: 72 0a 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74 65  r.  do_select_te
4220: 73 74 20 24 54 2e 31 30 2e 31 20 7b 0a 20 20 20  st $T.10.1 {.   
4230: 20 53 45 4c 45 43 54 20 6c 65 6e 67 74 68 28 6f   SELECT length(o
4240: 66 66 73 65 74 73 28 66 74 29 29 2c 20 74 79 70  ffsets(ft)), typ
4250: 65 6f 66 28 6f 66 66 73 65 74 73 28 66 74 29 29  eof(offsets(ft))
4260: 20 46 52 4f 4d 20 66 74 3b 0a 20 20 7d 20 7b 30   FROM ft;.  } {0
4270: 20 74 65 78 74 20 30 20 74 65 78 74 20 30 20 74   text 0 text 0 t
4280: 65 78 74 7d 0a 20 20 64 6f 5f 73 65 6c 65 63 74  ext}.  do_select
4290: 5f 74 65 73 74 20 24 54 2e 31 30 2e 32 20 7b 0a  _test $T.10.2 {.
42a0: 20 20 20 20 53 45 4c 45 43 54 20 6c 65 6e 67 74      SELECT lengt
42b0: 68 28 6f 66 66 73 65 74 73 28 66 74 29 29 2c 20  h(offsets(ft)), 
42c0: 74 79 70 65 6f 66 28 6f 66 66 73 65 74 73 28 66  typeof(offsets(f
42d0: 74 29 29 20 46 52 4f 4d 20 66 74 20 57 48 45 52  t)) FROM ft WHER
42e0: 45 20 72 6f 77 69 64 20 3d 20 24 72 0a 20 20 7d  E rowid = $r.  }
42f0: 20 7b 30 20 74 65 78 74 7d 0a 20 20 64 6f 5f 73   {0 text}.  do_s
4300: 65 6c 65 63 74 5f 74 65 73 74 20 24 54 2e 31 30  elect_test $T.10
4310: 2e 33 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  .3 {.    SELECT 
4320: 6c 65 6e 67 74 68 28 73 6e 69 70 70 65 74 28 66  length(snippet(f
4330: 74 29 29 2c 20 74 79 70 65 6f 66 28 73 6e 69 70  t)), typeof(snip
4340: 70 65 74 28 66 74 29 29 20 46 52 4f 4d 20 66 74  pet(ft)) FROM ft
4350: 3b 0a 20 20 7d 20 7b 30 20 74 65 78 74 20 30 20  ;.  } {0 text 0 
4360: 74 65 78 74 20 30 20 74 65 78 74 7d 0a 20 20 64  text 0 text}.  d
4370: 6f 5f 73 65 6c 65 63 74 5f 74 65 73 74 20 24 54  o_select_test $T
4380: 2e 31 30 2e 34 20 7b 0a 20 20 20 20 53 45 4c 45  .10.4 {.    SELE
4390: 43 54 20 6c 65 6e 67 74 68 28 73 6e 69 70 70 65  CT length(snippe
43a0: 74 28 66 74 29 29 2c 20 74 79 70 65 6f 66 28 73  t(ft)), typeof(s
43b0: 6e 69 70 70 65 74 28 66 74 29 29 20 46 52 4f 4d  nippet(ft)) FROM
43c0: 20 66 74 20 57 48 45 52 45 20 72 6f 77 69 64 20   ft WHERE rowid 
43d0: 3d 20 24 72 3b 0a 20 20 7d 20 7b 30 20 74 65 78  = $r;.  } {0 tex
43e0: 74 7d 0a 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74  t}.  do_select_t
43f0: 65 73 74 20 24 54 2e 31 30 2e 35 20 7b 0a 20 20  est $T.10.5 {.  
4400: 20 20 53 45 4c 45 43 54 20 6c 65 6e 67 74 68 28    SELECT length(
4410: 6d 61 74 63 68 69 6e 66 6f 28 66 74 29 29 2c 20  matchinfo(ft)), 
4420: 74 79 70 65 6f 66 28 6d 61 74 63 68 69 6e 66 6f  typeof(matchinfo
4430: 28 66 74 29 29 20 46 52 4f 4d 20 66 74 3b 0a 20  (ft)) FROM ft;. 
4440: 20 7d 20 7b 30 20 62 6c 6f 62 20 30 20 62 6c 6f   } {0 blob 0 blo
4450: 62 20 30 20 62 6c 6f 62 7d 0a 20 20 64 6f 5f 73  b 0 blob}.  do_s
4460: 65 6c 65 63 74 5f 74 65 73 74 20 24 54 2e 31 30  elect_test $T.10
4470: 2e 36 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  .6 {.    SELECT 
4480: 6c 65 6e 67 74 68 28 6d 61 74 63 68 69 6e 66 6f  length(matchinfo
4490: 28 66 74 29 29 2c 20 74 79 70 65 6f 66 28 6d 61  (ft)), typeof(ma
44a0: 74 63 68 69 6e 66 6f 28 66 74 29 29 20 46 52 4f  tchinfo(ft)) FRO
44b0: 4d 20 66 74 20 57 48 45 52 45 20 72 6f 77 69 64  M ft WHERE rowid
44c0: 20 3d 20 24 72 0a 20 20 7d 20 7b 30 20 62 6c 6f   = $r.  } {0 blo
44d0: 62 7d 0a 7d 0a 0a 0a 73 65 74 20 73 71 6c 69 74  b}.}...set sqlit
44e0: 65 5f 66 74 73 33 5f 65 6e 61 62 6c 65 5f 70 61  e_fts3_enable_pa
44f0: 72 65 6e 74 68 65 73 65 73 20 30 0a 66 69 6e 69  rentheses 0.fini
4500: 73 68 5f 74 65 73 74 0a                          sh_test.