/ Hex Artifact Content
Login

Artifact aa66cc50615578b30f6df9984819ae5b702511cf8a94251ec7c594096a703a4a:


0000: 23 20 32 30 31 30 20 4e 6f 76 65 6d 62 65 72 20  # 2010 November 
0010: 30 32 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  02.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 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 0a 23 20 54 68 69 73 20  ********.# This 
0170: 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20  file implements 
0180: 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
0190: 20 66 6f 72 20 74 68 65 20 46 54 53 33 20 6d 6f   for the FTS3 mo
01a0: 64 75 6c 65 2e 20 54 68 65 20 66 6f 63 75 73 0a  dule. The focus.
01b0: 23 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69  # of this file i
01c0: 73 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 64  s tables created
01d0: 20 77 69 74 68 20 74 68 65 20 22 6d 61 74 63 68   with the "match
01e0: 69 6e 66 6f 3d 66 74 73 33 22 20 6f 70 74 69 6f  info=fts3" optio
01f0: 6e 2e 0a 23 0a 0a 73 65 74 20 74 65 73 74 64 69  n..#..set testdi
0200: 72 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  r [file dirname 
0210: 24 61 72 67 76 30 5d 0a 73 6f 75 72 63 65 20 24  $argv0].source $
0220: 74 65 73 74 64 69 72 2f 74 65 73 74 65 72 2e 74  testdir/tester.t
0230: 63 6c 0a 0a 23 20 49 66 20 53 51 4c 49 54 45 5f  cl..# If SQLITE_
0240: 45 4e 41 42 4c 45 5f 46 54 53 33 20 69 73 20 6e  ENABLE_FTS3 is n
0250: 6f 74 20 64 65 66 69 6e 65 64 2c 20 6f 6d 69 74  ot defined, omit
0260: 20 74 68 69 73 20 66 69 6c 65 2e 0a 69 66 63 61   this file..ifca
0270: 70 61 62 6c 65 20 21 66 74 73 33 20 7b 20 66 69  pable !fts3 { fi
0280: 6e 69 73 68 5f 74 65 73 74 20 3b 20 72 65 74 75  nish_test ; retu
0290: 72 6e 20 7d 0a 0a 73 65 74 20 74 65 73 74 70 72  rn }..set testpr
02a0: 65 66 69 78 20 66 74 73 33 6d 61 74 63 68 69 6e  efix fts3matchin
02b0: 66 6f 0a 73 65 74 20 73 71 6c 69 74 65 5f 66 74  fo.set sqlite_ft
02c0: 73 33 5f 65 6e 61 62 6c 65 5f 70 61 72 65 6e 74  s3_enable_parent
02d0: 68 65 73 65 73 20 30 0a 0a 70 72 6f 63 20 6d 69  heses 0..proc mi
02e0: 74 20 7b 62 6c 6f 62 7d 20 7b 0a 20 20 73 65 74  t {blob} {.  set
02f0: 20 73 63 61 6e 28 6c 69 74 74 6c 65 45 6e 64 69   scan(littleEndi
0300: 61 6e 29 20 69 2a 0a 20 20 73 65 74 20 73 63 61  an) i*.  set sca
0310: 6e 28 62 69 67 45 6e 64 69 61 6e 29 20 49 2a 0a  n(bigEndian) I*.
0320: 20 20 62 69 6e 61 72 79 20 73 63 61 6e 20 24 62    binary scan $b
0330: 6c 6f 62 20 24 73 63 61 6e 28 24 3a 3a 74 63 6c  lob $scan($::tcl
0340: 5f 70 6c 61 74 66 6f 72 6d 28 62 79 74 65 4f 72  _platform(byteOr
0350: 64 65 72 29 29 20 72 0a 20 20 72 65 74 75 72 6e  der)) r.  return
0360: 20 24 72 0a 7d 0a 64 62 20 66 75 6e 63 20 6d 69   $r.}.db func mi
0370: 74 20 6d 69 74 0a 0a 64 6f 5f 65 78 65 63 73 71  t mit..do_execsq
0380: 6c 5f 74 65 73 74 20 31 2e 30 20 7b 0a 20 20 43  l_test 1.0 {.  C
0390: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
03a0: 42 4c 45 20 74 31 20 55 53 49 4e 47 20 66 74 73  BLE t1 USING fts
03b0: 34 28 6d 61 74 63 68 69 6e 66 6f 3d 66 74 73 33  4(matchinfo=fts3
03c0: 29 3b 0a 20 20 53 45 4c 45 43 54 20 6e 61 6d 65  );.  SELECT name
03d0: 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73   FROM sqlite_mas
03e0: 74 65 72 20 57 48 45 52 45 20 74 79 70 65 20 3d  ter WHERE type =
03f0: 20 27 74 61 62 6c 65 27 3b 0a 7d 20 7b 74 31 20   'table';.} {t1 
0400: 74 31 5f 63 6f 6e 74 65 6e 74 20 74 31 5f 73 65  t1_content t1_se
0410: 67 6d 65 6e 74 73 20 74 31 5f 73 65 67 64 69 72  gments t1_segdir
0420: 20 74 31 5f 73 74 61 74 7d 0a 0a 64 6f 5f 65 78   t1_stat}..do_ex
0430: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 31 20 7b  ecsql_test 1.1 {
0440: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
0450: 31 28 63 6f 6e 74 65 6e 74 29 20 56 41 4c 55 45  1(content) VALUE
0460: 53 28 27 49 20 77 61 6e 64 65 72 65 64 20 6c 6f  S('I wandered lo
0470: 6e 65 6c 79 20 61 73 20 61 20 63 6c 6f 75 64 27  nely as a cloud'
0480: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
0490: 20 74 31 28 63 6f 6e 74 65 6e 74 29 20 56 41 4c   t1(content) VAL
04a0: 55 45 53 28 27 54 68 61 74 20 66 6c 6f 61 74 73  UES('That floats
04b0: 20 6f 6e 20 68 69 67 68 20 6f 27 27 65 72 20 76   on high o''er v
04c0: 61 6c 65 73 20 61 6e 64 20 68 69 6c 6c 73 2c 27  ales and hills,'
04d0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
04e0: 20 74 31 28 63 6f 6e 74 65 6e 74 29 20 56 41 4c   t1(content) VAL
04f0: 55 45 53 28 27 57 68 65 6e 20 61 6c 6c 20 61 74  UES('When all at
0500: 20 6f 6e 63 65 20 49 20 73 61 77 20 61 20 63 72   once I saw a cr
0510: 6f 77 64 2c 27 29 3b 0a 20 20 49 4e 53 45 52 54  owd,');.  INSERT
0520: 20 49 4e 54 4f 20 74 31 28 63 6f 6e 74 65 6e 74   INTO t1(content
0530: 29 20 56 41 4c 55 45 53 28 27 41 20 68 6f 73 74  ) VALUES('A host
0540: 2c 20 6f 66 20 67 6f 6c 64 65 6e 20 64 61 66 66  , of golden daff
0550: 6f 64 69 6c 73 2c 27 29 3b 0a 20 20 53 45 4c 45  odils,');.  SELE
0560: 43 54 20 6d 69 74 28 6d 61 74 63 68 69 6e 66 6f  CT mit(matchinfo
0570: 28 74 31 29 29 20 46 52 4f 4d 20 74 31 20 57 48  (t1)) FROM t1 WH
0580: 45 52 45 20 74 31 20 4d 41 54 43 48 20 27 49 27  ERE t1 MATCH 'I'
0590: 3b 0a 7d 20 7b 7b 31 20 31 20 31 20 32 20 32 7d  ;.} {{1 1 1 2 2}
05a0: 20 7b 31 20 31 20 31 20 32 20 32 7d 7d 0a 0a 23   {1 1 1 2 2}}..#
05b0: 20 4e 6f 77 20 63 72 65 61 74 65 20 61 6e 20 46   Now create an F
05c0: 54 53 34 20 74 61 62 6c 65 20 74 68 61 74 20 64  TS4 table that d
05d0: 6f 65 73 20 6e 6f 74 20 73 70 65 63 69 66 79 20  oes not specify 
05e0: 6d 61 74 63 68 69 6e 66 6f 3d 66 74 73 33 2e 0a  matchinfo=fts3..
05f0: 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  #.do_execsql_tes
0600: 74 20 31 2e 32 20 7b 0a 20 20 43 52 45 41 54 45  t 1.2 {.  CREATE
0610: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74   VIRTUAL TABLE t
0620: 32 20 55 53 49 4e 47 20 66 74 73 34 3b 0a 20 20  2 USING fts4;.  
0630: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 20 53  INSERT INTO t2 S
0640: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 3b  ELECT * FROM t1;
0650: 0a 20 20 53 45 4c 45 43 54 20 6d 69 74 28 6d 61  .  SELECT mit(ma
0660: 74 63 68 69 6e 66 6f 28 74 32 29 29 20 46 52 4f  tchinfo(t2)) FRO
0670: 4d 20 74 32 20 57 48 45 52 45 20 74 32 20 4d 41  M t2 WHERE t2 MA
0680: 54 43 48 20 27 49 27 3b 0a 7d 20 7b 7b 31 20 31  TCH 'I';.} {{1 1
0690: 20 31 20 32 20 32 7d 20 7b 31 20 31 20 31 20 32   1 2 2} {1 1 1 2
06a0: 20 32 7d 7d 0a 0a 23 20 54 65 73 74 20 73 6f 6d   2}}..# Test som
06b0: 65 20 73 79 6e 74 61 78 2d 65 72 72 6f 72 20 68  e syntax-error h
06c0: 61 6e 64 6c 69 6e 67 2e 0a 23 0a 64 6f 5f 63 61  andling..#.do_ca
06d0: 74 63 68 73 71 6c 5f 74 65 73 74 20 32 2e 30 20  tchsql_test 2.0 
06e0: 7b 0a 20 20 43 52 45 41 54 45 20 56 49 52 54 55  {.  CREATE VIRTU
06f0: 41 4c 20 54 41 42 4c 45 20 78 31 20 55 53 49 4e  AL TABLE x1 USIN
0700: 47 20 66 74 73 34 28 6d 61 74 63 68 69 6e 66 6f  G fts4(matchinfo
0710: 3d 66 73 33 29 3b 0a 7d 20 7b 31 20 7b 75 6e 72  =fs3);.} {1 {unr
0720: 65 63 6f 67 6e 69 7a 65 64 20 6d 61 74 63 68 69  ecognized matchi
0730: 6e 66 6f 3a 20 66 73 33 7d 7d 0a 64 6f 5f 63 61  nfo: fs3}}.do_ca
0740: 74 63 68 73 71 6c 5f 74 65 73 74 20 32 2e 31 20  tchsql_test 2.1 
0750: 7b 0a 20 20 43 52 45 41 54 45 20 56 49 52 54 55  {.  CREATE VIRTU
0760: 41 4c 20 54 41 42 4c 45 20 78 32 20 55 53 49 4e  AL TABLE x2 USIN
0770: 47 20 66 74 73 34 28 6d 74 63 68 69 6e 66 6f 3d  G fts4(mtchinfo=
0780: 66 74 73 33 29 3b 0a 7d 20 7b 31 20 7b 75 6e 72  fts3);.} {1 {unr
0790: 65 63 6f 67 6e 69 7a 65 64 20 70 61 72 61 6d 65  ecognized parame
07a0: 74 65 72 3a 20 6d 74 63 68 69 6e 66 6f 3d 66 74  ter: mtchinfo=ft
07b0: 73 33 7d 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c  s3}}.do_catchsql
07c0: 5f 74 65 73 74 20 32 2e 32 20 7b 0a 20 20 43 52  _test 2.2 {.  CR
07d0: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
07e0: 4c 45 20 78 32 20 55 53 49 4e 47 20 66 74 73 34  LE x2 USING fts4
07f0: 28 6d 61 74 63 68 69 6e 66 6f 3d 66 74 73 35 29  (matchinfo=fts5)
0800: 3b 0a 7d 20 7b 31 20 7b 75 6e 72 65 63 6f 67 6e  ;.} {1 {unrecogn
0810: 69 7a 65 64 20 6d 61 74 63 68 69 6e 66 6f 3a 20  ized matchinfo: 
0820: 66 74 73 35 7d 7d 0a 0a 23 20 43 68 65 63 6b 20  fts5}}..# Check 
0830: 74 68 61 74 20 77 69 74 68 20 66 74 73 33 2c 20  that with fts3, 
0840: 74 68 65 20 22 3d 22 20 63 68 61 72 61 63 74 65  the "=" characte
0850: 72 20 69 73 20 70 65 72 6d 69 74 74 65 64 20 69  r is permitted i
0860: 6e 20 63 6f 6c 75 6d 6e 20 64 65 66 69 6e 69 74  n column definit
0870: 69 6f 6e 73 2e 0a 23 0a 64 6f 5f 65 78 65 63 73  ions..#.do_execs
0880: 71 6c 5f 74 65 73 74 20 33 2e 31 20 7b 0a 20 20  ql_test 3.1 {.  
0890: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
08a0: 41 42 4c 45 20 74 33 20 55 53 49 4e 47 20 66 74  ABLE t3 USING ft
08b0: 73 33 28 6d 74 63 68 69 6e 66 6f 3d 66 74 73 33  s3(mtchinfo=fts3
08c0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
08d0: 20 74 33 28 6d 74 63 68 69 6e 66 6f 29 20 56 41   t3(mtchinfo) VA
08e0: 4c 55 45 53 28 27 42 65 73 69 64 65 20 74 68 65  LUES('Beside the
08f0: 20 6c 61 6b 65 2c 20 62 65 6e 65 61 74 68 20 74   lake, beneath t
0900: 68 65 20 74 72 65 65 73 27 29 3b 0a 20 20 53 45  he trees');.  SE
0910: 4c 45 43 54 20 6d 74 63 68 69 6e 66 6f 20 46 52  LECT mtchinfo FR
0920: 4f 4d 20 74 33 3b 0a 7d 20 7b 7b 42 65 73 69 64  OM t3;.} {{Besid
0930: 65 20 74 68 65 20 6c 61 6b 65 2c 20 62 65 6e 65  e the lake, bene
0940: 61 74 68 20 74 68 65 20 74 72 65 65 73 7d 7d 0a  ath the trees}}.
0950: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0960: 20 33 2e 32 20 7b 0a 20 20 43 52 45 41 54 45 20   3.2 {.  CREATE 
0970: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 78  VIRTUAL TABLE xx
0980: 20 55 53 49 4e 47 20 46 54 53 34 3b 0a 7d 0a 64   USING FTS4;.}.d
0990: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33  o_execsql_test 3
09a0: 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 2a 20  .3 {.  SELECT * 
09b0: 46 52 4f 4d 20 78 78 20 57 48 45 52 45 20 78 78  FROM xx WHERE xx
09c0: 20 4d 41 54 43 48 20 27 61 62 63 27 3b 0a 7d 0a   MATCH 'abc';.}.
09d0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
09e0: 33 2e 34 20 7b 0a 20 20 53 45 4c 45 43 54 20 2a  3.4 {.  SELECT *
09f0: 20 46 52 4f 4d 20 78 78 20 57 48 45 52 45 20 78   FROM xx WHERE x
0a00: 78 20 4d 41 54 43 48 20 27 61 20 62 20 63 27 3b  x MATCH 'a b c';
0a10: 0a 7d 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .}...#----------
0a20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0a60: 0a 23 20 50 72 6f 63 20 5b 64 6f 5f 6d 61 74 63  .# Proc [do_matc
0a70: 68 69 6e 66 6f 5f 74 65 73 74 5d 20 69 73 20 75  hinfo_test] is u
0a80: 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 20  sed to test the 
0a90: 46 54 53 58 20 6d 61 74 63 68 69 6e 66 6f 28 29  FTSX matchinfo()
0aa0: 20 66 75 6e 63 74 69 6f 6e 2e 0a 23 0a 23 20 54   function..#.# T
0ab0: 68 65 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e  he first argumen
0ac0: 74 20 2d 20 24 74 6e 20 2d 20 69 73 20 61 20 74  t - $tn - is a t
0ad0: 65 73 74 20 69 64 65 6e 74 69 66 69 65 72 2e 20  est identifier. 
0ae0: 54 68 69 73 20 6d 61 79 20 62 65 20 65 69 74 68  This may be eith
0af0: 65 72 20 61 0a 23 20 66 75 6c 6c 20 69 64 65 6e  er a.# full iden
0b00: 74 69 66 69 65 72 20 28 69 2e 65 2e 20 22 66 74  tifier (i.e. "ft
0b10: 73 33 6d 61 74 63 68 69 6e 66 6f 2d 31 2e 31 22  s3matchinfo-1.1"
0b20: 29 20 6f 72 2c 20 69 66 20 67 6c 6f 62 61 6c 20  ) or, if global 
0b30: 76 61 72 20 24 74 65 73 74 70 72 65 66 69 78 0a  var $testprefix.
0b40: 23 20 69 73 20 73 65 74 2c 20 6a 75 73 74 20 74  # is set, just t
0b50: 68 65 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 6f  he numeric compo
0b60: 6e 65 6e 74 20 28 69 2e 65 2e 20 22 31 2e 31 22  nent (i.e. "1.1"
0b70: 29 2e 0a 23 0a 23 20 54 68 65 20 73 65 63 6f 6e  )..#.# The secon
0b80: 64 20 61 72 67 75 6d 65 6e 74 20 69 73 20 74 68  d argument is th
0b90: 65 20 6e 61 6d 65 20 6f 66 20 61 6e 20 46 54 53  e name of an FTS
0ba0: 58 20 74 61 62 6c 65 2e 20 54 68 65 20 74 68 69  X table. The thi
0bb0: 72 64 20 69 73 20 74 68 65 20 0a 23 20 66 75 6c  rd is the .# ful
0bc0: 6c 20 74 65 78 74 20 6f 66 20 61 20 57 48 45 52  l text of a WHER
0bd0: 45 2f 4d 41 54 43 48 20 65 78 70 72 65 73 73 69  E/MATCH expressi
0be0: 6f 6e 20 74 6f 20 71 75 65 72 79 20 74 68 65 20  on to query the 
0bf0: 74 61 62 6c 65 20 66 6f 72 20 0a 23 20 28 69 2e  table for .# (i.
0c00: 65 2e 20 22 74 31 20 4d 41 54 43 48 20 27 61 62  e. "t1 MATCH 'ab
0c10: 63 27 22 29 2e 20 54 68 65 20 66 69 6e 61 6c 20  c'"). The final 
0c20: 61 72 67 75 6d 65 6e 74 20 2d 20 24 72 65 73 75  argument - $resu
0c30: 6c 74 73 20 2d 20 73 68 6f 75 6c 64 20 62 65 20  lts - should be 
0c40: 61 0a 23 20 6b 65 79 2d 76 61 6c 75 65 20 6c 69  a.# key-value li
0c50: 73 74 20 28 73 65 72 69 61 6c 69 7a 65 64 20 61  st (serialized a
0c60: 72 72 61 79 29 20 77 69 74 68 20 6d 61 74 63 68  rray) with match
0c70: 69 6e 66 6f 28 29 20 66 6f 72 6d 61 74 20 73 70  info() format sp
0c80: 65 63 69 66 69 65 72 73 0a 23 20 61 73 20 6b 65  ecifiers.# as ke
0c90: 79 73 2c 20 61 6e 64 20 74 68 65 20 72 65 73 75  ys, and the resu
0ca0: 6c 74 73 20 6f 66 20 65 78 65 63 75 74 69 6e 67  lts of executing
0cb0: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 3a 0a   the statement:.
0cc0: 23 0a 23 20 20 20 53 45 4c 45 43 54 20 6d 61 74  #.#   SELECT mat
0cd0: 63 68 69 6e 66 6f 28 24 74 62 6c 2c 20 27 24 6b  chinfo($tbl, '$k
0ce0: 65 79 27 29 20 46 52 4f 4d 20 24 74 62 6c 20 57  ey') FROM $tbl W
0cf0: 48 45 52 45 20 24 65 78 70 72 0a 23 0a 23 20 46  HERE $expr.#.# F
0d00: 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 23 0a 23 20  or example:.#.# 
0d10: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
0d20: 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20   TABLE t1 USING 
0d30: 66 74 73 34 3b 0a 23 20 20 20 49 4e 53 45 52 54  fts4;.#   INSERT
0d40: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0d50: 27 61 62 63 27 29 3b 0a 23 20 20 20 49 4e 53 45  'abc');.#   INSE
0d60: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0d70: 53 28 27 64 65 66 27 29 3b 0a 23 20 20 20 49 4e  S('def');.#   IN
0d80: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
0d90: 55 45 53 28 27 61 62 63 20 61 62 63 27 29 3b 0a  UES('abc abc');.
0da0: 23 0a 23 20 20 20 64 6f 5f 6d 61 74 63 68 69 6e  #.#   do_matchin
0db0: 66 6f 5f 74 65 73 74 20 31 2e 31 20 74 31 20 22  fo_test 1.1 t1 "
0dc0: 74 31 20 4d 41 54 43 48 20 27 61 62 63 27 22 20  t1 MATCH 'abc'" 
0dd0: 7b 0a 23 20 20 20 20 20 6e 20 7b 33 20 33 7d 0a  {.#     n {3 3}.
0de0: 23 20 20 20 20 20 70 20 7b 31 20 31 7d 0a 23 20  #     p {1 1}.# 
0df0: 20 20 20 20 63 20 7b 31 20 31 7d 0a 23 20 20 20      c {1 1}.#   
0e00: 20 20 78 20 7b 7b 31 20 33 20 32 7d 20 7b 32 20    x {{1 3 2} {2 
0e10: 33 20 32 7d 7d 0a 23 20 20 20 7d 0a 23 0a 23 20  3 2}}.#   }.#.# 
0e20: 49 66 20 74 68 65 20 24 72 65 73 75 6c 74 73 20  If the $results 
0e30: 6c 69 73 74 20 63 6f 6e 74 61 69 6e 73 20 6b 65  list contains ke
0e40: 79 73 20 6d 61 70 70 65 64 20 74 6f 20 22 2d 22  ys mapped to "-"
0e50: 20 69 6e 73 74 65 61 64 20 6f 66 20 61 20 6d 61   instead of a ma
0e60: 74 63 68 69 6e 66 6f 28 29 0a 23 20 72 65 73 75  tchinfo().# resu
0e70: 6c 74 2c 20 74 68 65 6e 20 74 68 69 73 20 63 6f  lt, then this co
0e80: 6d 6d 61 6e 64 20 63 6f 6d 70 75 74 65 73 20 74  mmand computes t
0e90: 68 65 20 65 78 70 65 63 74 65 64 20 72 65 73 75  he expected resu
0ea0: 6c 74 73 20 62 61 73 65 64 20 6f 6e 20 6f 74 68  lts based on oth
0eb0: 65 72 0a 23 20 6d 61 70 70 69 6e 67 73 20 74 6f  er.# mappings to
0ec0: 20 74 65 73 74 20 74 68 65 20 6d 61 74 63 68 69   test the matchi
0ed0: 6e 66 6f 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20  nfo() function. 
0ee0: 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  For example, the
0ef0: 20 63 6f 6d 6d 61 6e 64 20 61 62 6f 76 65 0a 23   command above.#
0f00: 20 63 6f 75 6c 64 20 62 65 20 63 68 61 6e 67 65   could be change
0f10: 64 20 74 6f 3a 0a 23 0a 23 20 20 20 64 6f 5f 6d  d to:.#.#   do_m
0f20: 61 74 63 68 69 6e 66 6f 5f 74 65 73 74 20 31 2e  atchinfo_test 1.
0f30: 31 20 74 31 20 22 74 31 20 4d 41 54 43 48 20 27  1 t1 "t1 MATCH '
0f40: 61 62 63 27 22 20 7b 0a 23 20 20 20 20 20 6e 20  abc'" {.#     n 
0f50: 7b 33 20 33 7d 20 70 20 7b 31 20 31 7d 20 63 20  {3 3} p {1 1} c 
0f60: 7b 31 20 31 7d 20 78 20 7b 7b 31 20 33 20 32 7d  {1 1} x {{1 3 2}
0f70: 20 7b 32 20 33 20 32 7d 7d 0a 23 20 20 20 20 20   {2 3 2}}.#     
0f80: 70 63 78 20 2d 0a 23 20 20 20 7d 0a 23 0a 23 20  pcx -.#   }.#.# 
0f90: 41 6e 64 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64  And this command
0fa0: 20 77 6f 75 6c 64 20 63 6f 6d 70 75 74 65 20 74   would compute t
0fb0: 68 65 20 65 78 70 65 63 74 65 64 20 72 65 73 75  he expected resu
0fc0: 6c 74 73 20 66 6f 72 20 6d 61 74 63 68 69 6e 66  lts for matchinf
0fd0: 6f 28 74 31 2c 20 27 70 63 78 27 29 0a 23 20 62  o(t1, 'pcx').# b
0fe0: 61 73 65 64 20 6f 6e 20 74 68 65 20 72 65 73 75  ased on the resu
0ff0: 6c 74 73 20 6f 66 20 6d 61 74 63 68 69 6e 66 6f  lts of matchinfo
1000: 28 74 31 2c 20 27 70 27 29 2c 20 6d 61 74 63 68  (t1, 'p'), match
1010: 69 6e 66 6f 28 74 31 2c 20 27 63 27 29 20 61 6e  info(t1, 'c') an
1020: 64 20 0a 23 20 6d 61 74 63 68 69 6e 66 6f 28 74  d .# matchinfo(t
1030: 31 2c 20 27 78 27 29 20 69 6e 20 6f 72 64 65 72  1, 'x') in order
1040: 20 74 6f 20 74 65 73 74 20 27 70 63 78 27 2e 0a   to test 'pcx'..
1050: 23 0a 70 72 6f 63 20 64 6f 5f 6d 61 74 63 68 69  #.proc do_matchi
1060: 6e 66 6f 5f 74 65 73 74 20 7b 74 6e 20 74 62 6c  nfo_test {tn tbl
1070: 20 65 78 70 72 20 72 65 73 75 6c 74 73 7d 20 7b   expr results} {
1080: 0a 0a 20 20 66 6f 72 65 61 63 68 20 7b 66 6d 74  ..  foreach {fmt
1090: 20 72 65 73 7d 20 24 72 65 73 75 6c 74 73 20 7b   res} $results {
10a0: 0a 20 20 20 20 69 66 20 7b 24 72 65 73 20 3d 3d  .    if {$res ==
10b0: 20 22 2d 22 7d 20 63 6f 6e 74 69 6e 75 65 0a 20   "-"} continue. 
10c0: 20 20 20 73 65 74 20 72 65 73 61 72 72 61 79 28     set resarray(
10d0: 24 66 6d 74 29 20 24 72 65 73 0a 20 20 7d 0a 0a  $fmt) $res.  }..
10e0: 20 20 73 65 74 20 6e 52 6f 77 20 30 0a 20 20 66    set nRow 0.  f
10f0: 6f 72 65 61 63 68 20 7b 66 6d 74 20 72 65 73 7d  oreach {fmt res}
1100: 20 5b 61 72 72 61 79 20 67 65 74 20 72 65 73 61   [array get resa
1110: 72 72 61 79 5d 20 7b 0a 20 20 20 20 69 66 20 7b  rray] {.    if {
1120: 5b 6c 6c 65 6e 67 74 68 20 24 72 65 73 5d 3e 24  [llength $res]>$
1130: 6e 52 6f 77 7d 20 7b 20 73 65 74 20 6e 52 6f 77  nRow} { set nRow
1140: 20 5b 6c 6c 65 6e 67 74 68 20 24 72 65 73 5d 20   [llength $res] 
1150: 7d 0a 20 20 7d 0a 0a 20 20 23 20 43 6f 6e 73 74  }.  }..  # Const
1160: 72 75 63 74 20 65 78 70 65 63 74 65 64 20 72 65  ruct expected re
1170: 73 75 6c 74 73 20 66 6f 72 20 61 6e 79 20 66 6f  sults for any fo
1180: 72 6d 61 74 73 20 66 6f 72 20 77 68 69 63 68 20  rmats for which 
1190: 74 68 65 20 63 61 6c 6c 65 72 20 0a 20 20 23 20  the caller .  # 
11a0: 73 75 70 70 6c 69 65 64 20 72 65 73 75 6c 74 20  supplied result 
11b0: 69 73 20 22 2d 22 2e 0a 20 20 23 0a 20 20 66 6f  is "-"..  #.  fo
11c0: 72 65 61 63 68 20 7b 66 6d 74 20 72 65 73 7d 20  reach {fmt res} 
11d0: 24 72 65 73 75 6c 74 73 20 7b 0a 20 20 20 20 69  $results {.    i
11e0: 66 20 7b 24 72 65 73 20 3d 3d 20 22 2d 22 7d 20  f {$res == "-"} 
11f0: 7b 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 20  {.      set res 
1200: 5b 6c 69 73 74 5d 0a 20 20 20 20 20 20 66 6f 72  [list].      for
1210: 20 7b 73 65 74 20 69 52 6f 77 20 30 7d 20 7b 24   {set iRow 0} {$
1220: 69 52 6f 77 3c 24 6e 52 6f 77 7d 20 7b 69 6e 63  iRow<$nRow} {inc
1230: 72 20 69 52 6f 77 7d 20 7b 0a 20 20 20 20 20 20  r iRow} {.      
1240: 20 20 73 65 74 20 72 6f 77 72 65 73 20 5b 6c 69    set rowres [li
1250: 73 74 5d 0a 20 20 20 20 20 20 20 20 66 6f 72 65  st].        fore
1260: 61 63 68 20 63 20 5b 73 70 6c 69 74 20 24 66 6d  ach c [split $fm
1270: 74 20 22 22 5d 20 7b 0a 20 20 20 20 20 20 20 20  t ""] {.        
1280: 20 20 73 65 74 20 72 6f 77 72 65 73 20 5b 63 6f    set rowres [co
1290: 6e 63 61 74 20 24 72 6f 77 72 65 73 20 5b 6c 69  ncat $rowres [li
12a0: 6e 64 65 78 20 24 72 65 73 61 72 72 61 79 28 24  ndex $resarray($
12b0: 63 29 20 24 69 52 6f 77 5d 5d 0a 20 20 20 20 20  c) $iRow]].     
12c0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 6c 61 70     }.        lap
12d0: 70 65 6e 64 20 72 65 73 20 24 72 6f 77 72 65 73  pend res $rowres
12e0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
12f0: 65 74 20 72 65 73 61 72 72 61 79 28 24 66 6d 74  et resarray($fmt
1300: 29 20 24 72 65 73 0a 20 20 20 20 7d 0a 20 20 7d  ) $res.    }.  }
1310: 0a 0a 20 20 23 20 54 65 73 74 20 65 61 63 68 20  ..  # Test each 
1320: 6d 61 74 63 68 69 6e 66 6f 28 29 20 72 65 71 75  matchinfo() requ
1330: 65 73 74 20 69 6e 64 69 76 69 64 75 61 6c 6c 79  est individually
1340: 2e 0a 20 20 23 0a 20 20 66 6f 72 65 61 63 68 20  ..  #.  foreach 
1350: 7b 66 6d 74 20 72 65 73 7d 20 5b 61 72 72 61 79  {fmt res} [array
1360: 20 67 65 74 20 72 65 73 61 72 72 61 79 5d 20 7b   get resarray] {
1370: 0a 20 20 20 20 73 65 74 20 73 71 6c 20 22 53 45  .    set sql "SE
1380: 4c 45 43 54 20 6d 69 74 28 6d 61 74 63 68 69 6e  LECT mit(matchin
1390: 66 6f 28 24 74 62 6c 2c 20 27 24 66 6d 74 27 29  fo($tbl, '$fmt')
13a0: 29 20 46 52 4f 4d 20 24 74 62 6c 20 57 48 45 52  ) FROM $tbl WHER
13b0: 45 20 24 65 78 70 72 22 0a 20 20 20 20 64 6f 5f  E $expr".    do_
13c0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 24 74 6e  execsql_test $tn
13d0: 2e 24 66 6d 74 20 24 73 71 6c 20 5b 6e 6f 72 6d  .$fmt $sql [norm
13e0: 61 6c 69 7a 65 32 20 24 72 65 73 5d 0a 20 20 7d  alize2 $res].  }
13f0: 0a 0a 20 20 23 20 54 65 73 74 20 74 68 65 6d 20  ..  # Test them 
1400: 61 6c 6c 20 65 78 65 63 75 74 65 64 20 74 6f 67  all executed tog
1410: 65 74 68 65 72 20 28 6d 75 6c 74 69 70 6c 65 20  ether (multiple 
1420: 69 6e 76 6f 63 61 74 69 6f 6e 73 20 6f 66 20 6d  invocations of m
1430: 61 74 63 68 69 6e 66 6f 28 29 29 2e 0a 20 20 23  atchinfo())..  #
1440: 0a 20 20 73 65 74 20 65 78 70 72 6c 69 73 74 20  .  set exprlist 
1450: 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68  [list].  foreach
1460: 20 7b 66 6f 72 6d 61 74 20 72 65 73 7d 20 5b 61   {format res} [a
1470: 72 72 61 79 20 67 65 74 20 72 65 73 61 72 72 61  rray get resarra
1480: 79 5d 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e 64  y] {.    lappend
1490: 20 65 78 70 72 6c 69 73 74 20 22 6d 69 74 28 6d   exprlist "mit(m
14a0: 61 74 63 68 69 6e 66 6f 28 24 74 62 6c 2c 20 27  atchinfo($tbl, '
14b0: 24 66 6f 72 6d 61 74 27 29 29 22 0a 20 20 7d 0a  $format'))".  }.
14c0: 20 20 73 65 74 20 61 6c 6c 72 65 73 20 5b 6c 69    set allres [li
14d0: 73 74 5d 0a 20 20 66 6f 72 20 7b 73 65 74 20 69  st].  for {set i
14e0: 52 6f 77 20 30 7d 20 7b 24 69 52 6f 77 3c 24 6e  Row 0} {$iRow<$n
14f0: 52 6f 77 7d 20 7b 69 6e 63 72 20 69 52 6f 77 7d  Row} {incr iRow}
1500: 20 7b 0a 20 20 20 20 66 6f 72 65 61 63 68 20 7b   {.    foreach {
1510: 66 6f 72 6d 61 74 20 72 65 73 7d 20 5b 61 72 72  format res} [arr
1520: 61 79 20 67 65 74 20 72 65 73 61 72 72 61 79 5d  ay get resarray]
1530: 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e 64   {.      lappend
1540: 20 61 6c 6c 72 65 73 20 5b 6c 69 6e 64 65 78 20   allres [lindex 
1550: 24 72 65 73 20 24 69 52 6f 77 5d 0a 20 20 20 20  $res $iRow].    
1560: 7d 0a 20 20 7d 0a 20 20 73 65 74 20 73 71 6c 20  }.  }.  set sql 
1570: 22 53 45 4c 45 43 54 20 5b 6a 6f 69 6e 20 24 65  "SELECT [join $e
1580: 78 70 72 6c 69 73 74 20 2c 5d 20 46 52 4f 4d 20  xprlist ,] FROM 
1590: 24 74 62 6c 20 57 48 45 52 45 20 24 65 78 70 72  $tbl WHERE $expr
15a0: 22 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ".  do_execsql_t
15b0: 65 73 74 20 24 74 6e 2e 6d 75 6c 74 69 20 24 73  est $tn.multi $s
15c0: 71 6c 20 5b 6e 6f 72 6d 61 6c 69 7a 65 32 20 24  ql [normalize2 $
15d0: 61 6c 6c 72 65 73 5d 0a 7d 0a 70 72 6f 63 20 6e  allres].}.proc n
15e0: 6f 72 6d 61 6c 69 7a 65 32 20 7b 6c 69 73 74 5f  ormalize2 {list_
15f0: 6f 66 5f 6c 69 73 74 73 7d 20 7b 0a 20 20 73 65  of_lists} {.  se
1600: 74 20 72 65 73 20 5b 6c 69 73 74 5d 0a 20 20 66  t res [list].  f
1610: 6f 72 65 61 63 68 20 65 6c 65 6d 20 24 6c 69 73  oreach elem $lis
1620: 74 5f 6f 66 5f 6c 69 73 74 73 20 7b 0a 20 20 20  t_of_lists {.   
1630: 20 6c 61 70 70 65 6e 64 20 72 65 73 20 5b 6c 69   lappend res [li
1640: 73 74 20 7b 2a 7d 24 65 6c 65 6d 5d 0a 20 20 7d  st {*}$elem].  }
1650: 0a 20 20 72 65 74 75 72 6e 20 24 72 65 73 0a 7d  .  return $res.}
1660: 0a 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  ...do_execsql_te
1670: 73 74 20 34 2e 31 2e 30 20 7b 0a 20 20 43 52 45  st 4.1.0 {.  CRE
1680: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
1690: 45 20 74 34 20 55 53 49 4e 47 20 66 74 73 34 28  E t4 USING fts4(
16a0: 78 2c 20 79 29 3b 0a 20 20 49 4e 53 45 52 54 20  x, y);.  INSERT 
16b0: 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27  INTO t4 VALUES('
16c0: 61 20 62 20 63 20 64 20 65 27 2c 20 27 66 20 67  a b c d e', 'f g
16d0: 20 68 20 69 20 6a 27 29 3b 0a 20 20 49 4e 53 45   h i j');.  INSE
16e0: 52 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45  RT INTO t4 VALUE
16f0: 53 28 27 66 20 67 20 68 20 69 20 6a 27 2c 20 27  S('f g h i j', '
1700: 61 20 62 20 63 20 64 20 65 27 29 3b 0a 7d 0a 0a  a b c d e');.}..
1710: 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73  do_matchinfo_tes
1720: 74 20 34 2e 31 2e 31 20 74 34 20 7b 74 34 20 4d  t 4.1.1 t4 {t4 M
1730: 41 54 43 48 20 27 61 20 62 20 63 27 7d 20 7b 0a  ATCH 'a b c'} {.
1740: 20 20 70 20 7b 33 20 33 7d 0a 20 20 63 20 7b 32    p {3 3}.  c {2
1750: 20 32 7d 0a 20 20 78 20 7b 0a 20 20 20 20 7b 31   2}.  x {.    {1
1760: 20 31 20 31 20 20 20 30 20 31 20 31 20 20 20 31   1 1   0 1 1   1
1770: 20 31 20 31 20 20 20 30 20 31 20 31 20 20 20 31   1 1   0 1 1   1
1780: 20 31 20 31 20 20 20 30 20 31 20 31 7d 0a 20 20   1 1   0 1 1}.  
1790: 20 20 7b 30 20 31 20 31 20 20 20 31 20 31 20 31    {0 1 1   1 1 1
17a0: 20 20 20 30 20 31 20 31 20 20 20 31 20 31 20 31     0 1 1   1 1 1
17b0: 20 20 20 30 20 31 20 31 20 20 20 31 20 31 20 31     0 1 1   1 1 1
17c0: 7d 0a 20 20 7d 0a 20 20 6e 20 7b 32 20 32 7d 0a  }.  }.  n {2 2}.
17d0: 20 20 6c 20 7b 7b 35 20 35 7d 20 7b 35 20 35 7d    l {{5 5} {5 5}
17e0: 7d 0a 20 20 61 20 7b 7b 35 20 35 7d 20 7b 35 20  }.  a {{5 5} {5 
17f0: 35 7d 7d 0a 0a 20 20 73 20 7b 7b 33 20 30 7d 20  5}}..  s {{3 0} 
1800: 7b 30 20 33 7d 7d 0a 0a 20 20 78 78 78 78 78 78  {0 3}}..  xxxxxx
1810: 78 78 78 78 78 78 78 78 78 78 78 78 20 2d 20 70  xxxxxxxxxxxx - p
1820: 63 78 20 2d 20 78 70 63 20 2d 20 63 63 63 20 2d  cx - xpc - ccc -
1830: 20 70 70 70 78 70 63 70 63 78 20 2d 20 6c 61 78   pppxpcpcx - lax
1840: 6e 70 63 20 2d 0a 20 20 78 70 78 73 73 63 70 6c  npc -.  xpxsscpl
1850: 61 78 20 2d 0a 7d 0a 0a 64 6f 5f 6d 61 74 63 68  ax -.}..do_match
1860: 69 6e 66 6f 5f 74 65 73 74 20 34 2e 31 2e 32 20  info_test 4.1.2 
1870: 74 34 20 7b 74 34 20 4d 41 54 43 48 20 27 22 67  t4 {t4 MATCH '"g
1880: 20 68 20 69 22 27 7d 20 7b 0a 20 20 70 20 7b 31   h i"'} {.  p {1
1890: 20 31 7d 0a 20 20 63 20 7b 32 20 32 7d 0a 20 20   1}.  c {2 2}.  
18a0: 78 20 7b 0a 20 20 20 20 7b 30 20 31 20 31 20 20  x {.    {0 1 1  
18b0: 20 31 20 31 20 31 7d 0a 20 20 20 20 7b 31 20 31   1 1 1}.    {1 1
18c0: 20 31 20 20 20 30 20 31 20 31 7d 0a 20 20 7d 0a   1   0 1 1}.  }.
18d0: 20 20 6e 20 7b 32 20 32 7d 0a 20 20 6c 20 7b 7b    n {2 2}.  l {{
18e0: 35 20 35 7d 20 7b 35 20 35 7d 7d 0a 20 20 61 20  5 5} {5 5}}.  a 
18f0: 7b 7b 35 20 35 7d 20 7b 35 20 35 7d 7d 0a 0a 20  {{5 5} {5 5}}.. 
1900: 20 73 20 7b 7b 30 20 31 7d 20 7b 31 20 30 7d 7d   s {{0 1} {1 0}}
1910: 0a 0a 20 20 78 78 78 78 78 78 78 78 78 78 78 78  ..  xxxxxxxxxxxx
1920: 78 78 78 78 78 78 20 2d 20 70 63 78 20 2d 20 78  xxxxxx - pcx - x
1930: 70 63 20 2d 20 63 63 63 20 2d 20 70 70 70 78 70  pc - ccc - pppxp
1940: 63 70 63 78 20 2d 20 6c 61 78 6e 70 63 20 2d 0a  cpcx - laxnpc -.
1950: 20 20 73 78 73 78 73 20 2d 0a 7d 0a 0a 64 6f 5f    sxsxs -.}..do_
1960: 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73 74 20 34  matchinfo_test 4
1970: 2e 31 2e 33 20 74 34 20 7b 74 34 20 4d 41 54 43  .1.3 t4 {t4 MATC
1980: 48 20 27 61 20 62 27 7d 20 20 20 20 20 7b 20 73  H 'a b'}     { s
1990: 20 7b 7b 32 20 30 7d 20 7b 30 20 32 7d 7d 20 7d   {{2 0} {0 2}} }
19a0: 0a 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65  .do_matchinfo_te
19b0: 73 74 20 34 2e 31 2e 34 20 74 34 20 7b 74 34 20  st 4.1.4 t4 {t4 
19c0: 4d 41 54 43 48 20 27 22 61 20 62 22 20 63 27 7d  MATCH '"a b" c'}
19d0: 20 7b 20 73 20 7b 7b 32 20 30 7d 20 7b 30 20 32   { s {{2 0} {0 2
19e0: 7d 7d 20 7d 0a 64 6f 5f 6d 61 74 63 68 69 6e 66  }} }.do_matchinf
19f0: 6f 5f 74 65 73 74 20 34 2e 31 2e 35 20 74 34 20  o_test 4.1.5 t4 
1a00: 7b 74 34 20 4d 41 54 43 48 20 27 61 20 22 62 20  {t4 MATCH 'a "b 
1a10: 63 22 27 7d 20 7b 20 73 20 7b 7b 32 20 30 7d 20  c"'} { s {{2 0} 
1a20: 7b 30 20 32 7d 7d 20 7d 0a 64 6f 5f 6d 61 74 63  {0 2}} }.do_matc
1a30: 68 69 6e 66 6f 5f 74 65 73 74 20 34 2e 31 2e 36  hinfo_test 4.1.6
1a40: 20 74 34 20 7b 74 34 20 4d 41 54 43 48 20 27 64   t4 {t4 MATCH 'd
1a50: 20 64 27 7d 20 20 20 20 20 7b 20 73 20 7b 7b 31   d'}     { s {{1
1a60: 20 30 7d 20 7b 30 20 31 7d 7d 20 7d 0a 64 6f 5f   0} {0 1}} }.do_
1a70: 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73 74 20 34  matchinfo_test 4
1a80: 2e 31 2e 37 20 74 34 20 7b 74 34 20 4d 41 54 43  .1.7 t4 {t4 MATC
1a90: 48 20 27 66 20 4f 52 20 61 62 63 64 27 7d 20 7b  H 'f OR abcd'} {
1aa0: 0a 20 20 78 20 7b 20 0a 20 20 20 20 7b 30 20 31  .  x { .    {0 1
1ab0: 20 31 20 20 31 20 31 20 31 20 20 30 20 30 20 30   1  1 1 1  0 0 0
1ac0: 20 20 30 20 30 20 30 7d 20 0a 20 20 20 20 7b 31    0 0 0} .    {1
1ad0: 20 31 20 31 20 20 30 20 31 20 31 20 20 30 20 30   1 1  0 1 1  0 0
1ae0: 20 30 20 20 30 20 30 20 30 7d 0a 20 20 7d 0a 7d   0  0 0 0}.  }.}
1af0: 0a 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65  .do_matchinfo_te
1b00: 73 74 20 34 2e 31 2e 38 20 74 34 20 7b 74 34 20  st 4.1.8 t4 {t4 
1b10: 4d 41 54 43 48 20 27 66 20 2d 61 62 63 64 27 7d  MATCH 'f -abcd'}
1b20: 20 7b 0a 20 20 78 20 7b 20 0a 20 20 20 20 7b 30   {.  x { .    {0
1b30: 20 31 20 31 20 20 31 20 31 20 31 7d 0a 20 20 20   1 1  1 1 1}.   
1b40: 20 7b 31 20 31 20 31 20 20 30 20 31 20 31 7d 0a   {1 1 1  0 1 1}.
1b50: 20 20 7d 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71    }.}..do_execsq
1b60: 6c 5f 74 65 73 74 20 34 2e 32 2e 30 20 7b 0a 20  l_test 4.2.0 {. 
1b70: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
1b80: 54 41 42 4c 45 20 74 35 20 55 53 49 4e 47 20 66  TABLE t5 USING f
1b90: 74 73 34 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  ts4;.  INSERT IN
1ba0: 54 4f 20 74 35 20 56 41 4c 55 45 53 28 27 61 20  TO t5 VALUES('a 
1bb0: 61 20 61 20 61 20 61 27 29 3b 0a 20 20 49 4e 53  a a a a');.  INS
1bc0: 45 52 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55  ERT INTO t5 VALU
1bd0: 45 53 28 27 61 20 62 20 61 20 62 20 61 27 29 3b  ES('a b a b a');
1be0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
1bf0: 35 20 56 41 4c 55 45 53 28 27 63 20 62 20 63 20  5 VALUES('c b c 
1c00: 62 20 63 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  b c');.  INSERT 
1c10: 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28 27  INTO t5 VALUES('
1c20: 78 20 78 20 78 20 78 20 78 27 29 3b 0a 7d 0a 64  x x x x x');.}.d
1c30: 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73 74  o_matchinfo_test
1c40: 20 34 2e 32 2e 31 20 74 35 20 7b 74 35 20 4d 41   4.2.1 t5 {t5 MA
1c50: 54 43 48 20 27 61 20 61 27 7d 20 20 20 20 20 20  TCH 'a a'}      
1c60: 20 20 20 7b 20 0a 20 20 78 20 7b 7b 35 20 38 20     { .  x {{5 8 
1c70: 32 20 20 20 35 20 38 20 32 7d 20 7b 33 20 38 20  2   5 8 2} {3 8 
1c80: 32 20 20 20 33 20 38 20 32 7d 7d 0a 20 20 73 20  2   3 8 2}}.  s 
1c90: 7b 32 20 31 7d 20 0a 7d 0a 64 6f 5f 6d 61 74 63  {2 1} .}.do_matc
1ca0: 68 69 6e 66 6f 5f 74 65 73 74 20 34 2e 32 2e 32  hinfo_test 4.2.2
1cb0: 20 74 35 20 7b 74 35 20 4d 41 54 43 48 20 27 61   t5 {t5 MATCH 'a
1cc0: 20 62 27 7d 20 20 20 20 20 20 20 20 20 7b 20 73   b'}         { s
1cd0: 20 7b 32 7d 20 7d 0a 64 6f 5f 6d 61 74 63 68 69   {2} }.do_matchi
1ce0: 6e 66 6f 5f 74 65 73 74 20 34 2e 32 2e 33 20 74  nfo_test 4.2.3 t
1cf0: 35 20 7b 74 35 20 4d 41 54 43 48 20 27 61 20 62  5 {t5 MATCH 'a b
1d00: 20 61 27 7d 20 20 20 20 20 20 20 7b 20 73 20 7b   a'}       { s {
1d10: 33 7d 20 7d 0a 64 6f 5f 6d 61 74 63 68 69 6e 66  3} }.do_matchinf
1d20: 6f 5f 74 65 73 74 20 34 2e 32 2e 34 20 74 35 20  o_test 4.2.4 t5 
1d30: 7b 74 35 20 4d 41 54 43 48 20 27 61 20 61 20 61  {t5 MATCH 'a a a
1d40: 27 7d 20 20 20 20 20 20 20 7b 20 73 20 7b 33 20  '}       { s {3 
1d50: 31 7d 20 7d 0a 64 6f 5f 6d 61 74 63 68 69 6e 66  1} }.do_matchinf
1d60: 6f 5f 74 65 73 74 20 34 2e 32 2e 35 20 74 35 20  o_test 4.2.5 t5 
1d70: 7b 74 35 20 4d 41 54 43 48 20 27 22 61 20 62 22  {t5 MATCH '"a b"
1d80: 20 22 61 20 62 22 27 7d 20 7b 20 73 20 7b 32 7d   "a b"'} { s {2}
1d90: 20 7d 0a 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f   }.do_matchinfo_
1da0: 74 65 73 74 20 34 2e 32 2e 36 20 74 35 20 7b 74  test 4.2.6 t5 {t
1db0: 35 20 4d 41 54 43 48 20 27 61 20 4f 52 20 62 27  5 MATCH 'a OR b'
1dc0: 7d 20 20 20 20 20 20 7b 20 73 20 7b 31 20 32 20  }      { s {1 2 
1dd0: 31 7d 20 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c  1} }..do_execsql
1de0: 5f 74 65 73 74 20 34 2e 33 2e 30 20 22 49 4e 53  _test 4.3.0 "INS
1df0: 45 52 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55  ERT INTO t5 VALU
1e00: 45 53 28 27 78 20 79 20 5b 73 74 72 69 6e 67 20  ES('x y [string 
1e10: 72 65 70 65 61 74 20 7b 62 20 7d 20 35 30 30 30  repeat {b } 5000
1e20: 30 5d 27 29 22 3b 0a 0a 23 20 49 74 20 75 73 65  0]')";..# It use
1e30: 64 20 74 6f 20 62 65 20 74 68 61 74 20 74 68 65  d to be that the
1e40: 20 73 65 63 6f 6e 64 20 27 61 27 20 74 6f 6b 65   second 'a' toke
1e50: 6e 20 77 6f 75 6c 64 20 62 65 20 64 65 66 65 72  n would be defer
1e60: 72 65 64 2e 20 54 68 61 74 20 64 6f 65 73 6e 27  red. That doesn'
1e70: 74 0a 23 20 77 6f 72 6b 20 61 6e 79 20 6c 6f 6e  t.# work any lon
1e80: 67 65 72 2e 0a 69 66 20 30 20 7b 0a 20 20 64 6f  ger..if 0 {.  do
1e90: 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73 74 20  _matchinfo_test 
1ea0: 34 2e 33 2e 31 20 74 35 20 7b 74 35 20 4d 41 54  4.3.1 t5 {t5 MAT
1eb0: 43 48 20 27 61 20 61 27 7d 20 7b 20 0a 20 20 20  CH 'a a'} { .   
1ec0: 20 78 20 7b 7b 35 20 38 20 32 20 20 20 35 20 35   x {{5 8 2   5 5
1ed0: 20 35 7d 20 7b 33 20 38 20 32 20 20 20 33 20 35   5} {3 8 2   3 5
1ee0: 20 35 7d 7d 0a 20 20 20 20 73 20 7b 32 20 31 7d   5}}.    s {2 1}
1ef0: 20 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f 6d 61 74 63   .  }.}..do_matc
1f00: 68 69 6e 66 6f 5f 74 65 73 74 20 34 2e 33 2e 32  hinfo_test 4.3.2
1f10: 20 74 35 20 7b 74 35 20 4d 41 54 43 48 20 27 61   t5 {t5 MATCH 'a
1f20: 20 62 27 7d 20 20 20 20 20 20 20 20 20 7b 20 73   b'}         { s
1f30: 20 7b 32 7d 20 7d 0a 64 6f 5f 6d 61 74 63 68 69   {2} }.do_matchi
1f40: 6e 66 6f 5f 74 65 73 74 20 34 2e 33 2e 33 20 74  nfo_test 4.3.3 t
1f50: 35 20 7b 74 35 20 4d 41 54 43 48 20 27 61 20 62  5 {t5 MATCH 'a b
1f60: 20 61 27 7d 20 20 20 20 20 20 20 7b 20 73 20 7b   a'}       { s {
1f70: 33 7d 20 7d 0a 64 6f 5f 6d 61 74 63 68 69 6e 66  3} }.do_matchinf
1f80: 6f 5f 74 65 73 74 20 34 2e 33 2e 34 20 74 35 20  o_test 4.3.4 t5 
1f90: 7b 74 35 20 4d 41 54 43 48 20 27 61 20 61 20 61  {t5 MATCH 'a a a
1fa0: 27 7d 20 20 20 20 20 20 20 7b 20 73 20 7b 33 20  '}       { s {3 
1fb0: 31 7d 20 7d 0a 64 6f 5f 6d 61 74 63 68 69 6e 66  1} }.do_matchinf
1fc0: 6f 5f 74 65 73 74 20 34 2e 33 2e 35 20 74 35 20  o_test 4.3.5 t5 
1fd0: 7b 74 35 20 4d 41 54 43 48 20 27 22 61 20 62 22  {t5 MATCH '"a b"
1fe0: 20 22 61 20 62 22 27 7d 20 7b 20 73 20 7b 32 7d   "a b"'} { s {2}
1ff0: 20 7d 0a 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f   }.do_matchinfo_
2000: 74 65 73 74 20 34 2e 33 2e 36 20 74 35 20 7b 74  test 4.3.6 t5 {t
2010: 35 20 4d 41 54 43 48 20 27 61 20 4f 52 20 62 27  5 MATCH 'a OR b'
2020: 7d 20 20 20 20 20 20 7b 20 73 20 7b 31 20 32 20  }      { s {1 2 
2030: 31 20 31 7d 20 7d 0a 0a 64 6f 5f 65 78 65 63 73  1 1} }..do_execs
2040: 71 6c 5f 74 65 73 74 20 34 2e 34 2e 30 2e 31 20  ql_test 4.4.0.1 
2050: 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35  { INSERT INTO t5
2060: 28 74 35 29 20 56 41 4c 55 45 53 28 27 6f 70 74  (t5) VALUES('opt
2070: 69 6d 69 7a 65 27 29 20 7d 0a 0a 69 66 63 61 70  imize') }..ifcap
2080: 61 62 6c 65 20 66 74 73 34 5f 64 65 66 65 72 72  able fts4_deferr
2090: 65 64 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 64  ed {.  sqlite3_d
20a0: 62 5f 63 6f 6e 66 69 67 20 64 62 20 44 45 46 45  b_config db DEFE
20b0: 4e 53 49 56 45 20 30 0a 20 20 64 6f 5f 65 78 65  NSIVE 0.  do_exe
20c0: 63 73 71 6c 5f 74 65 73 74 20 34 2e 34 2e 30 2e  csql_test 4.4.0.
20d0: 32 20 7b 0a 20 20 20 20 55 50 44 41 54 45 20 74  2 {.    UPDATE t
20e0: 35 5f 73 65 67 6d 65 6e 74 73 20 0a 20 20 20 20  5_segments .    
20f0: 53 45 54 20 62 6c 6f 63 6b 20 3d 20 7a 65 72 6f  SET block = zero
2100: 62 6c 6f 62 28 6c 65 6e 67 74 68 28 62 6c 6f 63  blob(length(bloc
2110: 6b 29 29 20 0a 20 20 20 20 57 48 45 52 45 20 6c  k)) .    WHERE l
2120: 65 6e 67 74 68 28 62 6c 6f 63 6b 29 3e 31 30 30  ength(block)>100
2130: 30 30 3b 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f 6d 61  00;.  }.}..do_ma
2140: 74 63 68 69 6e 66 6f 5f 74 65 73 74 20 34 2e 34  tchinfo_test 4.4
2150: 2e 32 20 74 35 20 7b 74 35 20 4d 41 54 43 48 20  .2 t5 {t5 MATCH 
2160: 27 61 20 62 27 7d 20 20 20 20 20 20 20 20 20 7b  'a b'}         {
2170: 20 73 20 7b 32 7d 20 7d 0a 64 6f 5f 6d 61 74 63   s {2} }.do_matc
2180: 68 69 6e 66 6f 5f 74 65 73 74 20 34 2e 34 2e 31  hinfo_test 4.4.1
2190: 20 74 35 20 7b 74 35 20 4d 41 54 43 48 20 27 61   t5 {t5 MATCH 'a
21a0: 20 61 27 7d 20 20 20 20 20 20 20 20 20 7b 20 73   a'}         { s
21b0: 20 7b 32 20 31 7d 20 7d 0a 64 6f 5f 6d 61 74 63   {2 1} }.do_matc
21c0: 68 69 6e 66 6f 5f 74 65 73 74 20 34 2e 34 2e 32  hinfo_test 4.4.2
21d0: 20 74 35 20 7b 74 35 20 4d 41 54 43 48 20 27 61   t5 {t5 MATCH 'a
21e0: 20 62 27 7d 20 20 20 20 20 20 20 20 20 7b 20 73   b'}         { s
21f0: 20 7b 32 7d 20 7d 0a 64 6f 5f 6d 61 74 63 68 69   {2} }.do_matchi
2200: 6e 66 6f 5f 74 65 73 74 20 34 2e 34 2e 33 20 74  nfo_test 4.4.3 t
2210: 35 20 7b 74 35 20 4d 41 54 43 48 20 27 61 20 62  5 {t5 MATCH 'a b
2220: 20 61 27 7d 20 20 20 20 20 20 20 7b 20 73 20 7b   a'}       { s {
2230: 33 7d 20 7d 0a 64 6f 5f 6d 61 74 63 68 69 6e 66  3} }.do_matchinf
2240: 6f 5f 74 65 73 74 20 34 2e 34 2e 34 20 74 35 20  o_test 4.4.4 t5 
2250: 7b 74 35 20 4d 41 54 43 48 20 27 61 20 61 20 61  {t5 MATCH 'a a a
2260: 27 7d 20 20 20 20 20 20 20 7b 20 73 20 7b 33 20  '}       { s {3 
2270: 31 7d 20 7d 0a 64 6f 5f 6d 61 74 63 68 69 6e 66  1} }.do_matchinf
2280: 6f 5f 74 65 73 74 20 34 2e 34 2e 35 20 74 35 20  o_test 4.4.5 t5 
2290: 7b 74 35 20 4d 41 54 43 48 20 27 22 61 20 62 22  {t5 MATCH '"a b"
22a0: 20 22 61 20 62 22 27 7d 20 7b 20 73 20 7b 32 7d   "a b"'} { s {2}
22b0: 20 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74   }..do_execsql_t
22c0: 65 73 74 20 34 2e 35 2e 30 20 7b 0a 20 20 43 52  est 4.5.0 {.  CR
22d0: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
22e0: 4c 45 20 74 36 20 55 53 49 4e 47 20 66 74 73 34  LE t6 USING fts4
22f0: 28 61 2c 20 62 2c 20 63 29 3b 0a 20 20 49 4e 53  (a, b, c);.  INS
2300: 45 52 54 20 49 4e 54 4f 20 74 36 20 56 41 4c 55  ERT INTO t6 VALU
2310: 45 53 28 27 61 27 2c 20 27 62 27 2c 20 27 63 27  ES('a', 'b', 'c'
2320: 29 3b 0a 7d 0a 64 6f 5f 6d 61 74 63 68 69 6e 66  );.}.do_matchinf
2330: 6f 5f 74 65 73 74 20 34 2e 35 2e 31 20 74 36 20  o_test 4.5.1 t6 
2340: 7b 74 36 20 4d 41 54 43 48 20 27 61 20 62 20 63  {t6 MATCH 'a b c
2350: 27 7d 20 20 20 20 20 20 20 7b 20 73 20 7b 7b 31  '}       { s {{1
2360: 20 31 20 31 7d 7d 20 7d 0a 0a 0a 23 2d 2d 2d 2d   1 1}} }...#----
2370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2390: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
23a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
23b0: 2d 2d 2d 2d 2d 0a 23 20 43 68 65 63 6b 20 74 68  -----.# Check th
23c0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 72 65 73 74  e following rest
23d0: 72 69 63 74 69 6f 6e 73 3a 0a 23 0a 23 20 20 20  rictions:.#.#   
23e0: 2b 20 4d 61 74 63 68 69 6e 66 6f 20 66 6c 61 67  + Matchinfo flag
23f0: 73 20 27 61 27 2c 20 27 6c 27 20 61 6e 64 20 27  s 'a', 'l' and '
2400: 6e 27 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 75  n' can only be u
2410: 73 65 64 20 77 69 74 68 20 66 74 73 34 2c 20 6e  sed with fts4, n
2420: 6f 74 20 66 74 73 33 2e 0a 23 20 20 20 2b 20 4d  ot fts3..#   + M
2430: 61 74 63 68 69 6e 66 6f 20 66 6c 61 67 20 27 6c  atchinfo flag 'l
2440: 27 20 63 61 6e 6e 6f 74 20 62 65 20 75 73 65 64  ' cannot be used
2450: 20 77 69 74 68 20 6d 61 74 63 68 69 6e 66 6f 3d   with matchinfo=
2460: 66 74 73 33 2e 0a 23 0a 64 6f 5f 65 78 65 63 73  fts3..#.do_execs
2470: 71 6c 5f 74 65 73 74 20 35 2e 31 20 7b 0a 20 20  ql_test 5.1 {.  
2480: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
2490: 41 42 4c 45 20 74 37 20 55 53 49 4e 47 20 66 74  ABLE t7 USING ft
24a0: 73 33 28 61 2c 20 62 29 3b 0a 20 20 49 4e 53 45  s3(a, b);.  INSE
24b0: 52 54 20 49 4e 54 4f 20 74 37 20 56 41 4c 55 45  RT INTO t7 VALUE
24c0: 53 28 27 75 20 76 20 77 27 2c 20 27 78 20 79 20  S('u v w', 'x y 
24d0: 7a 27 29 3b 0a 0a 20 20 43 52 45 41 54 45 20 56  z');..  CREATE V
24e0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 38 20  IRTUAL TABLE t8 
24f0: 55 53 49 4e 47 20 66 74 73 34 28 61 2c 20 62 2c  USING fts4(a, b,
2500: 20 6d 61 74 63 68 69 6e 66 6f 3d 66 74 73 33 29   matchinfo=fts3)
2510: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
2520: 74 38 20 56 41 4c 55 45 53 28 27 75 20 76 20 77  t8 VALUES('u v w
2530: 27 2c 20 27 78 20 79 20 7a 27 29 3b 0a 7d 0a 0a  ', 'x y z');.}..
2540: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
2550: 20 35 2e 32 2e 31 20 7b 20 0a 20 20 53 45 4c 45   5.2.1 { .  SELE
2560: 43 54 20 6d 61 74 63 68 69 6e 66 6f 28 74 37 2c  CT matchinfo(t7,
2570: 20 27 61 27 29 20 46 52 4f 4d 20 74 37 20 57 48   'a') FROM t7 WH
2580: 45 52 45 20 74 37 20 4d 41 54 43 48 20 27 78 20  ERE t7 MATCH 'x 
2590: 79 27 0a 7d 20 7b 31 20 7b 75 6e 72 65 63 6f 67  y'.} {1 {unrecog
25a0: 6e 69 7a 65 64 20 6d 61 74 63 68 69 6e 66 6f 20  nized matchinfo 
25b0: 72 65 71 75 65 73 74 3a 20 61 7d 7d 0a 64 6f 5f  request: a}}.do_
25c0: 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 35 2e  catchsql_test 5.
25d0: 32 2e 32 20 7b 20 0a 20 20 53 45 4c 45 43 54 20  2.2 { .  SELECT 
25e0: 6d 61 74 63 68 69 6e 66 6f 28 74 37 2c 20 27 6c  matchinfo(t7, 'l
25f0: 27 29 20 46 52 4f 4d 20 74 37 20 57 48 45 52 45  ') FROM t7 WHERE
2600: 20 74 37 20 4d 41 54 43 48 20 27 78 20 79 27 0a   t7 MATCH 'x y'.
2610: 7d 20 7b 31 20 7b 75 6e 72 65 63 6f 67 6e 69 7a  } {1 {unrecogniz
2620: 65 64 20 6d 61 74 63 68 69 6e 66 6f 20 72 65 71  ed matchinfo req
2630: 75 65 73 74 3a 20 6c 7d 7d 0a 64 6f 5f 63 61 74  uest: l}}.do_cat
2640: 63 68 73 71 6c 5f 74 65 73 74 20 35 2e 32 2e 33  chsql_test 5.2.3
2650: 20 7b 20 0a 20 20 53 45 4c 45 43 54 20 6d 61 74   { .  SELECT mat
2660: 63 68 69 6e 66 6f 28 74 37 2c 20 27 6e 27 29 20  chinfo(t7, 'n') 
2670: 46 52 4f 4d 20 74 37 20 57 48 45 52 45 20 74 37  FROM t7 WHERE t7
2680: 20 4d 41 54 43 48 20 27 78 20 79 27 0a 7d 20 7b   MATCH 'x y'.} {
2690: 31 20 7b 75 6e 72 65 63 6f 67 6e 69 7a 65 64 20  1 {unrecognized 
26a0: 6d 61 74 63 68 69 6e 66 6f 20 72 65 71 75 65 73  matchinfo reques
26b0: 74 3a 20 6e 7d 7d 0a 0a 64 6f 5f 63 61 74 63 68  t: n}}..do_catch
26c0: 73 71 6c 5f 74 65 73 74 20 35 2e 33 2e 31 20 7b  sql_test 5.3.1 {
26d0: 20 0a 20 20 53 45 4c 45 43 54 20 6d 61 74 63 68   .  SELECT match
26e0: 69 6e 66 6f 28 74 38 2c 20 27 6c 27 29 20 46 52  info(t8, 'l') FR
26f0: 4f 4d 20 74 38 20 57 48 45 52 45 20 74 38 20 4d  OM t8 WHERE t8 M
2700: 41 54 43 48 20 27 78 20 79 27 0a 7d 20 7b 31 20  ATCH 'x y'.} {1 
2710: 7b 75 6e 72 65 63 6f 67 6e 69 7a 65 64 20 6d 61  {unrecognized ma
2720: 74 63 68 69 6e 66 6f 20 72 65 71 75 65 73 74 3a  tchinfo request:
2730: 20 6c 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d   l}}..#---------
2740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2780: 0a 23 20 54 65 73 74 20 74 68 61 74 20 74 68 65  .# Test that the
2790: 20 6f 66 66 73 65 74 73 28 29 20 66 75 6e 63 74   offsets() funct
27a0: 69 6f 6e 20 68 61 6e 64 6c 65 73 20 63 6f 72 72  ion handles corr
27b0: 75 70 74 69 6f 6e 20 69 6e 20 74 68 65 20 25 5f  uption in the %_
27c0: 63 6f 6e 74 65 6e 74 0a 23 20 74 61 62 6c 65 20  content.# table 
27d0: 63 6f 72 72 65 63 74 6c 79 2e 0a 23 0a 64 6f 5f  correctly..#.do_
27e0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 36 2e 31  execsql_test 6.1
27f0: 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49 52 54   {.  CREATE VIRT
2800: 55 41 4c 20 54 41 42 4c 45 20 74 39 20 55 53 49  UAL TABLE t9 USI
2810: 4e 47 20 66 74 73 34 3b 0a 20 20 49 4e 53 45 52  NG fts4;.  INSER
2820: 54 20 49 4e 54 4f 20 74 39 20 56 41 4c 55 45 53  T INTO t9 VALUES
2830: 28 0a 20 20 20 20 27 74 68 69 73 20 72 65 63 6f  (.    'this reco
2840: 72 64 20 69 73 20 75 73 65 64 20 74 6f 20 74 72  rd is used to tr
2850: 79 20 74 6f 20 64 65 63 74 65 63 74 20 63 6f 72  y to dectect cor
2860: 72 75 70 74 69 6f 6e 27 0a 20 20 29 3b 0a 20 20  ruption'.  );.  
2870: 53 45 4c 45 43 54 20 6f 66 66 73 65 74 73 28 74  SELECT offsets(t
2880: 39 29 20 46 52 4f 4d 20 74 39 20 57 48 45 52 45  9) FROM t9 WHERE
2890: 20 74 39 20 4d 41 54 43 48 20 27 74 6f 27 3b 0a   t9 MATCH 'to';.
28a0: 7d 20 7b 7b 30 20 30 20 32 30 20 32 20 30 20 30  } {{0 0 20 2 0 0
28b0: 20 32 37 20 32 7d 7d 0a 0a 73 71 6c 69 74 65 33   27 2}}..sqlite3
28c0: 5f 64 62 5f 63 6f 6e 66 69 67 20 64 62 20 44 45  _db_config db DE
28d0: 46 45 4e 53 49 56 45 20 30 0a 64 6f 5f 63 61 74  FENSIVE 0.do_cat
28e0: 63 68 73 71 6c 5f 74 65 73 74 20 36 2e 32 20 7b  chsql_test 6.2 {
28f0: 0a 20 20 55 50 44 41 54 45 20 74 39 5f 63 6f 6e  .  UPDATE t9_con
2900: 74 65 6e 74 20 53 45 54 20 63 30 63 6f 6e 74 65  tent SET c0conte
2910: 6e 74 20 3d 20 27 74 68 69 73 20 72 65 63 6f 72  nt = 'this recor
2920: 64 20 69 73 20 75 73 65 64 20 74 6f 27 3b 20 0a  d is used to'; .
2930: 20 20 53 45 4c 45 43 54 20 6f 66 66 73 65 74 73    SELECT offsets
2940: 28 74 39 29 20 46 52 4f 4d 20 74 39 20 57 48 45  (t9) FROM t9 WHE
2950: 52 45 20 74 39 20 4d 41 54 43 48 20 27 74 6f 27  RE t9 MATCH 'to'
2960: 3b 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65  ;.} {1 {database
2970: 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73 20 6d   disk image is m
2980: 61 6c 66 6f 72 6d 65 64 7d 7d 0a 0a 23 2d 2d 2d  alformed}}..#---
2990: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
29a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
29b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
29c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
29d0: 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 74 68  ------.# Test th
29e0: 65 20 6f 75 74 63 6f 6d 65 20 6f 66 20 6d 61 74  e outcome of mat
29f0: 63 68 69 6e 66 6f 28 29 20 77 68 65 6e 20 75 73  chinfo() when us
2a00: 65 64 20 77 69 74 68 69 6e 20 61 20 71 75 65 72  ed within a quer
2a10: 79 20 74 68 61 74 20 64 6f 65 73 20 6e 6f 74 0a  y that does not.
2a20: 23 20 75 73 65 20 74 68 65 20 66 75 6c 6c 2d 74  # use the full-t
2a30: 65 78 74 20 69 6e 64 65 78 20 28 69 2e 65 2e 20  ext index (i.e. 
2a40: 6c 6f 6f 6b 75 70 20 62 79 20 72 6f 77 69 64 20  lookup by rowid 
2a50: 6f 72 20 66 75 6c 6c 2d 74 61 62 6c 65 20 73 63  or full-table sc
2a60: 61 6e 29 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71  an)..#.do_execsq
2a70: 6c 5f 74 65 73 74 20 37 2e 31 20 7b 0a 20 20 43  l_test 7.1 {.  C
2a80: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
2a90: 42 4c 45 20 74 31 30 20 55 53 49 4e 47 20 66 74  BLE t10 USING ft
2aa0: 73 34 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  s4;.  INSERT INT
2ab0: 4f 20 74 31 30 20 56 41 4c 55 45 53 28 27 66 69  O t10 VALUES('fi
2ac0: 72 73 74 20 72 65 63 6f 72 64 27 29 3b 0a 20 20  rst record');.  
2ad0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 30 20  INSERT INTO t10 
2ae0: 56 41 4c 55 45 53 28 27 73 65 63 6f 6e 64 20 72  VALUES('second r
2af0: 65 63 6f 72 64 27 29 3b 0a 7d 0a 64 6f 5f 65 78  ecord');.}.do_ex
2b00: 65 63 73 71 6c 5f 74 65 73 74 20 37 2e 32 20 7b  ecsql_test 7.2 {
2b10: 0a 20 20 53 45 4c 45 43 54 20 74 79 70 65 6f 66  .  SELECT typeof
2b20: 28 6d 61 74 63 68 69 6e 66 6f 28 74 31 30 29 29  (matchinfo(t10))
2b30: 2c 20 6c 65 6e 67 74 68 28 6d 61 74 63 68 69 6e  , length(matchin
2b40: 66 6f 28 74 31 30 29 29 20 46 52 4f 4d 20 74 31  fo(t10)) FROM t1
2b50: 30 3b 0a 7d 20 7b 62 6c 6f 62 20 30 20 62 6c 6f  0;.} {blob 0 blo
2b60: 62 20 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  b 0}.do_execsql_
2b70: 74 65 73 74 20 37 2e 33 20 7b 0a 20 20 53 45 4c  test 7.3 {.  SEL
2b80: 45 43 54 20 74 79 70 65 6f 66 28 6d 61 74 63 68  ECT typeof(match
2b90: 69 6e 66 6f 28 74 31 30 29 29 2c 20 6c 65 6e 67  info(t10)), leng
2ba0: 74 68 28 6d 61 74 63 68 69 6e 66 6f 28 74 31 30  th(matchinfo(t10
2bb0: 29 29 20 46 52 4f 4d 20 74 31 30 20 57 48 45 52  )) FROM t10 WHER
2bc0: 45 20 64 6f 63 69 64 3d 31 3b 0a 7d 20 7b 62 6c  E docid=1;.} {bl
2bd0: 6f 62 20 30 7d 0a 64 6f 5f 65 78 65 63 73 71 6c  ob 0}.do_execsql
2be0: 5f 74 65 73 74 20 37 2e 34 20 7b 0a 20 20 53 45  _test 7.4 {.  SE
2bf0: 4c 45 43 54 20 74 79 70 65 6f 66 28 6d 61 74 63  LECT typeof(matc
2c00: 68 69 6e 66 6f 28 74 31 30 29 29 2c 20 6c 65 6e  hinfo(t10)), len
2c10: 67 74 68 28 6d 61 74 63 68 69 6e 66 6f 28 74 31  gth(matchinfo(t1
2c20: 30 29 29 20 0a 20 20 46 52 4f 4d 20 74 31 30 20  0)) .  FROM t10 
2c30: 57 48 45 52 45 20 74 31 30 20 4d 41 54 43 48 20  WHERE t10 MATCH 
2c40: 27 72 65 63 6f 72 64 27 0a 7d 20 7b 62 6c 6f 62  'record'.} {blob
2c50: 20 32 30 20 62 6c 6f 62 20 32 30 7d 0a 0a 23 2d   20 blob 20}..#-
2c60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ca0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20  --------.# Test 
2cb0: 61 20 73 70 65 63 69 61 6c 20 63 61 73 65 20 2d  a special case -
2cc0: 20 6d 61 74 63 68 69 6e 66 6f 28 27 6e 78 61 27   matchinfo('nxa'
2cd0: 29 20 77 69 74 68 20 6d 61 6e 79 20 7a 65 72 6f  ) with many zero
2ce0: 20 6c 65 6e 67 74 68 20 64 6f 63 75 6d 65 6e 74   length document
2cf0: 73 2e 20 0a 23 20 53 70 65 63 69 61 6c 20 62 65  s. .# Special be
2d00: 63 61 75 73 65 20 22 78 22 20 69 6e 74 65 72 6e  cause "x" intern
2d10: 61 6c 6c 79 20 75 73 65 73 20 61 20 73 74 61 74  ally uses a stat
2d20: 65 6d 65 6e 74 20 75 73 65 64 20 62 79 20 62 6f  ement used by bo
2d30: 74 68 20 22 6e 22 20 61 6e 64 20 22 61 22 2e 20  th "n" and "a". 
2d40: 0a 23 20 54 68 69 73 20 77 61 73 20 63 61 75 73  .# This was caus
2d50: 69 6e 67 20 61 20 70 72 6f 62 6c 65 6d 20 61 74  ing a problem at
2d60: 20 6f 6e 65 20 70 6f 69 6e 74 20 69 6e 20 74 68   one point in th
2d70: 65 20 6f 62 73 63 75 72 65 20 63 61 73 65 20 77  e obscure case w
2d80: 68 65 72 65 20 74 68 65 0a 23 20 74 6f 74 61 6c  here the.# total
2d90: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
2da0: 20 6f 66 20 64 61 74 61 20 73 74 6f 72 65 64 20   of data stored 
2db0: 69 6e 20 61 6e 20 66 74 73 33 20 74 61 62 6c 65  in an fts3 table
2dc0: 20 77 61 73 20 67 72 65 61 74 65 72 20 74 68 61   was greater tha
2dd0: 6e 0a 23 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  n.# the number o
2de0: 66 20 72 6f 77 73 2e 20 69 2e 65 2e 20 77 68 65  f rows. i.e. whe
2df0: 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
2e00: 71 75 65 72 79 20 72 65 74 75 72 6e 73 20 74 72  query returns tr
2e10: 75 65 3a 0a 23 0a 23 20 20 20 53 45 4c 45 43 54  ue:.#.#   SELECT
2e20: 20 73 75 6d 28 6c 65 6e 67 74 68 28 63 6f 6e 74   sum(length(cont
2e30: 65 6e 74 29 29 20 3c 20 63 6f 75 6e 74 28 2a 29  ent)) < count(*)
2e40: 20 46 52 4f 4d 20 66 74 73 34 74 61 62 6c 65 3b   FROM fts4table;
2e50: 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .#.do_execsql_te
2e60: 73 74 20 38 2e 31 20 7b 0a 20 20 43 52 45 41 54  st 8.1 {.  CREAT
2e70: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
2e80: 74 31 31 20 55 53 49 4e 47 20 66 74 73 34 3b 0a  t11 USING fts4;.
2e90: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
2ea0: 31 28 74 31 31 29 20 56 41 4c 55 45 53 28 27 6e  1(t11) VALUES('n
2eb0: 6f 64 65 73 69 7a 65 3d 32 34 27 29 3b 0a 20 20  odesize=24');.  
2ec0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 31 20  INSERT INTO t11 
2ed0: 56 41 4c 55 45 53 28 27 71 75 69 74 65 61 6c 6f  VALUES('quitealo
2ee0: 6e 67 73 74 72 69 6e 67 6f 66 74 65 78 74 27 29  ngstringoftext')
2ef0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
2f00: 74 31 31 20 56 41 4c 55 45 53 28 27 61 6e 6f 74  t11 VALUES('anot
2f10: 68 65 72 71 75 69 74 65 61 6c 6f 6e 67 73 74 72  herquitealongstr
2f20: 69 6e 67 6f 66 74 65 78 74 27 29 3b 0a 20 20 49  ingoftext');.  I
2f30: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 31 20 56  NSERT INTO t11 V
2f40: 41 4c 55 45 53 28 27 61 74 68 69 72 64 6c 6f 6e  ALUES('athirdlon
2f50: 67 73 74 72 69 6e 67 6f 66 74 65 78 74 27 29 3b  gstringoftext');
2f60: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
2f70: 31 31 20 56 41 4c 55 45 53 28 27 61 6e 64 6f 6e  11 VALUES('andon
2f80: 65 6d 6f 72 65 66 6f 72 67 6f 6f 64 6c 75 63 6b  emoreforgoodluck
2f90: 27 29 3b 0a 7d 0a 64 6f 5f 74 65 73 74 20 38 2e  ');.}.do_test 8.
2fa0: 32 20 7b 0a 20 20 66 6f 72 20 7b 73 65 74 20 69  2 {.  for {set i
2fb0: 20 30 7d 20 7b 24 69 20 3c 20 32 30 30 7d 20 7b   0} {$i < 200} {
2fc0: 69 6e 63 72 20 69 7d 20 7b 0a 20 20 20 20 65 78  incr i} {.    ex
2fd0: 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49  ecsql { INSERT I
2fe0: 4e 54 4f 20 74 31 31 20 56 41 4c 55 45 53 28 27  NTO t11 VALUES('
2ff0: 27 29 20 7d 0a 20 20 7d 0a 20 20 65 78 65 63 73  ') }.  }.  execs
3000: 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f  ql { INSERT INTO
3010: 20 74 31 31 28 74 31 31 29 20 56 41 4c 55 45 53   t11(t11) VALUES
3020: 28 27 6f 70 74 69 6d 69 7a 65 27 29 20 7d 0a 7d  ('optimize') }.}
3030: 20 7b 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74   {}.do_execsql_t
3040: 65 73 74 20 38 2e 33 20 7b 0a 20 20 53 45 4c 45  est 8.3 {.  SELE
3050: 43 54 20 6d 69 74 28 6d 61 74 63 68 69 6e 66 6f  CT mit(matchinfo
3060: 28 74 31 31 2c 20 27 6e 78 61 27 29 29 20 46 52  (t11, 'nxa')) FR
3070: 4f 4d 20 74 31 31 20 57 48 45 52 45 20 74 31 31  OM t11 WHERE t11
3080: 20 4d 41 54 43 48 20 27 61 2a 27 0a 7d 20 7b 7b   MATCH 'a*'.} {{
3090: 32 30 34 20 31 20 33 20 33 20 30 7d 20 7b 32 30  204 1 3 3 0} {20
30a0: 34 20 31 20 33 20 33 20 30 7d 20 7b 32 30 34 20  4 1 3 3 0} {204 
30b0: 31 20 33 20 33 20 30 7d 7d 0a 0a 23 20 43 6f 72  1 3 3 0}}..# Cor
30c0: 72 75 70 74 69 6f 6e 20 72 65 6c 61 74 65 64 20  ruption related 
30d0: 74 65 73 74 73 2e 0a 73 71 6c 69 74 65 33 5f 64  tests..sqlite3_d
30e0: 62 5f 63 6f 6e 66 69 67 20 64 62 20 44 45 46 45  b_config db DEFE
30f0: 4e 53 49 56 45 20 30 0a 64 6f 5f 65 78 65 63 73  NSIVE 0.do_execs
3100: 71 6c 5f 74 65 73 74 20 20 38 2e 34 2e 31 2e 31  ql_test  8.4.1.1
3110: 20 7b 20 55 50 44 41 54 45 20 74 31 31 5f 73 74   { UPDATE t11_st
3120: 61 74 20 53 45 54 20 76 61 6c 75 65 20 3d 20 58  at SET value = X
3130: 27 30 30 30 30 27 3b 20 7d 0a 64 6f 5f 63 61 74  '0000'; }.do_cat
3140: 63 68 73 71 6c 5f 74 65 73 74 20 38 2e 35 2e 31  chsql_test 8.5.1
3150: 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 6d 69  .2 {.  SELECT mi
3160: 74 28 6d 61 74 63 68 69 6e 66 6f 28 74 31 31 2c  t(matchinfo(t11,
3170: 20 27 6e 78 61 27 29 29 20 46 52 4f 4d 20 74 31   'nxa')) FROM t1
3180: 31 20 57 48 45 52 45 20 74 31 31 20 4d 41 54 43  1 WHERE t11 MATC
3190: 48 20 27 61 2a 27 0a 7d 20 7b 31 20 7b 64 61 74  H 'a*'.} {1 {dat
31a0: 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65  abase disk image
31b0: 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 7d 7d 0a   is malformed}}.
31c0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
31d0: 20 20 38 2e 34 2e 32 2e 31 20 7b 20 55 50 44 41    8.4.2.1 { UPDA
31e0: 54 45 20 74 31 31 5f 73 74 61 74 20 53 45 54 20  TE t11_stat SET 
31f0: 76 61 6c 75 65 20 3d 20 58 27 30 30 27 3b 20 7d  value = X'00'; }
3200: 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73  .do_catchsql_tes
3210: 74 20 38 2e 35 2e 32 2e 32 20 7b 0a 20 20 53 45  t 8.5.2.2 {.  SE
3220: 4c 45 43 54 20 6d 69 74 28 6d 61 74 63 68 69 6e  LECT mit(matchin
3230: 66 6f 28 74 31 31 2c 20 27 6e 78 61 27 29 29 20  fo(t11, 'nxa')) 
3240: 46 52 4f 4d 20 74 31 31 20 57 48 45 52 45 20 74  FROM t11 WHERE t
3250: 31 31 20 4d 41 54 43 48 20 27 61 2a 27 0a 7d 20  11 MATCH 'a*'.} 
3260: 7b 31 20 7b 64 61 74 61 62 61 73 65 20 64 69 73  {1 {database dis
3270: 6b 20 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f  k image is malfo
3280: 72 6d 65 64 7d 7d 0a 0a 64 6f 5f 65 78 65 63 73  rmed}}..do_execs
3290: 71 6c 5f 74 65 73 74 20 20 38 2e 34 2e 33 2e 31  ql_test  8.4.3.1
32a0: 20 7b 20 55 50 44 41 54 45 20 74 31 31 5f 73 74   { UPDATE t11_st
32b0: 61 74 20 53 45 54 20 76 61 6c 75 65 20 3d 20 4e  at SET value = N
32c0: 55 4c 4c 3b 20 7d 0a 64 6f 5f 63 61 74 63 68 73  ULL; }.do_catchs
32d0: 71 6c 5f 74 65 73 74 20 38 2e 35 2e 33 2e 32 20  ql_test 8.5.3.2 
32e0: 7b 0a 20 20 53 45 4c 45 43 54 20 6d 69 74 28 6d  {.  SELECT mit(m
32f0: 61 74 63 68 69 6e 66 6f 28 74 31 31 2c 20 27 6e  atchinfo(t11, 'n
3300: 78 61 27 29 29 20 46 52 4f 4d 20 74 31 31 20 57  xa')) FROM t11 W
3310: 48 45 52 45 20 74 31 31 20 4d 41 54 43 48 20 27  HERE t11 MATCH '
3320: 61 2a 27 0a 7d 20 7b 31 20 7b 64 61 74 61 62 61  a*'.} {1 {databa
3330: 73 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69 73  se disk image is
3340: 20 6d 61 6c 66 6f 72 6d 65 64 7d 7d 0a 0a 23 2d   malformed}}..#-
3350: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3360: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3370: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3380: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3390: 2d 2d 2d 2d 2d 2d 2d 2d 0a 64 6f 5f 65 78 65 63  --------.do_exec
33a0: 73 71 6c 5f 74 65 73 74 20 38 2e 31 20 7b 0a 20  sql_test 8.1 {. 
33b0: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
33c0: 54 41 42 4c 45 20 74 31 32 20 55 53 49 4e 47 20  TABLE t12 USING 
33d0: 66 74 73 34 3b 0a 20 20 49 4e 53 45 52 54 20 49  fts4;.  INSERT I
33e0: 4e 54 4f 20 74 31 32 20 56 41 4c 55 45 53 28 27  NTO t12 VALUES('
33f0: 61 20 62 20 63 20 64 27 29 3b 0a 20 20 53 45 4c  a b c d');.  SEL
3400: 45 43 54 20 6d 69 74 28 6d 61 74 63 68 69 6e 66  ECT mit(matchinf
3410: 6f 28 74 31 32 2c 20 27 78 27 29 29 20 46 52 4f  o(t12, 'x')) FRO
3420: 4d 20 74 31 32 20 57 48 45 52 45 20 74 31 32 20  M t12 WHERE t12 
3430: 4d 41 54 43 48 20 27 61 20 4e 45 41 52 2f 31 20  MATCH 'a NEAR/1 
3440: 64 20 4f 52 20 61 27 3b 0a 7d 20 7b 7b 30 20 30  d OR a';.} {{0 0
3450: 20 30 20 30 20 30 20 30 20 31 20 31 20 31 7d 7d   0 0 0 0 1 1 1}}
3460: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
3470: 20 38 2e 32 20 7b 0a 20 20 49 4e 53 45 52 54 20   8.2 {.  INSERT 
3480: 49 4e 54 4f 20 74 31 32 20 56 41 4c 55 45 53 28  INTO t12 VALUES(
3490: 27 61 20 64 20 63 20 64 27 29 3b 0a 20 20 53 45  'a d c d');.  SE
34a0: 4c 45 43 54 20 6d 69 74 28 6d 61 74 63 68 69 6e  LECT mit(matchin
34b0: 66 6f 28 74 31 32 2c 20 27 78 27 29 29 20 46 52  fo(t12, 'x')) FR
34c0: 4f 4d 20 74 31 32 20 57 48 45 52 45 20 74 31 32  OM t12 WHERE t12
34d0: 20 4d 41 54 43 48 20 27 61 20 4e 45 41 52 2f 31   MATCH 'a NEAR/1
34e0: 20 64 20 4f 52 20 61 27 3b 0a 7d 20 7b 0a 20 20   d OR a';.} {.  
34f0: 7b 30 20 31 20 31 20 30 20 31 20 31 20 31 20 32  {0 1 1 0 1 1 1 2
3500: 20 32 7d 20 7b 31 20 31 20 31 20 31 20 31 20 31   2} {1 1 1 1 1 1
3510: 20 31 20 32 20 32 7d 0a 7d 0a 64 6f 5f 65 78 65   1 2 2}.}.do_exe
3520: 63 73 71 6c 5f 74 65 73 74 20 38 2e 33 20 7b 0a  csql_test 8.3 {.
3530: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
3540: 32 20 56 41 4c 55 45 53 28 27 61 20 64 20 64 20  2 VALUES('a d d 
3550: 61 27 29 3b 0a 20 20 53 45 4c 45 43 54 20 6d 69  a');.  SELECT mi
3560: 74 28 6d 61 74 63 68 69 6e 66 6f 28 74 31 32 2c  t(matchinfo(t12,
3570: 20 27 78 27 29 29 20 46 52 4f 4d 20 74 31 32 20   'x')) FROM t12 
3580: 57 48 45 52 45 20 74 31 32 20 4d 41 54 43 48 20  WHERE t12 MATCH 
3590: 27 61 20 4e 45 41 52 2f 31 20 64 20 4f 52 20 61  'a NEAR/1 d OR a
35a0: 27 3b 0a 7d 20 7b 0a 20 20 7b 30 20 33 20 32 20  ';.} {.  {0 3 2 
35b0: 30 20 33 20 32 20 31 20 34 20 33 7d 20 7b 31 20  0 3 2 1 4 3} {1 
35c0: 33 20 32 20 31 20 33 20 32 20 31 20 34 20 33 7d  3 2 1 3 2 1 4 3}
35d0: 20 7b 32 20 33 20 32 20 32 20 33 20 32 20 32 20   {2 3 2 2 3 2 2 
35e0: 34 20 33 7d 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73  4 3}.}..do_execs
35f0: 71 6c 5f 74 65 73 74 20 39 2e 31 20 7b 0a 20 20  ql_test 9.1 {.  
3600: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
3610: 41 42 4c 45 20 66 74 32 20 55 53 49 4e 47 20 66  ABLE ft2 USING f
3620: 74 73 34 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  ts4;.  INSERT IN
3630: 54 4f 20 66 74 32 20 56 41 4c 55 45 53 28 27 61  TO ft2 VALUES('a
3640: 20 62 20 63 20 64 20 65 27 29 3b 0a 20 20 49 4e   b c d e');.  IN
3650: 53 45 52 54 20 49 4e 54 4f 20 66 74 32 20 56 41  SERT INTO ft2 VA
3660: 4c 55 45 53 28 27 66 20 61 20 62 20 63 20 64 27  LUES('f a b c d'
3670: 29 3b 0a 20 20 53 45 4c 45 43 54 20 73 6e 69 70  );.  SELECT snip
3680: 70 65 74 28 66 74 32 2c 20 27 5b 27 2c 20 27 5d  pet(ft2, '[', ']
3690: 27 2c 20 27 27 2c 20 2d 31 2c 20 31 29 20 46 52  ', '', -1, 1) FR
36a0: 4f 4d 20 66 74 32 20 57 48 45 52 45 20 66 74 32  OM ft2 WHERE ft2
36b0: 20 4d 41 54 43 48 20 27 63 27 3b 0a 7d 20 7b 7b   MATCH 'c';.} {{
36c0: 5b 63 5d 7d 20 7b 5b 63 5d 7d 7d 0a 0a 23 2d 2d  [c]} {[c]}}..#--
36d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
36e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
36f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3700: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74  ---------.# Test
3720: 20 66 6f 72 20 61 20 6d 65 6d 6f 72 79 20 6c 65   for a memory le
3730: 61 6b 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  ak.#.do_execsql_
3740: 74 65 73 74 20 31 30 2e 31 20 7b 0a 20 20 44 52  test 10.1 {.  DR
3750: 4f 50 20 54 41 42 4c 45 20 74 31 30 3b 0a 20 20  OP TABLE t10;.  
3760: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
3770: 41 42 4c 45 20 74 31 30 20 55 53 49 4e 47 20 66  ABLE t10 USING f
3780: 74 73 34 28 69 64 78 2c 20 76 61 6c 75 65 29 3b  ts4(idx, value);
3790: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
37a0: 31 30 20 76 61 6c 75 65 73 20 28 31 2c 20 27 6f  10 values (1, 'o
37b0: 6e 65 27 29 2c 28 32 2c 20 27 74 77 6f 27 29 2c  ne'),(2, 'two'),
37c0: 28 33 2c 20 27 74 68 72 65 65 27 29 3b 0a 20 20  (3, 'three');.  
37d0: 53 45 4c 45 43 54 20 64 6f 63 49 64 2c 20 74 31  SELECT docId, t1
37e0: 30 2e 2a 0a 20 20 20 20 46 52 4f 4d 20 74 31 30  0.*.    FROM t10
37f0: 0a 20 20 20 20 4a 4f 49 4e 20 28 53 45 4c 45 43  .    JOIN (SELEC
3800: 54 20 31 20 41 53 20 69 64 78 20 55 4e 49 4f 4e  T 1 AS idx UNION
3810: 20 53 45 4c 45 43 54 20 32 20 55 4e 49 4f 4e 20   SELECT 2 UNION 
3820: 53 45 4c 45 43 54 20 33 29 20 41 53 20 78 0a 20  SELECT 3) AS x. 
3830: 20 20 57 48 45 52 45 20 74 31 30 20 4d 41 54 43    WHERE t10 MATC
3840: 48 20 78 2e 69 64 78 0a 20 20 20 20 20 41 4e 44  H x.idx.     AND
3850: 20 6d 61 74 63 68 69 6e 66 6f 28 74 31 30 29 20   matchinfo(t10) 
3860: 6e 6f 74 20 6e 75 6c 6c 0a 20 20 20 47 52 4f 55  not null.   GROU
3870: 50 20 42 59 20 64 6f 63 49 64 0a 20 20 20 4f 52  P BY docId.   OR
3880: 44 45 52 20 42 59 20 31 3b 0a 7d 20 7b 31 20 31  DER BY 1;.} {1 1
3890: 20 6f 6e 65 20 32 20 32 20 74 77 6f 20 33 20 33   one 2 2 two 3 3
38a0: 20 74 68 72 65 65 7d 0a 20 20 0a 23 2d 2d 2d 2d   three}.  .#----
38b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
38c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
38d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
38e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
38f0: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 74  -------.# Test t
3900: 68 65 20 27 79 27 20 6d 61 74 63 68 69 6e 66 6f  he 'y' matchinfo
3910: 20 66 6c 61 67 0a 23 0a 73 65 74 20 73 71 6c 69   flag.#.set sqli
3920: 74 65 5f 66 74 73 33 5f 65 6e 61 62 6c 65 5f 70  te_fts3_enable_p
3930: 61 72 65 6e 74 68 65 73 65 73 20 31 0a 72 65 73  arentheses 1.res
3940: 65 74 5f 64 62 0a 64 6f 5f 65 78 65 63 73 71 6c  et_db.do_execsql
3950: 5f 74 65 73 74 20 31 31 2e 30 20 7b 0a 20 20 43  _test 11.0 {.  C
3960: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
3970: 42 4c 45 20 74 74 20 55 53 49 4e 47 20 66 74 73  BLE tt USING fts
3980: 33 28 78 2c 20 79 29 3b 0a 20 20 49 4e 53 45 52  3(x, y);.  INSER
3990: 54 20 49 4e 54 4f 20 74 74 20 56 41 4c 55 45 53  T INTO tt VALUES
39a0: 28 27 63 20 64 20 61 20 63 20 64 20 64 27 2c 20  ('c d a c d d', 
39b0: 27 65 20 61 20 67 20 62 20 64 20 61 27 29 3b 20  'e a g b d a'); 
39c0: 20 20 2d 2d 20 31 0a 20 20 49 4e 53 45 52 54 20    -- 1.  INSERT 
39d0: 49 4e 54 4f 20 74 74 20 56 41 4c 55 45 53 28 27  INTO tt VALUES('
39e0: 63 20 63 20 67 20 61 20 65 20 62 27 2c 20 27 63  c c g a e b', 'c
39f0: 20 67 20 64 20 67 20 65 20 63 27 29 3b 20 20 20   g d g e c');   
3a00: 2d 2d 20 32 0a 20 20 49 4e 53 45 52 54 20 49 4e  -- 2.  INSERT IN
3a10: 54 4f 20 74 74 20 56 41 4c 55 45 53 28 27 62 20  TO tt VALUES('b 
3a20: 65 20 66 20 64 20 65 20 67 27 2c 20 27 62 20 61  e f d e g', 'b a
3a30: 20 63 20 62 20 63 20 67 27 29 3b 20 20 20 2d 2d   c b c g');   --
3a40: 20 33 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f   3.  INSERT INTO
3a50: 20 74 74 20 56 41 4c 55 45 53 28 27 61 20 63 20   tt VALUES('a c 
3a60: 66 20 66 20 67 20 64 27 2c 20 27 64 20 62 20 66  f f g d', 'd b f
3a70: 20 64 20 65 20 67 27 29 3b 20 20 20 2d 2d 20 34   d e g');   -- 4
3a80: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
3a90: 74 20 56 41 4c 55 45 53 28 27 67 20 61 20 63 20  t VALUES('g a c 
3aa0: 66 20 63 20 66 27 2c 20 27 64 20 67 20 67 20 62  f c f', 'd g g b
3ab0: 20 63 20 63 27 29 3b 20 20 20 2d 2d 20 35 0a 20   c c');   -- 5. 
3ac0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 74 20   INSERT INTO tt 
3ad0: 56 41 4c 55 45 53 28 27 67 20 61 20 63 20 65 20  VALUES('g a c e 
3ae0: 62 20 62 27 2c 20 27 64 20 62 20 66 20 62 20 67  b b', 'd b f b g
3af0: 20 67 27 29 3b 20 20 20 2d 2d 20 36 0a 20 20 49   g');   -- 6.  I
3b00: 4e 53 45 52 54 20 49 4e 54 4f 20 74 74 20 56 41  NSERT INTO tt VA
3b10: 4c 55 45 53 28 27 66 20 64 20 61 20 61 20 66 20  LUES('f d a a f 
3b20: 63 27 2c 20 27 65 20 65 20 61 20 64 20 63 20 66  c', 'e e a d c f
3b30: 27 29 3b 20 20 20 2d 2d 20 37 0a 20 20 49 4e 53  ');   -- 7.  INS
3b40: 45 52 54 20 49 4e 54 4f 20 74 74 20 56 41 4c 55  ERT INTO tt VALU
3b50: 45 53 28 27 61 20 63 20 62 20 62 20 67 20 66 27  ES('a c b b g f'
3b60: 2c 20 27 61 20 62 20 61 20 65 20 64 20 66 27 29  , 'a b a e d f')
3b70: 3b 20 20 20 2d 2d 20 38 0a 20 20 49 4e 53 45 52  ;   -- 8.  INSER
3b80: 54 20 49 4e 54 4f 20 74 74 20 56 41 4c 55 45 53  T INTO tt VALUES
3b90: 28 27 62 20 61 20 66 20 65 20 63 20 63 27 2c 20  ('b a f e c c', 
3ba0: 27 66 20 64 20 62 20 62 20 61 20 62 27 29 3b 20  'f d b b a b'); 
3bb0: 20 20 2d 2d 20 39 0a 20 20 49 4e 53 45 52 54 20    -- 9.  INSERT 
3bc0: 49 4e 54 4f 20 74 74 20 56 41 4c 55 45 53 28 27  INTO tt VALUES('
3bd0: 66 20 64 20 63 20 65 20 61 20 63 27 2c 20 27 66  f d c e a c', 'f
3be0: 20 61 20 66 20 61 20 61 20 66 27 29 3b 20 20 20   a f a a f');   
3bf0: 2d 2d 20 31 30 0a 7d 0a 0a 64 62 20 66 75 6e 63  -- 10.}..db func
3c00: 20 6d 69 74 20 6d 69 74 0a 66 6f 72 65 61 63 68   mit mit.foreach
3c10: 20 7b 74 6e 20 65 78 70 72 20 72 65 73 7d 20 7b   {tn expr res} {
3c20: 0a 20 20 31 20 22 61 22 20 7b 0a 20 20 20 20 20  .  1 "a" {.     
3c30: 20 31 20 7b 31 20 32 7d 20 20 20 32 20 7b 31 20   1 {1 2}   2 {1 
3c40: 30 7d 20 20 20 33 20 7b 30 20 31 7d 20 20 20 34  0}   3 {0 1}   4
3c50: 20 7b 31 20 30 7d 20 20 20 35 20 7b 31 20 30 7d   {1 0}   5 {1 0}
3c60: 0a 20 20 20 20 20 20 36 20 7b 31 20 30 7d 20 20  .      6 {1 0}  
3c70: 20 37 20 7b 32 20 31 7d 20 20 20 38 20 7b 31 20   7 {2 1}   8 {1 
3c80: 32 7d 20 20 20 39 20 7b 31 20 31 7d 20 20 31 30  2}   9 {1 1}  10
3c90: 20 7b 31 20 33 7d 0a 20 20 7d 0a 0a 20 20 32 20   {1 3}.  }..  2 
3ca0: 22 62 22 20 7b 0a 20 20 20 20 20 20 31 20 7b 30  "b" {.      1 {0
3cb0: 20 31 7d 20 20 20 32 20 7b 31 20 30 7d 20 20 20   1}   2 {1 0}   
3cc0: 33 20 7b 31 20 32 7d 20 20 20 34 20 7b 30 20 31  3 {1 2}   4 {0 1
3cd0: 7d 20 20 20 35 20 7b 30 20 31 7d 0a 20 20 20 20  }   5 {0 1}.    
3ce0: 20 20 36 20 7b 32 20 32 7d 20 20 20 20 20 20 20    6 {2 2}       
3cf0: 20 20 20 20 20 20 38 20 7b 32 20 31 7d 20 20 20        8 {2 1}   
3d00: 39 20 7b 31 20 33 7d 20 20 20 20 20 20 20 20 20  9 {1 3}         
3d10: 20 20 20 0a 20 20 7d 0a 0a 20 20 33 20 22 79 3a     .  }..  3 "y:
3d20: 61 22 20 7b 0a 20 20 20 20 20 20 31 20 7b 30 20  a" {.      1 {0 
3d30: 32 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 33  2}             3
3d40: 20 7b 30 20 31 7d 20 20 20 20 20 20 20 20 20 20   {0 1}          
3d50: 20 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 20            .     
3d60: 20 20 20 20 20 20 20 20 20 20 20 37 20 7b 30 20             7 {0 
3d70: 31 7d 20 20 20 38 20 7b 30 20 32 7d 20 20 20 39  1}   8 {0 2}   9
3d80: 20 7b 30 20 31 7d 20 20 31 30 20 7b 30 20 33 7d   {0 1}  10 {0 3}
3d90: 0a 20 20 7d 0a 0a 20 20 34 20 22 78 3a 61 22 20  .  }..  4 "x:a" 
3da0: 7b 0a 20 20 20 20 20 20 31 20 7b 31 20 30 7d 20  {.      1 {1 0} 
3db0: 20 20 32 20 7b 31 20 30 7d 20 20 20 20 20 20 20    2 {1 0}       
3dc0: 20 20 20 20 20 20 34 20 7b 31 20 30 7d 20 20 20        4 {1 0}   
3dd0: 35 20 7b 31 20 30 7d 0a 20 20 20 20 20 20 36 20  5 {1 0}.      6 
3de0: 7b 31 20 30 7d 20 20 20 37 20 7b 32 20 30 7d 20  {1 0}   7 {2 0} 
3df0: 20 20 38 20 7b 31 20 30 7d 20 20 20 39 20 7b 31    8 {1 0}   9 {1
3e00: 20 30 7d 20 20 31 30 20 7b 31 20 30 7d 0a 20 20   0}  10 {1 0}.  
3e10: 7d 0a 0a 20 20 35 20 22 61 20 4f 52 20 62 22 20  }..  5 "a OR b" 
3e20: 7b 0a 20 20 20 20 20 20 31 20 7b 31 20 32 20 30  {.      1 {1 2 0
3e30: 20 31 7d 20 20 20 32 20 7b 31 20 30 20 31 20 30   1}   2 {1 0 1 0
3e40: 7d 20 20 20 33 20 7b 30 20 31 20 31 20 32 7d 20  }   3 {0 1 1 2} 
3e50: 20 20 34 20 7b 31 20 30 20 30 20 31 7d 20 20 20    4 {1 0 0 1}   
3e60: 35 20 7b 31 20 30 20 30 20 31 7d 0a 20 20 20 20  5 {1 0 0 1}.    
3e70: 20 20 36 20 7b 31 20 30 20 32 20 32 7d 20 20 20    6 {1 0 2 2}   
3e80: 37 20 7b 32 20 31 20 30 20 30 7d 20 20 20 38 20  7 {2 1 0 0}   8 
3e90: 7b 31 20 32 20 32 20 31 7d 20 20 20 39 20 7b 31  {1 2 2 1}   9 {1
3ea0: 20 31 20 31 20 33 7d 20 20 31 30 20 7b 31 20 33   1 1 3}  10 {1 3
3eb0: 20 30 20 30 7d 0a 20 20 7d 0a 0a 20 20 36 20 22   0 0}.  }..  6 "
3ec0: 61 20 41 4e 44 20 62 22 20 7b 0a 20 20 20 20 20  a AND b" {.     
3ed0: 20 31 20 7b 31 20 32 20 30 20 31 7d 20 20 20 32   1 {1 2 0 1}   2
3ee0: 20 7b 31 20 30 20 31 20 30 7d 20 20 20 33 20 7b   {1 0 1 0}   3 {
3ef0: 30 20 31 20 31 20 32 7d 20 20 20 34 20 7b 31 20  0 1 1 2}   4 {1 
3f00: 30 20 30 20 31 7d 20 20 20 35 20 7b 31 20 30 20  0 0 1}   5 {1 0 
3f10: 30 20 31 7d 0a 20 20 20 20 20 20 36 20 7b 31 20  0 1}.      6 {1 
3f20: 30 20 32 20 32 7d 20 20 20 20 20 20 20 20 20 20  0 2 2}          
3f30: 20 20 20 20 20 20 20 38 20 7b 31 20 32 20 32 20         8 {1 2 2 
3f40: 31 7d 20 20 20 39 20 7b 31 20 31 20 31 20 33 7d  1}   9 {1 1 1 3}
3f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0a 20                . 
3f60: 20 7d 0a 0a 20 20 37 20 22 61 20 4f 52 20 28 61   }..  7 "a OR (a
3f70: 20 41 4e 44 20 62 29 22 20 7b 0a 20 20 20 20 20   AND b)" {.     
3f80: 20 31 20 7b 31 20 32 20 31 20 32 20 30 20 31 7d   1 {1 2 1 2 0 1}
3f90: 20 20 20 32 20 7b 31 20 30 20 31 20 30 20 31 20     2 {1 0 1 0 1 
3fa0: 30 7d 20 20 20 33 20 7b 30 20 31 20 30 20 31 20  0}   3 {0 1 0 1 
3fb0: 31 20 32 7d 20 20 20 34 20 7b 31 20 30 20 31 20  1 2}   4 {1 0 1 
3fc0: 30 20 30 20 31 7d 20 20 20 0a 20 20 20 20 20 20  0 0 1}   .      
3fd0: 35 20 7b 31 20 30 20 31 20 30 20 30 20 31 7d 20  5 {1 0 1 0 0 1} 
3fe0: 20 20 36 20 7b 31 20 30 20 31 20 30 20 32 20 32    6 {1 0 1 0 2 2
3ff0: 7d 20 20 20 37 20 7b 32 20 31 20 30 20 30 20 30  }   7 {2 1 0 0 0
4000: 20 30 7d 20 20 20 38 20 7b 31 20 32 20 31 20 32   0}   8 {1 2 1 2
4010: 20 32 20 31 7d 20 20 20 0a 20 20 20 20 20 20 39   2 1}   .      9
4020: 20 7b 31 20 31 20 31 20 31 20 31 20 33 7d 20 20   {1 1 1 1 1 3}  
4030: 31 30 20 7b 31 20 33 20 30 20 30 20 30 20 30 7d  10 {1 3 0 0 0 0}
4040: 0a 20 20 7d 0a 0a 7d 20 7b 0a 20 20 64 6f 5f 65  .  }..} {.  do_e
4050: 78 65 63 73 71 6c 5f 74 65 73 74 20 31 31 2e 31  xecsql_test 11.1
4060: 2e 24 74 6e 2e 31 20 20 7b 0a 20 20 20 20 53 45  .$tn.1  {.    SE
4070: 4c 45 43 54 20 72 6f 77 69 64 2c 20 6d 69 74 28  LECT rowid, mit(
4080: 6d 61 74 63 68 69 6e 66 6f 28 74 74 2c 20 27 79  matchinfo(tt, 'y
4090: 27 29 29 20 46 52 4f 4d 20 74 74 20 57 48 45 52  ')) FROM tt WHER
40a0: 45 20 74 74 20 4d 41 54 43 48 20 24 65 78 70 72  E tt MATCH $expr
40b0: 0a 20 20 7d 20 24 72 65 73 0a 0a 20 20 73 65 74  .  } $res..  set
40c0: 20 72 32 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72   r2 [list].  for
40d0: 65 61 63 68 20 7b 72 6f 77 69 64 20 4c 7d 20 24  each {rowid L} $
40e0: 72 65 73 20 7b 0a 20 20 20 20 6c 61 70 70 65 6e  res {.    lappen
40f0: 64 20 72 32 20 24 72 6f 77 69 64 0a 20 20 20 20  d r2 $rowid.    
4100: 73 65 74 20 4d 20 5b 6c 69 73 74 5d 0a 20 20 20  set M [list].   
4110: 20 66 6f 72 65 61 63 68 20 7b 61 20 62 7d 20 24   foreach {a b} $
4120: 4c 20 7b 0a 20 20 20 20 20 20 6c 61 70 70 65 6e  L {.      lappen
4130: 64 20 4d 20 5b 65 78 70 72 20 28 24 61 20 3f 20  d M [expr ($a ? 
4140: 31 20 3a 20 30 29 20 2b 20 28 24 62 20 3f 20 32  1 : 0) + ($b ? 2
4150: 20 3a 20 30 29 5d 0a 20 20 20 20 7d 0a 20 20 20   : 0)].    }.   
4160: 20 6c 61 70 70 65 6e 64 20 72 32 20 24 4d 0a 20   lappend r2 $M. 
4170: 20 7d 0a 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c   }..  do_execsql
4180: 5f 74 65 73 74 20 31 31 2e 31 2e 24 74 6e 2e 32  _test 11.1.$tn.2
4190: 20 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72    {.    SELECT r
41a0: 6f 77 69 64 2c 20 6d 69 74 28 6d 61 74 63 68 69  owid, mit(matchi
41b0: 6e 66 6f 28 74 74 2c 20 27 62 27 29 29 20 46 52  nfo(tt, 'b')) FR
41c0: 4f 4d 20 74 74 20 57 48 45 52 45 20 74 74 20 4d  OM tt WHERE tt M
41d0: 41 54 43 48 20 24 65 78 70 72 0a 20 20 7d 20 24  ATCH $expr.  } $
41e0: 72 32 0a 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c  r2..  do_execsql
41f0: 5f 74 65 73 74 20 31 31 2e 31 2e 24 74 6e 2e 32  _test 11.1.$tn.2
4200: 20 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72    {.    SELECT r
4210: 6f 77 69 64 2c 20 6d 69 74 28 6d 61 74 63 68 69  owid, mit(matchi
4220: 6e 66 6f 28 74 74 2c 20 27 62 27 29 29 20 46 52  nfo(tt, 'b')) FR
4230: 4f 4d 20 74 74 20 57 48 45 52 45 20 74 74 20 4d  OM tt WHERE tt M
4240: 41 54 43 48 20 24 65 78 70 72 0a 20 20 7d 20 24  ATCH $expr.  } $
4250: 72 32 0a 7d 0a 73 65 74 20 73 71 6c 69 74 65 5f  r2.}.set sqlite_
4260: 66 74 73 33 5f 65 6e 61 62 6c 65 5f 70 61 72 65  fts3_enable_pare
4270: 6e 74 68 65 73 65 73 20 30 0a 0a 23 2d 2d 2d 2d  ntheses 0..#----
4280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4290: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
42a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
42b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
42c0: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 74  -------.# Test t
42d0: 68 65 20 27 62 27 20 6d 61 74 63 68 69 6e 66 6f  he 'b' matchinfo
42e0: 20 66 6c 61 67 0a 23 0a 73 65 74 20 73 71 6c 69   flag.#.set sqli
42f0: 74 65 5f 66 74 73 33 5f 65 6e 61 62 6c 65 5f 70  te_fts3_enable_p
4300: 61 72 65 6e 74 68 65 73 65 73 20 31 0a 72 65 73  arentheses 1.res
4310: 65 74 5f 64 62 0a 64 62 20 66 75 6e 63 20 6d 69  et_db.db func mi
4320: 74 20 6d 69 74 0a 0a 64 6f 5f 74 65 73 74 20 31  t mit..do_test 1
4330: 32 2e 30 20 7b 0a 20 20 73 65 74 20 63 6f 6c 73  2.0 {.  set cols
4340: 20 5b 6c 69 73 74 5d 0a 20 20 66 6f 72 20 7b 73   [list].  for {s
4350: 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 35 30  et i 0} {$i < 50
4360: 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 20 6c 61 70  } {incr i} { lap
4370: 70 65 6e 64 20 63 6f 6c 73 20 22 63 24 69 22 20  pend cols "c$i" 
4380: 7d 0a 20 20 65 78 65 63 73 71 6c 20 22 43 52 45  }.  execsql "CRE
4390: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
43a0: 45 20 74 74 20 55 53 49 4e 47 20 66 74 73 33 28  E tt USING fts3(
43b0: 5b 6a 6f 69 6e 20 24 63 6f 6c 73 20 2c 5d 29 22  [join $cols ,])"
43c0: 0a 7d 20 7b 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  .} {}..do_execsq
43d0: 6c 5f 74 65 73 74 20 31 32 2e 31 20 7b 0a 20 20  l_test 12.1 {.  
43e0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 74 20 28  INSERT INTO tt (
43f0: 72 6f 77 69 64 2c 20 63 34 2c 20 63 34 35 29 20  rowid, c4, c45) 
4400: 56 41 4c 55 45 53 28 31 2c 20 27 61 62 63 27 2c  VALUES(1, 'abc',
4410: 20 27 61 62 63 27 29 3b 0a 20 20 53 45 4c 45 43   'abc');.  SELEC
4420: 54 20 6d 69 74 28 6d 61 74 63 68 69 6e 66 6f 28  T mit(matchinfo(
4430: 74 74 2c 20 27 62 27 29 29 20 46 52 4f 4d 20 74  tt, 'b')) FROM t
4440: 74 20 57 48 45 52 45 20 74 74 20 4d 41 54 43 48  t WHERE tt MATCH
4450: 20 27 61 62 63 27 3b 0a 7d 20 5b 6c 69 73 74 20   'abc';.} [list 
4460: 5b 6c 69 73 74 20 5b 65 78 70 72 20 31 3c 3c 34  [list [expr 1<<4
4470: 5d 20 5b 65 78 70 72 20 31 3c 3c 28 34 35 2d 33  ] [expr 1<<(45-3
4480: 32 29 5d 5d 5d 0a 0a 73 65 74 20 73 71 6c 69 74  2)]]]..set sqlit
4490: 65 5f 66 74 73 33 5f 65 6e 61 62 6c 65 5f 70 61  e_fts3_enable_pa
44a0: 72 65 6e 74 68 65 73 65 73 20 30 0a 66 69 6e 69  rentheses 0.fini
44b0: 73 68 5f 74 65 73 74 0a                          sh_test.