/ Hex Artifact Content
Login

Artifact 50d86da66ec5b27603dcd90ba0227f5d9deb10351cbc52974a88e24f6fc9b076:


0000: 23 20 32 30 31 35 20 41 75 67 75 73 74 20 30 35  # 2015 August 05
0010: 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20  .#.# The author 
0020: 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69  disclaims copyri
0030: 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72  ght to this sour
0040: 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61  ce code.  In pla
0050: 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20  ce of.# a legal 
0060: 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69 73 20  notice, here is 
0070: 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20  a blessing:.#.# 
0080: 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f     May you do go
0090: 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e  od and not evil.
00a0: 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69  .#    May you fi
00b0: 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66  nd forgiveness f
00c0: 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20  or yourself and 
00d0: 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a  forgive others..
00e0: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61  #    May you sha
00f0: 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72  re freely, never
0100: 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61   taking more tha
0110: 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a  n 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 0a 23 0a 0a 73 6f 75 72 63 65  ******.#..source
0170: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 66 69 6c   [file join [fil
0180: 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20  e dirname [info 
0190: 73 63 72 69 70 74 5d 5d 20 66 74 73 35 5f 63 6f  script]] fts5_co
01a0: 6d 6d 6f 6e 2e 74 63 6c 5d 0a 73 65 74 20 74 65  mmon.tcl].set te
01b0: 73 74 70 72 65 66 69 78 20 66 74 73 35 6d 61 74  stprefix fts5mat
01c0: 63 68 69 6e 66 6f 0a 0a 23 20 49 66 20 53 51 4c  chinfo..# If SQL
01d0: 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 35 20  ITE_ENABLE_FTS5 
01e0: 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2c 20  is not defined, 
01f0: 6f 6d 69 74 20 74 68 69 73 20 66 69 6c 65 2e 0a  omit this file..
0200: 69 66 63 61 70 61 62 6c 65 20 21 66 74 73 35 20  ifcapable !fts5 
0210: 7b 20 66 69 6e 69 73 68 5f 74 65 73 74 20 3b 20  { finish_test ; 
0220: 72 65 74 75 72 6e 20 7d 0a 0a 66 6f 72 65 61 63  return }..foreac
0230: 68 5f 64 65 74 61 69 6c 5f 6d 6f 64 65 20 24 74  h_detail_mode $t
0240: 65 73 74 70 72 65 66 69 78 20 7b 0a 0a 70 72 6f  estprefix {..pro
0250: 63 20 6d 69 74 20 7b 62 6c 6f 62 7d 20 7b 0a 20  c mit {blob} {. 
0260: 20 73 65 74 20 73 63 61 6e 28 6c 69 74 74 6c 65   set scan(little
0270: 45 6e 64 69 61 6e 29 20 69 2a 0a 20 20 73 65 74  Endian) i*.  set
0280: 20 73 63 61 6e 28 62 69 67 45 6e 64 69 61 6e 29   scan(bigEndian)
0290: 20 49 2a 0a 20 20 62 69 6e 61 72 79 20 73 63 61   I*.  binary sca
02a0: 6e 20 24 62 6c 6f 62 20 24 73 63 61 6e 28 24 3a  n $blob $scan($:
02b0: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 62 79  :tcl_platform(by
02c0: 74 65 4f 72 64 65 72 29 29 20 72 0a 20 20 72 65  teOrder)) r.  re
02d0: 74 75 72 6e 20 24 72 0a 7d 0a 64 62 20 66 75 6e  turn $r.}.db fun
02e0: 63 20 6d 69 74 20 6d 69 74 0a 0a 73 71 6c 69 74  c mit mit..sqlit
02f0: 65 33 5f 66 74 73 35 5f 72 65 67 69 73 74 65 72  e3_fts5_register
0300: 5f 6d 61 74 63 68 69 6e 66 6f 20 64 62 0a 0a 64  _matchinfo db..d
0310: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31  o_execsql_test 1
0320: 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49  .0 {.  CREATE VI
0330: 52 54 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55  RTUAL TABLE t1 U
0340: 53 49 4e 47 20 66 74 73 35 28 63 6f 6e 74 65 6e  SING fts5(conten
0350: 74 2c 20 64 65 74 61 69 6c 3d 25 44 45 54 41 49  t, detail=%DETAI
0360: 4c 25 29 3b 0a 7d 20 0a 0a 64 6f 5f 65 78 65 63  L%);.} ..do_exec
0370: 73 71 6c 5f 74 65 73 74 20 31 2e 31 20 7b 0a 20  sql_test 1.1 {. 
0380: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28   INSERT INTO t1(
0390: 63 6f 6e 74 65 6e 74 29 20 56 41 4c 55 45 53 28  content) VALUES(
03a0: 27 49 20 77 61 6e 64 65 72 65 64 20 6c 6f 6e 65  'I wandered lone
03b0: 6c 79 20 61 73 20 61 20 63 6c 6f 75 64 27 29 3b  ly as a cloud');
03c0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
03d0: 31 28 63 6f 6e 74 65 6e 74 29 20 56 41 4c 55 45  1(content) VALUE
03e0: 53 28 27 54 68 61 74 20 66 6c 6f 61 74 73 20 6f  S('That floats o
03f0: 6e 20 68 69 67 68 20 6f 27 27 65 72 20 76 61 6c  n high o''er val
0400: 65 73 20 61 6e 64 20 68 69 6c 6c 73 2c 27 29 3b  es and hills,');
0410: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
0420: 31 28 63 6f 6e 74 65 6e 74 29 20 56 41 4c 55 45  1(content) VALUE
0430: 53 28 27 57 68 65 6e 20 61 6c 6c 20 61 74 20 6f  S('When all at o
0440: 6e 63 65 20 49 20 73 61 77 20 61 20 63 72 6f 77  nce I saw a crow
0450: 64 2c 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  d,');.  INSERT I
0460: 4e 54 4f 20 74 31 28 63 6f 6e 74 65 6e 74 29 20  NTO t1(content) 
0470: 56 41 4c 55 45 53 28 27 41 20 68 6f 73 74 2c 20  VALUES('A host, 
0480: 6f 66 20 67 6f 6c 64 65 6e 20 64 61 66 66 6f 64  of golden daffod
0490: 69 6c 73 2c 27 29 3b 0a 20 20 53 45 4c 45 43 54  ils,');.  SELECT
04a0: 20 6d 69 74 28 6d 61 74 63 68 69 6e 66 6f 28 74   mit(matchinfo(t
04b0: 31 29 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52  1)) FROM t1 WHER
04c0: 45 20 74 31 20 4d 41 54 43 48 20 27 49 27 3b 0a  E t1 MATCH 'I';.
04d0: 7d 20 7b 7b 31 20 31 20 31 20 32 20 32 7d 20 7b  } {{1 1 1 2 2} {
04e0: 31 20 31 20 31 20 32 20 32 7d 7d 0a 0a 23 20 4e  1 1 1 2 2}}..# N
04f0: 6f 77 20 63 72 65 61 74 65 20 61 6e 20 46 54 53  ow create an FTS
0500: 34 20 74 61 62 6c 65 20 74 68 61 74 20 64 6f 65  4 table that doe
0510: 73 20 6e 6f 74 20 73 70 65 63 69 66 79 20 6d 61  s not specify ma
0520: 74 63 68 69 6e 66 6f 3d 66 74 73 33 2e 0a 23 0a  tchinfo=fts3..#.
0530: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0540: 31 2e 32 20 7b 0a 20 20 43 52 45 41 54 45 20 56  1.2 {.  CREATE V
0550: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 32 20  IRTUAL TABLE t2 
0560: 55 53 49 4e 47 20 66 74 73 35 28 63 6f 6e 74 65  USING fts5(conte
0570: 6e 74 2c 20 64 65 74 61 69 6c 3d 25 44 45 54 41  nt, detail=%DETA
0580: 49 4c 25 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  IL%);.  INSERT I
0590: 4e 54 4f 20 74 32 20 53 45 4c 45 43 54 20 2a 20  NTO t2 SELECT * 
05a0: 46 52 4f 4d 20 74 31 3b 0a 20 20 53 45 4c 45 43  FROM t1;.  SELEC
05b0: 54 20 6d 69 74 28 6d 61 74 63 68 69 6e 66 6f 28  T mit(matchinfo(
05c0: 74 32 29 29 20 46 52 4f 4d 20 74 32 20 57 48 45  t2)) FROM t2 WHE
05d0: 52 45 20 74 32 20 4d 41 54 43 48 20 27 49 27 3b  RE t2 MATCH 'I';
05e0: 0a 7d 20 7b 7b 31 20 31 20 31 20 32 20 32 7d 20  .} {{1 1 1 2 2} 
05f0: 7b 31 20 31 20 31 20 32 20 32 7d 7d 0a 0a 0a 23  {1 1 1 2 2}}...#
0600: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0610: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0620: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0630: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0640: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 50 72 6f  ----------.# Pro
0650: 63 20 5b 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f  c [do_matchinfo_
0660: 74 65 73 74 5d 20 69 73 20 75 73 65 64 20 74 6f  test] is used to
0670: 20 74 65 73 74 20 74 68 65 20 46 54 53 58 20 6d   test the FTSX m
0680: 61 74 63 68 69 6e 66 6f 28 29 20 66 75 6e 63 74  atchinfo() funct
0690: 69 6f 6e 2e 0a 23 0a 23 20 54 68 65 20 66 69 72  ion..#.# The fir
06a0: 73 74 20 61 72 67 75 6d 65 6e 74 20 2d 20 24 74  st argument - $t
06b0: 6e 20 2d 20 69 73 20 61 20 74 65 73 74 20 69 64  n - is a test id
06c0: 65 6e 74 69 66 69 65 72 2e 20 54 68 69 73 20 6d  entifier. This m
06d0: 61 79 20 62 65 20 65 69 74 68 65 72 20 61 0a 23  ay be either a.#
06e0: 20 66 75 6c 6c 20 69 64 65 6e 74 69 66 69 65 72   full identifier
06f0: 20 28 69 2e 65 2e 20 22 66 74 73 33 6d 61 74 63   (i.e. "fts3matc
0700: 68 69 6e 66 6f 2d 31 2e 31 22 29 20 6f 72 2c 20  hinfo-1.1") or, 
0710: 69 66 20 67 6c 6f 62 61 6c 20 76 61 72 20 24 74  if global var $t
0720: 65 73 74 70 72 65 66 69 78 0a 23 20 69 73 20 73  estprefix.# is s
0730: 65 74 2c 20 6a 75 73 74 20 74 68 65 20 6e 75 6d  et, just the num
0740: 65 72 69 63 20 63 6f 6d 70 6f 6e 65 6e 74 20 28  eric component (
0750: 69 2e 65 2e 20 22 31 2e 31 22 29 2e 0a 23 0a 23  i.e. "1.1")..#.#
0760: 20 54 68 65 20 73 65 63 6f 6e 64 20 61 72 67 75   The second argu
0770: 6d 65 6e 74 20 69 73 20 74 68 65 20 6e 61 6d 65  ment is the name
0780: 20 6f 66 20 61 6e 20 46 54 53 58 20 74 61 62 6c   of an FTSX tabl
0790: 65 2e 20 54 68 65 20 74 68 69 72 64 20 69 73 20  e. The third is 
07a0: 74 68 65 20 0a 23 20 66 75 6c 6c 20 74 65 78 74  the .# full text
07b0: 20 6f 66 20 61 20 57 48 45 52 45 2f 4d 41 54 43   of a WHERE/MATC
07c0: 48 20 65 78 70 72 65 73 73 69 6f 6e 20 74 6f 20  H expression to 
07d0: 71 75 65 72 79 20 74 68 65 20 74 61 62 6c 65 20  query the table 
07e0: 66 6f 72 20 0a 23 20 28 69 2e 65 2e 20 22 74 31  for .# (i.e. "t1
07f0: 20 4d 41 54 43 48 20 27 61 62 63 27 22 29 2e 20   MATCH 'abc'"). 
0800: 54 68 65 20 66 69 6e 61 6c 20 61 72 67 75 6d 65  The final argume
0810: 6e 74 20 2d 20 24 72 65 73 75 6c 74 73 20 2d 20  nt - $results - 
0820: 73 68 6f 75 6c 64 20 62 65 20 61 0a 23 20 6b 65  should be a.# ke
0830: 79 2d 76 61 6c 75 65 20 6c 69 73 74 20 28 73 65  y-value list (se
0840: 72 69 61 6c 69 7a 65 64 20 61 72 72 61 79 29 20  rialized array) 
0850: 77 69 74 68 20 6d 61 74 63 68 69 6e 66 6f 28 29  with matchinfo()
0860: 20 66 6f 72 6d 61 74 20 73 70 65 63 69 66 69 65   format specifie
0870: 72 73 0a 23 20 61 73 20 6b 65 79 73 2c 20 61 6e  rs.# as keys, an
0880: 64 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  d the results of
0890: 20 65 78 65 63 75 74 69 6e 67 20 74 68 65 20 73   executing the s
08a0: 74 61 74 65 6d 65 6e 74 3a 0a 23 0a 23 20 20 20  tatement:.#.#   
08b0: 53 45 4c 45 43 54 20 6d 61 74 63 68 69 6e 66 6f  SELECT matchinfo
08c0: 28 24 74 62 6c 2c 20 27 24 6b 65 79 27 29 20 46  ($tbl, '$key') F
08d0: 52 4f 4d 20 24 74 62 6c 20 57 48 45 52 45 20 24  ROM $tbl WHERE $
08e0: 65 78 70 72 0a 23 0a 23 20 46 6f 72 20 65 78 61  expr.#.# For exa
08f0: 6d 70 6c 65 3a 0a 23 0a 23 20 20 20 43 52 45 41  mple:.#.#   CREA
0900: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
0910: 20 74 31 20 55 53 49 4e 47 20 66 74 73 34 3b 0a   t1 USING fts4;.
0920: 23 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  #   INSERT INTO 
0930: 74 31 20 56 41 4c 55 45 53 28 27 61 62 63 27 29  t1 VALUES('abc')
0940: 3b 0a 23 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ;.#   INSERT INT
0950: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 64 65 66  O t1 VALUES('def
0960: 27 29 3b 0a 23 20 20 20 49 4e 53 45 52 54 20 49  ');.#   INSERT I
0970: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 61  NTO t1 VALUES('a
0980: 62 63 20 61 62 63 27 29 3b 0a 23 0a 23 20 20 20  bc abc');.#.#   
0990: 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73  do_matchinfo_tes
09a0: 74 20 31 2e 31 20 74 31 20 22 74 31 20 4d 41 54  t 1.1 t1 "t1 MAT
09b0: 43 48 20 27 61 62 63 27 22 20 7b 0a 23 20 20 20  CH 'abc'" {.#   
09c0: 20 20 6e 20 7b 33 20 33 7d 0a 23 20 20 20 20 20    n {3 3}.#     
09d0: 70 20 7b 31 20 31 7d 0a 23 20 20 20 20 20 63 20  p {1 1}.#     c 
09e0: 7b 31 20 31 7d 0a 23 20 20 20 20 20 78 20 7b 7b  {1 1}.#     x {{
09f0: 31 20 33 20 32 7d 20 7b 32 20 33 20 32 7d 7d 0a  1 3 2} {2 3 2}}.
0a00: 23 20 20 20 7d 0a 23 0a 23 20 49 66 20 74 68 65  #   }.#.# If the
0a10: 20 24 72 65 73 75 6c 74 73 20 6c 69 73 74 20 63   $results list c
0a20: 6f 6e 74 61 69 6e 73 20 6b 65 79 73 20 6d 61 70  ontains keys map
0a30: 70 65 64 20 74 6f 20 22 2d 22 20 69 6e 73 74 65  ped to "-" inste
0a40: 61 64 20 6f 66 20 61 20 6d 61 74 63 68 69 6e 66  ad of a matchinf
0a50: 6f 28 29 0a 23 20 72 65 73 75 6c 74 2c 20 74 68  o().# result, th
0a60: 65 6e 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20  en this command 
0a70: 63 6f 6d 70 75 74 65 73 20 74 68 65 20 65 78 70  computes the exp
0a80: 65 63 74 65 64 20 72 65 73 75 6c 74 73 20 62 61  ected results ba
0a90: 73 65 64 20 6f 6e 20 6f 74 68 65 72 0a 23 20 6d  sed on other.# m
0aa0: 61 70 70 69 6e 67 73 20 74 6f 20 74 65 73 74 20  appings to test 
0ab0: 74 68 65 20 6d 61 74 63 68 69 6e 66 6f 28 29 20  the matchinfo() 
0ac0: 66 75 6e 63 74 69 6f 6e 2e 20 46 6f 72 20 65 78  function. For ex
0ad0: 61 6d 70 6c 65 2c 20 74 68 65 20 63 6f 6d 6d 61  ample, the comma
0ae0: 6e 64 20 61 62 6f 76 65 0a 23 20 63 6f 75 6c 64  nd above.# could
0af0: 20 62 65 20 63 68 61 6e 67 65 64 20 74 6f 3a 0a   be changed to:.
0b00: 23 0a 23 20 20 20 64 6f 5f 6d 61 74 63 68 69 6e  #.#   do_matchin
0b10: 66 6f 5f 74 65 73 74 20 31 2e 31 20 74 31 20 22  fo_test 1.1 t1 "
0b20: 74 31 20 4d 41 54 43 48 20 27 61 62 63 27 22 20  t1 MATCH 'abc'" 
0b30: 7b 0a 23 20 20 20 20 20 6e 20 7b 33 20 33 7d 20  {.#     n {3 3} 
0b40: 70 20 7b 31 20 31 7d 20 63 20 7b 31 20 31 7d 20  p {1 1} c {1 1} 
0b50: 78 20 7b 7b 31 20 33 20 32 7d 20 7b 32 20 33 20  x {{1 3 2} {2 3 
0b60: 32 7d 7d 0a 23 20 20 20 20 20 70 63 78 20 2d 0a  2}}.#     pcx -.
0b70: 23 20 20 20 7d 0a 23 0a 23 20 41 6e 64 20 74 68  #   }.#.# And th
0b80: 69 73 20 63 6f 6d 6d 61 6e 64 20 77 6f 75 6c 64  is command would
0b90: 20 63 6f 6d 70 75 74 65 20 74 68 65 20 65 78 70   compute the exp
0ba0: 65 63 74 65 64 20 72 65 73 75 6c 74 73 20 66 6f  ected results fo
0bb0: 72 20 6d 61 74 63 68 69 6e 66 6f 28 74 31 2c 20  r matchinfo(t1, 
0bc0: 27 70 63 78 27 29 0a 23 20 62 61 73 65 64 20 6f  'pcx').# based o
0bd0: 6e 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  n the results of
0be0: 20 6d 61 74 63 68 69 6e 66 6f 28 74 31 2c 20 27   matchinfo(t1, '
0bf0: 70 27 29 2c 20 6d 61 74 63 68 69 6e 66 6f 28 74  p'), matchinfo(t
0c00: 31 2c 20 27 63 27 29 20 61 6e 64 20 0a 23 20 6d  1, 'c') and .# m
0c10: 61 74 63 68 69 6e 66 6f 28 74 31 2c 20 27 78 27  atchinfo(t1, 'x'
0c20: 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 74 65  ) in order to te
0c30: 73 74 20 27 70 63 78 27 2e 0a 23 0a 70 72 6f 63  st 'pcx'..#.proc
0c40: 20 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65   do_matchinfo_te
0c50: 73 74 20 7b 74 6e 20 74 62 6c 20 65 78 70 72 20  st {tn tbl expr 
0c60: 72 65 73 75 6c 74 73 7d 20 7b 0a 0a 20 20 66 6f  results} {..  fo
0c70: 72 65 61 63 68 20 7b 66 6d 74 20 72 65 73 7d 20  reach {fmt res} 
0c80: 24 72 65 73 75 6c 74 73 20 7b 0a 20 20 20 20 69  $results {.    i
0c90: 66 20 7b 24 72 65 73 20 3d 3d 20 22 2d 22 7d 20  f {$res == "-"} 
0ca0: 63 6f 6e 74 69 6e 75 65 0a 20 20 20 20 73 65 74  continue.    set
0cb0: 20 72 65 73 61 72 72 61 79 28 24 66 6d 74 29 20   resarray($fmt) 
0cc0: 24 72 65 73 0a 20 20 7d 0a 0a 20 20 73 65 74 20  $res.  }..  set 
0cd0: 6e 52 6f 77 20 30 0a 20 20 66 6f 72 65 61 63 68  nRow 0.  foreach
0ce0: 20 7b 66 6d 74 20 72 65 73 7d 20 5b 61 72 72 61   {fmt res} [arra
0cf0: 79 20 67 65 74 20 72 65 73 61 72 72 61 79 5d 20  y get resarray] 
0d00: 7b 0a 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67  {.    if {[lleng
0d10: 74 68 20 24 72 65 73 5d 3e 24 6e 52 6f 77 7d 20  th $res]>$nRow} 
0d20: 7b 20 73 65 74 20 6e 52 6f 77 20 5b 6c 6c 65 6e  { set nRow [llen
0d30: 67 74 68 20 24 72 65 73 5d 20 7d 0a 20 20 7d 0a  gth $res] }.  }.
0d40: 0a 20 20 23 20 43 6f 6e 73 74 72 75 63 74 20 65  .  # Construct e
0d50: 78 70 65 63 74 65 64 20 72 65 73 75 6c 74 73 20  xpected results 
0d60: 66 6f 72 20 61 6e 79 20 66 6f 72 6d 61 74 73 20  for any formats 
0d70: 66 6f 72 20 77 68 69 63 68 20 74 68 65 20 63 61  for which the ca
0d80: 6c 6c 65 72 20 0a 20 20 23 20 73 75 70 70 6c 69  ller .  # suppli
0d90: 65 64 20 72 65 73 75 6c 74 20 69 73 20 22 2d 22  ed result is "-"
0da0: 2e 0a 20 20 23 0a 20 20 66 6f 72 65 61 63 68 20  ..  #.  foreach 
0db0: 7b 66 6d 74 20 72 65 73 7d 20 24 72 65 73 75 6c  {fmt res} $resul
0dc0: 74 73 20 7b 0a 20 20 20 20 69 66 20 7b 24 72 65  ts {.    if {$re
0dd0: 73 20 3d 3d 20 22 2d 22 7d 20 7b 0a 20 20 20 20  s == "-"} {.    
0de0: 20 20 73 65 74 20 72 65 73 20 5b 6c 69 73 74 5d    set res [list]
0df0: 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20  .      for {set 
0e00: 69 52 6f 77 20 30 7d 20 7b 24 69 52 6f 77 3c 24  iRow 0} {$iRow<$
0e10: 6e 52 6f 77 7d 20 7b 69 6e 63 72 20 69 52 6f 77  nRow} {incr iRow
0e20: 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 65 74 20  } {.        set 
0e30: 72 6f 77 72 65 73 20 5b 6c 69 73 74 5d 0a 20 20  rowres [list].  
0e40: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 63 20        foreach c 
0e50: 5b 73 70 6c 69 74 20 24 66 6d 74 20 22 22 5d 20  [split $fmt ""] 
0e60: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  {.          set 
0e70: 72 6f 77 72 65 73 20 5b 63 6f 6e 63 61 74 20 24  rowres [concat $
0e80: 72 6f 77 72 65 73 20 5b 6c 69 6e 64 65 78 20 24  rowres [lindex $
0e90: 72 65 73 61 72 72 61 79 28 24 63 29 20 24 69 52  resarray($c) $iR
0ea0: 6f 77 5d 5d 0a 20 20 20 20 20 20 20 20 7d 0a 20  ow]].        }. 
0eb0: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72         lappend r
0ec0: 65 73 20 24 72 6f 77 72 65 73 0a 20 20 20 20 20  es $rowres.     
0ed0: 20 7d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73   }.      set res
0ee0: 61 72 72 61 79 28 24 66 6d 74 29 20 24 72 65 73  array($fmt) $res
0ef0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 23 20  .    }.  }..  # 
0f00: 54 65 73 74 20 65 61 63 68 20 6d 61 74 63 68 69  Test each matchi
0f10: 6e 66 6f 28 29 20 72 65 71 75 65 73 74 20 69 6e  nfo() request in
0f20: 64 69 76 69 64 75 61 6c 6c 79 2e 0a 20 20 23 0a  dividually..  #.
0f30: 20 20 66 6f 72 65 61 63 68 20 7b 66 6d 74 20 72    foreach {fmt r
0f40: 65 73 7d 20 5b 61 72 72 61 79 20 67 65 74 20 72  es} [array get r
0f50: 65 73 61 72 72 61 79 5d 20 7b 0a 20 20 20 20 73  esarray] {.    s
0f60: 65 74 20 73 71 6c 20 22 53 45 4c 45 43 54 20 6d  et sql "SELECT m
0f70: 69 74 28 6d 61 74 63 68 69 6e 66 6f 28 24 74 62  it(matchinfo($tb
0f80: 6c 2c 20 27 24 66 6d 74 27 29 29 20 46 52 4f 4d  l, '$fmt')) FROM
0f90: 20 24 74 62 6c 20 57 48 45 52 45 20 24 65 78 70   $tbl WHERE $exp
0fa0: 72 22 0a 20 20 20 20 64 6f 5f 65 78 65 63 73 71  r".    do_execsq
0fb0: 6c 5f 74 65 73 74 20 24 74 6e 2e 24 66 6d 74 20  l_test $tn.$fmt 
0fc0: 24 73 71 6c 20 5b 6e 6f 72 6d 61 6c 69 7a 65 32  $sql [normalize2
0fd0: 20 24 72 65 73 5d 0a 20 20 7d 0a 0a 20 20 23 20   $res].  }..  # 
0fe0: 54 65 73 74 20 74 68 65 6d 20 61 6c 6c 20 65 78  Test them all ex
0ff0: 65 63 75 74 65 64 20 74 6f 67 65 74 68 65 72 20  ecuted together 
1000: 28 6d 75 6c 74 69 70 6c 65 20 69 6e 76 6f 63 61  (multiple invoca
1010: 74 69 6f 6e 73 20 6f 66 20 6d 61 74 63 68 69 6e  tions of matchin
1020: 66 6f 28 29 29 2e 0a 20 20 23 0a 20 20 73 65 74  fo())..  #.  set
1030: 20 65 78 70 72 6c 69 73 74 20 5b 6c 69 73 74 5d   exprlist [list]
1040: 0a 20 20 66 6f 72 65 61 63 68 20 7b 66 6f 72 6d  .  foreach {form
1050: 61 74 20 72 65 73 7d 20 5b 61 72 72 61 79 20 67  at res} [array g
1060: 65 74 20 72 65 73 61 72 72 61 79 5d 20 7b 0a 20  et resarray] {. 
1070: 20 20 20 6c 61 70 70 65 6e 64 20 65 78 70 72 6c     lappend exprl
1080: 69 73 74 20 22 6d 69 74 28 6d 61 74 63 68 69 6e  ist "mit(matchin
1090: 66 6f 28 24 74 62 6c 2c 20 27 24 66 6f 72 6d 61  fo($tbl, '$forma
10a0: 74 27 29 29 22 0a 20 20 7d 0a 20 20 73 65 74 20  t'))".  }.  set 
10b0: 61 6c 6c 72 65 73 20 5b 6c 69 73 74 5d 0a 20 20  allres [list].  
10c0: 66 6f 72 20 7b 73 65 74 20 69 52 6f 77 20 30 7d  for {set iRow 0}
10d0: 20 7b 24 69 52 6f 77 3c 24 6e 52 6f 77 7d 20 7b   {$iRow<$nRow} {
10e0: 69 6e 63 72 20 69 52 6f 77 7d 20 7b 0a 20 20 20  incr iRow} {.   
10f0: 20 66 6f 72 65 61 63 68 20 7b 66 6f 72 6d 61 74   foreach {format
1100: 20 72 65 73 7d 20 5b 61 72 72 61 79 20 67 65 74   res} [array get
1110: 20 72 65 73 61 72 72 61 79 5d 20 7b 0a 20 20 20   resarray] {.   
1120: 20 20 20 6c 61 70 70 65 6e 64 20 61 6c 6c 72 65     lappend allre
1130: 73 20 5b 6c 69 6e 64 65 78 20 24 72 65 73 20 24  s [lindex $res $
1140: 69 52 6f 77 5d 0a 20 20 20 20 7d 0a 20 20 7d 0a  iRow].    }.  }.
1150: 20 20 73 65 74 20 73 71 6c 20 22 53 45 4c 45 43    set sql "SELEC
1160: 54 20 5b 6a 6f 69 6e 20 24 65 78 70 72 6c 69 73  T [join $exprlis
1170: 74 20 2c 5d 20 46 52 4f 4d 20 24 74 62 6c 20 57  t ,] FROM $tbl W
1180: 48 45 52 45 20 24 65 78 70 72 22 0a 20 20 64 6f  HERE $expr".  do
1190: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 24 74  _execsql_test $t
11a0: 6e 2e 6d 75 6c 74 69 20 24 73 71 6c 20 5b 6e 6f  n.multi $sql [no
11b0: 72 6d 61 6c 69 7a 65 32 20 24 61 6c 6c 72 65 73  rmalize2 $allres
11c0: 5d 0a 7d 0a 70 72 6f 63 20 6e 6f 72 6d 61 6c 69  ].}.proc normali
11d0: 7a 65 32 20 7b 6c 69 73 74 5f 6f 66 5f 6c 69 73  ze2 {list_of_lis
11e0: 74 73 7d 20 7b 0a 20 20 73 65 74 20 72 65 73 20  ts} {.  set res 
11f0: 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68  [list].  foreach
1200: 20 65 6c 65 6d 20 24 6c 69 73 74 5f 6f 66 5f 6c   elem $list_of_l
1210: 69 73 74 73 20 7b 0a 20 20 20 20 6c 61 70 70 65  ists {.    lappe
1220: 6e 64 20 72 65 73 20 5b 6c 69 73 74 20 7b 2a 7d  nd res [list {*}
1230: 24 65 6c 65 6d 5d 0a 20 20 7d 0a 20 20 72 65 74  $elem].  }.  ret
1240: 75 72 6e 20 24 72 65 73 0a 7d 0a 0a 23 20 53 69  urn $res.}..# Si
1250: 6d 69 6c 61 72 20 74 6f 20 5b 64 6f 5f 6d 61 74  milar to [do_mat
1260: 63 68 69 6e 66 6f 5f 74 65 73 74 5d 2c 20 65 78  chinfo_test], ex
1270: 63 65 70 74 20 74 68 61 74 20 74 68 69 73 20 69  cept that this i
1280: 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65  s a no-op if the
1290: 20 46 54 53 35 0a 23 20 6d 6f 64 65 20 69 73 20   FTS5.# mode is 
12a0: 6e 6f 74 20 64 65 74 61 69 6c 3d 66 75 6c 6c 2e  not detail=full.
12b0: 0a 23 0a 70 72 6f 63 20 64 6f 5f 6d 61 74 63 68  .#.proc do_match
12c0: 69 6e 66 6f 5f 70 5f 74 65 73 74 20 7b 74 6e 20  info_p_test {tn 
12d0: 74 62 6c 20 65 78 70 72 20 72 65 73 75 6c 74 73  tbl expr results
12e0: 7d 20 7b 0a 20 20 69 66 20 7b 5b 64 65 74 61 69  } {.  if {[detai
12f0: 6c 5f 69 73 5f 66 75 6c 6c 5d 7d 20 7b 0a 20 20  l_is_full]} {.  
1300: 20 20 75 70 6c 65 76 65 6c 20 5b 6c 69 73 74 20    uplevel [list 
1310: 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73  do_matchinfo_tes
1320: 74 20 24 74 6e 20 24 74 62 6c 20 24 65 78 70 72  t $tn $tbl $expr
1330: 20 24 72 65 73 75 6c 74 73 5d 0a 20 20 7d 0a 7d   $results].  }.}
1340: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
1350: 74 20 34 2e 31 2e 30 20 7b 0a 20 20 43 52 45 41  t 4.1.0 {.  CREA
1360: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
1370: 20 74 34 20 55 53 49 4e 47 20 66 74 73 35 28 78   t4 USING fts5(x
1380: 2c 20 79 2c 20 64 65 74 61 69 6c 3d 25 44 45 54  , y, detail=%DET
1390: 41 49 4c 25 29 3b 0a 20 20 49 4e 53 45 52 54 20  AIL%);.  INSERT 
13a0: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27  INTO t4 VALUES('
13b0: 61 20 62 20 63 20 64 20 65 27 2c 20 27 66 20 67  a b c d e', 'f g
13c0: 20 68 20 69 20 6a 27 29 3b 0a 20 20 49 4e 53 45   h i j');.  INSE
13d0: 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45  RT INTO t4 VALUE
13e0: 53 28 27 66 20 67 20 68 20 69 20 6a 27 2c 20 27  S('f g h i j', '
13f0: 61 20 62 20 63 20 64 20 65 27 29 3b 0a 7d 0a 0a  a b c d e');.}..
1400: 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73  do_matchinfo_tes
1410: 74 20 34 2e 31 2e 31 20 74 34 20 7b 74 34 20 4d  t 4.1.1 t4 {t4 M
1420: 41 54 43 48 20 27 61 20 62 20 63 27 7d 20 7b 0a  ATCH 'a b c'} {.
1430: 20 20 73 20 7b 7b 33 20 30 7d 20 7b 30 20 33 7d    s {{3 0} {0 3}
1440: 7d 0a 7d 0a 0a 64 6f 5f 6d 61 74 63 68 69 6e 66  }.}..do_matchinf
1450: 6f 5f 74 65 73 74 20 34 2e 31 2e 31 20 74 34 20  o_test 4.1.1 t4 
1460: 7b 74 34 20 4d 41 54 43 48 20 27 61 20 62 20 63  {t4 MATCH 'a b c
1470: 27 7d 20 7b 0a 20 20 70 20 7b 33 20 33 7d 0a 20  '} {.  p {3 3}. 
1480: 20 78 20 7b 0a 20 20 20 20 7b 31 20 31 20 31 20   x {.    {1 1 1 
1490: 20 20 30 20 31 20 31 20 20 20 31 20 31 20 31 20    0 1 1   1 1 1 
14a0: 20 20 30 20 31 20 31 20 20 20 31 20 31 20 31 20    0 1 1   1 1 1 
14b0: 20 20 30 20 31 20 31 7d 0a 20 20 20 20 7b 30 20    0 1 1}.    {0 
14c0: 31 20 31 20 20 20 31 20 31 20 31 20 20 20 30 20  1 1   1 1 1   0 
14d0: 31 20 31 20 20 20 31 20 31 20 31 20 20 20 30 20  1 1   1 1 1   0 
14e0: 31 20 31 20 20 20 31 20 31 20 31 7d 0a 20 20 7d  1 1   1 1 1}.  }
14f0: 0a 7d 0a 0a 64 6f 5f 6d 61 74 63 68 69 6e 66 6f  .}..do_matchinfo
1500: 5f 74 65 73 74 20 34 2e 31 2e 31 20 74 34 20 7b  _test 4.1.1 t4 {
1510: 74 34 20 4d 41 54 43 48 20 27 61 20 62 20 63 27  t4 MATCH 'a b c'
1520: 7d 20 7b 0a 20 20 70 20 7b 33 20 33 7d 0a 20 20  } {.  p {3 3}.  
1530: 63 20 7b 32 20 32 7d 0a 20 20 78 20 7b 0a 20 20  c {2 2}.  x {.  
1540: 20 20 7b 31 20 31 20 31 20 20 20 30 20 31 20 31    {1 1 1   0 1 1
1550: 20 20 20 31 20 31 20 31 20 20 20 30 20 31 20 31     1 1 1   0 1 1
1560: 20 20 20 31 20 31 20 31 20 20 20 30 20 31 20 31     1 1 1   0 1 1
1570: 7d 0a 20 20 20 20 7b 30 20 31 20 31 20 20 20 31  }.    {0 1 1   1
1580: 20 31 20 31 20 20 20 30 20 31 20 31 20 20 20 31   1 1   0 1 1   1
1590: 20 31 20 31 20 20 20 30 20 31 20 31 20 20 20 31   1 1   0 1 1   1
15a0: 20 31 20 31 7d 0a 20 20 7d 0a 20 20 6e 20 7b 32   1 1}.  }.  n {2
15b0: 20 32 7d 0a 20 20 6c 20 7b 7b 35 20 35 7d 20 7b   2}.  l {{5 5} {
15c0: 35 20 35 7d 7d 0a 20 20 61 20 7b 7b 35 20 35 7d  5 5}}.  a {{5 5}
15d0: 20 7b 35 20 35 7d 7d 0a 0a 20 20 73 20 7b 7b 33   {5 5}}..  s {{3
15e0: 20 30 7d 20 7b 30 20 33 7d 7d 0a 0a 20 20 78 78   0} {0 3}}..  xx
15f0: 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78 78  xxxxxxxxxxxxxxxx
1600: 20 2d 20 70 63 78 20 2d 20 78 70 63 20 2d 20 63   - pcx - xpc - c
1610: 63 63 20 2d 20 70 70 70 78 70 63 70 63 78 20 2d  cc - pppxpcpcx -
1620: 20 6c 61 78 6e 70 63 20 2d 0a 20 20 78 70 78 73   laxnpc -.  xpxs
1630: 73 63 70 6c 61 78 20 2d 0a 7d 0a 0a 64 6f 5f 6d  scplax -.}..do_m
1640: 61 74 63 68 69 6e 66 6f 5f 70 5f 74 65 73 74 20  atchinfo_p_test 
1650: 34 2e 31 2e 32 20 74 34 20 7b 74 34 20 4d 41 54  4.1.2 t4 {t4 MAT
1660: 43 48 20 27 22 67 20 68 20 69 22 27 7d 20 7b 0a  CH '"g h i"'} {.
1670: 20 20 70 20 7b 31 20 31 7d 0a 20 20 63 20 7b 32    p {1 1}.  c {2
1680: 20 32 7d 0a 20 20 78 20 7b 0a 20 20 20 20 7b 30   2}.  x {.    {0
1690: 20 31 20 31 20 20 20 31 20 31 20 31 7d 0a 20 20   1 1   1 1 1}.  
16a0: 20 20 7b 31 20 31 20 31 20 20 20 30 20 31 20 31    {1 1 1   0 1 1
16b0: 7d 0a 20 20 7d 0a 20 20 6e 20 7b 32 20 32 7d 0a  }.  }.  n {2 2}.
16c0: 20 20 6c 20 7b 7b 35 20 35 7d 20 7b 35 20 35 7d    l {{5 5} {5 5}
16d0: 7d 0a 20 20 61 20 7b 7b 35 20 35 7d 20 7b 35 20  }.  a {{5 5} {5 
16e0: 35 7d 7d 0a 0a 20 20 73 20 7b 7b 30 20 31 7d 20  5}}..  s {{0 1} 
16f0: 7b 31 20 30 7d 7d 0a 0a 20 20 78 78 78 78 78 78  {1 0}}..  xxxxxx
1700: 78 78 78 78 78 78 78 78 78 78 78 78 20 2d 20 70  xxxxxxxxxxxx - p
1710: 63 78 20 2d 20 78 70 63 20 2d 20 63 63 63 20 2d  cx - xpc - ccc -
1720: 20 70 70 70 78 70 63 70 63 78 20 2d 20 6c 61 78   pppxpcpcx - lax
1730: 6e 70 63 20 2d 0a 20 20 73 78 73 78 73 20 2d 0a  npc -.  sxsxs -.
1740: 7d 0a 0a 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f  }..do_matchinfo_
1750: 74 65 73 74 20 34 2e 31 2e 33 20 74 34 20 7b 74  test 4.1.3 t4 {t
1760: 34 20 4d 41 54 43 48 20 27 61 20 62 27 7d 20 20  4 MATCH 'a b'}  
1770: 20 20 20 7b 20 73 20 7b 7b 32 20 30 7d 20 7b 30     { s {{2 0} {0
1780: 20 32 7d 7d 20 7d 0a 64 6f 5f 6d 61 74 63 68 69   2}} }.do_matchi
1790: 6e 66 6f 5f 70 5f 74 65 73 74 20 34 2e 31 2e 34  nfo_p_test 4.1.4
17a0: 20 74 34 20 7b 74 34 20 4d 41 54 43 48 20 27 22   t4 {t4 MATCH '"
17b0: 61 20 62 22 20 63 27 7d 20 7b 20 73 20 7b 7b 32  a b" c'} { s {{2
17c0: 20 30 7d 20 7b 30 20 32 7d 7d 20 7d 0a 64 6f 5f   0} {0 2}} }.do_
17d0: 6d 61 74 63 68 69 6e 66 6f 5f 70 5f 74 65 73 74  matchinfo_p_test
17e0: 20 34 2e 31 2e 35 20 74 34 20 7b 74 34 20 4d 41   4.1.5 t4 {t4 MA
17f0: 54 43 48 20 27 61 20 22 62 20 63 22 27 7d 20 7b  TCH 'a "b c"'} {
1800: 20 73 20 7b 7b 32 20 30 7d 20 7b 30 20 32 7d 7d   s {{2 0} {0 2}}
1810: 20 7d 0a 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f   }.do_matchinfo_
1820: 74 65 73 74 20 34 2e 31 2e 36 20 74 34 20 7b 74  test 4.1.6 t4 {t
1830: 34 20 4d 41 54 43 48 20 27 64 20 64 27 7d 20 20  4 MATCH 'd d'}  
1840: 20 20 20 7b 20 73 20 7b 7b 31 20 30 7d 20 7b 30     { s {{1 0} {0
1850: 20 31 7d 7d 20 7d 0a 64 6f 5f 6d 61 74 63 68 69   1}} }.do_matchi
1860: 6e 66 6f 5f 74 65 73 74 20 34 2e 31 2e 37 20 74  nfo_test 4.1.7 t
1870: 34 20 7b 74 34 20 4d 41 54 43 48 20 27 66 20 4f  4 {t4 MATCH 'f O
1880: 52 20 61 62 63 64 27 7d 20 7b 0a 20 20 78 20 7b  R abcd'} {.  x {
1890: 20 0a 20 20 20 20 7b 30 20 31 20 31 20 20 31 20   .    {0 1 1  1 
18a0: 31 20 31 20 20 30 20 30 20 30 20 20 30 20 30 20  1 1  0 0 0  0 0 
18b0: 30 7d 20 0a 20 20 20 20 7b 31 20 31 20 31 20 20  0} .    {1 1 1  
18c0: 30 20 31 20 31 20 20 30 20 30 20 30 20 20 30 20  0 1 1  0 0 0  0 
18d0: 30 20 30 7d 0a 20 20 7d 0a 7d 0a 64 6f 5f 6d 61  0 0}.  }.}.do_ma
18e0: 74 63 68 69 6e 66 6f 5f 74 65 73 74 20 34 2e 31  tchinfo_test 4.1
18f0: 2e 38 20 74 34 20 7b 74 34 20 4d 41 54 43 48 20  .8 t4 {t4 MATCH 
1900: 27 66 20 4e 4f 54 20 61 62 63 64 27 7d 20 7b 0a  'f NOT abcd'} {.
1910: 20 20 78 20 7b 20 0a 20 20 20 20 7b 30 20 31 20    x { .    {0 1 
1920: 31 20 20 31 20 31 20 31 20 20 30 20 30 20 30 20  1  1 1 1  0 0 0 
1930: 20 30 20 30 20 30 7d 0a 20 20 20 20 7b 31 20 31   0 0 0}.    {1 1
1940: 20 31 20 20 30 20 31 20 31 20 20 30 20 30 20 30   1  0 1 1  0 0 0
1950: 20 20 30 20 30 20 30 7d 0a 20 20 7d 0a 7d 0a 0a    0 0 0}.  }.}..
1960: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
1970: 34 2e 32 2e 30 20 7b 0a 20 20 43 52 45 41 54 45  4.2.0 {.  CREATE
1980: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74   VIRTUAL TABLE t
1990: 35 20 55 53 49 4e 47 20 66 74 73 35 28 63 6f 6e  5 USING fts5(con
19a0: 74 65 6e 74 2c 20 64 65 74 61 69 6c 3d 25 44 45  tent, detail=%DE
19b0: 54 41 49 4c 25 29 3b 0a 20 20 49 4e 53 45 52 54  TAIL%);.  INSERT
19c0: 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28   INTO t5 VALUES(
19d0: 27 61 20 61 20 61 20 61 20 61 27 29 3b 0a 20 20  'a a a a a');.  
19e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35 20 56  INSERT INTO t5 V
19f0: 41 4c 55 45 53 28 27 61 20 62 20 61 20 62 20 61  ALUES('a b a b a
1a00: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
1a10: 4f 20 74 35 20 56 41 4c 55 45 53 28 27 63 20 62  O t5 VALUES('c b
1a20: 20 63 20 62 20 63 27 29 3b 0a 20 20 49 4e 53 45   c b c');.  INSE
1a30: 52 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45  RT INTO t5 VALUE
1a40: 53 28 27 78 20 78 20 78 20 78 20 78 27 29 3b 0a  S('x x x x x');.
1a50: 7d 0a 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74  }.do_matchinfo_t
1a60: 65 73 74 20 34 2e 32 2e 31 20 74 35 20 7b 74 35  est 4.2.1 t5 {t5
1a70: 20 4d 41 54 43 48 20 27 61 20 61 27 7d 20 20 20   MATCH 'a a'}   
1a80: 20 20 20 20 20 20 7b 20 0a 20 20 78 20 7b 7b 35        { .  x {{5
1a90: 20 38 20 32 20 20 20 35 20 38 20 32 7d 20 7b 33   8 2   5 8 2} {3
1aa0: 20 38 20 32 20 20 20 33 20 38 20 32 7d 7d 0a 20   8 2   3 8 2}}. 
1ab0: 20 73 20 7b 32 20 31 7d 20 0a 7d 0a 64 6f 5f 6d   s {2 1} .}.do_m
1ac0: 61 74 63 68 69 6e 66 6f 5f 74 65 73 74 20 34 2e  atchinfo_test 4.
1ad0: 32 2e 32 20 74 35 20 7b 74 35 20 4d 41 54 43 48  2.2 t5 {t5 MATCH
1ae0: 20 27 61 20 62 27 7d 20 20 20 20 20 20 20 20 20   'a b'}         
1af0: 7b 20 73 20 7b 32 7d 20 7d 0a 64 6f 5f 6d 61 74  { s {2} }.do_mat
1b00: 63 68 69 6e 66 6f 5f 74 65 73 74 20 34 2e 32 2e  chinfo_test 4.2.
1b10: 33 20 74 35 20 7b 74 35 20 4d 41 54 43 48 20 27  3 t5 {t5 MATCH '
1b20: 61 20 62 20 61 27 7d 20 20 20 20 20 20 20 7b 20  a b a'}       { 
1b30: 73 20 7b 33 7d 20 7d 0a 64 6f 5f 6d 61 74 63 68  s {3} }.do_match
1b40: 69 6e 66 6f 5f 74 65 73 74 20 34 2e 32 2e 34 20  info_test 4.2.4 
1b50: 74 35 20 7b 74 35 20 4d 41 54 43 48 20 27 61 20  t5 {t5 MATCH 'a 
1b60: 61 20 61 27 7d 20 20 20 20 20 20 20 7b 20 73 20  a a'}       { s 
1b70: 7b 33 20 31 7d 20 7d 0a 64 6f 5f 6d 61 74 63 68  {3 1} }.do_match
1b80: 69 6e 66 6f 5f 70 5f 74 65 73 74 20 34 2e 32 2e  info_p_test 4.2.
1b90: 35 20 74 35 20 7b 74 35 20 4d 41 54 43 48 20 27  5 t5 {t5 MATCH '
1ba0: 22 61 20 62 22 20 22 61 20 62 22 27 7d 20 7b 20  "a b" "a b"'} { 
1bb0: 73 20 7b 32 7d 20 7d 0a 64 6f 5f 6d 61 74 63 68  s {2} }.do_match
1bc0: 69 6e 66 6f 5f 74 65 73 74 20 34 2e 32 2e 36 20  info_test 4.2.6 
1bd0: 74 35 20 7b 74 35 20 4d 41 54 43 48 20 27 61 20  t5 {t5 MATCH 'a 
1be0: 4f 52 20 62 27 7d 20 20 20 20 20 20 7b 20 73 20  OR b'}      { s 
1bf0: 7b 31 20 32 20 31 7d 20 7d 0a 0a 64 6f 5f 65 78  {1 2 1} }..do_ex
1c00: 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 33 2e 30  ecsql_test 4.3.0
1c10: 20 22 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35   "INSERT INTO t5
1c20: 20 56 41 4c 55 45 53 28 27 78 20 79 20 5b 73 74   VALUES('x y [st
1c30: 72 69 6e 67 20 72 65 70 65 61 74 20 7b 62 20 7d  ring repeat {b }
1c40: 20 35 30 30 30 30 5d 27 29 22 3b 0a 0a 23 20 49   50000]')";..# I
1c50: 74 20 75 73 65 64 20 74 6f 20 62 65 20 74 68 61  t used to be tha
1c60: 74 20 74 68 65 20 73 65 63 6f 6e 64 20 27 61 27  t the second 'a'
1c70: 20 74 6f 6b 65 6e 20 77 6f 75 6c 64 20 62 65 20   token would be 
1c80: 64 65 66 65 72 72 65 64 2e 20 54 68 61 74 20 64  deferred. That d
1c90: 6f 65 73 6e 27 74 0a 23 20 77 6f 72 6b 20 61 6e  oesn't.# work an
1ca0: 79 20 6c 6f 6e 67 65 72 2e 0a 69 66 20 30 20 7b  y longer..if 0 {
1cb0: 0a 20 20 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f  .  do_matchinfo_
1cc0: 74 65 73 74 20 34 2e 33 2e 31 20 74 35 20 7b 74  test 4.3.1 t5 {t
1cd0: 35 20 4d 41 54 43 48 20 27 61 20 61 27 7d 20 7b  5 MATCH 'a a'} {
1ce0: 20 0a 20 20 20 20 78 20 7b 7b 35 20 38 20 32 20   .    x {{5 8 2 
1cf0: 20 20 35 20 35 20 35 7d 20 7b 33 20 38 20 32 20    5 5 5} {3 8 2 
1d00: 20 20 33 20 35 20 35 7d 7d 0a 20 20 20 20 73 20    3 5 5}}.    s 
1d10: 7b 32 20 31 7d 20 0a 20 20 7d 0a 7d 0a 0a 64 6f  {2 1} .  }.}..do
1d20: 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73 74 20  _matchinfo_test 
1d30: 34 2e 33 2e 32 20 74 35 20 7b 74 35 20 4d 41 54  4.3.2 t5 {t5 MAT
1d40: 43 48 20 27 61 20 62 27 7d 20 20 20 20 20 20 20  CH 'a b'}       
1d50: 20 20 7b 20 73 20 7b 32 7d 20 7d 0a 64 6f 5f 6d    { s {2} }.do_m
1d60: 61 74 63 68 69 6e 66 6f 5f 74 65 73 74 20 34 2e  atchinfo_test 4.
1d70: 33 2e 33 20 74 35 20 7b 74 35 20 4d 41 54 43 48  3.3 t5 {t5 MATCH
1d80: 20 27 61 20 62 20 61 27 7d 20 20 20 20 20 20 20   'a b a'}       
1d90: 7b 20 73 20 7b 33 7d 20 7d 0a 64 6f 5f 6d 61 74  { s {3} }.do_mat
1da0: 63 68 69 6e 66 6f 5f 74 65 73 74 20 34 2e 33 2e  chinfo_test 4.3.
1db0: 34 20 74 35 20 7b 74 35 20 4d 41 54 43 48 20 27  4 t5 {t5 MATCH '
1dc0: 61 20 61 20 61 27 7d 20 20 20 20 20 20 20 7b 20  a a a'}       { 
1dd0: 73 20 7b 33 20 31 7d 20 7d 0a 64 6f 5f 6d 61 74  s {3 1} }.do_mat
1de0: 63 68 69 6e 66 6f 5f 70 5f 74 65 73 74 20 34 2e  chinfo_p_test 4.
1df0: 33 2e 35 20 74 35 20 7b 74 35 20 4d 41 54 43 48  3.5 t5 {t5 MATCH
1e00: 20 27 22 61 20 62 22 20 22 61 20 62 22 27 7d 20   '"a b" "a b"'} 
1e10: 7b 20 73 20 7b 32 7d 20 7d 0a 64 6f 5f 6d 61 74  { s {2} }.do_mat
1e20: 63 68 69 6e 66 6f 5f 74 65 73 74 20 34 2e 33 2e  chinfo_test 4.3.
1e30: 36 20 74 35 20 7b 74 35 20 4d 41 54 43 48 20 27  6 t5 {t5 MATCH '
1e40: 61 20 4f 52 20 62 27 7d 20 20 20 20 20 20 7b 20  a OR b'}      { 
1e50: 73 20 7b 31 20 32 20 31 20 31 7d 20 7d 0a 0a 64  s {1 2 1 1} }..d
1e60: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34  o_execsql_test 4
1e70: 2e 34 2e 30 2e 31 20 7b 20 49 4e 53 45 52 54 20  .4.0.1 { INSERT 
1e80: 49 4e 54 4f 20 74 35 28 74 35 29 20 56 41 4c 55  INTO t5(t5) VALU
1e90: 45 53 28 27 6f 70 74 69 6d 69 7a 65 27 29 20 7d  ES('optimize') }
1ea0: 0a 0a 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74  ..do_matchinfo_t
1eb0: 65 73 74 20 34 2e 34 2e 32 20 74 35 20 7b 74 35  est 4.4.2 t5 {t5
1ec0: 20 4d 41 54 43 48 20 27 61 20 62 27 7d 20 20 20   MATCH 'a b'}   
1ed0: 20 20 20 20 20 20 7b 20 73 20 7b 32 7d 20 7d 0a        { s {2} }.
1ee0: 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73  do_matchinfo_tes
1ef0: 74 20 34 2e 34 2e 31 20 74 35 20 7b 74 35 20 4d  t 4.4.1 t5 {t5 M
1f00: 41 54 43 48 20 27 61 20 61 27 7d 20 20 20 20 20  ATCH 'a a'}     
1f10: 20 20 20 20 7b 20 73 20 7b 32 20 31 7d 20 7d 0a      { s {2 1} }.
1f20: 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73  do_matchinfo_tes
1f30: 74 20 34 2e 34 2e 32 20 74 35 20 7b 74 35 20 4d  t 4.4.2 t5 {t5 M
1f40: 41 54 43 48 20 27 61 20 62 27 7d 20 20 20 20 20  ATCH 'a b'}     
1f50: 20 20 20 20 7b 20 73 20 7b 32 7d 20 7d 0a 64 6f      { s {2} }.do
1f60: 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73 74 20  _matchinfo_test 
1f70: 34 2e 34 2e 33 20 74 35 20 7b 74 35 20 4d 41 54  4.4.3 t5 {t5 MAT
1f80: 43 48 20 27 61 20 62 20 61 27 7d 20 20 20 20 20  CH 'a b a'}     
1f90: 20 20 7b 20 73 20 7b 33 7d 20 7d 0a 64 6f 5f 6d    { s {3} }.do_m
1fa0: 61 74 63 68 69 6e 66 6f 5f 74 65 73 74 20 34 2e  atchinfo_test 4.
1fb0: 34 2e 34 20 74 35 20 7b 74 35 20 4d 41 54 43 48  4.4 t5 {t5 MATCH
1fc0: 20 27 61 20 61 20 61 27 7d 20 20 20 20 20 20 20   'a a a'}       
1fd0: 7b 20 73 20 7b 33 20 31 7d 20 7d 0a 64 6f 5f 6d  { s {3 1} }.do_m
1fe0: 61 74 63 68 69 6e 66 6f 5f 70 5f 74 65 73 74 20  atchinfo_p_test 
1ff0: 34 2e 34 2e 35 20 74 35 20 7b 74 35 20 4d 41 54  4.4.5 t5 {t5 MAT
2000: 43 48 20 27 22 61 20 62 22 20 22 61 20 62 22 27  CH '"a b" "a b"'
2010: 7d 20 7b 20 73 20 7b 32 7d 20 7d 0a 0a 64 6f 5f  } { s {2} }..do_
2020: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 35  execsql_test 4.5
2030: 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49  .0 {.  CREATE VI
2040: 52 54 55 41 4c 20 54 41 42 4c 45 20 74 36 20 55  RTUAL TABLE t6 U
2050: 53 49 4e 47 20 66 74 73 35 28 61 2c 20 62 2c 20  SING fts5(a, b, 
2060: 63 2c 20 64 65 74 61 69 6c 3d 25 44 45 54 41 49  c, detail=%DETAI
2070: 4c 25 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  L%);.  INSERT IN
2080: 54 4f 20 74 36 20 56 41 4c 55 45 53 28 27 61 27  TO t6 VALUES('a'
2090: 2c 20 27 62 27 2c 20 27 63 27 29 3b 0a 7d 0a 64  , 'b', 'c');.}.d
20a0: 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73 74  o_matchinfo_test
20b0: 20 34 2e 35 2e 31 20 74 36 20 7b 74 36 20 4d 41   4.5.1 t6 {t6 MA
20c0: 54 43 48 20 27 61 20 62 20 63 27 7d 20 20 20 20  TCH 'a b c'}    
20d0: 20 20 20 7b 20 73 20 7b 7b 31 20 31 20 31 7d 7d     { s {{1 1 1}}
20e0: 20 7d 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   }...#----------
20f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
2130: 23 20 54 65 73 74 20 74 68 65 20 6f 75 74 63 6f  # Test the outco
2140: 6d 65 20 6f 66 20 6d 61 74 63 68 69 6e 66 6f 28  me of matchinfo(
2150: 29 20 77 68 65 6e 20 75 73 65 64 20 77 69 74 68  ) when used with
2160: 69 6e 20 61 20 71 75 65 72 79 20 74 68 61 74 20  in a query that 
2170: 64 6f 65 73 20 6e 6f 74 0a 23 20 75 73 65 20 74  does not.# use t
2180: 68 65 20 66 75 6c 6c 2d 74 65 78 74 20 69 6e 64  he full-text ind
2190: 65 78 20 28 69 2e 65 2e 20 6c 6f 6f 6b 75 70 20  ex (i.e. lookup 
21a0: 62 79 20 72 6f 77 69 64 20 6f 72 20 66 75 6c 6c  by rowid or full
21b0: 2d 74 61 62 6c 65 20 73 63 61 6e 29 2e 0a 23 0a  -table scan)..#.
21c0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
21d0: 37 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20 56  7.1 {.  CREATE V
21e0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 31 30  IRTUAL TABLE t10
21f0: 20 55 53 49 4e 47 20 66 74 73 35 28 63 6f 6e 74   USING fts5(cont
2200: 65 6e 74 2c 20 64 65 74 61 69 6c 3d 25 44 45 54  ent, detail=%DET
2210: 41 49 4c 25 29 3b 0a 20 20 49 4e 53 45 52 54 20  AIL%);.  INSERT 
2220: 49 4e 54 4f 20 74 31 30 20 56 41 4c 55 45 53 28  INTO t10 VALUES(
2230: 27 66 69 72 73 74 20 72 65 63 6f 72 64 27 29 3b  'first record');
2240: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
2250: 31 30 20 56 41 4c 55 45 53 28 27 73 65 63 6f 6e  10 VALUES('secon
2260: 64 20 72 65 63 6f 72 64 27 29 3b 0a 7d 0a 64 6f  d record');.}.do
2270: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 37 2e  _execsql_test 7.
2280: 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 74 79 70  2 {.  SELECT typ
2290: 65 6f 66 28 6d 61 74 63 68 69 6e 66 6f 28 74 31  eof(matchinfo(t1
22a0: 30 29 29 2c 20 6c 65 6e 67 74 68 28 6d 61 74 63  0)), length(matc
22b0: 68 69 6e 66 6f 28 74 31 30 29 29 20 46 52 4f 4d  hinfo(t10)) FROM
22c0: 20 74 31 30 3b 0a 7d 20 7b 62 6c 6f 62 20 38 20   t10;.} {blob 8 
22d0: 62 6c 6f 62 20 38 7d 0a 64 6f 5f 65 78 65 63 73  blob 8}.do_execs
22e0: 71 6c 5f 74 65 73 74 20 37 2e 33 20 7b 0a 20 20  ql_test 7.3 {.  
22f0: 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28 6d 61  SELECT typeof(ma
2300: 74 63 68 69 6e 66 6f 28 74 31 30 29 29 2c 20 6c  tchinfo(t10)), l
2310: 65 6e 67 74 68 28 6d 61 74 63 68 69 6e 66 6f 28  ength(matchinfo(
2320: 74 31 30 29 29 20 46 52 4f 4d 20 74 31 30 20 57  t10)) FROM t10 W
2330: 48 45 52 45 20 72 6f 77 69 64 3d 31 3b 0a 7d 20  HERE rowid=1;.} 
2340: 7b 62 6c 6f 62 20 38 7d 0a 64 6f 5f 65 78 65 63  {blob 8}.do_exec
2350: 73 71 6c 5f 74 65 73 74 20 37 2e 34 20 7b 0a 20  sql_test 7.4 {. 
2360: 20 53 45 4c 45 43 54 20 74 79 70 65 6f 66 28 6d   SELECT typeof(m
2370: 61 74 63 68 69 6e 66 6f 28 74 31 30 29 29 2c 20  atchinfo(t10)), 
2380: 6c 65 6e 67 74 68 28 6d 61 74 63 68 69 6e 66 6f  length(matchinfo
2390: 28 74 31 30 29 29 20 0a 20 20 46 52 4f 4d 20 74  (t10)) .  FROM t
23a0: 31 30 20 57 48 45 52 45 20 74 31 30 20 4d 41 54  10 WHERE t10 MAT
23b0: 43 48 20 27 72 65 63 6f 72 64 27 0a 7d 20 7b 62  CH 'record'.} {b
23c0: 6c 6f 62 20 32 30 20 62 6c 6f 62 20 32 30 7d 0a  lob 20 blob 20}.
23d0: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
23e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
23f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2410: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65  -----------.# Te
2420: 73 74 20 61 20 73 70 65 63 69 61 6c 20 63 61 73  st a special cas
2430: 65 20 2d 20 6d 61 74 63 68 69 6e 66 6f 28 27 6e  e - matchinfo('n
2440: 78 61 27 29 20 77 69 74 68 20 6d 61 6e 79 20 7a  xa') with many z
2450: 65 72 6f 20 6c 65 6e 67 74 68 20 64 6f 63 75 6d  ero length docum
2460: 65 6e 74 73 2e 20 0a 23 20 53 70 65 63 69 61 6c  ents. .# Special
2470: 20 62 65 63 61 75 73 65 20 22 78 22 20 69 6e 74   because "x" int
2480: 65 72 6e 61 6c 6c 79 20 75 73 65 73 20 61 20 73  ernally uses a s
2490: 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 62 79  tatement used by
24a0: 20 62 6f 74 68 20 22 6e 22 20 61 6e 64 20 22 61   both "n" and "a
24b0: 22 2e 20 0a 23 20 54 68 69 73 20 77 61 73 20 63  ". .# This was c
24c0: 61 75 73 69 6e 67 20 61 20 70 72 6f 62 6c 65 6d  ausing a problem
24d0: 20 61 74 20 6f 6e 65 20 70 6f 69 6e 74 20 69 6e   at one point in
24e0: 20 74 68 65 20 6f 62 73 63 75 72 65 20 63 61 73   the obscure cas
24f0: 65 20 77 68 65 72 65 20 74 68 65 0a 23 20 74 6f  e where the.# to
2500: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  tal number of by
2510: 74 65 73 20 6f 66 20 64 61 74 61 20 73 74 6f 72  tes of data stor
2520: 65 64 20 69 6e 20 61 6e 20 66 74 73 33 20 74 61  ed in an fts3 ta
2530: 62 6c 65 20 77 61 73 20 67 72 65 61 74 65 72 20  ble was greater 
2540: 74 68 61 6e 0a 23 20 74 68 65 20 6e 75 6d 62 65  than.# the numbe
2550: 72 20 6f 66 20 72 6f 77 73 2e 20 69 2e 65 2e 20  r of rows. i.e. 
2560: 77 68 65 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  when the followi
2570: 6e 67 20 71 75 65 72 79 20 72 65 74 75 72 6e 73  ng query returns
2580: 20 74 72 75 65 3a 0a 23 0a 23 20 20 20 53 45 4c   true:.#.#   SEL
2590: 45 43 54 20 73 75 6d 28 6c 65 6e 67 74 68 28 63  ECT sum(length(c
25a0: 6f 6e 74 65 6e 74 29 29 20 3c 20 63 6f 75 6e 74  ontent)) < count
25b0: 28 2a 29 20 46 52 4f 4d 20 66 74 73 34 74 61 62  (*) FROM fts4tab
25c0: 6c 65 3b 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c  le;.#.do_execsql
25d0: 5f 74 65 73 74 20 38 2e 31 20 7b 0a 20 20 43 52  _test 8.1 {.  CR
25e0: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
25f0: 4c 45 20 74 31 31 20 55 53 49 4e 47 20 66 74 73  LE t11 USING fts
2600: 35 28 63 6f 6e 74 65 6e 74 2c 20 64 65 74 61 69  5(content, detai
2610: 6c 3d 25 44 45 54 41 49 4c 25 29 3b 0a 20 20 49  l=%DETAIL%);.  I
2620: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 31 28 74  NSERT INTO t11(t
2630: 31 31 2c 20 72 61 6e 6b 29 20 56 41 4c 55 45 53  11, rank) VALUES
2640: 28 27 70 67 73 7a 27 2c 20 33 32 29 3b 0a 20 20  ('pgsz', 32);.  
2650: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 31 20  INSERT INTO t11 
2660: 56 41 4c 55 45 53 28 27 71 75 69 74 65 61 6c 6f  VALUES('quitealo
2670: 6e 67 73 74 72 69 6e 67 6f 66 74 65 78 74 27 29  ngstringoftext')
2680: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
2690: 74 31 31 20 56 41 4c 55 45 53 28 27 61 6e 6f 74  t11 VALUES('anot
26a0: 68 65 72 71 75 69 74 65 61 6c 6f 6e 67 73 74 72  herquitealongstr
26b0: 69 6e 67 6f 66 74 65 78 74 27 29 3b 0a 20 20 49  ingoftext');.  I
26c0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 31 20 56  NSERT INTO t11 V
26d0: 41 4c 55 45 53 28 27 61 74 68 69 72 64 6c 6f 6e  ALUES('athirdlon
26e0: 67 73 74 72 69 6e 67 6f 66 74 65 78 74 27 29 3b  gstringoftext');
26f0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
2700: 31 31 20 56 41 4c 55 45 53 28 27 61 6e 64 6f 6e  11 VALUES('andon
2710: 65 6d 6f 72 65 66 6f 72 67 6f 6f 64 6c 75 63 6b  emoreforgoodluck
2720: 27 29 3b 0a 7d 0a 64 6f 5f 74 65 73 74 20 38 2e  ');.}.do_test 8.
2730: 32 20 7b 0a 20 20 66 6f 72 20 7b 73 65 74 20 69  2 {.  for {set i
2740: 20 30 7d 20 7b 24 69 20 3c 20 32 30 30 7d 20 7b   0} {$i < 200} {
2750: 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 65 78  incr i} {.    ex
2760: 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49  ecsql { INSERT I
2770: 4e 54 4f 20 74 31 31 20 56 41 4c 55 45 53 28 27  NTO t11 VALUES('
2780: 27 29 20 7d 0a 20 20 7d 0a 20 20 65 78 65 63 73  ') }.  }.  execs
2790: 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f  ql { INSERT INTO
27a0: 20 74 31 31 28 74 31 31 29 20 56 41 4c 55 45 53   t11(t11) VALUES
27b0: 28 27 6f 70 74 69 6d 69 7a 65 27 29 20 7d 0a 7d  ('optimize') }.}
27c0: 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74   {}.do_execsql_t
27d0: 65 73 74 20 38 2e 33 20 7b 0a 20 20 53 45 4c 45  est 8.3 {.  SELE
27e0: 43 54 20 6d 69 74 28 6d 61 74 63 68 69 6e 66 6f  CT mit(matchinfo
27f0: 28 74 31 31 2c 20 27 6e 78 61 27 29 29 20 46 52  (t11, 'nxa')) FR
2800: 4f 4d 20 74 31 31 20 57 48 45 52 45 20 74 31 31  OM t11 WHERE t11
2810: 20 4d 41 54 43 48 20 27 61 2a 27 0a 7d 20 7b 7b   MATCH 'a*'.} {{
2820: 32 30 34 20 31 20 33 20 33 20 30 7d 20 7b 32 30  204 1 3 3 0} {20
2830: 34 20 31 20 33 20 33 20 30 7d 20 7b 32 30 34 20  4 1 3 3 0} {204 
2840: 31 20 33 20 33 20 30 7d 7d 0a 0a 23 2d 2d 2d 2d  1 3 3 0}}..#----
2850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2860: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2870: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2880: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2890: 2d 2d 2d 2d 2d 0a 0a 69 66 20 7b 5b 64 65 74 61  -----..if {[deta
28a0: 69 6c 5f 69 73 5f 66 75 6c 6c 5d 7d 20 7b 0a 20  il_is_full]} {. 
28b0: 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74   do_execsql_test
28c0: 20 39 2e 31 20 7b 0a 20 20 20 20 43 52 45 41 54   9.1 {.    CREAT
28d0: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
28e0: 74 31 32 20 55 53 49 4e 47 20 66 74 73 35 28 63  t12 USING fts5(c
28f0: 6f 6e 74 65 6e 74 2c 20 64 65 74 61 69 6c 3d 25  ontent, detail=%
2900: 44 45 54 41 49 4c 25 29 3b 0a 20 20 20 20 49 4e  DETAIL%);.    IN
2910: 53 45 52 54 20 49 4e 54 4f 20 74 31 32 20 56 41  SERT INTO t12 VA
2920: 4c 55 45 53 28 27 61 20 62 20 63 20 64 27 29 3b  LUES('a b c d');
2930: 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 69 74 28  .    SELECT mit(
2940: 6d 61 74 63 68 69 6e 66 6f 28 74 31 32 2c 27 78  matchinfo(t12,'x
2950: 27 29 29 20 46 52 4f 4d 20 74 31 32 20 57 48 45  ')) FROM t12 WHE
2960: 52 45 20 74 31 32 20 4d 41 54 43 48 20 27 4e 45  RE t12 MATCH 'NE
2970: 41 52 28 61 20 64 2c 20 31 29 20 4f 52 20 61 27  AR(a d, 1) OR a'
2980: 3b 0a 20 20 7d 20 7b 7b 30 20 31 20 31 20 30 20  ;.  } {{0 1 1 0 
2990: 31 20 31 20 31 20 31 20 31 7d 7d 0a 20 20 64 6f  1 1 1 1 1}}.  do
29a0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 39 2e  _execsql_test 9.
29b0: 32 20 7b 0a 20 20 20 20 49 4e 53 45 52 54 20 49  2 {.    INSERT I
29c0: 4e 54 4f 20 74 31 32 20 56 41 4c 55 45 53 28 27  NTO t12 VALUES('
29d0: 61 20 64 20 63 20 64 27 29 3b 0a 20 20 20 20 53  a d c d');.    S
29e0: 45 4c 45 43 54 20 6d 69 74 28 6d 61 74 63 68 69  ELECT mit(matchi
29f0: 6e 66 6f 28 74 31 32 2c 27 78 27 29 29 20 46 52  nfo(t12,'x')) FR
2a00: 4f 4d 20 74 31 32 20 57 48 45 52 45 20 74 31 32  OM t12 WHERE t12
2a10: 20 4d 41 54 43 48 20 27 4e 45 41 52 28 61 20 64   MATCH 'NEAR(a d
2a20: 2c 20 31 29 20 4f 52 20 61 27 3b 0a 20 20 7d 20  , 1) OR a';.  } 
2a30: 7b 0a 20 20 20 20 7b 30 20 32 20 32 20 30 20 33  {.    {0 2 2 0 3
2a40: 20 32 20 31 20 32 20 32 7d 20 7b 31 20 32 20 32   2 1 2 2} {1 2 2
2a50: 20 31 20 33 20 32 20 31 20 32 20 32 7d 0a 20 20   1 3 2 1 2 2}.  
2a60: 7d 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74  }.  do_execsql_t
2a70: 65 73 74 20 39 2e 33 20 7b 0a 20 20 20 20 49 4e  est 9.3 {.    IN
2a80: 53 45 52 54 20 49 4e 54 4f 20 74 31 32 20 56 41  SERT INTO t12 VA
2a90: 4c 55 45 53 28 27 61 20 64 20 64 20 61 27 29 3b  LUES('a d d a');
2aa0: 0a 20 20 20 20 53 45 4c 45 43 54 20 6d 69 74 28  .    SELECT mit(
2ab0: 6d 61 74 63 68 69 6e 66 6f 28 74 31 32 2c 27 78  matchinfo(t12,'x
2ac0: 27 29 29 20 46 52 4f 4d 20 74 31 32 20 57 48 45  ')) FROM t12 WHE
2ad0: 52 45 20 74 31 32 20 4d 41 54 43 48 20 27 4e 45  RE t12 MATCH 'NE
2ae0: 41 52 28 61 20 64 2c 20 31 29 20 4f 52 20 61 27  AR(a d, 1) OR a'
2af0: 3b 0a 20 20 7d 20 7b 0a 20 20 20 20 7b 30 20 34  ;.  } {.    {0 4
2b00: 20 33 20 30 20 35 20 33 20 31 20 34 20 33 7d 20   3 0 5 3 1 4 3} 
2b10: 7b 31 20 34 20 33 20 31 20 35 20 33 20 31 20 34  {1 4 3 1 5 3 1 4
2b20: 20 33 7d 20 7b 32 20 34 20 33 20 32 20 35 20 33   3} {2 4 3 2 5 3
2b30: 20 32 20 34 20 33 7d 0a 20 20 7d 0a 7d 0a 0a 23   2 4 3}.  }.}..#
2b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2b80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65  -----------.# Te
2b90: 73 74 20 66 6f 72 20 61 20 6d 65 6d 6f 72 79 20  st for a memory 
2ba0: 6c 65 61 6b 0a 23 0a 64 6f 5f 65 78 65 63 73 71  leak.#.do_execsq
2bb0: 6c 5f 74 65 73 74 20 31 30 2e 31 20 7b 0a 20 20  l_test 10.1 {.  
2bc0: 44 52 4f 50 20 54 41 42 4c 45 20 74 31 30 3b 0a  DROP TABLE t10;.
2bd0: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
2be0: 20 54 41 42 4c 45 20 74 31 30 20 55 53 49 4e 47   TABLE t10 USING
2bf0: 20 66 74 73 35 28 69 64 78 2c 20 76 61 6c 75 65   fts5(idx, value
2c00: 2c 20 64 65 74 61 69 6c 3d 25 44 45 54 41 49 4c  , detail=%DETAIL
2c10: 25 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  %);.  INSERT INT
2c20: 4f 20 74 31 30 20 76 61 6c 75 65 73 20 28 31 2c  O t10 values (1,
2c30: 20 27 6f 6e 65 27 29 2c 28 32 2c 20 27 74 77 6f   'one'),(2, 'two
2c40: 27 29 2c 28 33 2c 20 27 74 68 72 65 65 27 29 3b  '),(3, 'three');
2c50: 0a 20 20 53 45 4c 45 43 54 20 74 31 30 2e 72 6f  .  SELECT t10.ro
2c60: 77 69 64 2c 20 74 31 30 2e 2a 0a 20 20 20 20 46  wid, t10.*.    F
2c70: 52 4f 4d 20 74 31 30 0a 20 20 20 20 4a 4f 49 4e  ROM t10.    JOIN
2c80: 20 28 53 45 4c 45 43 54 20 31 20 41 53 20 69 64   (SELECT 1 AS id
2c90: 78 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 32  x UNION SELECT 2
2ca0: 20 55 4e 49 4f 4e 20 53 45 4c 45 43 54 20 33 29   UNION SELECT 3)
2cb0: 20 41 53 20 78 0a 20 20 20 57 48 45 52 45 20 74   AS x.   WHERE t
2cc0: 31 30 20 4d 41 54 43 48 20 78 2e 69 64 78 0a 20  10 MATCH x.idx. 
2cd0: 20 20 20 20 41 4e 44 20 6d 61 74 63 68 69 6e 66      AND matchinf
2ce0: 6f 28 74 31 30 29 20 6e 6f 74 20 6e 75 6c 6c 0a  o(t10) not null.
2cf0: 20 20 20 47 52 4f 55 50 20 42 59 20 74 31 30 2e     GROUP BY t10.
2d00: 72 6f 77 69 64 0a 20 20 20 4f 52 44 45 52 20 42  rowid.   ORDER B
2d10: 59 20 31 3b 0a 7d 20 7b 31 20 31 20 6f 6e 65 20  Y 1;.} {1 1 one 
2d20: 32 20 32 20 74 77 6f 20 33 20 33 20 74 68 72 65  2 2 two 3 3 thre
2d30: 65 7d 0a 20 20 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d  e}.  .#---------
2d40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2d50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2d60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2d70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2d80: 2d 2d 0a 23 20 54 65 73 74 20 74 68 65 20 27 79  --.# Test the 'y
2d90: 27 20 6d 61 74 63 68 69 6e 66 6f 20 66 6c 61 67  ' matchinfo flag
2da0: 0a 23 0a 72 65 73 65 74 5f 64 62 0a 73 71 6c 69  .#.reset_db.sqli
2db0: 74 65 33 5f 66 74 73 35 5f 72 65 67 69 73 74 65  te3_fts5_registe
2dc0: 72 5f 6d 61 74 63 68 69 6e 66 6f 20 64 62 0a 64  r_matchinfo db.d
2dd0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31  o_execsql_test 1
2de0: 31 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20 56  1.0 {.  CREATE V
2df0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 74 20  IRTUAL TABLE tt 
2e00: 55 53 49 4e 47 20 66 74 73 35 28 78 2c 20 79 2c  USING fts5(x, y,
2e10: 20 64 65 74 61 69 6c 3d 25 44 45 54 41 49 4c 25   detail=%DETAIL%
2e20: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
2e30: 20 74 74 20 56 41 4c 55 45 53 28 27 63 20 64 20   tt VALUES('c d 
2e40: 61 20 63 20 64 20 64 27 2c 20 27 65 20 61 20 67  a c d d', 'e a g
2e50: 20 62 20 64 20 61 27 29 3b 20 20 20 2d 2d 20 31   b d a');   -- 1
2e60: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
2e70: 74 20 56 41 4c 55 45 53 28 27 63 20 63 20 67 20  t VALUES('c c g 
2e80: 61 20 65 20 62 27 2c 20 27 63 20 67 20 64 20 67  a e b', 'c g d g
2e90: 20 65 20 63 27 29 3b 20 20 20 2d 2d 20 32 0a 20   e c');   -- 2. 
2ea0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 74 20   INSERT INTO tt 
2eb0: 56 41 4c 55 45 53 28 27 62 20 65 20 66 20 64 20  VALUES('b e f d 
2ec0: 65 20 67 27 2c 20 27 62 20 61 20 63 20 62 20 63  e g', 'b a c b c
2ed0: 20 67 27 29 3b 20 20 20 2d 2d 20 33 0a 20 20 49   g');   -- 3.  I
2ee0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 74 20 56 41  NSERT INTO tt VA
2ef0: 4c 55 45 53 28 27 61 20 63 20 66 20 66 20 67 20  LUES('a c f f g 
2f00: 64 27 2c 20 27 64 20 62 20 66 20 64 20 65 20 67  d', 'd b f d e g
2f10: 27 29 3b 20 20 20 2d 2d 20 34 0a 20 20 49 4e 53  ');   -- 4.  INS
2f20: 45 52 54 20 49 4e 54 4f 20 74 74 20 56 41 4c 55  ERT INTO tt VALU
2f30: 45 53 28 27 67 20 61 20 63 20 66 20 63 20 66 27  ES('g a c f c f'
2f40: 2c 20 27 64 20 67 20 67 20 62 20 63 20 63 27 29  , 'd g g b c c')
2f50: 3b 20 20 20 2d 2d 20 35 0a 20 20 49 4e 53 45 52  ;   -- 5.  INSER
2f60: 54 20 49 4e 54 4f 20 74 74 20 56 41 4c 55 45 53  T INTO tt VALUES
2f70: 28 27 67 20 61 20 63 20 65 20 62 20 62 27 2c 20  ('g a c e b b', 
2f80: 27 64 20 62 20 66 20 62 20 67 20 67 27 29 3b 20  'd b f b g g'); 
2f90: 20 20 2d 2d 20 36 0a 20 20 49 4e 53 45 52 54 20    -- 6.  INSERT 
2fa0: 49 4e 54 4f 20 74 74 20 56 41 4c 55 45 53 28 27  INTO tt VALUES('
2fb0: 66 20 64 20 61 20 61 20 66 20 63 27 2c 20 27 65  f d a a f c', 'e
2fc0: 20 65 20 61 20 64 20 63 20 66 27 29 3b 20 20 20   e a d c f');   
2fd0: 2d 2d 20 37 0a 20 20 49 4e 53 45 52 54 20 49 4e  -- 7.  INSERT IN
2fe0: 54 4f 20 74 74 20 56 41 4c 55 45 53 28 27 61 20  TO tt VALUES('a 
2ff0: 63 20 62 20 62 20 67 20 66 27 2c 20 27 61 20 62  c b b g f', 'a b
3000: 20 61 20 65 20 64 20 66 27 29 3b 20 20 20 2d 2d   a e d f');   --
3010: 20 38 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f   8.  INSERT INTO
3020: 20 74 74 20 56 41 4c 55 45 53 28 27 62 20 61 20   tt VALUES('b a 
3030: 66 20 65 20 63 20 63 27 2c 20 27 66 20 64 20 62  f e c c', 'f d b
3040: 20 62 20 61 20 62 27 29 3b 20 20 20 2d 2d 20 39   b a b');   -- 9
3050: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
3060: 74 20 56 41 4c 55 45 53 28 27 66 20 64 20 63 20  t VALUES('f d c 
3070: 65 20 61 20 63 27 2c 20 27 66 20 61 20 66 20 61  e a c', 'f a f a
3080: 20 61 20 66 27 29 3b 20 20 20 2d 2d 20 31 30 0a   a f');   -- 10.
3090: 7d 0a 0a 64 62 20 66 75 6e 63 20 6d 69 74 20 6d  }..db func mit m
30a0: 69 74 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20 65  it.foreach {tn e
30b0: 78 70 72 20 72 65 73 7d 20 7b 0a 20 20 31 20 22  xpr res} {.  1 "
30c0: 61 22 20 7b 0a 20 20 20 20 20 20 31 20 7b 31 20  a" {.      1 {1 
30d0: 32 7d 20 20 20 32 20 7b 31 20 30 7d 20 20 20 33  2}   2 {1 0}   3
30e0: 20 7b 30 20 31 7d 20 20 20 34 20 7b 31 20 30 7d   {0 1}   4 {1 0}
30f0: 20 20 20 35 20 7b 31 20 30 7d 0a 20 20 20 20 20     5 {1 0}.     
3100: 20 36 20 7b 31 20 30 7d 20 20 20 37 20 7b 32 20   6 {1 0}   7 {2 
3110: 31 7d 20 20 20 38 20 7b 31 20 32 7d 20 20 20 39  1}   8 {1 2}   9
3120: 20 7b 31 20 31 7d 20 20 31 30 20 7b 31 20 33 7d   {1 1}  10 {1 3}
3130: 0a 20 20 7d 0a 0a 20 20 32 20 22 62 22 20 7b 0a  .  }..  2 "b" {.
3140: 20 20 20 20 20 20 31 20 7b 30 20 31 7d 20 20 20        1 {0 1}   
3150: 32 20 7b 31 20 30 7d 20 20 20 33 20 7b 31 20 32  2 {1 0}   3 {1 2
3160: 7d 20 20 20 34 20 7b 30 20 31 7d 20 20 20 35 20  }   4 {0 1}   5 
3170: 7b 30 20 31 7d 0a 20 20 20 20 20 20 36 20 7b 32  {0 1}.      6 {2
3180: 20 32 7d 20 20 20 20 20 20 20 20 20 20 20 20 20   2}             
3190: 38 20 7b 32 20 31 7d 20 20 20 39 20 7b 31 20 33  8 {2 1}   9 {1 3
31a0: 7d 20 20 20 20 20 20 20 20 20 20 20 20 0a 20 20  }            .  
31b0: 7d 0a 0a 20 20 33 20 22 79 3a 61 22 20 7b 0a 20  }..  3 "y:a" {. 
31c0: 20 20 20 20 20 31 20 7b 30 20 32 7d 20 20 20 20       1 {0 2}    
31d0: 20 20 20 20 20 20 20 20 20 33 20 7b 30 20 31 7d           3 {0 1}
31e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f0: 20 20 20 20 0a 20 20 20 20 20 20 20 20 20 20 20      .           
3200: 20 20 20 20 20 37 20 7b 30 20 31 7d 20 20 20 38       7 {0 1}   8
3210: 20 7b 30 20 32 7d 20 20 20 39 20 7b 30 20 31 7d   {0 2}   9 {0 1}
3220: 20 20 31 30 20 7b 30 20 33 7d 0a 20 20 7d 0a 0a    10 {0 3}.  }..
3230: 20 20 34 20 22 78 3a 61 22 20 7b 0a 20 20 20 20    4 "x:a" {.    
3240: 20 20 31 20 7b 31 20 30 7d 20 20 20 32 20 7b 31    1 {1 0}   2 {1
3250: 20 30 7d 20 20 20 20 20 20 20 20 20 20 20 20 20   0}             
3260: 34 20 7b 31 20 30 7d 20 20 20 35 20 7b 31 20 30  4 {1 0}   5 {1 0
3270: 7d 0a 20 20 20 20 20 20 36 20 7b 31 20 30 7d 20  }.      6 {1 0} 
3280: 20 20 37 20 7b 32 20 30 7d 20 20 20 38 20 7b 31    7 {2 0}   8 {1
3290: 20 30 7d 20 20 20 39 20 7b 31 20 30 7d 20 20 31   0}   9 {1 0}  1
32a0: 30 20 7b 31 20 30 7d 0a 20 20 7d 0a 0a 20 20 35  0 {1 0}.  }..  5
32b0: 20 22 61 20 4f 52 20 62 22 20 7b 0a 20 20 20 20   "a OR b" {.    
32c0: 20 20 31 20 7b 31 20 32 20 30 20 31 7d 20 20 20    1 {1 2 0 1}   
32d0: 32 20 7b 31 20 30 20 31 20 30 7d 20 20 20 33 20  2 {1 0 1 0}   3 
32e0: 7b 30 20 31 20 31 20 32 7d 20 20 20 34 20 7b 31  {0 1 1 2}   4 {1
32f0: 20 30 20 30 20 31 7d 20 20 20 35 20 7b 31 20 30   0 0 1}   5 {1 0
3300: 20 30 20 31 7d 0a 20 20 20 20 20 20 36 20 7b 31   0 1}.      6 {1
3310: 20 30 20 32 20 32 7d 20 20 20 37 20 7b 32 20 31   0 2 2}   7 {2 1
3320: 20 30 20 30 7d 20 20 20 38 20 7b 31 20 32 20 32   0 0}   8 {1 2 2
3330: 20 31 7d 20 20 20 39 20 7b 31 20 31 20 31 20 33   1}   9 {1 1 1 3
3340: 7d 20 20 31 30 20 7b 31 20 33 20 30 20 30 7d 0a  }  10 {1 3 0 0}.
3350: 20 20 7d 0a 0a 20 20 36 20 22 61 20 41 4e 44 20    }..  6 "a AND 
3360: 62 22 20 7b 0a 20 20 20 20 20 20 31 20 7b 31 20  b" {.      1 {1 
3370: 32 20 30 20 31 7d 20 20 20 32 20 7b 31 20 30 20  2 0 1}   2 {1 0 
3380: 31 20 30 7d 20 20 20 33 20 7b 30 20 31 20 31 20  1 0}   3 {0 1 1 
3390: 32 7d 20 20 20 34 20 7b 31 20 30 20 30 20 31 7d  2}   4 {1 0 0 1}
33a0: 20 20 20 35 20 7b 31 20 30 20 30 20 31 7d 0a 20     5 {1 0 0 1}. 
33b0: 20 20 20 20 20 36 20 7b 31 20 30 20 32 20 32 7d       6 {1 0 2 2}
33c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d0: 20 38 20 7b 31 20 32 20 32 20 31 7d 20 20 20 39   8 {1 2 2 1}   9
33e0: 20 7b 31 20 31 20 31 20 33 7d 20 20 20 20 20 20   {1 1 1 3}      
33f0: 20 20 20 20 20 20 20 20 0a 20 20 7d 0a 0a 20 20          .  }..  
3400: 37 20 22 61 20 4f 52 20 28 61 20 41 4e 44 20 62  7 "a OR (a AND b
3410: 29 22 20 7b 0a 20 20 20 20 20 20 31 20 7b 31 20  )" {.      1 {1 
3420: 32 20 31 20 32 20 30 20 31 7d 20 20 20 32 20 7b  2 1 2 0 1}   2 {
3430: 31 20 30 20 31 20 30 20 31 20 30 7d 20 20 20 33  1 0 1 0 1 0}   3
3440: 20 7b 30 20 31 20 30 20 31 20 31 20 32 7d 20 20   {0 1 0 1 1 2}  
3450: 20 34 20 7b 31 20 30 20 31 20 30 20 30 20 31 7d   4 {1 0 1 0 0 1}
3460: 20 20 20 0a 20 20 20 20 20 20 35 20 7b 31 20 30     .      5 {1 0
3470: 20 31 20 30 20 30 20 31 7d 20 20 20 36 20 7b 31   1 0 0 1}   6 {1
3480: 20 30 20 31 20 30 20 32 20 32 7d 20 20 20 37 20   0 1 0 2 2}   7 
3490: 7b 32 20 31 20 30 20 30 20 30 20 30 7d 20 20 20  {2 1 0 0 0 0}   
34a0: 38 20 7b 31 20 32 20 31 20 32 20 32 20 31 7d 20  8 {1 2 1 2 2 1} 
34b0: 20 20 0a 20 20 20 20 20 20 39 20 7b 31 20 31 20    .      9 {1 1 
34c0: 31 20 31 20 31 20 33 7d 20 20 31 30 20 7b 31 20  1 1 1 3}  10 {1 
34d0: 33 20 30 20 30 20 30 20 30 7d 0a 20 20 7d 0a 0a  3 0 0 0 0}.  }..
34e0: 7d 20 7b 0a 0a 20 20 69 66 20 7b 5b 73 74 72 69  } {..  if {[stri
34f0: 6e 67 20 6d 61 74 63 68 20 2a 3a 2a 20 24 65 78  ng match *:* $ex
3500: 70 72 5d 20 26 26 20 5b 64 65 74 61 69 6c 5f 69  pr] && [detail_i
3510: 73 5f 6e 6f 6e 65 5d 7d 20 63 6f 6e 74 69 6e 75  s_none]} continu
3520: 65 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74  e.  do_execsql_t
3530: 65 73 74 20 31 31 2e 31 2e 24 74 6e 2e 31 20 20  est 11.1.$tn.1  
3540: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77  {.    SELECT row
3550: 69 64 2c 20 6d 69 74 28 6d 61 74 63 68 69 6e 66  id, mit(matchinf
3560: 6f 28 74 74 2c 20 27 79 27 29 29 20 46 52 4f 4d  o(tt, 'y')) FROM
3570: 20 74 74 20 57 48 45 52 45 20 74 74 20 4d 41 54   tt WHERE tt MAT
3580: 43 48 20 24 65 78 70 72 0a 20 20 7d 20 24 72 65  CH $expr.  } $re
3590: 73 0a 0a 20 20 73 65 74 20 72 32 20 5b 6c 69 73  s..  set r2 [lis
35a0: 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 7b 72 6f  t].  foreach {ro
35b0: 77 69 64 20 4c 7d 20 24 72 65 73 20 7b 0a 20 20  wid L} $res {.  
35c0: 20 20 6c 61 70 70 65 6e 64 20 72 32 20 24 72 6f    lappend r2 $ro
35d0: 77 69 64 0a 20 20 20 20 73 65 74 20 4d 20 5b 6c  wid.    set M [l
35e0: 69 73 74 5d 0a 20 20 20 20 66 6f 72 65 61 63 68  ist].    foreach
35f0: 20 7b 61 20 62 7d 20 24 4c 20 7b 0a 20 20 20 20   {a b} $L {.    
3600: 20 20 6c 61 70 70 65 6e 64 20 4d 20 5b 65 78 70    lappend M [exp
3610: 72 20 28 24 61 20 3f 20 31 20 3a 20 30 29 20 2b  r ($a ? 1 : 0) +
3620: 20 28 24 62 20 3f 20 32 20 3a 20 30 29 5d 0a 20   ($b ? 2 : 0)]. 
3630: 20 20 20 7d 0a 20 20 20 20 6c 61 70 70 65 6e 64     }.    lappend
3640: 20 72 32 20 24 4d 0a 20 20 7d 0a 0a 20 20 64 6f   r2 $M.  }..  do
3650: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 31  _execsql_test 11
3660: 2e 31 2e 24 74 6e 2e 32 20 20 7b 0a 20 20 20 20  .1.$tn.2  {.    
3670: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 6d 69  SELECT rowid, mi
3680: 74 28 6d 61 74 63 68 69 6e 66 6f 28 74 74 2c 20  t(matchinfo(tt, 
3690: 27 62 27 29 29 20 46 52 4f 4d 20 74 74 20 57 48  'b')) FROM tt WH
36a0: 45 52 45 20 74 74 20 4d 41 54 43 48 20 24 65 78  ERE tt MATCH $ex
36b0: 70 72 0a 20 20 7d 20 24 72 32 0a 0a 20 20 64 6f  pr.  } $r2..  do
36c0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 31  _execsql_test 11
36d0: 2e 31 2e 24 74 6e 2e 32 20 20 7b 0a 20 20 20 20  .1.$tn.2  {.    
36e0: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 6d 69  SELECT rowid, mi
36f0: 74 28 6d 61 74 63 68 69 6e 66 6f 28 74 74 2c 20  t(matchinfo(tt, 
3700: 27 62 27 29 29 20 46 52 4f 4d 20 74 74 20 57 48  'b')) FROM tt WH
3710: 45 52 45 20 74 74 20 4d 41 54 43 48 20 24 65 78  ERE tt MATCH $ex
3720: 70 72 0a 20 20 7d 20 24 72 32 0a 7d 0a 0a 23 2d  pr.  } $r2.}..#-
3730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73  ----------.# Tes
3780: 74 20 74 68 65 20 27 62 27 20 6d 61 74 63 68 69  t the 'b' matchi
3790: 6e 66 6f 20 66 6c 61 67 0a 23 0a 72 65 73 65 74  nfo flag.#.reset
37a0: 5f 64 62 0a 73 71 6c 69 74 65 33 5f 66 74 73 35  _db.sqlite3_fts5
37b0: 5f 72 65 67 69 73 74 65 72 5f 6d 61 74 63 68 69  _register_matchi
37c0: 6e 66 6f 20 64 62 0a 64 62 20 66 75 6e 63 20 6d  nfo db.db func m
37d0: 69 74 20 6d 69 74 0a 0a 64 6f 5f 74 65 73 74 20  it mit..do_test 
37e0: 31 32 2e 30 20 7b 0a 20 20 73 65 74 20 63 6f 6c  12.0 {.  set col
37f0: 73 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 20 7b  s [list].  for {
3800: 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 35  set i 0} {$i < 5
3810: 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 20 6c 61  0} {incr i} { la
3820: 70 70 65 6e 64 20 63 6f 6c 73 20 22 63 24 69 22  ppend cols "c$i"
3830: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 22 43 52   }.  execsql "CR
3840: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
3850: 4c 45 20 74 74 20 55 53 49 4e 47 20 66 74 73 35  LE tt USING fts5
3860: 28 5b 6a 6f 69 6e 20 24 63 6f 6c 73 20 2c 5d 2c  ([join $cols ,],
3870: 20 64 65 74 61 69 6c 3d 25 44 45 54 41 49 4c 25   detail=%DETAIL%
3880: 29 22 0a 7d 20 7b 7d 0a 0a 64 6f 5f 65 78 65 63  )".} {}..do_exec
3890: 73 71 6c 5f 74 65 73 74 20 31 32 2e 31 20 7b 0a  sql_test 12.1 {.
38a0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 74    INSERT INTO tt
38b0: 20 28 72 6f 77 69 64 2c 20 63 34 2c 20 63 34 35   (rowid, c4, c45
38c0: 29 20 56 41 4c 55 45 53 28 31 2c 20 27 61 62 63  ) VALUES(1, 'abc
38d0: 27 2c 20 27 61 62 63 27 29 3b 0a 20 20 53 45 4c  ', 'abc');.  SEL
38e0: 45 43 54 20 6d 69 74 28 6d 61 74 63 68 69 6e 66  ECT mit(matchinf
38f0: 6f 28 74 74 2c 20 27 62 27 29 29 20 46 52 4f 4d  o(tt, 'b')) FROM
3900: 20 74 74 20 57 48 45 52 45 20 74 74 20 4d 41 54   tt WHERE tt MAT
3910: 43 48 20 27 61 62 63 27 3b 0a 7d 20 5b 6c 69 73  CH 'abc';.} [lis
3920: 74 20 5b 6c 69 73 74 20 5b 65 78 70 72 20 31 3c  t [list [expr 1<
3930: 3c 34 5d 20 5b 65 78 70 72 20 31 3c 3c 28 34 35  <4] [expr 1<<(45
3940: 2d 33 32 29 5d 5d 5d 0a 0a 7d 20 3b 23 20 66 6f  -32)]]]..} ;# fo
3950: 72 65 61 63 68 5f 64 65 74 61 69 6c 5f 6d 6f 64  reach_detail_mod
3960: 65 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  e..#------------
3970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3980: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3990: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
39a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
39b0: 54 65 73 74 20 74 68 61 74 20 61 20 62 61 64 20  Test that a bad 
39c0: 66 74 73 35 28 29 20 72 65 74 75 72 6e 20 69 73  fts5() return is
39d0: 20 64 65 74 65 63 74 65 64 0a 23 0a 72 65 73 65   detected.#.rese
39e0: 74 5f 64 62 0a 70 72 6f 63 20 78 79 7a 20 7b 7d  t_db.proc xyz {}
39f0: 20 7b 7d 0a 64 62 20 66 75 6e 63 20 66 74 73 35   {}.db func fts5
3a00: 20 2d 61 72 67 63 6f 75 6e 74 20 31 20 78 79 7a   -argcount 1 xyz
3a10: 0a 64 6f 5f 74 65 73 74 20 31 33 2e 31 20 7b 0a  .do_test 13.1 {.
3a20: 20 20 6c 69 73 74 20 5b 63 61 74 63 68 20 7b 20    list [catch { 
3a30: 73 71 6c 69 74 65 33 5f 66 74 73 35 5f 72 65 67  sqlite3_fts5_reg
3a40: 69 73 74 65 72 5f 6d 61 74 63 68 69 6e 66 6f 20  ister_matchinfo 
3a50: 64 62 20 7d 20 6d 73 67 5d 20 24 6d 73 67 0a 7d  db } msg] $msg.}
3a60: 20 7b 31 20 53 51 4c 49 54 45 5f 45 52 52 4f 52   {1 SQLITE_ERROR
3a70: 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }..#------------
3a80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3a90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3aa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3ab0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
3ac0: 54 65 73 74 20 74 68 61 74 20 61 6e 20 69 6e 76  Test that an inv
3ad0: 61 6c 69 64 20 6d 61 74 63 68 69 6e 66 6f 28 29  alid matchinfo()
3ae0: 20 66 6c 61 67 20 69 73 20 64 65 74 65 63 74 65   flag is detecte
3af0: 64 0a 23 0a 72 65 73 65 74 5f 64 62 0a 73 71 6c  d.#.reset_db.sql
3b00: 69 74 65 33 5f 66 74 73 35 5f 72 65 67 69 73 74  ite3_fts5_regist
3b10: 65 72 5f 6d 61 74 63 68 69 6e 66 6f 20 64 62 0a  er_matchinfo db.
3b20: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
3b30: 31 34 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20  14.1 {.  CREATE 
3b40: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 31  VIRTUAL TABLE x1
3b50: 20 55 53 49 4e 47 20 66 74 73 35 28 7a 29 3b 0a   USING fts5(z);.
3b60: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31    INSERT INTO x1
3b70: 20 56 41 4c 55 45 53 28 27 61 20 62 20 63 20 61   VALUES('a b c a
3b80: 20 62 20 63 20 61 20 62 20 63 27 29 3b 0a 7d 20   b c a b c');.} 
3b90: 7b 7d 0a 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f  {}..do_catchsql_
3ba0: 74 65 73 74 20 31 34 2e 32 20 7b 0a 20 20 53 45  test 14.2 {.  SE
3bb0: 4c 45 43 54 20 6d 61 74 63 68 69 6e 66 6f 28 78  LECT matchinfo(x
3bc0: 31 2c 20 27 64 27 29 20 46 52 4f 4d 20 78 31 28  1, 'd') FROM x1(
3bd0: 27 61 20 62 20 63 27 29 3b 0a 7d 20 7b 31 20 7b  'a b c');.} {1 {
3be0: 75 6e 72 65 63 6f 67 6e 69 7a 65 64 20 6d 61 74  unrecognized mat
3bf0: 63 68 69 6e 66 6f 20 66 6c 61 67 3a 20 64 7d 7d  chinfo flag: d}}
3c00: 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ..#-------------
3c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54  ------------.# T
3c50: 65 73 74 20 75 73 69 6e 67 20 6d 61 74 63 68 69  est using matchi
3c60: 6e 66 6f 28 29 20 61 6e 64 20 73 69 6d 69 6c 61  nfo() and simila
3c70: 72 20 6f 6e 20 61 20 6e 6f 6e 2d 66 75 6c 6c 2d  r on a non-full-
3c80: 74 65 78 74 20 71 75 65 72 79 0a 23 0a 64 6f 5f  text query.#.do_
3c90: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 35 2e  execsql_test 15.
3ca0: 30 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49 52  0 {.  CREATE VIR
3cb0: 54 55 41 4c 20 54 41 42 4c 45 20 74 31 20 55 53  TUAL TABLE t1 US
3cc0: 49 4e 47 20 66 74 73 35 28 78 2c 20 79 29 3b 0a  ING fts5(x, y);.
3cd0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
3ce0: 20 56 41 4c 55 45 53 28 27 61 27 2c 20 27 62 27   VALUES('a', 'b'
3cf0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
3d00: 20 74 31 20 56 41 4c 55 45 53 28 27 63 27 2c 20   t1 VALUES('c', 
3d10: 27 64 27 29 3b 0a 7d 0a 0a 64 6f 5f 65 78 65 63  'd');.}..do_exec
3d20: 73 71 6c 5f 74 65 73 74 20 31 35 2e 31 20 7b 0a  sql_test 15.1 {.
3d30: 20 20 53 45 4c 45 43 54 20 71 75 6f 74 65 28 6d    SELECT quote(m
3d40: 61 74 63 68 69 6e 66 6f 28 74 31 2c 20 27 6e 27  atchinfo(t1, 'n'
3d50: 29 29 20 46 52 4f 4d 20 74 31 20 4c 49 4d 49 54  )) FROM t1 LIMIT
3d60: 20 31 3b 0a 7d 20 7b 58 27 30 32 30 30 30 30 30   1;.} {X'0200000
3d70: 30 27 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  0'}..do_execsql_
3d80: 74 65 73 74 20 31 35 2e 32 20 7b 0a 20 20 44 45  test 15.2 {.  DE
3d90: 4c 45 54 45 20 46 52 4f 4d 20 74 31 5f 63 6f 6e  LETE FROM t1_con
3da0: 74 65 6e 74 20 57 48 45 52 45 20 72 6f 77 69 64  tent WHERE rowid
3db0: 3d 31 3b 0a 20 20 53 45 4c 45 43 54 20 71 75 6f  =1;.  SELECT quo
3dc0: 74 65 28 6d 61 74 63 68 69 6e 66 6f 28 74 31 2c  te(matchinfo(t1,
3dd0: 20 27 6e 27 29 29 20 46 52 4f 4d 20 74 31 20 4c   'n')) FROM t1 L
3de0: 49 4d 49 54 20 31 3b 0a 7d 20 7b 58 27 30 32 30  IMIT 1;.} {X'020
3df0: 30 30 30 30 30 27 7d 0a 0a 66 74 73 35 5f 61 75  00000'}..fts5_au
3e00: 78 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 73  x_test_functions
3e10: 20 64 62 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74   db.do_execsql_t
3e20: 65 73 74 20 31 35 2e 33 20 7b 0a 20 20 53 45 4c  est 15.3 {.  SEL
3e30: 45 43 54 20 66 74 73 35 5f 74 65 73 74 5f 61 6c  ECT fts5_test_al
3e40: 6c 28 74 31 29 20 46 52 4f 4d 20 74 31 20 4c 49  l(t1) FROM t1 LI
3e50: 4d 49 54 20 31 3b 0a 7d 20 7b 0a 20 20 7b 63 6f  MIT 1;.} {.  {co
3e60: 6c 75 6d 6e 73 69 7a 65 20 7b 30 20 30 7d 20 63  lumnsize {0 0} c
3e70: 6f 6c 75 6d 6e 74 65 78 74 20 7b 63 20 64 7d 20  olumntext {c d} 
3e80: 63 6f 6c 75 6d 6e 74 6f 74 61 6c 73 69 7a 65 20  columntotalsize 
3e90: 7b 32 20 32 7d 20 70 6f 73 6c 69 73 74 20 7b 7d  {2 2} poslist {}
3ea0: 20 74 6f 6b 65 6e 69 7a 65 20 7b 63 20 64 7d 20   tokenize {c d} 
3eb0: 72 6f 77 63 6f 75 6e 74 20 32 7d 0a 7d 0a 0a 66  rowcount 2}.}..f
3ec0: 69 6e 69 73 68 5f 74 65 73 74 0a 0a              inish_test..