/ Hex Artifact Content
Login

Artifact a12f22a3ba4dd59751a57c79b031d07ab5f51ddd:


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 0a 73 65 74 20 73  ommon.tcl..set s
02f0: 71 6c 69 74 65 5f 66 74 73 33 5f 65 6e 61 62 6c  qlite_fts3_enabl
0300: 65 5f 70 61 72 65 6e 74 68 65 73 65 73 20 31 0a  e_parentheses 1.
0310: 73 65 74 20 44 4f 5f 4d 41 4c 4c 4f 43 5f 54 45  set DO_MALLOC_TE
0320: 53 54 20 30 0a 0a 23 20 54 72 61 6e 73 66 6f 72  ST 0..# Transfor
0330: 6d 20 74 68 65 20 6c 69 73 74 20 24 4c 20 74 6f  m the list $L to
0340: 20 69 74 73 20 22 6e 6f 72 6d 61 6c 22 20 66 6f   its "normal" fo
0350: 72 6d 2e 20 53 6f 20 74 68 61 74 20 69 74 20 63  rm. So that it c
0360: 61 6e 20 62 65 20 63 6f 6d 70 61 72 65 64 20 74  an be compared t
0370: 6f 0a 23 20 61 6e 6f 74 68 65 72 20 6c 69 73 74  o.# another list
0380: 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 73   with the same s
0390: 65 74 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 75  et of elements u
03a0: 73 69 6e 67 20 5b 73 74 72 69 6e 67 20 63 6f 6d  sing [string com
03b0: 70 61 72 65 5d 2e 0a 23 0a 70 72 6f 63 20 6e 6f  pare]..#.proc no
03c0: 72 6d 61 6c 69 7a 65 20 7b 4c 7d 20 7b 0a 20 20  rmalize {L} {.  
03d0: 73 65 74 20 72 65 74 20 5b 6c 69 73 74 5d 0a 20  set ret [list]. 
03e0: 20 66 6f 72 65 61 63 68 20 6c 20 24 4c 20 7b 6c   foreach l $L {l
03f0: 61 70 70 65 6e 64 20 72 65 74 20 24 6c 7d 0a 20  append ret $l}. 
0400: 20 72 65 74 75 72 6e 20 24 72 65 74 0a 7d 0a 0a   return $ret.}..
0410: 70 72 6f 63 20 64 6f 5f 6f 66 66 73 65 74 73 5f  proc do_offsets_
0420: 74 65 73 74 20 7b 6e 61 6d 65 20 65 78 70 72 20  test {name expr 
0430: 61 72 67 73 7d 20 7b 0a 20 20 73 65 74 20 72 65  args} {.  set re
0440: 73 75 6c 74 20 5b 6c 69 73 74 5d 0a 20 20 66 6f  sult [list].  fo
0450: 72 65 61 63 68 20 61 20 24 61 72 67 73 20 7b 0a  reach a $args {.
0460: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
0470: 6c 74 20 5b 6e 6f 72 6d 61 6c 69 7a 65 20 24 61  lt [normalize $a
0480: 5d 0a 20 20 7d 0a 20 20 64 6f 5f 73 65 6c 65 63  ].  }.  do_selec
0490: 74 5f 74 65 73 74 20 24 6e 61 6d 65 20 7b 0a 20  t_test $name {. 
04a0: 20 20 20 53 45 4c 45 43 54 20 6f 66 66 73 65 74     SELECT offset
04b0: 73 28 66 74 29 20 46 52 4f 4d 20 66 74 20 57 48  s(ft) FROM ft WH
04c0: 45 52 45 20 66 74 20 4d 41 54 43 48 20 24 65 78  ERE ft MATCH $ex
04d0: 70 72 0a 20 20 7d 20 24 72 65 73 75 6c 74 0a 7d  pr.  } $result.}
04e0: 0a 20 20 0a 23 20 44 6f 63 75 6d 65 6e 74 20 74  .  .# Document t
04f0: 65 78 74 20 75 73 65 64 20 62 79 20 61 20 66 65  ext used by a fe
0500: 77 20 74 65 73 74 73 2e 20 43 6f 6e 74 61 69 6e  w tests. Contain
0510: 73 20 74 68 65 20 45 6e 67 6c 69 73 68 20 6e 61  s the English na
0520: 6d 65 73 20 6f 66 20 61 6c 6c 0a 23 20 69 6e 74  mes of all.# int
0530: 65 67 65 72 73 20 62 65 74 77 65 65 6e 20 31 20  egers between 1 
0540: 61 6e 64 20 33 30 30 2e 0a 23 0a 73 65 74 20 6e  and 300..#.set n
0550: 75 6d 62 65 72 73 20 5b 6e 6f 72 6d 61 6c 69 7a  umbers [normaliz
0560: 65 20 7b 0a 20 20 6f 6e 65 20 74 77 6f 20 74 68  e {.  one two th
0570: 72 65 65 20 66 6f 75 72 20 66 69 76 65 20 73 69  ree four five si
0580: 78 20 73 65 76 65 6e 20 65 69 67 68 74 20 6e 69  x seven eight ni
0590: 6e 65 20 74 65 6e 20 65 6c 65 76 65 6e 20 74 77  ne ten eleven tw
05a0: 65 6c 76 65 20 74 68 69 72 74 65 65 6e 0a 20 20  elve thirteen.  
05b0: 66 6f 75 72 74 65 65 6e 20 66 69 66 74 65 65 6e  fourteen fifteen
05c0: 20 73 69 78 74 65 65 6e 20 73 65 76 65 6e 74 65   sixteen sevente
05d0: 65 6e 20 65 69 67 68 74 65 65 6e 20 6e 69 6e 65  en eighteen nine
05e0: 74 65 65 6e 20 74 77 65 6e 74 79 20 74 77 65 6e  teen twenty twen
05f0: 74 79 6f 6e 65 0a 20 20 74 77 65 6e 74 79 74 77  tyone.  twentytw
0600: 6f 20 74 77 65 6e 74 79 74 68 72 65 65 20 74 77  o twentythree tw
0610: 65 6e 74 79 66 6f 75 72 20 74 77 65 6e 74 79 66  entyfour twentyf
0620: 69 76 65 20 74 77 65 6e 74 79 73 69 78 20 74 77  ive twentysix tw
0630: 65 6e 74 79 73 65 76 65 6e 0a 20 20 74 77 65 6e  entyseven.  twen
0640: 74 79 65 69 67 68 74 20 74 77 65 6e 74 79 6e 69  tyeight twentyni
0650: 6e 65 20 74 68 69 72 74 79 20 74 68 69 72 74 79  ne thirty thirty
0660: 6f 6e 65 20 74 68 69 72 74 79 74 77 6f 20 74 68  one thirtytwo th
0670: 69 72 74 79 74 68 72 65 65 20 74 68 69 72 74 79  irtythree thirty
0680: 66 6f 75 72 0a 20 20 74 68 69 72 74 79 66 69 76  four.  thirtyfiv
0690: 65 20 74 68 69 72 74 79 73 69 78 20 74 68 69 72  e thirtysix thir
06a0: 74 79 73 65 76 65 6e 20 74 68 69 72 74 79 65 69  tyseven thirtyei
06b0: 67 68 74 20 74 68 69 72 74 79 6e 69 6e 65 20 66  ght thirtynine f
06c0: 6f 72 74 79 20 66 6f 72 74 79 6f 6e 65 0a 20 20  orty fortyone.  
06d0: 66 6f 72 74 79 74 77 6f 20 66 6f 72 74 79 74 68  fortytwo fortyth
06e0: 72 65 65 20 66 6f 72 74 79 66 6f 75 72 20 66 6f  ree fortyfour fo
06f0: 72 74 79 66 69 76 65 20 66 6f 72 74 79 73 69 78  rtyfive fortysix
0700: 20 66 6f 72 74 79 73 65 76 65 6e 20 66 6f 72 74   fortyseven fort
0710: 79 65 69 67 68 74 0a 20 20 66 6f 72 74 79 6e 69  yeight.  fortyni
0720: 6e 65 20 66 69 66 74 79 20 66 69 66 74 79 6f 6e  ne fifty fiftyon
0730: 65 20 66 69 66 74 79 74 77 6f 20 66 69 66 74 79  e fiftytwo fifty
0740: 74 68 72 65 65 20 66 69 66 74 79 66 6f 75 72 20  three fiftyfour 
0750: 66 69 66 74 79 66 69 76 65 20 66 69 66 74 79 73  fiftyfive fiftys
0760: 69 78 0a 20 20 66 69 66 74 79 73 65 76 65 6e 20  ix.  fiftyseven 
0770: 66 69 66 74 79 65 69 67 68 74 20 66 69 66 74 79  fiftyeight fifty
0780: 6e 69 6e 65 20 73 69 78 74 79 20 73 69 78 74 79  nine sixty sixty
0790: 6f 6e 65 20 73 69 78 74 79 74 77 6f 20 73 69 78  one sixtytwo six
07a0: 74 79 74 68 72 65 65 20 73 69 78 74 79 66 6f 75  tythree sixtyfou
07b0: 72 0a 20 20 73 69 78 74 79 66 69 76 65 20 73 69  r.  sixtyfive si
07c0: 78 74 79 73 69 78 20 73 69 78 74 79 73 65 76 65  xtysix sixtyseve
07d0: 6e 20 73 69 78 74 79 65 69 67 68 74 20 73 69 78  n sixtyeight six
07e0: 74 79 6e 69 6e 65 20 73 65 76 65 6e 74 79 20 73  tynine seventy s
07f0: 65 76 65 6e 74 79 6f 6e 65 0a 20 20 73 65 76 65  eventyone.  seve
0800: 6e 74 79 74 77 6f 20 73 65 76 65 6e 74 79 74 68  ntytwo seventyth
0810: 72 65 65 20 73 65 76 65 6e 74 79 66 6f 75 72 20  ree seventyfour 
0820: 73 65 76 65 6e 74 79 66 69 76 65 20 73 65 76 65  seventyfive seve
0830: 6e 74 79 73 69 78 20 73 65 76 65 6e 74 79 73 65  ntysix seventyse
0840: 76 65 6e 0a 20 20 73 65 76 65 6e 74 79 65 69 67  ven.  seventyeig
0850: 68 74 20 73 65 76 65 6e 74 79 6e 69 6e 65 20 65  ht seventynine e
0860: 69 67 68 74 79 20 65 69 67 68 74 79 6f 6e 65 20  ighty eightyone 
0870: 65 69 67 68 74 79 74 77 6f 20 65 69 67 68 74 79  eightytwo eighty
0880: 74 68 72 65 65 20 65 69 67 68 74 79 66 6f 75 72  three eightyfour
0890: 0a 20 20 65 69 67 68 74 79 66 69 76 65 20 65 69  .  eightyfive ei
08a0: 67 68 74 79 73 69 78 20 65 69 67 68 74 79 73 65  ghtysix eightyse
08b0: 76 65 6e 20 65 69 67 68 74 79 65 69 67 68 74 20  ven eightyeight 
08c0: 65 69 67 68 74 79 6e 69 6e 65 20 6e 69 6e 65 74  eightynine ninet
08d0: 79 20 6e 69 6e 65 74 79 6f 6e 65 0a 20 20 6e 69  y ninetyone.  ni
08e0: 6e 65 74 79 74 77 6f 20 6e 69 6e 65 74 79 74 68  netytwo ninetyth
08f0: 72 65 65 20 6e 69 6e 65 74 79 66 6f 75 72 20 6e  ree ninetyfour n
0900: 69 6e 65 74 79 66 69 76 65 20 6e 69 6e 65 74 79  inetyfive ninety
0910: 73 69 78 20 6e 69 6e 65 74 79 73 65 76 65 6e 0a  six ninetyseven.
0920: 20 20 6e 69 6e 65 74 79 65 69 67 68 74 20 6e 69    ninetyeight ni
0930: 6e 65 74 79 6e 69 6e 65 20 6f 6e 65 68 75 6e 64  netynine onehund
0940: 72 65 64 20 6f 6e 65 68 75 6e 64 72 65 64 6f 6e  red onehundredon
0950: 65 20 6f 6e 65 68 75 6e 64 72 65 64 74 77 6f 0a  e onehundredtwo.
0960: 20 20 6f 6e 65 68 75 6e 64 72 65 64 74 68 72 65    onehundredthre
0970: 65 20 6f 6e 65 68 75 6e 64 72 65 64 66 6f 75 72  e onehundredfour
0980: 20 6f 6e 65 68 75 6e 64 72 65 64 66 69 76 65 20   onehundredfive 
0990: 6f 6e 65 68 75 6e 64 72 65 64 73 69 78 20 6f 6e  onehundredsix on
09a0: 65 68 75 6e 64 72 65 64 73 65 76 65 6e 0a 20 20  ehundredseven.  
09b0: 6f 6e 65 68 75 6e 64 72 65 64 65 69 67 68 74 20  onehundredeight 
09c0: 6f 6e 65 68 75 6e 64 72 65 64 6e 69 6e 65 20 6f  onehundrednine o
09d0: 6e 65 68 75 6e 64 72 65 64 74 65 6e 20 6f 6e 65  nehundredten one
09e0: 68 75 6e 64 72 65 64 65 6c 65 76 65 6e 0a 20 20  hundredeleven.  
09f0: 6f 6e 65 68 75 6e 64 72 65 64 74 77 65 6c 76 65  onehundredtwelve
0a00: 20 6f 6e 65 68 75 6e 64 72 65 64 74 68 69 72 74   onehundredthirt
0a10: 65 65 6e 20 6f 6e 65 68 75 6e 64 72 65 64 66 6f  een onehundredfo
0a20: 75 72 74 65 65 6e 20 6f 6e 65 68 75 6e 64 72 65  urteen onehundre
0a30: 64 66 69 66 74 65 65 6e 0a 20 20 6f 6e 65 68 75  dfifteen.  onehu
0a40: 6e 64 72 65 64 73 69 78 74 65 65 6e 20 6f 6e 65  ndredsixteen one
0a50: 68 75 6e 64 72 65 64 73 65 76 65 6e 74 65 65 6e  hundredseventeen
0a60: 20 6f 6e 65 68 75 6e 64 72 65 64 65 69 67 68 74   onehundredeight
0a70: 65 65 6e 20 6f 6e 65 68 75 6e 64 72 65 64 6e 69  een onehundredni
0a80: 6e 65 74 65 65 6e 0a 20 20 6f 6e 65 68 75 6e 64  neteen.  onehund
0a90: 72 65 64 74 77 65 6e 74 79 20 6f 6e 65 68 75 6e  redtwenty onehun
0aa0: 64 72 65 64 74 77 65 6e 74 79 6f 6e 65 20 6f 6e  dredtwentyone on
0ab0: 65 68 75 6e 64 72 65 64 74 77 65 6e 74 79 74 77  ehundredtwentytw
0ac0: 6f 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64 74 77  o.  onehundredtw
0ad0: 65 6e 74 79 74 68 72 65 65 20 6f 6e 65 68 75 6e  entythree onehun
0ae0: 64 72 65 64 74 77 65 6e 74 79 66 6f 75 72 20 6f  dredtwentyfour o
0af0: 6e 65 68 75 6e 64 72 65 64 74 77 65 6e 74 79 66  nehundredtwentyf
0b00: 69 76 65 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64  ive.  onehundred
0b10: 74 77 65 6e 74 79 73 69 78 20 6f 6e 65 68 75 6e  twentysix onehun
0b20: 64 72 65 64 74 77 65 6e 74 79 73 65 76 65 6e 20  dredtwentyseven 
0b30: 6f 6e 65 68 75 6e 64 72 65 64 74 77 65 6e 74 79  onehundredtwenty
0b40: 65 69 67 68 74 0a 20 20 6f 6e 65 68 75 6e 64 72  eight.  onehundr
0b50: 65 64 74 77 65 6e 74 79 6e 69 6e 65 20 6f 6e 65  edtwentynine one
0b60: 68 75 6e 64 72 65 64 74 68 69 72 74 79 20 6f 6e  hundredthirty on
0b70: 65 68 75 6e 64 72 65 64 74 68 69 72 74 79 6f 6e  ehundredthirtyon
0b80: 65 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64 74 68  e.  onehundredth
0b90: 69 72 74 79 74 77 6f 20 6f 6e 65 68 75 6e 64 72  irtytwo onehundr
0ba0: 65 64 74 68 69 72 74 79 74 68 72 65 65 20 6f 6e  edthirtythree on
0bb0: 65 68 75 6e 64 72 65 64 74 68 69 72 74 79 66 6f  ehundredthirtyfo
0bc0: 75 72 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64 74  ur.  onehundredt
0bd0: 68 69 72 74 79 66 69 76 65 20 6f 6e 65 68 75 6e  hirtyfive onehun
0be0: 64 72 65 64 74 68 69 72 74 79 73 69 78 20 6f 6e  dredthirtysix on
0bf0: 65 68 75 6e 64 72 65 64 74 68 69 72 74 79 73 65  ehundredthirtyse
0c00: 76 65 6e 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64  ven.  onehundred
0c10: 74 68 69 72 74 79 65 69 67 68 74 20 6f 6e 65 68  thirtyeight oneh
0c20: 75 6e 64 72 65 64 74 68 69 72 74 79 6e 69 6e 65  undredthirtynine
0c30: 20 6f 6e 65 68 75 6e 64 72 65 64 66 6f 72 74 79   onehundredforty
0c40: 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64 66 6f 72  .  onehundredfor
0c50: 74 79 6f 6e 65 20 6f 6e 65 68 75 6e 64 72 65 64  tyone onehundred
0c60: 66 6f 72 74 79 74 77 6f 20 6f 6e 65 68 75 6e 64  fortytwo onehund
0c70: 72 65 64 66 6f 72 74 79 74 68 72 65 65 0a 20 20  redfortythree.  
0c80: 6f 6e 65 68 75 6e 64 72 65 64 66 6f 72 74 79 66  onehundredfortyf
0c90: 6f 75 72 20 6f 6e 65 68 75 6e 64 72 65 64 66 6f  our onehundredfo
0ca0: 72 74 79 66 69 76 65 20 6f 6e 65 68 75 6e 64 72  rtyfive onehundr
0cb0: 65 64 66 6f 72 74 79 73 69 78 0a 20 20 6f 6e 65  edfortysix.  one
0cc0: 68 75 6e 64 72 65 64 66 6f 72 74 79 73 65 76 65  hundredfortyseve
0cd0: 6e 20 6f 6e 65 68 75 6e 64 72 65 64 66 6f 72 74  n onehundredfort
0ce0: 79 65 69 67 68 74 20 6f 6e 65 68 75 6e 64 72 65  yeight onehundre
0cf0: 64 66 6f 72 74 79 6e 69 6e 65 0a 20 20 6f 6e 65  dfortynine.  one
0d00: 68 75 6e 64 72 65 64 66 69 66 74 79 20 6f 6e 65  hundredfifty one
0d10: 68 75 6e 64 72 65 64 66 69 66 74 79 6f 6e 65 20  hundredfiftyone 
0d20: 6f 6e 65 68 75 6e 64 72 65 64 66 69 66 74 79 74  onehundredfiftyt
0d30: 77 6f 20 6f 6e 65 68 75 6e 64 72 65 64 66 69 66  wo onehundredfif
0d40: 74 79 74 68 72 65 65 0a 20 20 6f 6e 65 68 75 6e  tythree.  onehun
0d50: 64 72 65 64 66 69 66 74 79 66 6f 75 72 20 6f 6e  dredfiftyfour on
0d60: 65 68 75 6e 64 72 65 64 66 69 66 74 79 66 69 76  ehundredfiftyfiv
0d70: 65 20 6f 6e 65 68 75 6e 64 72 65 64 66 69 66 74  e onehundredfift
0d80: 79 73 69 78 0a 20 20 6f 6e 65 68 75 6e 64 72 65  ysix.  onehundre
0d90: 64 66 69 66 74 79 73 65 76 65 6e 20 6f 6e 65 68  dfiftyseven oneh
0da0: 75 6e 64 72 65 64 66 69 66 74 79 65 69 67 68 74  undredfiftyeight
0db0: 20 6f 6e 65 68 75 6e 64 72 65 64 66 69 66 74 79   onehundredfifty
0dc0: 6e 69 6e 65 0a 20 20 6f 6e 65 68 75 6e 64 72 65  nine.  onehundre
0dd0: 64 73 69 78 74 79 20 6f 6e 65 68 75 6e 64 72 65  dsixty onehundre
0de0: 64 73 69 78 74 79 6f 6e 65 20 6f 6e 65 68 75 6e  dsixtyone onehun
0df0: 64 72 65 64 73 69 78 74 79 74 77 6f 20 6f 6e 65  dredsixtytwo one
0e00: 68 75 6e 64 72 65 64 73 69 78 74 79 74 68 72 65  hundredsixtythre
0e10: 65 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64 73 69  e.  onehundredsi
0e20: 78 74 79 66 6f 75 72 20 6f 6e 65 68 75 6e 64 72  xtyfour onehundr
0e30: 65 64 73 69 78 74 79 66 69 76 65 20 6f 6e 65 68  edsixtyfive oneh
0e40: 75 6e 64 72 65 64 73 69 78 74 79 73 69 78 0a 20  undredsixtysix. 
0e50: 20 6f 6e 65 68 75 6e 64 72 65 64 73 69 78 74 79   onehundredsixty
0e60: 73 65 76 65 6e 20 6f 6e 65 68 75 6e 64 72 65 64  seven onehundred
0e70: 73 69 78 74 79 65 69 67 68 74 20 6f 6e 65 68 75  sixtyeight onehu
0e80: 6e 64 72 65 64 73 69 78 74 79 6e 69 6e 65 0a 20  ndredsixtynine. 
0e90: 20 6f 6e 65 68 75 6e 64 72 65 64 73 65 76 65 6e   onehundredseven
0ea0: 74 79 20 6f 6e 65 68 75 6e 64 72 65 64 73 65 76  ty onehundredsev
0eb0: 65 6e 74 79 6f 6e 65 20 6f 6e 65 68 75 6e 64 72  entyone onehundr
0ec0: 65 64 73 65 76 65 6e 74 79 74 77 6f 0a 20 20 6f  edseventytwo.  o
0ed0: 6e 65 68 75 6e 64 72 65 64 73 65 76 65 6e 74 79  nehundredseventy
0ee0: 74 68 72 65 65 20 6f 6e 65 68 75 6e 64 72 65 64  three onehundred
0ef0: 73 65 76 65 6e 74 79 66 6f 75 72 20 6f 6e 65 68  seventyfour oneh
0f00: 75 6e 64 72 65 64 73 65 76 65 6e 74 79 66 69 76  undredseventyfiv
0f10: 65 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64 73 65  e.  onehundredse
0f20: 76 65 6e 74 79 73 69 78 20 6f 6e 65 68 75 6e 64  ventysix onehund
0f30: 72 65 64 73 65 76 65 6e 74 79 73 65 76 65 6e 20  redseventyseven 
0f40: 6f 6e 65 68 75 6e 64 72 65 64 73 65 76 65 6e 74  onehundredsevent
0f50: 79 65 69 67 68 74 0a 20 20 6f 6e 65 68 75 6e 64  yeight.  onehund
0f60: 72 65 64 73 65 76 65 6e 74 79 6e 69 6e 65 20 6f  redseventynine o
0f70: 6e 65 68 75 6e 64 72 65 64 65 69 67 68 74 79 20  nehundredeighty 
0f80: 6f 6e 65 68 75 6e 64 72 65 64 65 69 67 68 74 79  onehundredeighty
0f90: 6f 6e 65 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64  one.  onehundred
0fa0: 65 69 67 68 74 79 74 77 6f 20 6f 6e 65 68 75 6e  eightytwo onehun
0fb0: 64 72 65 64 65 69 67 68 74 79 74 68 72 65 65 20  dredeightythree 
0fc0: 6f 6e 65 68 75 6e 64 72 65 64 65 69 67 68 74 79  onehundredeighty
0fd0: 66 6f 75 72 0a 20 20 6f 6e 65 68 75 6e 64 72 65  four.  onehundre
0fe0: 64 65 69 67 68 74 79 66 69 76 65 20 6f 6e 65 68  deightyfive oneh
0ff0: 75 6e 64 72 65 64 65 69 67 68 74 79 73 69 78 20  undredeightysix 
1000: 6f 6e 65 68 75 6e 64 72 65 64 65 69 67 68 74 79  onehundredeighty
1010: 73 65 76 65 6e 0a 20 20 6f 6e 65 68 75 6e 64 72  seven.  onehundr
1020: 65 64 65 69 67 68 74 79 65 69 67 68 74 20 6f 6e  edeightyeight on
1030: 65 68 75 6e 64 72 65 64 65 69 67 68 74 79 6e 69  ehundredeightyni
1040: 6e 65 20 6f 6e 65 68 75 6e 64 72 65 64 6e 69 6e  ne onehundrednin
1050: 65 74 79 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64  ety.  onehundred
1060: 6e 69 6e 65 74 79 6f 6e 65 20 6f 6e 65 68 75 6e  ninetyone onehun
1070: 64 72 65 64 6e 69 6e 65 74 79 74 77 6f 20 6f 6e  dredninetytwo on
1080: 65 68 75 6e 64 72 65 64 6e 69 6e 65 74 79 74 68  ehundredninetyth
1090: 72 65 65 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64  ree.  onehundred
10a0: 6e 69 6e 65 74 79 66 6f 75 72 20 6f 6e 65 68 75  ninetyfour onehu
10b0: 6e 64 72 65 64 6e 69 6e 65 74 79 66 69 76 65 20  ndredninetyfive 
10c0: 6f 6e 65 68 75 6e 64 72 65 64 6e 69 6e 65 74 79  onehundredninety
10d0: 73 69 78 0a 20 20 6f 6e 65 68 75 6e 64 72 65 64  six.  onehundred
10e0: 6e 69 6e 65 74 79 73 65 76 65 6e 20 6f 6e 65 68  ninetyseven oneh
10f0: 75 6e 64 72 65 64 6e 69 6e 65 74 79 65 69 67 68  undredninetyeigh
1100: 74 20 6f 6e 65 68 75 6e 64 72 65 64 6e 69 6e 65  t onehundrednine
1110: 74 79 6e 69 6e 65 20 74 77 6f 68 75 6e 64 72 65  tynine twohundre
1120: 64 0a 20 20 74 77 6f 68 75 6e 64 72 65 64 6f 6e  d.  twohundredon
1130: 65 20 74 77 6f 68 75 6e 64 72 65 64 74 77 6f 20  e twohundredtwo 
1140: 74 77 6f 68 75 6e 64 72 65 64 74 68 72 65 65 20  twohundredthree 
1150: 74 77 6f 68 75 6e 64 72 65 64 66 6f 75 72 20 74  twohundredfour t
1160: 77 6f 68 75 6e 64 72 65 64 66 69 76 65 0a 20 20  wohundredfive.  
1170: 74 77 6f 68 75 6e 64 72 65 64 73 69 78 20 74 77  twohundredsix tw
1180: 6f 68 75 6e 64 72 65 64 73 65 76 65 6e 20 74 77  ohundredseven tw
1190: 6f 68 75 6e 64 72 65 64 65 69 67 68 74 20 74 77  ohundredeight tw
11a0: 6f 68 75 6e 64 72 65 64 6e 69 6e 65 20 74 77 6f  ohundrednine two
11b0: 68 75 6e 64 72 65 64 74 65 6e 0a 20 20 74 77 6f  hundredten.  two
11c0: 68 75 6e 64 72 65 64 65 6c 65 76 65 6e 20 74 77  hundredeleven tw
11d0: 6f 68 75 6e 64 72 65 64 74 77 65 6c 76 65 20 74  ohundredtwelve t
11e0: 77 6f 68 75 6e 64 72 65 64 74 68 69 72 74 65 65  wohundredthirtee
11f0: 6e 20 74 77 6f 68 75 6e 64 72 65 64 66 6f 75 72  n twohundredfour
1200: 74 65 65 6e 0a 20 20 74 77 6f 68 75 6e 64 72 65  teen.  twohundre
1210: 64 66 69 66 74 65 65 6e 20 74 77 6f 68 75 6e 64  dfifteen twohund
1220: 72 65 64 73 69 78 74 65 65 6e 20 74 77 6f 68 75  redsixteen twohu
1230: 6e 64 72 65 64 73 65 76 65 6e 74 65 65 6e 20 74  ndredseventeen t
1240: 77 6f 68 75 6e 64 72 65 64 65 69 67 68 74 65 65  wohundredeightee
1250: 6e 0a 20 20 74 77 6f 68 75 6e 64 72 65 64 6e 69  n.  twohundredni
1260: 6e 65 74 65 65 6e 20 74 77 6f 68 75 6e 64 72 65  neteen twohundre
1270: 64 74 77 65 6e 74 79 20 74 77 6f 68 75 6e 64 72  dtwenty twohundr
1280: 65 64 74 77 65 6e 74 79 6f 6e 65 20 74 77 6f 68  edtwentyone twoh
1290: 75 6e 64 72 65 64 74 77 65 6e 74 79 74 77 6f 0a  undredtwentytwo.
12a0: 20 20 74 77 6f 68 75 6e 64 72 65 64 74 77 65 6e    twohundredtwen
12b0: 74 79 74 68 72 65 65 20 74 77 6f 68 75 6e 64 72  tythree twohundr
12c0: 65 64 74 77 65 6e 74 79 66 6f 75 72 20 74 77 6f  edtwentyfour two
12d0: 68 75 6e 64 72 65 64 74 77 65 6e 74 79 66 69 76  hundredtwentyfiv
12e0: 65 0a 20 20 74 77 6f 68 75 6e 64 72 65 64 74 77  e.  twohundredtw
12f0: 65 6e 74 79 73 69 78 20 74 77 6f 68 75 6e 64 72  entysix twohundr
1300: 65 64 74 77 65 6e 74 79 73 65 76 65 6e 20 74 77  edtwentyseven tw
1310: 6f 68 75 6e 64 72 65 64 74 77 65 6e 74 79 65 69  ohundredtwentyei
1320: 67 68 74 0a 20 20 74 77 6f 68 75 6e 64 72 65 64  ght.  twohundred
1330: 74 77 65 6e 74 79 6e 69 6e 65 20 74 77 6f 68 75  twentynine twohu
1340: 6e 64 72 65 64 74 68 69 72 74 79 20 74 77 6f 68  ndredthirty twoh
1350: 75 6e 64 72 65 64 74 68 69 72 74 79 6f 6e 65 0a  undredthirtyone.
1360: 20 20 74 77 6f 68 75 6e 64 72 65 64 74 68 69 72    twohundredthir
1370: 74 79 74 77 6f 20 74 77 6f 68 75 6e 64 72 65 64  tytwo twohundred
1380: 74 68 69 72 74 79 74 68 72 65 65 20 74 77 6f 68  thirtythree twoh
1390: 75 6e 64 72 65 64 74 68 69 72 74 79 66 6f 75 72  undredthirtyfour
13a0: 0a 20 20 74 77 6f 68 75 6e 64 72 65 64 74 68 69  .  twohundredthi
13b0: 72 74 79 66 69 76 65 20 74 77 6f 68 75 6e 64 72  rtyfive twohundr
13c0: 65 64 74 68 69 72 74 79 73 69 78 20 74 77 6f 68  edthirtysix twoh
13d0: 75 6e 64 72 65 64 74 68 69 72 74 79 73 65 76 65  undredthirtyseve
13e0: 6e 0a 20 20 74 77 6f 68 75 6e 64 72 65 64 74 68  n.  twohundredth
13f0: 69 72 74 79 65 69 67 68 74 20 74 77 6f 68 75 6e  irtyeight twohun
1400: 64 72 65 64 74 68 69 72 74 79 6e 69 6e 65 20 74  dredthirtynine t
1410: 77 6f 68 75 6e 64 72 65 64 66 6f 72 74 79 0a 20  wohundredforty. 
1420: 20 74 77 6f 68 75 6e 64 72 65 64 66 6f 72 74 79   twohundredforty
1430: 6f 6e 65 20 74 77 6f 68 75 6e 64 72 65 64 66 6f  one twohundredfo
1440: 72 74 79 74 77 6f 20 74 77 6f 68 75 6e 64 72 65  rtytwo twohundre
1450: 64 66 6f 72 74 79 74 68 72 65 65 0a 20 20 74 77  dfortythree.  tw
1460: 6f 68 75 6e 64 72 65 64 66 6f 72 74 79 66 6f 75  ohundredfortyfou
1470: 72 20 74 77 6f 68 75 6e 64 72 65 64 66 6f 72 74  r twohundredfort
1480: 79 66 69 76 65 20 74 77 6f 68 75 6e 64 72 65 64  yfive twohundred
1490: 66 6f 72 74 79 73 69 78 0a 20 20 74 77 6f 68 75  fortysix.  twohu
14a0: 6e 64 72 65 64 66 6f 72 74 79 73 65 76 65 6e 20  ndredfortyseven 
14b0: 74 77 6f 68 75 6e 64 72 65 64 66 6f 72 74 79 65  twohundredfortye
14c0: 69 67 68 74 20 74 77 6f 68 75 6e 64 72 65 64 66  ight twohundredf
14d0: 6f 72 74 79 6e 69 6e 65 0a 20 20 74 77 6f 68 75  ortynine.  twohu
14e0: 6e 64 72 65 64 66 69 66 74 79 20 74 77 6f 68 75  ndredfifty twohu
14f0: 6e 64 72 65 64 66 69 66 74 79 6f 6e 65 20 74 77  ndredfiftyone tw
1500: 6f 68 75 6e 64 72 65 64 66 69 66 74 79 74 77 6f  ohundredfiftytwo
1510: 20 74 77 6f 68 75 6e 64 72 65 64 66 69 66 74 79   twohundredfifty
1520: 74 68 72 65 65 0a 20 20 74 77 6f 68 75 6e 64 72  three.  twohundr
1530: 65 64 66 69 66 74 79 66 6f 75 72 20 74 77 6f 68  edfiftyfour twoh
1540: 75 6e 64 72 65 64 66 69 66 74 79 66 69 76 65 20  undredfiftyfive 
1550: 74 77 6f 68 75 6e 64 72 65 64 66 69 66 74 79 73  twohundredfiftys
1560: 69 78 0a 20 20 74 77 6f 68 75 6e 64 72 65 64 66  ix.  twohundredf
1570: 69 66 74 79 73 65 76 65 6e 20 74 77 6f 68 75 6e  iftyseven twohun
1580: 64 72 65 64 66 69 66 74 79 65 69 67 68 74 20 74  dredfiftyeight t
1590: 77 6f 68 75 6e 64 72 65 64 66 69 66 74 79 6e 69  wohundredfiftyni
15a0: 6e 65 0a 20 20 74 77 6f 68 75 6e 64 72 65 64 73  ne.  twohundreds
15b0: 69 78 74 79 20 74 77 6f 68 75 6e 64 72 65 64 73  ixty twohundreds
15c0: 69 78 74 79 6f 6e 65 20 74 77 6f 68 75 6e 64 72  ixtyone twohundr
15d0: 65 64 73 69 78 74 79 74 77 6f 20 74 77 6f 68 75  edsixtytwo twohu
15e0: 6e 64 72 65 64 73 69 78 74 79 74 68 72 65 65 0a  ndredsixtythree.
15f0: 20 20 74 77 6f 68 75 6e 64 72 65 64 73 69 78 74    twohundredsixt
1600: 79 66 6f 75 72 20 74 77 6f 68 75 6e 64 72 65 64  yfour twohundred
1610: 73 69 78 74 79 66 69 76 65 20 74 77 6f 68 75 6e  sixtyfive twohun
1620: 64 72 65 64 73 69 78 74 79 73 69 78 0a 20 20 74  dredsixtysix.  t
1630: 77 6f 68 75 6e 64 72 65 64 73 69 78 74 79 73 65  wohundredsixtyse
1640: 76 65 6e 20 74 77 6f 68 75 6e 64 72 65 64 73 69  ven twohundredsi
1650: 78 74 79 65 69 67 68 74 20 74 77 6f 68 75 6e 64  xtyeight twohund
1660: 72 65 64 73 69 78 74 79 6e 69 6e 65 0a 20 20 74  redsixtynine.  t
1670: 77 6f 68 75 6e 64 72 65 64 73 65 76 65 6e 74 79  wohundredseventy
1680: 20 74 77 6f 68 75 6e 64 72 65 64 73 65 76 65 6e   twohundredseven
1690: 74 79 6f 6e 65 20 74 77 6f 68 75 6e 64 72 65 64  tyone twohundred
16a0: 73 65 76 65 6e 74 79 74 77 6f 0a 20 20 74 77 6f  seventytwo.  two
16b0: 68 75 6e 64 72 65 64 73 65 76 65 6e 74 79 74 68  hundredseventyth
16c0: 72 65 65 20 74 77 6f 68 75 6e 64 72 65 64 73 65  ree twohundredse
16d0: 76 65 6e 74 79 66 6f 75 72 20 74 77 6f 68 75 6e  ventyfour twohun
16e0: 64 72 65 64 73 65 76 65 6e 74 79 66 69 76 65 0a  dredseventyfive.
16f0: 20 20 74 77 6f 68 75 6e 64 72 65 64 73 65 76 65    twohundredseve
1700: 6e 74 79 73 69 78 20 74 77 6f 68 75 6e 64 72 65  ntysix twohundre
1710: 64 73 65 76 65 6e 74 79 73 65 76 65 6e 20 74 77  dseventyseven tw
1720: 6f 68 75 6e 64 72 65 64 73 65 76 65 6e 74 79 65  ohundredseventye
1730: 69 67 68 74 0a 20 20 74 77 6f 68 75 6e 64 72 65  ight.  twohundre
1740: 64 73 65 76 65 6e 74 79 6e 69 6e 65 20 74 77 6f  dseventynine two
1750: 68 75 6e 64 72 65 64 65 69 67 68 74 79 20 74 77  hundredeighty tw
1760: 6f 68 75 6e 64 72 65 64 65 69 67 68 74 79 6f 6e  ohundredeightyon
1770: 65 0a 20 20 74 77 6f 68 75 6e 64 72 65 64 65 69  e.  twohundredei
1780: 67 68 74 79 74 77 6f 20 74 77 6f 68 75 6e 64 72  ghtytwo twohundr
1790: 65 64 65 69 67 68 74 79 74 68 72 65 65 20 74 77  edeightythree tw
17a0: 6f 68 75 6e 64 72 65 64 65 69 67 68 74 79 66 6f  ohundredeightyfo
17b0: 75 72 0a 20 20 74 77 6f 68 75 6e 64 72 65 64 65  ur.  twohundrede
17c0: 69 67 68 74 79 66 69 76 65 20 74 77 6f 68 75 6e  ightyfive twohun
17d0: 64 72 65 64 65 69 67 68 74 79 73 69 78 20 74 77  dredeightysix tw
17e0: 6f 68 75 6e 64 72 65 64 65 69 67 68 74 79 73 65  ohundredeightyse
17f0: 76 65 6e 0a 20 20 74 77 6f 68 75 6e 64 72 65 64  ven.  twohundred
1800: 65 69 67 68 74 79 65 69 67 68 74 20 74 77 6f 68  eightyeight twoh
1810: 75 6e 64 72 65 64 65 69 67 68 74 79 6e 69 6e 65  undredeightynine
1820: 20 74 77 6f 68 75 6e 64 72 65 64 6e 69 6e 65 74   twohundredninet
1830: 79 0a 20 20 74 77 6f 68 75 6e 64 72 65 64 6e 69  y.  twohundredni
1840: 6e 65 74 79 6f 6e 65 20 74 77 6f 68 75 6e 64 72  netyone twohundr
1850: 65 64 6e 69 6e 65 74 79 74 77 6f 20 74 77 6f 68  edninetytwo twoh
1860: 75 6e 64 72 65 64 6e 69 6e 65 74 79 74 68 72 65  undredninetythre
1870: 65 0a 20 20 74 77 6f 68 75 6e 64 72 65 64 6e 69  e.  twohundredni
1880: 6e 65 74 79 66 6f 75 72 20 74 77 6f 68 75 6e 64  netyfour twohund
1890: 72 65 64 6e 69 6e 65 74 79 66 69 76 65 20 74 77  redninetyfive tw
18a0: 6f 68 75 6e 64 72 65 64 6e 69 6e 65 74 79 73 69  ohundredninetysi
18b0: 78 0a 20 20 74 77 6f 68 75 6e 64 72 65 64 6e 69  x.  twohundredni
18c0: 6e 65 74 79 73 65 76 65 6e 20 74 77 6f 68 75 6e  netyseven twohun
18d0: 64 72 65 64 6e 69 6e 65 74 79 65 69 67 68 74 20  dredninetyeight 
18e0: 74 77 6f 68 75 6e 64 72 65 64 6e 69 6e 65 74 79  twohundredninety
18f0: 6e 69 6e 65 0a 20 20 74 68 72 65 65 68 75 6e 64  nine.  threehund
1900: 72 65 64 0a 7d 5d 0a 0a 66 6f 72 65 61 63 68 20  red.}]..foreach 
1910: 7b 44 4f 5f 4d 41 4c 4c 4f 43 5f 54 45 53 54 20  {DO_MALLOC_TEST 
1920: 65 6e 63 7d 20 7b 0a 20 20 30 20 75 74 66 38 0a  enc} {.  0 utf8.
1930: 20 20 31 20 75 74 66 38 0a 20 20 31 20 75 74 66    1 utf8.  1 utf
1940: 31 36 0a 7d 20 7b 0a 0a 20 20 64 62 20 63 6c 6f  16.} {..  db clo
1950: 73 65 0a 20 20 66 69 6c 65 20 64 65 6c 65 74 65  se.  file delete
1960: 20 2d 66 6f 72 63 65 20 74 65 73 74 2e 64 62 0a   -force test.db.
1970: 20 20 73 71 6c 69 74 65 33 20 64 62 20 74 65 73    sqlite3 db tes
1980: 74 2e 64 62 0a 20 20 73 71 6c 69 74 65 33 5f 64  t.db.  sqlite3_d
1990: 62 5f 63 6f 6e 66 69 67 5f 6c 6f 6f 6b 61 73 69  b_config_lookasi
19a0: 64 65 20 64 62 20 30 20 30 20 30 0a 20 20 64 62  de db 0 0 0.  db
19b0: 20 65 76 61 6c 20 22 50 52 41 47 4d 41 20 65 6e   eval "PRAGMA en
19c0: 63 6f 64 69 6e 67 20 3d 20 5c 22 24 65 6e 63 5c  coding = \"$enc\
19d0: 22 22 0a 0a 20 20 23 20 53 65 74 20 76 61 72 69  ""..  # Set vari
19e0: 61 62 6c 65 20 24 54 20 74 6f 20 74 68 65 20 74  able $T to the t
19f0: 65 73 74 20 6e 61 6d 65 20 70 72 65 66 69 78 20  est name prefix 
1a00: 66 6f 72 20 74 68 69 73 20 69 74 65 72 61 74 69  for this iterati
1a10: 6f 6e 20 6f 66 20 74 68 65 20 6c 6f 6f 70 2e 0a  on of the loop..
1a20: 20 20 23 0a 20 20 73 65 74 20 54 20 22 66 74 73    #.  set T "fts
1a30: 33 73 6e 69 70 70 65 74 2d 24 65 6e 63 22 0a 0a  3snippet-$enc"..
1a40: 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
1a50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
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 0a 20 20 23  ############.  #
1a90: 20 54 65 73 74 20 74 68 65 20 6f 66 66 73 65 74   Test the offset
1aa0: 20 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 23 0a 20   function..  #. 
1ab0: 20 64 6f 5f 74 65 73 74 20 24 54 2e 31 2e 31 20   do_test $T.1.1 
1ac0: 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20 7b 0a  {.    execsql {.
1ad0: 20 20 20 20 20 20 43 52 45 41 54 45 20 56 49 52        CREATE VIR
1ae0: 54 55 41 4c 20 54 41 42 4c 45 20 66 74 20 55 53  TUAL TABLE ft US
1af0: 49 4e 47 20 66 74 73 33 3b 0a 20 20 20 20 20 20  ING fts3;.      
1b00: 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 20 56  INSERT INTO ft V
1b10: 41 4c 55 45 53 28 27 78 78 78 20 78 78 78 20 78  ALUES('xxx xxx x
1b20: 78 78 20 78 78 78 27 29 3b 0a 20 20 20 20 7d 0a  xx xxx');.    }.
1b30: 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 6f 66 66 73    } {}.  do_offs
1b40: 65 74 73 5f 74 65 73 74 20 24 54 2e 31 2e 32 20  ets_test $T.1.2 
1b50: 7b 78 78 78 7d 20 7b 30 20 30 20 30 20 33 20 30  {xxx} {0 0 0 3 0
1b60: 20 30 20 34 20 33 20 30 20 30 20 38 20 33 20 30   0 4 3 0 0 8 3 0
1b70: 20 30 20 31 32 20 33 7d 0a 20 20 64 6f 5f 6f 66   0 12 3}.  do_of
1b80: 66 73 65 74 73 5f 74 65 73 74 20 24 54 2e 31 2e  fsets_test $T.1.
1b90: 33 20 7b 22 78 78 78 20 78 78 78 22 7d 20 7b 0a  3 {"xxx xxx"} {.
1ba0: 20 20 20 20 20 20 30 20 30 20 20 30 20 33 20 20        0 0  0 3  
1bb0: 20 20 20 30 20 30 20 20 34 20 33 20 20 20 20 20     0 0  4 3     
1bc0: 30 20 31 20 20 34 20 33 20 20 20 20 20 30 20 30  0 1  4 3     0 0
1bd0: 20 20 38 20 33 20 0a 20 20 20 20 20 20 30 20 31    8 3 .      0 1
1be0: 20 20 38 20 33 20 20 20 20 20 30 20 31 20 31 32    8 3     0 1 12
1bf0: 20 33 0a 20 20 7d 0a 20 20 64 6f 5f 6f 66 66 73   3.  }.  do_offs
1c00: 65 74 73 5f 74 65 73 74 20 24 54 2e 31 2e 34 20  ets_test $T.1.4 
1c10: 7b 22 78 78 78 20 78 78 78 22 20 78 78 78 7d 20  {"xxx xxx" xxx} 
1c20: 7b 0a 20 20 20 20 20 20 30 20 30 20 20 30 20 33  {.      0 0  0 3
1c30: 20 20 20 20 20 30 20 32 20 20 30 20 33 20 20 20       0 2  0 3   
1c40: 20 20 30 20 30 20 20 34 20 33 20 20 20 20 20 30    0 0  4 3     0
1c50: 20 31 20 20 34 20 33 20 0a 20 20 20 20 20 20 30   1  4 3 .      0
1c60: 20 32 20 20 34 20 33 20 20 20 20 20 30 20 30 20   2  4 3     0 0 
1c70: 20 38 20 33 20 20 20 20 20 30 20 31 20 20 38 20   8 3     0 1  8 
1c80: 33 20 20 20 20 20 30 20 32 20 20 38 20 33 20 0a  3     0 2  8 3 .
1c90: 20 20 20 20 20 20 30 20 31 20 31 32 20 33 20 20        0 1 12 3  
1ca0: 20 20 20 30 20 32 20 31 32 20 33 0a 20 20 7d 0a     0 2 12 3.  }.
1cb0: 20 20 64 6f 5f 6f 66 66 73 65 74 73 5f 74 65 73    do_offsets_tes
1cc0: 74 20 24 54 2e 31 2e 35 20 7b 78 78 78 20 22 78  t $T.1.5 {xxx "x
1cd0: 78 78 20 78 78 78 22 7d 20 7b 0a 20 20 20 20 20  xx xxx"} {.     
1ce0: 20 30 20 30 20 20 30 20 33 20 20 20 20 20 30 20   0 0  0 3     0 
1cf0: 31 20 20 30 20 33 20 20 20 20 20 30 20 30 20 20  1  0 3     0 0  
1d00: 34 20 33 20 20 20 20 20 30 20 31 20 20 34 20 33  4 3     0 1  4 3
1d10: 20 0a 20 20 20 20 20 20 30 20 32 20 20 34 20 33   .      0 2  4 3
1d20: 20 20 20 20 20 30 20 30 20 20 38 20 33 20 20 20       0 0  8 3   
1d30: 20 20 30 20 31 20 20 38 20 33 20 20 20 20 20 30    0 1  8 3     0
1d40: 20 32 20 20 38 20 33 20 0a 20 20 20 20 20 20 30   2  8 3 .      0
1d50: 20 30 20 31 32 20 33 20 20 20 20 20 30 20 32 20   0 12 3     0 2 
1d60: 31 32 20 33 0a 20 20 7d 0a 0a 20 20 64 6f 5f 74  12 3.  }..  do_t
1d70: 65 73 74 20 24 54 2e 32 2e 31 20 7b 0a 20 20 20  est $T.2.1 {.   
1d80: 20 73 65 74 20 76 31 20 5b 6c 72 61 6e 67 65 20   set v1 [lrange 
1d90: 24 6e 75 6d 62 65 72 73 20 30 20 39 39 5d 0a 20  $numbers 0 99]. 
1da0: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
1db0: 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49 46     DROP TABLE IF
1dc0: 20 45 58 49 53 54 53 20 66 74 3b 0a 20 20 20 20   EXISTS ft;.    
1dd0: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
1de0: 20 54 41 42 4c 45 20 66 74 20 55 53 49 4e 47 20   TABLE ft USING 
1df0: 66 74 73 33 28 61 2c 20 62 29 3b 0a 20 20 20 20  fts3(a, b);.    
1e00: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74    INSERT INTO ft
1e10: 20 56 41 4c 55 45 53 28 24 76 31 2c 20 24 6e 75   VALUES($v1, $nu
1e20: 6d 62 65 72 73 29 3b 0a 20 20 20 20 20 20 49 4e  mbers);.      IN
1e30: 53 45 52 54 20 49 4e 54 4f 20 66 74 20 56 41 4c  SERT INTO ft VAL
1e40: 55 45 53 28 24 76 31 2c 20 4e 55 4c 4c 29 3b 0a  UES($v1, NULL);.
1e50: 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 0a 20 20      }.  } {}..  
1e60: 73 65 74 20 6f 66 66 20 5b 73 74 72 69 6e 67 20  set off [string 
1e70: 66 69 72 73 74 20 22 74 77 6f 68 75 6e 64 72 65  first "twohundre
1e80: 64 20 22 20 24 6e 75 6d 62 65 72 73 5d 0a 20 20  d " $numbers].  
1e90: 64 6f 5f 6f 66 66 73 65 74 73 5f 74 65 73 74 20  do_offsets_test 
1ea0: 24 54 2e 32 2e 31 20 7b 74 77 6f 68 75 6e 64 72  $T.2.1 {twohundr
1eb0: 65 64 7d 20 5b 6c 69 73 74 20 31 20 30 20 24 6f  ed} [list 1 0 $o
1ec0: 66 66 20 31 30 5d 0a 0a 20 20 73 65 74 20 6f 66  ff 10]..  set of
1ed0: 66 20 5b 73 74 72 69 6e 67 20 66 69 72 73 74 20  f [string first 
1ee0: 22 6f 6e 65 68 75 6e 64 72 65 64 20 22 20 24 6e  "onehundred " $n
1ef0: 75 6d 62 65 72 73 5d 0a 20 20 64 6f 5f 6f 66 66  umbers].  do_off
1f00: 73 65 74 73 5f 74 65 73 74 20 24 54 2e 32 2e 32  sets_test $T.2.2
1f10: 20 7b 6f 6e 65 68 75 6e 64 72 65 64 7d 20 5c 0a   {onehundred} \.
1f20: 20 20 20 20 5b 6c 69 73 74 20 30 20 30 20 24 6f      [list 0 0 $o
1f30: 66 66 20 31 30 20 31 20 30 20 24 6f 66 66 20 31  ff 10 1 0 $off 1
1f40: 30 5d 20 5b 6c 69 73 74 20 30 20 30 20 24 6f 66  0] [list 0 0 $of
1f50: 66 20 31 30 5d 0a 0a 20 20 23 20 54 65 73 74 20  f 10]..  # Test 
1f60: 61 20 63 6f 72 72 75 70 74 69 6f 6e 20 63 61 73  a corruption cas
1f70: 65 3a 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 55  e:.  execsql { U
1f80: 50 44 41 54 45 20 66 74 5f 63 6f 6e 74 65 6e 74  PDATE ft_content
1f90: 20 53 45 54 20 63 31 62 20 3d 20 27 68 65 6c 6c   SET c1b = 'hell
1fa0: 6f 20 77 6f 72 6c 64 27 20 57 48 45 52 45 20 63  o world' WHERE c
1fb0: 31 62 20 3d 20 24 6e 75 6d 62 65 72 73 20 7d 0a  1b = $numbers }.
1fc0: 20 20 64 6f 5f 65 72 72 6f 72 5f 74 65 73 74 20    do_error_test 
1fd0: 24 54 2e 32 2e 33 20 7b 0a 20 20 20 20 53 45 4c  $T.2.3 {.    SEL
1fe0: 45 43 54 20 6f 66 66 73 65 74 73 28 66 74 29 20  ECT offsets(ft) 
1ff0: 46 52 4f 4d 20 66 74 20 57 48 45 52 45 20 66 74  FROM ft WHERE ft
2000: 20 4d 41 54 43 48 20 27 6f 6e 65 68 75 6e 64 72   MATCH 'onehundr
2010: 65 64 27 0a 20 20 7d 20 7b 64 61 74 61 62 61 73  ed'.  } {databas
2020: 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73 20  e disk image is 
2030: 6d 61 6c 66 6f 72 6d 65 64 7d 0a 20 20 0a 20 20  malformed}.  .  
2040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2050: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2060: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2070: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2080: 23 23 23 23 23 23 23 23 23 23 0a 20 20 23 20 54  ##########.  # T
2090: 65 73 74 20 74 68 65 20 73 6e 69 70 70 65 74 20  est the snippet 
20a0: 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 23 0a 20 20  function..  #.  
20b0: 70 72 6f 63 20 64 6f 5f 73 6e 69 70 70 65 74 5f  proc do_snippet_
20c0: 74 65 73 74 20 7b 6e 61 6d 65 20 65 78 70 72 20  test {name expr 
20d0: 69 43 6f 6c 20 6e 54 6f 6b 20 61 72 67 73 7d 20  iCol nTok args} 
20e0: 7b 0a 20 20 20 20 73 65 74 20 72 65 73 20 5b 6c  {.    set res [l
20f0: 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68  ist].    foreach
2100: 20 61 20 24 61 72 67 73 20 7b 20 6c 61 70 70 65   a $args { lappe
2110: 6e 64 20 72 65 73 20 5b 73 74 72 69 6e 67 20 74  nd res [string t
2120: 72 69 6d 20 24 61 5d 20 7d 0a 20 20 20 20 64 6f  rim $a] }.    do
2130: 5f 73 65 6c 65 63 74 5f 74 65 73 74 20 24 6e 61  _select_test $na
2140: 6d 65 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43  me {.      SELEC
2150: 54 20 73 6e 69 70 70 65 74 28 66 74 2c 27 7b 27  T snippet(ft,'{'
2160: 2c 27 7d 27 2c 27 2e 2e 2e 27 2c 24 69 43 6f 6c  ,'}','...',$iCol
2170: 2c 24 6e 54 6f 6b 29 20 46 52 4f 4d 20 66 74 20  ,$nTok) FROM ft 
2180: 57 48 45 52 45 20 66 74 20 4d 41 54 43 48 20 24  WHERE ft MATCH $
2190: 65 78 70 72 0a 20 20 20 20 7d 20 24 72 65 73 0a  expr.    } $res.
21a0: 20 20 7d 0a 20 20 64 6f 5f 74 65 73 74 20 24 54    }.  do_test $T
21b0: 2e 33 2e 31 20 7b 0a 20 20 20 20 65 78 65 63 73  .3.1 {.    execs
21c0: 71 6c 20 7b 0a 20 20 20 20 20 20 44 52 4f 50 20  ql {.      DROP 
21d0: 54 41 42 4c 45 20 49 46 20 45 58 49 53 54 53 20  TABLE IF EXISTS 
21e0: 66 74 3b 0a 20 20 20 20 20 20 43 52 45 41 54 45  ft;.      CREATE
21f0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 66   VIRTUAL TABLE f
2200: 74 20 55 53 49 4e 47 20 66 74 73 33 3b 0a 20 20  t USING fts3;.  
2210: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2220: 66 74 20 56 41 4c 55 45 53 28 27 6f 6e 65 20 74  ft VALUES('one t
2230: 77 6f 20 74 68 72 65 65 20 66 6f 75 72 20 66 69  wo three four fi
2240: 76 65 20 73 69 78 20 73 65 76 65 6e 20 65 69 67  ve six seven eig
2250: 68 74 20 6e 69 6e 65 20 74 65 6e 27 29 3b 0a 20  ht nine ten');. 
2260: 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f     }.  } {}.  do
2270: 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54  _snippet_test $T
2280: 2e 33 2e 32 20 20 6f 6e 65 20 20 20 20 30 20 35  .3.2  one    0 5
2290: 20 22 7b 6f 6e 65 7d 20 74 77 6f 20 74 68 72 65   "{one} two thre
22a0: 65 20 66 6f 75 72 20 66 69 76 65 2e 2e 2e 22 0a  e four five...".
22b0: 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73    do_snippet_tes
22c0: 74 20 24 54 2e 33 2e 33 20 20 74 77 6f 20 20 20  t $T.3.3  two   
22d0: 20 30 20 35 20 22 6f 6e 65 20 7b 74 77 6f 7d 20   0 5 "one {two} 
22e0: 74 68 72 65 65 20 66 6f 75 72 20 66 69 76 65 2e  three four five.
22f0: 2e 2e 22 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74  ..".  do_snippet
2300: 5f 74 65 73 74 20 24 54 2e 33 2e 34 20 20 74 68  _test $T.3.4  th
2310: 72 65 65 20 20 30 20 35 20 22 6f 6e 65 20 74 77  ree  0 5 "one tw
2320: 6f 20 7b 74 68 72 65 65 7d 20 66 6f 75 72 20 66  o {three} four f
2330: 69 76 65 2e 2e 2e 22 0a 20 20 64 6f 5f 73 6e 69  ive...".  do_sni
2340: 70 70 65 74 5f 74 65 73 74 20 24 54 2e 33 2e 35  ppet_test $T.3.5
2350: 20 20 66 6f 75 72 20 20 20 30 20 35 20 22 2e 2e    four   0 5 "..
2360: 2e 74 77 6f 20 74 68 72 65 65 20 7b 66 6f 75 72  .two three {four
2370: 7d 20 66 69 76 65 20 73 69 78 2e 2e 2e 22 0a 20  } five six...". 
2380: 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74   do_snippet_test
2390: 20 24 54 2e 33 2e 36 20 20 66 69 76 65 20 20 20   $T.3.6  five   
23a0: 30 20 35 20 22 2e 2e 2e 74 68 72 65 65 20 66 6f  0 5 "...three fo
23b0: 75 72 20 7b 66 69 76 65 7d 20 73 69 78 20 73 65  ur {five} six se
23c0: 76 65 6e 2e 2e 2e 22 0a 20 20 64 6f 5f 73 6e 69  ven...".  do_sni
23d0: 70 70 65 74 5f 74 65 73 74 20 24 54 2e 33 2e 37  ppet_test $T.3.7
23e0: 20 20 73 69 78 20 20 20 20 30 20 35 20 22 2e 2e    six    0 5 "..
23f0: 2e 66 6f 75 72 20 66 69 76 65 20 7b 73 69 78 7d  .four five {six}
2400: 20 73 65 76 65 6e 20 65 69 67 68 74 2e 2e 2e 22   seven eight..."
2410: 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65  .  do_snippet_te
2420: 73 74 20 24 54 2e 33 2e 38 20 20 73 65 76 65 6e  st $T.3.8  seven
2430: 20 20 30 20 35 20 22 2e 2e 2e 66 69 76 65 20 73    0 5 "...five s
2440: 69 78 20 7b 73 65 76 65 6e 7d 20 65 69 67 68 74  ix {seven} eight
2450: 20 6e 69 6e 65 2e 2e 2e 22 0a 20 20 64 6f 5f 73   nine...".  do_s
2460: 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e 33  nippet_test $T.3
2470: 2e 39 20 20 65 69 67 68 74 20 20 30 20 35 20 22  .9  eight  0 5 "
2480: 2e 2e 2e 73 69 78 20 73 65 76 65 6e 20 7b 65 69  ...six seven {ei
2490: 67 68 74 7d 20 6e 69 6e 65 20 74 65 6e 22 0a 20  ght} nine ten". 
24a0: 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74   do_snippet_test
24b0: 20 24 54 2e 33 2e 31 30 20 6e 69 6e 65 20 20 20   $T.3.10 nine   
24c0: 30 20 35 20 22 2e 2e 2e 73 69 78 20 73 65 76 65  0 5 "...six seve
24d0: 6e 20 65 69 67 68 74 20 7b 6e 69 6e 65 7d 20 74  n eight {nine} t
24e0: 65 6e 22 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74  en".  do_snippet
24f0: 5f 74 65 73 74 20 24 54 2e 33 2e 31 31 20 74 65  _test $T.3.11 te
2500: 6e 20 20 20 20 30 20 35 20 22 2e 2e 2e 73 69 78  n    0 5 "...six
2510: 20 73 65 76 65 6e 20 65 69 67 68 74 20 6e 69 6e   seven eight nin
2520: 65 20 7b 74 65 6e 7d 22 0a 20 20 0a 20 20 64 6f  e {ten}".  .  do
2530: 5f 74 65 73 74 20 24 54 2e 34 2e 31 20 7b 0a 20  _test $T.4.1 {. 
2540: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
2550: 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66     INSERT INTO f
2560: 74 20 56 41 4c 55 45 53 28 0a 20 20 20 20 20 20  t VALUES(.      
2570: 20 20 20 20 20 27 6f 6e 65 20 74 77 6f 20 74 68       'one two th
2580: 72 65 65 20 66 6f 75 72 20 66 69 76 65 20 27 0a  ree four five '.
2590: 20 20 20 20 20 20 20 20 7c 7c 20 27 73 69 78 20          || 'six 
25a0: 73 65 76 65 6e 20 65 69 67 68 74 20 6e 69 6e 65  seven eight nine
25b0: 20 74 65 6e 20 27 0a 20 20 20 20 20 20 20 20 7c   ten '.        |
25c0: 7c 20 27 65 6c 65 76 65 6e 20 74 77 65 6c 76 65  | 'eleven twelve
25d0: 20 74 68 69 72 74 65 65 6e 20 66 6f 75 72 74 65   thirteen fourte
25e0: 65 6e 20 66 69 66 74 65 65 6e 20 27 0a 20 20 20  en fifteen '.   
25f0: 20 20 20 20 20 7c 7c 20 27 73 69 78 74 65 65 6e       || 'sixteen
2600: 20 73 65 76 65 6e 74 65 65 6e 20 65 69 67 68 74   seventeen eight
2610: 65 65 6e 20 6e 69 6e 65 74 65 65 6e 20 74 77 65  een nineteen twe
2620: 6e 74 79 20 27 0a 20 20 20 20 20 20 20 20 7c 7c  nty '.        ||
2630: 20 27 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20   'one two three 
2640: 66 6f 75 72 20 66 69 76 65 20 27 0a 20 20 20 20  four five '.    
2650: 20 20 20 20 7c 7c 20 27 73 69 78 20 73 65 76 65      || 'six seve
2660: 6e 20 65 69 67 68 74 20 6e 69 6e 65 20 74 65 6e  n eight nine ten
2670: 20 27 0a 20 20 20 20 20 20 20 20 7c 7c 20 27 65   '.        || 'e
2680: 6c 65 76 65 6e 20 74 77 65 6c 76 65 20 74 68 69  leven twelve thi
2690: 72 74 65 65 6e 20 66 6f 75 72 74 65 65 6e 20 66  rteen fourteen f
26a0: 69 66 74 65 65 6e 20 27 0a 20 20 20 20 20 20 20  ifteen '.       
26b0: 20 7c 7c 20 27 73 69 78 74 65 65 6e 20 73 65 76   || 'sixteen sev
26c0: 65 6e 74 65 65 6e 20 65 69 67 68 74 65 65 6e 20  enteen eighteen 
26d0: 6e 69 6e 65 74 65 65 6e 20 74 77 65 6e 74 79 27  nineteen twenty'
26e0: 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 7d 0a  .      );.    }.
26f0: 20 20 7d 20 7b 7d 0a 20 20 0a 20 20 64 6f 5f 73    } {}.  .  do_s
2700: 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e 34  nippet_test $T.4
2710: 2e 32 20 7b 6f 6e 65 20 6e 69 6e 65 7d 20 30 20  .2 {one nine} 0 
2720: 35 20 7b 0a 20 20 20 20 20 7b 6f 6e 65 7d 20 74  5 {.     {one} t
2730: 77 6f 20 74 68 72 65 65 2e 2e 2e 65 69 67 68 74  wo three...eight
2740: 20 7b 6e 69 6e 65 7d 20 74 65 6e 0a 20 20 7d 20   {nine} ten.  } 
2750: 7b 0a 20 20 20 20 20 7b 6f 6e 65 7d 20 74 77 6f  {.     {one} two
2760: 20 74 68 72 65 65 2e 2e 2e 65 69 67 68 74 20 7b   three...eight {
2770: 6e 69 6e 65 7d 20 74 65 6e 2e 2e 2e 0a 20 20 7d  nine} ten....  }
2780: 0a 20 20 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74  .  .  do_snippet
2790: 5f 74 65 73 74 20 24 54 2e 34 2e 33 20 7b 6f 6e  _test $T.4.3 {on
27a0: 65 20 6e 69 6e 65 7d 20 30 20 2d 35 20 7b 0a 20  e nine} 0 -5 {. 
27b0: 20 20 20 20 7b 6f 6e 65 7d 20 74 77 6f 20 74 68      {one} two th
27c0: 72 65 65 20 66 6f 75 72 20 66 69 76 65 2e 2e 2e  ree four five...
27d0: 73 69 78 20 73 65 76 65 6e 20 65 69 67 68 74 20  six seven eight 
27e0: 7b 6e 69 6e 65 7d 20 74 65 6e 0a 20 20 7d 20 7b  {nine} ten.  } {
27f0: 0a 20 20 20 20 20 7b 6f 6e 65 7d 20 74 77 6f 20  .     {one} two 
2800: 74 68 72 65 65 20 66 6f 75 72 20 66 69 76 65 2e  three four five.
2810: 2e 2e 73 65 76 65 6e 20 65 69 67 68 74 20 7b 6e  ..seven eight {n
2820: 69 6e 65 7d 20 74 65 6e 20 65 6c 65 76 65 6e 2e  ine} ten eleven.
2830: 2e 2e 0a 20 20 7d 0a 20 20 64 6f 5f 73 6e 69 70  ...  }.  do_snip
2840: 70 65 74 5f 74 65 73 74 20 24 54 2e 34 2e 33 20  pet_test $T.4.3 
2850: 7b 6f 6e 65 20 6e 69 6e 65 74 65 65 6e 7d 20 30  {one nineteen} 0
2860: 20 2d 35 20 7b 0a 20 20 20 20 20 2e 2e 2e 65 69   -5 {.     ...ei
2870: 67 68 74 65 65 6e 20 7b 6e 69 6e 65 74 65 65 6e  ghteen {nineteen
2880: 7d 20 74 77 65 6e 74 79 20 7b 6f 6e 65 7d 20 74  } twenty {one} t
2890: 77 6f 2e 2e 2e 0a 20 20 7d 0a 20 20 64 6f 5f 73  wo....  }.  do_s
28a0: 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e 34  nippet_test $T.4
28b0: 2e 34 20 7b 74 77 6f 20 6e 69 6e 65 74 65 65 6e  .4 {two nineteen
28c0: 7d 20 30 20 2d 35 20 7b 0a 20 20 20 20 20 2e 2e  } 0 -5 {.     ..
28d0: 2e 65 69 67 68 74 65 65 6e 20 7b 6e 69 6e 65 74  .eighteen {ninet
28e0: 65 65 6e 7d 20 74 77 65 6e 74 79 20 6f 6e 65 20  een} twenty one 
28f0: 7b 74 77 6f 7d 2e 2e 2e 0a 20 20 7d 0a 20 20 64  {two}....  }.  d
2900: 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24  o_snippet_test $
2910: 54 2e 34 2e 35 20 7b 74 68 72 65 65 20 6e 69 6e  T.4.5 {three nin
2920: 65 74 65 65 6e 7d 20 30 20 2d 35 20 7b 0a 20 20  eteen} 0 -5 {.  
2930: 20 20 20 2e 2e 2e 7b 6e 69 6e 65 74 65 65 6e 7d     ...{nineteen}
2940: 20 74 77 65 6e 74 79 20 6f 6e 65 20 74 77 6f 20   twenty one two 
2950: 7b 74 68 72 65 65 7d 2e 2e 2e 0a 20 20 7d 0a 20  {three}....  }. 
2960: 20 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74   .  do_snippet_t
2970: 65 73 74 20 24 54 2e 34 2e 36 20 7b 66 6f 75 72  est $T.4.6 {four
2980: 20 6e 69 6e 65 74 65 65 6e 7d 20 30 20 2d 35 20   nineteen} 0 -5 
2990: 7b 0a 20 20 20 20 20 2e 2e 2e 74 77 6f 20 74 68  {.     ...two th
29a0: 72 65 65 20 7b 66 6f 75 72 7d 20 66 69 76 65 20  ree {four} five 
29b0: 73 69 78 2e 2e 2e 73 65 76 65 6e 74 65 65 6e 20  six...seventeen 
29c0: 65 69 67 68 74 65 65 6e 20 7b 6e 69 6e 65 74 65  eighteen {ninete
29d0: 65 6e 7d 20 74 77 65 6e 74 79 20 6f 6e 65 2e 2e  en} twenty one..
29e0: 2e 0a 20 20 7d 0a 20 20 64 6f 5f 73 6e 69 70 70  ..  }.  do_snipp
29f0: 65 74 5f 74 65 73 74 20 24 54 2e 34 2e 37 20 7b  et_test $T.4.7 {
2a00: 66 6f 75 72 20 4e 45 41 52 20 6e 69 6e 65 74 65  four NEAR ninete
2a10: 65 6e 7d 20 30 20 2d 35 20 7b 0a 20 20 20 20 20  en} 0 -5 {.     
2a20: 2e 2e 2e 73 65 76 65 6e 74 65 65 6e 20 65 69 67  ...seventeen eig
2a30: 68 74 65 65 6e 20 7b 6e 69 6e 65 74 65 65 6e 7d  hteen {nineteen}
2a40: 20 74 77 65 6e 74 79 20 6f 6e 65 2e 2e 2e 74 77   twenty one...tw
2a50: 6f 20 74 68 72 65 65 20 7b 66 6f 75 72 7d 20 66  o three {four} f
2a60: 69 76 65 20 73 69 78 2e 2e 2e 0a 20 20 7d 0a 20  ive six....  }. 
2a70: 20 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74   .  do_snippet_t
2a80: 65 73 74 20 24 54 2e 34 2e 38 20 7b 66 6f 75 72  est $T.4.8 {four
2a90: 20 6e 69 6e 65 74 65 65 6e 7d 20 30 20 35 20 7b   nineteen} 0 5 {
2aa0: 0a 20 20 20 20 20 2e 2e 2e 74 68 72 65 65 20 7b  .     ...three {
2ab0: 66 6f 75 72 7d 20 66 69 76 65 2e 2e 2e 65 69 67  four} five...eig
2ac0: 68 74 65 65 6e 20 7b 6e 69 6e 65 74 65 65 6e 7d  hteen {nineteen}
2ad0: 20 74 77 65 6e 74 79 2e 2e 2e 0a 20 20 7d 0a 20   twenty....  }. 
2ae0: 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74   do_snippet_test
2af0: 20 24 54 2e 34 2e 39 20 7b 66 6f 75 72 20 4e 45   $T.4.9 {four NE
2b00: 41 52 20 6e 69 6e 65 74 65 65 6e 7d 20 30 20 35  AR nineteen} 0 5
2b10: 20 7b 0a 20 20 20 20 20 2e 2e 2e 65 69 67 68 74   {.     ...eight
2b20: 65 65 6e 20 7b 6e 69 6e 65 74 65 65 6e 7d 20 74  een {nineteen} t
2b30: 77 65 6e 74 79 2e 2e 2e 74 68 72 65 65 20 7b 66  wenty...three {f
2b40: 6f 75 72 7d 20 66 69 76 65 2e 2e 2e 0a 20 20 7d  our} five....  }
2b50: 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65  .  do_snippet_te
2b60: 73 74 20 24 54 2e 34 2e 31 30 20 7b 66 6f 75 72  st $T.4.10 {four
2b70: 20 4e 45 41 52 20 6e 69 6e 65 74 65 65 6e 7d 20   NEAR nineteen} 
2b80: 30 20 2d 35 20 7b 0a 20 20 20 20 20 2e 2e 2e 73  0 -5 {.     ...s
2b90: 65 76 65 6e 74 65 65 6e 20 65 69 67 68 74 65 65  eventeen eightee
2ba0: 6e 20 7b 6e 69 6e 65 74 65 65 6e 7d 20 74 77 65  n {nineteen} twe
2bb0: 6e 74 79 20 6f 6e 65 2e 2e 2e 74 77 6f 20 74 68  nty one...two th
2bc0: 72 65 65 20 7b 66 6f 75 72 7d 20 66 69 76 65 20  ree {four} five 
2bd0: 73 69 78 2e 2e 2e 0a 20 20 7d 0a 20 20 64 6f 5f  six....  }.  do_
2be0: 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e  snippet_test $T.
2bf0: 34 2e 31 31 20 7b 66 6f 75 72 20 4e 4f 54 20 28  4.11 {four NOT (
2c00: 6e 69 6e 65 74 65 65 6e 20 74 77 65 6e 74 79 6f  nineteen twentyo
2c10: 6e 65 29 7d 20 30 20 35 20 7b 0a 20 20 20 20 20  ne)} 0 5 {.     
2c20: 2e 2e 2e 74 77 6f 20 74 68 72 65 65 20 7b 66 6f  ...two three {fo
2c30: 75 72 7d 20 66 69 76 65 20 73 69 78 2e 2e 2e 0a  ur} five six....
2c40: 20 20 7d 20 7b 0a 20 20 20 20 20 2e 2e 2e 74 77    } {.     ...tw
2c50: 6f 20 74 68 72 65 65 20 7b 66 6f 75 72 7d 20 66  o three {four} f
2c60: 69 76 65 20 73 69 78 2e 2e 2e 0a 20 20 7d 0a 20  ive six....  }. 
2c70: 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74   do_snippet_test
2c80: 20 24 54 2e 34 2e 31 32 20 7b 66 6f 75 72 20 4f   $T.4.12 {four O
2c90: 52 20 6e 69 6e 65 74 65 65 6e 20 4e 45 41 52 20  R nineteen NEAR 
2ca0: 74 77 65 6e 74 79 6f 6e 65 7d 20 30 20 35 20 7b  twentyone} 0 5 {
2cb0: 0a 20 20 20 20 20 2e 2e 2e 74 77 6f 20 74 68 72  .     ...two thr
2cc0: 65 65 20 7b 66 6f 75 72 7d 20 66 69 76 65 20 73  ee {four} five s
2cd0: 69 78 2e 2e 2e 0a 20 20 7d 20 7b 0a 20 20 20 20  ix....  } {.    
2ce0: 20 2e 2e 2e 74 77 6f 20 74 68 72 65 65 20 7b 66   ...two three {f
2cf0: 6f 75 72 7d 20 66 69 76 65 20 73 69 78 2e 2e 2e  our} five six...
2d00: 0a 20 20 7d 0a 20 20 0a 20 20 64 6f 5f 74 65 73  .  }.  .  do_tes
2d10: 74 20 24 54 2e 35 2e 31 20 7b 0a 20 20 20 20 65  t $T.5.1 {.    e
2d20: 78 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 44  xecsql {.      D
2d30: 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49  ROP TABLE IF EXI
2d40: 53 54 53 20 66 74 3b 0a 20 20 20 20 20 20 43 52  STS ft;.      CR
2d50: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
2d60: 4c 45 20 66 74 20 55 53 49 4e 47 20 66 74 73 33  LE ft USING fts3
2d70: 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 20 20 20  (a, b, c);.     
2d80: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 20   INSERT INTO ft 
2d90: 56 41 4c 55 45 53 28 0a 20 20 20 20 20 20 20 20  VALUES(.        
2da0: 27 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20 66  'one two three f
2db0: 6f 75 72 20 66 69 76 65 27 2c 20 0a 20 20 20 20  our five', .    
2dc0: 20 20 20 20 27 66 6f 75 72 20 66 69 76 65 20 73      'four five s
2dd0: 69 78 20 73 65 76 65 6e 20 65 69 67 68 74 27 2c  ix seven eight',
2de0: 20 0a 20 20 20 20 20 20 20 20 27 73 65 76 65 6e   .        'seven
2df0: 20 65 69 67 68 74 20 6e 69 6e 65 20 74 65 6e 20   eight nine ten 
2e00: 65 6c 65 76 65 6e 27 0a 20 20 20 20 20 20 29 3b  eleven'.      );
2e10: 0a 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20  .    }.  } {}.  
2e20: 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65  .  do_snippet_te
2e30: 73 74 20 24 54 2e 35 2e 32 20 7b 66 69 76 65 7d  st $T.5.2 {five}
2e40: 20 2d 31 20 33 20 7b 2e 2e 2e 74 68 72 65 65 20   -1 3 {...three 
2e50: 66 6f 75 72 20 7b 66 69 76 65 7d 7d 0a 20 20 64  four {five}}.  d
2e60: 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74 20 24  o_snippet_test $
2e70: 54 2e 35 2e 33 20 7b 66 69 76 65 7d 20 20 30 20  T.5.3 {five}  0 
2e80: 33 20 7b 2e 2e 2e 74 68 72 65 65 20 66 6f 75 72  3 {...three four
2e90: 20 7b 66 69 76 65 7d 7d 0a 20 20 64 6f 5f 73 6e   {five}}.  do_sn
2ea0: 69 70 70 65 74 5f 74 65 73 74 20 24 54 2e 35 2e  ippet_test $T.5.
2eb0: 34 20 7b 66 69 76 65 7d 20 20 31 20 33 20 7b 66  4 {five}  1 3 {f
2ec0: 6f 75 72 20 7b 66 69 76 65 7d 20 73 69 78 2e 2e  our {five} six..
2ed0: 2e 7d 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f  .}.  do_snippet_
2ee0: 74 65 73 74 20 24 54 2e 35 2e 35 20 7b 66 69 76  test $T.5.5 {fiv
2ef0: 65 7d 20 20 32 20 33 20 7b 73 65 76 65 6e 20 65  e}  2 3 {seven e
2f00: 69 67 68 74 20 6e 69 6e 65 2e 2e 2e 7d 0a 20 20  ight nine...}.  
2f10: 0a 20 20 64 6f 5f 74 65 73 74 20 24 54 2e 35 2e  .  do_test $T.5.
2f20: 36 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  6 {.    execsql 
2f30: 7b 20 55 50 44 41 54 45 20 66 74 20 53 45 54 20  { UPDATE ft SET 
2f40: 62 20 3d 20 4e 55 4c 4c 20 7d 0a 20 20 7d 20 7b  b = NULL }.  } {
2f50: 7d 0a 20 20 0a 20 20 64 6f 5f 73 6e 69 70 70 65  }.  .  do_snippe
2f60: 74 5f 74 65 73 74 20 24 54 2e 35 2e 37 20 20 7b  t_test $T.5.7  {
2f70: 66 69 76 65 7d 20 2d 31 20 33 20 7b 2e 2e 2e 74  five} -1 3 {...t
2f80: 68 72 65 65 20 66 6f 75 72 20 7b 66 69 76 65 7d  hree four {five}
2f90: 7d 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74  }.  do_snippet_t
2fa0: 65 73 74 20 24 54 2e 35 2e 38 20 20 7b 66 69 76  est $T.5.8  {fiv
2fb0: 65 7d 20 20 30 20 33 20 7b 2e 2e 2e 74 68 72 65  e}  0 3 {...thre
2fc0: 65 20 66 6f 75 72 20 7b 66 69 76 65 7d 7d 0a 20  e four {five}}. 
2fd0: 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74 65 73 74   do_snippet_test
2fe0: 20 24 54 2e 35 2e 39 20 20 7b 66 69 76 65 7d 20   $T.5.9  {five} 
2ff0: 20 31 20 33 20 7b 7d 0a 20 20 64 6f 5f 73 6e 69   1 3 {}.  do_sni
3000: 70 70 65 74 5f 74 65 73 74 20 24 54 2e 35 2e 31  ppet_test $T.5.1
3010: 30 20 7b 66 69 76 65 7d 20 20 32 20 33 20 7b 73  0 {five}  2 3 {s
3020: 65 76 65 6e 20 65 69 67 68 74 20 6e 69 6e 65 2e  even eight nine.
3030: 2e 2e 7d 0a 20 20 0a 20 20 64 6f 5f 73 6e 69 70  ..}.  .  do_snip
3040: 70 65 74 5f 74 65 73 74 20 24 54 2e 35 2e 31 31  pet_test $T.5.11
3050: 20 7b 6f 6e 65 20 22 73 65 76 65 6e 20 65 69 67   {one "seven eig
3060: 68 74 20 6e 69 6e 65 22 7d 20 2d 31 20 2d 33 20  ht nine"} -1 -3 
3070: 7b 0a 20 20 20 20 7b 6f 6e 65 7d 20 74 77 6f 20  {.    {one} two 
3080: 74 68 72 65 65 2e 2e 2e 7b 73 65 76 65 6e 7d 20  three...{seven} 
3090: 7b 65 69 67 68 74 7d 20 7b 6e 69 6e 65 7d 2e 2e  {eight} {nine}..
30a0: 2e 0a 20 20 7d 0a 0a 20 20 64 6f 5f 74 65 73 74  ..  }..  do_test
30b0: 20 24 54 2e 36 2e 31 20 7b 0a 20 20 20 20 65 78   $T.6.1 {.    ex
30c0: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 52  ecsql {.      DR
30d0: 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49 53  OP TABLE IF EXIS
30e0: 54 53 20 66 74 3b 0a 20 20 20 20 20 20 43 52 45  TS ft;.      CRE
30f0: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
3100: 45 20 66 74 20 55 53 49 4e 47 20 66 74 73 33 28  E ft USING fts3(
3110: 78 29 3b 0a 20 20 20 20 20 20 49 4e 53 45 52 54  x);.      INSERT
3120: 20 49 4e 54 4f 20 66 74 20 56 41 4c 55 45 53 28   INTO ft VALUES(
3130: 24 6e 75 6d 62 65 72 73 29 3b 0a 20 20 20 20 7d  $numbers);.    }
3140: 0a 20 20 7d 20 7b 7d 0a 20 20 64 6f 5f 73 6e 69  .  } {}.  do_sni
3150: 70 70 65 74 5f 74 65 73 74 20 24 54 2e 36 2e 32  ppet_test $T.6.2
3160: 20 7b 0a 20 20 20 20 6f 6e 65 20 66 69 66 74 79   {.    one fifty
3170: 20 6f 6e 65 68 75 6e 64 72 65 64 20 6f 6e 65 68   onehundred oneh
3180: 75 6e 64 72 65 64 66 69 66 74 79 20 74 77 6f 68  undredfifty twoh
3190: 75 6e 64 72 65 64 66 69 66 74 79 20 74 68 72 65  undredfifty thre
31a0: 65 68 75 6e 64 72 65 64 0a 20 20 7d 20 2d 31 20  ehundred.  } -1 
31b0: 34 20 7b 0a 20 20 20 20 7b 6f 6e 65 7d 2e 2e 2e  4 {.    {one}...
31c0: 7b 66 69 66 74 79 7d 2e 2e 2e 7b 6f 6e 65 68 75  {fifty}...{onehu
31d0: 6e 64 72 65 64 7d 2e 2e 2e 7b 6f 6e 65 68 75 6e  ndred}...{onehun
31e0: 64 72 65 64 66 69 66 74 79 7d 2e 2e 2e 0a 20 20  dredfifty}....  
31f0: 7d 0a 20 20 64 6f 5f 73 6e 69 70 70 65 74 5f 74  }.  do_snippet_t
3200: 65 73 74 20 24 54 2e 36 2e 33 20 7b 0a 20 20 20  est $T.6.3 {.   
3210: 20 6f 6e 65 20 66 69 66 74 79 20 6f 6e 65 68 75   one fifty onehu
3220: 6e 64 72 65 64 20 6f 6e 65 68 75 6e 64 72 65 64  ndred onehundred
3230: 66 69 66 74 79 20 74 77 6f 68 75 6e 64 72 65 64  fifty twohundred
3240: 66 69 66 74 79 20 74 68 72 65 65 68 75 6e 64 72  fifty threehundr
3250: 65 64 0a 20 20 7d 20 2d 31 20 2d 34 20 7b 0a 20  ed.  } -1 -4 {. 
3260: 20 20 20 7b 6f 6e 65 7d 20 74 77 6f 20 74 68 72     {one} two thr
3270: 65 65 20 66 6f 75 72 2e 2e 2e 66 6f 72 74 79 65  ee four...fortye
3280: 69 67 68 74 20 66 6f 72 74 79 6e 69 6e 65 20 7b  ight fortynine {
3290: 66 69 66 74 79 7d 20 66 69 66 74 79 6f 6e 65 2e  fifty} fiftyone.
32a0: 2e 2e 6e 69 6e 65 74 79 65 69 67 68 74 20 6e 69  ..ninetyeight ni
32b0: 6e 65 74 79 6e 69 6e 65 20 7b 6f 6e 65 68 75 6e  netynine {onehun
32c0: 64 72 65 64 7d 20 6f 6e 65 68 75 6e 64 72 65 64  dred} onehundred
32d0: 6f 6e 65 2e 2e 2e 6f 6e 65 68 75 6e 64 72 65 64  one...onehundred
32e0: 66 6f 72 74 79 65 69 67 68 74 20 6f 6e 65 68 75  fortyeight onehu
32f0: 6e 64 72 65 64 66 6f 72 74 79 6e 69 6e 65 20 7b  ndredfortynine {
3300: 6f 6e 65 68 75 6e 64 72 65 64 66 69 66 74 79 7d  onehundredfifty}
3310: 20 6f 6e 65 68 75 6e 64 72 65 64 66 69 66 74 79   onehundredfifty
3320: 6f 6e 65 2e 2e 2e 0a 20 20 7d 0a 0a 20 20 64 6f  one....  }..  do
3330: 5f 74 65 73 74 20 24 54 2e 37 2e 31 20 7b 0a 20  _test $T.7.1 {. 
3340: 20 20 20 65 78 65 63 73 71 6c 20 7b 0a 20 20 20     execsql {.   
3350: 20 20 20 42 45 47 49 4e 3b 0a 20 20 20 20 20 20     BEGIN;.      
3360: 20 20 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20    DROP TABLE IF 
3370: 45 58 49 53 54 53 20 66 74 3b 0a 20 20 20 20 20  EXISTS ft;.     
3380: 20 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41     CREATE VIRTUA
3390: 4c 20 54 41 42 4c 45 20 66 74 20 55 53 49 4e 47  L TABLE ft USING
33a0: 20 66 74 73 33 28 78 29 3b 0a 20 20 20 20 7d 0a   fts3(x);.    }.
33b0: 20 20 20 20 73 65 74 20 74 65 73 74 72 65 73 75      set testresu
33c0: 6c 74 73 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66  lts [list].    f
33d0: 6f 72 20 7b 73 65 74 20 69 20 31 7d 20 7b 24 69  or {set i 1} {$i
33e0: 20 3c 20 31 35 30 7d 20 7b 69 6e 63 72 20 69 7d   < 150} {incr i}
33f0: 20 7b 0a 20 20 20 20 20 20 73 65 74 20 63 6f 6d   {.      set com
3400: 6d 61 73 20 5b 73 74 72 69 6e 67 20 72 65 70 65  mas [string repe
3410: 61 74 20 2c 20 24 69 5d 0a 20 20 20 20 20 20 65  at , $i].      e
3420: 78 65 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49  xecsql {INSERT I
3430: 4e 54 4f 20 66 74 20 56 41 4c 55 45 53 28 27 6f  NTO ft VALUES('o
3440: 6e 65 27 20 7c 7c 20 24 63 6f 6d 6d 61 73 20 7c  ne' || $commas |
3450: 7c 20 27 74 77 6f 27 29 7d 0a 20 20 20 20 20 20  | 'two')}.      
3460: 6c 61 70 70 65 6e 64 20 74 65 73 74 72 65 73 75  lappend testresu
3470: 6c 74 73 20 22 7b 6f 6e 65 7d 24 63 6f 6d 6d 61  lts "{one}$comma
3480: 73 7b 74 77 6f 7d 22 0a 20 20 20 20 7d 0a 20 20  s{two}".    }.  
3490: 20 20 65 78 65 63 73 71 6c 20 43 4f 4d 4d 49 54    execsql COMMIT
34a0: 0a 20 20 7d 20 7b 7d 0a 20 20 65 76 61 6c 20 5b  .  } {}.  eval [
34b0: 6c 69 73 74 20 64 6f 5f 73 6e 69 70 70 65 74 5f  list do_snippet_
34c0: 74 65 73 74 20 24 54 2e 37 2e 32 20 7b 6f 6e 65  test $T.7.2 {one
34d0: 20 74 77 6f 7d 20 2d 31 20 33 5d 20 24 74 65 73   two} -1 3] $tes
34e0: 74 72 65 73 75 6c 74 73 0a 20 20 0a 20 20 23 23  tresults.  .  ##
34f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3500: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3510: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3520: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3530: 23 23 23 23 23 23 23 23 0a 20 20 23 20 54 65 73  ########.  # Tes
3540: 74 20 74 68 65 20 6d 61 74 63 68 69 6e 66 6f 20  t the matchinfo 
3550: 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 23 0a 20 20  function..  #.  
3560: 70 72 6f 63 20 6d 69 74 20 7b 62 6c 6f 62 7d 20  proc mit {blob} 
3570: 7b 0a 20 20 20 20 73 65 74 20 73 63 61 6e 28 6c  {.    set scan(l
3580: 69 74 74 6c 65 45 6e 64 69 61 6e 29 20 69 2a 0a  ittleEndian) i*.
3590: 20 20 20 20 73 65 74 20 73 63 61 6e 28 62 69 67      set scan(big
35a0: 45 6e 64 69 61 6e 29 20 49 2a 0a 20 20 20 20 62  Endian) I*.    b
35b0: 69 6e 61 72 79 20 73 63 61 6e 20 24 62 6c 6f 62  inary scan $blob
35c0: 20 24 73 63 61 6e 28 24 3a 3a 74 63 6c 5f 70 6c   $scan($::tcl_pl
35d0: 61 74 66 6f 72 6d 28 62 79 74 65 4f 72 64 65 72  atform(byteOrder
35e0: 29 29 20 72 0a 20 20 20 20 72 65 74 75 72 6e 20  )) r.    return 
35f0: 24 72 0a 20 20 7d 0a 20 20 64 62 20 66 75 6e 63  $r.  }.  db func
3600: 20 6d 69 74 20 6d 69 74 0a 20 20 70 72 6f 63 20   mit mit.  proc 
3610: 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73  do_matchinfo_tes
3620: 74 20 7b 6e 61 6d 65 20 65 78 70 72 20 61 72 67  t {name expr arg
3630: 73 7d 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73  s} {.    set res
3640: 20 5b 6c 69 73 74 5d 0a 20 20 20 20 66 6f 72 65   [list].    fore
3650: 61 63 68 20 61 20 24 61 72 67 73 20 7b 20 6c 61  ach a $args { la
3660: 70 70 65 6e 64 20 72 65 73 20 5b 6e 6f 72 6d 61  ppend res [norma
3670: 6c 69 7a 65 20 24 61 5d 20 7d 0a 20 20 20 20 64  lize $a] }.    d
3680: 6f 5f 73 65 6c 65 63 74 5f 74 65 73 74 20 24 6e  o_select_test $n
3690: 61 6d 65 20 7b 0a 20 20 20 20 20 20 53 45 4c 45  ame {.      SELE
36a0: 43 54 20 6d 69 74 28 6d 61 74 63 68 69 6e 66 6f  CT mit(matchinfo
36b0: 28 66 74 29 29 20 46 52 4f 4d 20 66 74 20 57 48  (ft)) FROM ft WH
36c0: 45 52 45 20 66 74 20 4d 41 54 43 48 20 24 65 78  ERE ft MATCH $ex
36d0: 70 72 0a 20 20 20 20 7d 20 24 72 65 73 0a 20 20  pr.    } $res.  
36e0: 7d 0a 20 20 64 6f 5f 74 65 73 74 20 24 54 2e 38  }.  do_test $T.8
36f0: 2e 31 20 7b 0a 20 20 20 20 73 65 74 20 74 65 6e  .1 {.    set ten
3700: 20 7b 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 20   {one two three 
3710: 66 6f 75 72 20 66 69 76 65 20 73 69 78 20 73 65  four five six se
3720: 76 65 6e 20 65 69 67 68 74 20 6e 69 6e 65 20 74  ven eight nine t
3730: 65 6e 7d 0a 20 20 20 20 65 78 65 63 73 71 6c 20  en}.    execsql 
3740: 7b 0a 20 20 20 20 20 20 44 52 4f 50 20 54 41 42  {.      DROP TAB
3750: 4c 45 20 49 46 20 45 58 49 53 54 53 20 66 74 3b  LE IF EXISTS ft;
3760: 0a 20 20 20 20 20 20 43 52 45 41 54 45 20 56 49  .      CREATE VI
3770: 52 54 55 41 4c 20 54 41 42 4c 45 20 66 74 20 55  RTUAL TABLE ft U
3780: 53 49 4e 47 20 66 74 73 33 3b 0a 20 20 20 20 20  SING fts3;.     
3790: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 20   INSERT INTO ft 
37a0: 56 41 4c 55 45 53 28 24 74 65 6e 29 3b 0a 20 20  VALUES($ten);.  
37b0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
37c0: 66 74 20 56 41 4c 55 45 53 28 24 74 65 6e 20 7c  ft VALUES($ten |
37d0: 7c 20 27 20 27 20 7c 7c 20 24 74 65 6e 29 3b 0a  | ' ' || $ten);.
37e0: 20 20 20 20 7d 0a 20 20 7d 20 7b 7d 0a 20 20 0a      }.  } {}.  .
37f0: 20 20 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74    do_matchinfo_t
3800: 65 73 74 20 24 54 2e 38 2e 32 20 22 6f 6e 65 22  est $T.8.2 "one"
3810: 20 7b 31 20 31 20 20 31 20 33 20 32 7d 20 7b 31   {1 1  1 3 2} {1
3820: 20 31 20 20 32 20 33 20 32 7d 0a 20 20 64 6f 5f   1  2 3 2}.  do_
3830: 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73 74 20 24  matchinfo_test $
3840: 54 2e 38 2e 33 20 22 6f 6e 65 20 4e 45 41 52 2f  T.8.3 "one NEAR/
3850: 33 20 74 65 6e 22 20 7b 32 20 31 20 20 31 20 31  3 ten" {2 1  1 1
3860: 20 31 20 31 20 31 20 31 7d 0a 20 20 64 6f 5f 6d   1 1 1 1}.  do_m
3870: 61 74 63 68 69 6e 66 6f 5f 74 65 73 74 20 24 54  atchinfo_test $T
3880: 2e 38 2e 34 20 22 66 69 76 65 20 4e 45 41 52 2f  .8.4 "five NEAR/
3890: 34 20 74 65 6e 22 20 5c 0a 20 20 20 20 7b 32 20  4 ten" \.    {2 
38a0: 31 20 20 31 20 33 20 32 20 20 31 20 33 20 32 7d  1  1 3 2  1 3 2}
38b0: 20 7b 32 20 31 20 20 32 20 33 20 32 20 20 32 20   {2 1  2 3 2  2 
38c0: 33 20 32 7d 0a 20 20 64 6f 5f 6d 61 74 63 68 69  3 2}.  do_matchi
38d0: 6e 66 6f 5f 74 65 73 74 20 24 54 2e 38 2e 35 20  nfo_test $T.8.5 
38e0: 22 73 69 78 20 4e 45 41 52 2f 33 20 74 65 6e 20  "six NEAR/3 ten 
38f0: 4e 45 41 52 2f 33 20 74 77 6f 22 20 5c 0a 20 20  NEAR/3 two" \.  
3900: 20 20 7b 33 20 31 20 20 31 20 31 20 31 20 20 31    {3 1  1 1 1  1
3910: 20 31 20 31 20 20 31 20 31 20 31 7d 0a 20 20 64   1 1  1 1 1}.  d
3920: 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73 74  o_matchinfo_test
3930: 20 24 54 2e 38 2e 36 20 22 66 69 76 65 20 4e 45   $T.8.6 "five NE
3940: 41 52 2f 34 20 74 65 6e 20 4e 45 41 52 2f 33 20  AR/4 ten NEAR/3 
3950: 74 77 6f 22 20 5c 0a 20 20 20 20 7b 33 20 31 20  two" \.    {3 1 
3960: 20 32 20 32 20 31 20 20 31 20 31 20 31 20 20 31   2 2 1  1 1 1  1
3970: 20 31 20 31 7d 0a 0a 20 20 64 6f 5f 74 65 73 74   1 1}..  do_test
3980: 20 24 54 2e 39 2e 31 20 7b 0a 20 20 20 20 65 78   $T.9.1 {.    ex
3990: 65 63 73 71 6c 20 7b 0a 20 20 20 20 20 20 44 52  ecsql {.      DR
39a0: 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58 49 53  OP TABLE IF EXIS
39b0: 54 53 20 66 74 3b 0a 20 20 20 20 20 20 43 52 45  TS ft;.      CRE
39c0: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
39d0: 45 20 66 74 20 55 53 49 4e 47 20 66 74 73 33 28  E ft USING fts3(
39e0: 78 2c 20 79 29 3b 0a 20 20 20 20 7d 0a 20 20 20  x, y);.    }.   
39f0: 20 66 6f 72 65 61 63 68 20 6e 20 7b 31 20 32 20   foreach n {1 2 
3a00: 33 7d 20 7b 0a 20 20 20 20 20 20 73 65 74 20 76  3} {.      set v
3a10: 31 20 5b 6c 72 61 6e 67 65 20 24 6e 75 6d 62 65  1 [lrange $numbe
3a20: 72 73 20 30 20 5b 65 78 70 72 20 24 6e 2a 31 30  rs 0 [expr $n*10
3a30: 30 5d 5d 0a 20 20 20 20 20 20 73 65 74 20 76 32  0]].      set v2
3a40: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 73   [string trim [s
3a50: 74 72 69 6e 67 20 72 65 70 65 61 74 20 22 24 6e  tring repeat "$n
3a60: 75 6d 62 65 72 73 20 22 20 24 6e 5d 5d 0a 20 20  umbers " $n]].  
3a70: 20 20 20 20 73 65 74 20 64 6f 63 69 64 20 5b 65      set docid [e
3a80: 78 70 72 20 24 6e 20 2a 20 31 30 30 30 30 30 30  xpr $n * 1000000
3a90: 5d 0a 20 20 20 20 20 20 65 78 65 63 73 71 6c 20  ].      execsql 
3aa0: 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74  { INSERT INTO ft
3ab0: 28 64 6f 63 69 64 2c 20 78 2c 20 79 29 20 56 41  (docid, x, y) VA
3ac0: 4c 55 45 53 28 24 64 6f 63 69 64 2c 20 24 76 31  LUES($docid, $v1
3ad0: 2c 20 24 76 32 29 20 7d 0a 20 20 20 20 7d 0a 20  , $v2) }.    }. 
3ae0: 20 7d 20 7b 7d 0a 20 20 64 6f 5f 6d 61 74 63 68   } {}.  do_match
3af0: 69 6e 66 6f 5f 74 65 73 74 20 24 54 2e 39 2e 32  info_test $T.9.2
3b00: 20 7b 74 77 6f 2a 7d 20 20 20 20 20 5c 0a 20 20   {two*}     \.  
3b10: 20 20 7b 20 31 20 32 20 20 20 20 31 20 20 20 31    { 1 2    1   1
3b20: 30 35 20 33 20 20 20 31 30 31 20 36 30 36 20 33  05 3   101 606 3
3b30: 7d 20 20 20 5c 0a 20 20 20 20 7b 20 31 20 32 20  }   \.    { 1 2 
3b40: 20 20 20 33 20 20 20 31 30 35 20 33 20 20 20 32     3   105 3   2
3b50: 30 32 20 36 30 36 20 33 7d 20 20 20 5c 0a 20 20  02 606 3}   \.  
3b60: 20 20 7b 20 31 20 32 20 20 20 20 31 30 31 20 31    { 1 2    101 1
3b70: 30 35 20 33 20 20 20 33 30 33 20 36 30 36 20 33  05 3   303 606 3
3b80: 7d 0a 0a 20 20 64 6f 5f 6d 61 74 63 68 69 6e 66  }..  do_matchinf
3b90: 6f 5f 74 65 73 74 20 24 54 2e 39 2e 34 20 7b 22  o_test $T.9.4 {"
3ba0: 6f 6e 65 2a 20 74 77 6f 2a 22 7d 20 20 5c 0a 20  one* two*"}  \. 
3bb0: 20 20 20 7b 20 31 20 32 20 20 20 20 31 20 35 20     { 1 2    1 5 
3bc0: 33 20 20 20 32 20 31 32 20 33 7d 20 20 20 20 20  3   2 12 3}     
3bd0: 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 7b           \.    {
3be0: 20 31 20 32 20 20 20 20 32 20 35 20 33 20 20 20   1 2    2 5 3   
3bf0: 34 20 31 32 20 33 7d 20 20 20 20 20 20 20 20 20  4 12 3}         
3c00: 20 20 20 20 20 5c 0a 20 20 20 20 7b 20 31 20 32       \.    { 1 2
3c10: 20 20 20 20 32 20 35 20 33 20 20 20 36 20 31 32      2 5 3   6 12
3c20: 20 33 7d 0a 0a 20 20 64 6f 5f 6d 61 74 63 68 69   3}..  do_matchi
3c30: 6e 66 6f 5f 74 65 73 74 20 24 54 2e 39 2e 35 20  nfo_test $T.9.5 
3c40: 7b 74 77 6f 68 75 6e 64 72 65 64 66 69 66 74 79  {twohundredfifty
3c50: 7d 20 20 5c 0a 20 20 20 20 7b 20 31 20 32 20 20  }  \.    { 1 2  
3c60: 20 20 30 20 31 20 31 20 20 20 31 20 36 20 33 7d    0 1 1   1 6 3}
3c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c80: 20 20 20 5c 0a 20 20 20 20 7b 20 31 20 32 20 20     \.    { 1 2  
3c90: 20 20 30 20 31 20 31 20 20 20 32 20 36 20 33 7d    0 1 1   2 6 3}
3ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cb0: 20 20 20 5c 0a 20 20 20 20 7b 20 31 20 32 20 20     \.    { 1 2  
3cc0: 20 20 31 20 31 20 31 20 20 20 33 20 36 20 33 7d    1 1 1   3 6 3}
3cd0: 0a 0a 20 20 64 6f 5f 6d 61 74 63 68 69 6e 66 6f  ..  do_matchinfo
3ce0: 5f 74 65 73 74 20 24 54 2e 39 2e 36 20 7b 22 74  _test $T.9.6 {"t
3cf0: 68 72 65 65 68 75 6e 64 72 65 64 20 6f 6e 65 22  hreehundred one"
3d00: 7d 20 5c 0a 20 20 20 20 7b 20 31 20 32 20 20 20  } \.    { 1 2   
3d10: 20 30 20 30 20 30 20 20 20 31 20 33 20 32 7d 20   0 0 0   1 3 2} 
3d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d30: 20 20 20 20 5c 0a 20 20 20 20 7b 20 31 20 32 20      \.    { 1 2 
3d40: 20 20 20 30 20 30 20 30 20 20 20 32 20 33 20 32     0 0 0   2 3 2
3d50: 7d 0a 0a 20 20 64 6f 5f 6d 61 74 63 68 69 6e 66  }..  do_matchinf
3d60: 6f 5f 74 65 73 74 20 24 54 2e 39 2e 37 20 7b 6f  o_test $T.9.7 {o
3d70: 6e 65 20 4f 52 20 66 69 76 65 68 75 6e 64 72 65  ne OR fivehundre
3d80: 64 7d 20 5c 0a 20 20 20 20 7b 20 32 20 32 20 20  d} \.    { 2 2  
3d90: 20 20 31 20 33 20 33 20 20 20 31 20 36 20 33 20    1 3 3   1 6 3 
3da0: 20 20 30 20 30 20 30 20 20 20 30 20 30 20 30 20    0 0 0   0 0 0 
3db0: 7d 20 20 20 20 5c 0a 20 20 20 20 7b 20 32 20 32  }    \.    { 2 2
3dc0: 20 20 20 20 31 20 33 20 33 20 20 20 32 20 36 20      1 3 3   2 6 
3dd0: 33 20 20 20 30 20 30 20 30 20 20 20 30 20 30 20  3   0 0 0   0 0 
3de0: 30 20 7d 20 20 20 20 5c 0a 20 20 20 20 7b 20 32  0 }    \.    { 2
3df0: 20 32 20 20 20 20 31 20 33 20 33 20 20 20 33 20   2    1 3 3   3 
3e00: 36 20 33 20 20 20 30 20 30 20 30 20 20 20 30 20  6 3   0 0 0   0 
3e10: 30 20 30 20 7d 0a 0a 20 20 64 6f 5f 6d 61 74 63  0 0 }..  do_matc
3e20: 68 69 6e 66 6f 5f 74 65 73 74 20 24 54 2e 39 2e  hinfo_test $T.9.
3e30: 38 20 7b 74 77 6f 20 4f 52 20 22 74 68 72 65 65  8 {two OR "three
3e40: 68 75 6e 64 72 65 64 20 6f 6e 65 22 7d 20 5c 0a  hundred one"} \.
3e50: 20 20 20 20 7b 20 32 20 32 20 20 20 20 31 20 33      { 2 2    1 3
3e60: 20 33 20 20 20 31 20 36 20 33 20 20 20 30 20 30   3   1 6 3   0 0
3e70: 20 30 20 20 20 30 20 33 20 32 20 7d 20 20 20 20   0   0 3 2 }    
3e80: 20 20 20 20 20 20 20 5c 0a 20 20 20 20 7b 20 32         \.    { 2
3e90: 20 32 20 20 20 20 31 20 33 20 33 20 20 20 32 20   2    1 3 3   2 
3ea0: 36 20 33 20 20 20 30 20 30 20 30 20 20 20 31 20  6 3   0 0 0   1 
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 33 20 36 20 33 20 20 20 30   3 3   3 6 3   0
3ee0: 20 30 20 30 20 20 20 32 20 33 20 32 20 7d 0a 0a   0 0   2 3 2 }..
3ef0: 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74 65 73 74    do_select_test
3f00: 20 24 54 2e 39 2e 39 20 7b 0a 20 20 20 20 53 45   $T.9.9 {.    SE
3f10: 4c 45 43 54 20 6d 69 74 28 6d 61 74 63 68 69 6e  LECT mit(matchin
3f20: 66 6f 28 66 74 29 29 2c 20 6d 69 74 28 6d 61 74  fo(ft)), mit(mat
3f30: 63 68 69 6e 66 6f 28 66 74 29 29 0a 20 20 20 20  chinfo(ft)).    
3f40: 46 52 4f 4d 20 66 74 20 57 48 45 52 45 20 66 74  FROM ft WHERE ft
3f50: 20 4d 41 54 43 48 20 27 74 77 6f 20 4f 52 20 22   MATCH 'two OR "
3f60: 74 68 72 65 65 68 75 6e 64 72 65 64 20 6f 6e 65  threehundred one
3f70: 22 27 20 0a 20 20 7d 20 5b 6e 6f 72 6d 61 6c 69  "' .  } [normali
3f80: 7a 65 20 7b 0a 20 20 20 20 7b 32 20 32 20 31 20  ze {.    {2 2 1 
3f90: 33 20 33 20 31 20 36 20 33 20 30 20 30 20 30 20  3 3 1 6 3 0 0 0 
3fa0: 30 20 33 20 32 7d 0a 20 20 20 20 7b 32 20 32 20  0 3 2}.    {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 32 20 36 20 33 20 30 20  2 1 3 3 2 6 3 0 
3fe0: 30 20 30 20 31 20 33 20 32 7d 0a 20 20 20 20 7b  0 0 1 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 33 20 36 20   {2 2 1 3 3 3 6 
4020: 33 20 30 20 30 20 30 20 32 20 33 20 32 7d 20 20  3 0 0 0 2 3 2}  
4030: 20 20 20 20 20 20 20 20 0a 20 20 20 20 7b 32 20          .    {2 
4040: 32 20 31 20 33 20 33 20 33 20 36 20 33 20 30 20  2 1 3 3 3 6 3 0 
4050: 30 20 30 20 32 20 33 20 32 7d 0a 20 20 7d 5d 0a  0 0 2 3 2}.  }].
4060: 0a 20 20 23 20 45 56 49 44 45 4e 43 45 2d 4f 46  .  # EVIDENCE-OF
4070: 3a 20 52 2d 34 30 36 33 30 2d 30 32 32 36 38 20  : R-40630-02268 
4080: 49 66 20 75 73 65 64 20 77 69 74 68 69 6e 20 61  If used within a
4090: 20 53 45 4c 45 43 54 20 74 68 61 74 20 75 73 65   SELECT that use
40a0: 73 20 74 68 65 0d 0a 20 20 23 20 22 71 75 65 72  s the..  # "quer
40b0: 79 20 62 79 20 72 6f 77 69 64 22 20 6f 72 20 22  y by rowid" or "
40c0: 6c 69 6e 65 61 72 20 73 63 61 6e 22 20 73 74 72  linear scan" str
40d0: 61 74 65 67 69 65 73 2c 20 74 68 65 6e 20 74 68  ategies, then th
40e0: 65 20 73 6e 69 70 70 65 74 20 61 6e 64 0d 0a 20  e snippet and.. 
40f0: 20 23 20 6f 66 66 73 65 74 73 20 62 6f 74 68 20   # offsets both 
4100: 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20  return an empty 
4110: 73 74 72 69 6e 67 2c 20 61 6e 64 20 74 68 65 20  string, and the 
4120: 6d 61 74 63 68 69 6e 66 6f 20 66 75 6e 63 74 69  matchinfo functi
4130: 6f 6e 0d 0a 20 20 23 20 72 65 74 75 72 6e 73 20  on..  # returns 
4140: 61 20 62 6c 6f 62 20 76 61 6c 75 65 20 7a 65 72  a blob value zer
4150: 6f 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65 2e  o bytes in size.
4160: 0d 0a 20 20 23 0a 20 20 73 65 74 20 72 20 31 30  ..  #.  set r 10
4170: 30 30 30 30 30 20 20 20 20 20 20 20 20 20 20 20  00000           
4180: 20 20 20 20 20 20 20 20 3b 23 20 41 20 72 6f 77          ;# A row
4190: 69 64 20 74 68 61 74 20 65 78 69 73 74 73 20 69  id that exists i
41a0: 6e 20 74 61 62 6c 65 20 66 74 0a 20 20 64 6f 5f  n table ft.  do_
41b0: 73 65 6c 65 63 74 5f 74 65 73 74 20 24 54 2e 31  select_test $T.1
41c0: 30 2e 30 20 7b 20 53 45 4c 45 43 54 20 72 6f 77  0.0 { SELECT row
41d0: 69 64 20 46 52 4f 4d 20 66 74 20 57 48 45 52 45  id FROM ft WHERE
41e0: 20 72 6f 77 69 64 20 3d 20 24 72 20 7d 20 24 72   rowid = $r } $r
41f0: 0a 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74 65 73  .  do_select_tes
4200: 74 20 24 54 2e 31 30 2e 31 20 7b 0a 20 20 20 20  t $T.10.1 {.    
4210: 53 45 4c 45 43 54 20 6c 65 6e 67 74 68 28 6f 66  SELECT length(of
4220: 66 73 65 74 73 28 66 74 29 29 2c 20 74 79 70 65  fsets(ft)), type
4230: 6f 66 28 6f 66 66 73 65 74 73 28 66 74 29 29 20  of(offsets(ft)) 
4240: 46 52 4f 4d 20 66 74 3b 0a 20 20 7d 20 7b 30 20  FROM ft;.  } {0 
4250: 74 65 78 74 20 30 20 74 65 78 74 20 30 20 74 65  text 0 text 0 te
4260: 78 74 7d 0a 20 20 64 6f 5f 73 65 6c 65 63 74 5f  xt}.  do_select_
4270: 74 65 73 74 20 24 54 2e 31 30 2e 32 20 7b 0a 20  test $T.10.2 {. 
4280: 20 20 20 53 45 4c 45 43 54 20 6c 65 6e 67 74 68     SELECT length
4290: 28 6f 66 66 73 65 74 73 28 66 74 29 29 2c 20 74  (offsets(ft)), t
42a0: 79 70 65 6f 66 28 6f 66 66 73 65 74 73 28 66 74  ypeof(offsets(ft
42b0: 29 29 20 46 52 4f 4d 20 66 74 20 57 48 45 52 45  )) FROM ft WHERE
42c0: 20 72 6f 77 69 64 20 3d 20 24 72 0a 20 20 7d 20   rowid = $r.  } 
42d0: 7b 30 20 74 65 78 74 7d 0a 20 20 64 6f 5f 73 65  {0 text}.  do_se
42e0: 6c 65 63 74 5f 74 65 73 74 20 24 54 2e 31 30 2e  lect_test $T.10.
42f0: 33 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6c  3 {.    SELECT l
4300: 65 6e 67 74 68 28 73 6e 69 70 70 65 74 28 66 74  ength(snippet(ft
4310: 29 29 2c 20 74 79 70 65 6f 66 28 73 6e 69 70 70  )), typeof(snipp
4320: 65 74 28 66 74 29 29 20 46 52 4f 4d 20 66 74 3b  et(ft)) FROM ft;
4330: 0a 20 20 7d 20 7b 30 20 74 65 78 74 20 30 20 74  .  } {0 text 0 t
4340: 65 78 74 20 30 20 74 65 78 74 7d 0a 20 20 64 6f  ext 0 text}.  do
4350: 5f 73 65 6c 65 63 74 5f 74 65 73 74 20 24 54 2e  _select_test $T.
4360: 31 30 2e 34 20 7b 0a 20 20 20 20 53 45 4c 45 43  10.4 {.    SELEC
4370: 54 20 6c 65 6e 67 74 68 28 73 6e 69 70 70 65 74  T length(snippet
4380: 28 66 74 29 29 2c 20 74 79 70 65 6f 66 28 73 6e  (ft)), typeof(sn
4390: 69 70 70 65 74 28 66 74 29 29 20 46 52 4f 4d 20  ippet(ft)) FROM 
43a0: 66 74 20 57 48 45 52 45 20 72 6f 77 69 64 20 3d  ft WHERE rowid =
43b0: 20 24 72 3b 0a 20 20 7d 20 7b 30 20 74 65 78 74   $r;.  } {0 text
43c0: 7d 0a 20 20 64 6f 5f 73 65 6c 65 63 74 5f 74 65  }.  do_select_te
43d0: 73 74 20 24 54 2e 31 30 2e 35 20 7b 0a 20 20 20  st $T.10.5 {.   
43e0: 20 53 45 4c 45 43 54 20 6c 65 6e 67 74 68 28 6d   SELECT length(m
43f0: 61 74 63 68 69 6e 66 6f 28 66 74 29 29 2c 20 74  atchinfo(ft)), t
4400: 79 70 65 6f 66 28 6d 61 74 63 68 69 6e 66 6f 28  ypeof(matchinfo(
4410: 66 74 29 29 20 46 52 4f 4d 20 66 74 3b 0a 20 20  ft)) FROM ft;.  
4420: 7d 20 7b 30 20 62 6c 6f 62 20 30 20 62 6c 6f 62  } {0 blob 0 blob
4430: 20 30 20 62 6c 6f 62 7d 0a 20 20 64 6f 5f 73 65   0 blob}.  do_se
4440: 6c 65 63 74 5f 74 65 73 74 20 24 54 2e 31 30 2e  lect_test $T.10.
4450: 36 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 6c  6 {.    SELECT l
4460: 65 6e 67 74 68 28 6d 61 74 63 68 69 6e 66 6f 28  ength(matchinfo(
4470: 66 74 29 29 2c 20 74 79 70 65 6f 66 28 6d 61 74  ft)), typeof(mat
4480: 63 68 69 6e 66 6f 28 66 74 29 29 20 46 52 4f 4d  chinfo(ft)) FROM
4490: 20 66 74 20 57 48 45 52 45 20 72 6f 77 69 64 20   ft WHERE rowid 
44a0: 3d 20 24 72 0a 20 20 7d 20 7b 30 20 62 6c 6f 62  = $r.  } {0 blob
44b0: 7d 0a 7d 0a 0a 73 65 74 20 73 71 6c 69 74 65 5f  }.}..set sqlite_
44c0: 66 74 73 33 5f 65 6e 61 62 6c 65 5f 70 61 72 65  fts3_enable_pare
44d0: 6e 74 68 65 73 65 73 20 30 0a 66 69 6e 69 73 68  ntheses 0.finish
44e0: 5f 74 65 73 74 0a                                _test.