/ Hex Artifact Content
Login

Artifact 6507fe1c342e542300d65ea637d4110eccf894e6:


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 20 7b 0a  ql_test 4.4.0 {.
2050: 20 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 3b 0a 20 20 55 50 44 41 54  imize');.  UPDAT
2080: 45 20 74 35 5f 73 65 67 6d 65 6e 74 73 20 0a 20  E t5_segments . 
2090: 20 53 45 54 20 62 6c 6f 63 6b 20 3d 20 7a 65 72   SET block = zer
20a0: 6f 62 6c 6f 62 28 6c 65 6e 67 74 68 28 62 6c 6f  oblob(length(blo
20b0: 63 6b 29 29 20 0a 20 20 57 48 45 52 45 20 6c 65  ck)) .  WHERE le
20c0: 6e 67 74 68 28 62 6c 6f 63 6b 29 3e 31 30 30 30  ngth(block)>1000
20d0: 30 3b 0a 7d 0a 0a 64 6f 5f 6d 61 74 63 68 69 6e  0;.}..do_matchin
20e0: 66 6f 5f 74 65 73 74 20 34 2e 34 2e 32 20 74 35  fo_test 4.4.2 t5
20f0: 20 7b 74 35 20 4d 41 54 43 48 20 27 61 20 62 27   {t5 MATCH 'a b'
2100: 7d 20 20 20 20 20 20 20 20 20 7b 20 73 20 7b 32  }         { s {2
2110: 7d 20 7d 0a 64 6f 5f 6d 61 74 63 68 69 6e 66 6f  } }.do_matchinfo
2120: 5f 74 65 73 74 20 34 2e 34 2e 31 20 74 35 20 7b  _test 4.4.1 t5 {
2130: 74 35 20 4d 41 54 43 48 20 27 61 20 61 27 7d 20  t5 MATCH 'a a'} 
2140: 20 20 20 20 20 20 20 20 7b 20 73 20 7b 32 20 31          { s {2 1
2150: 7d 20 7d 0a 64 6f 5f 6d 61 74 63 68 69 6e 66 6f  } }.do_matchinfo
2160: 5f 74 65 73 74 20 34 2e 34 2e 32 20 74 35 20 7b  _test 4.4.2 t5 {
2170: 74 35 20 4d 41 54 43 48 20 27 61 20 62 27 7d 20  t5 MATCH 'a b'} 
2180: 20 20 20 20 20 20 20 20 7b 20 73 20 7b 32 7d 20          { s {2} 
2190: 7d 0a 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74  }.do_matchinfo_t
21a0: 65 73 74 20 34 2e 34 2e 33 20 74 35 20 7b 74 35  est 4.4.3 t5 {t5
21b0: 20 4d 41 54 43 48 20 27 61 20 62 20 61 27 7d 20   MATCH 'a b a'} 
21c0: 20 20 20 20 20 20 7b 20 73 20 7b 33 7d 20 7d 0a        { s {3} }.
21d0: 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73  do_matchinfo_tes
21e0: 74 20 34 2e 34 2e 34 20 74 35 20 7b 74 35 20 4d  t 4.4.4 t5 {t5 M
21f0: 41 54 43 48 20 27 61 20 61 20 61 27 7d 20 20 20  ATCH 'a a a'}   
2200: 20 20 20 20 7b 20 73 20 7b 33 20 31 7d 20 7d 0a      { s {3 1} }.
2210: 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73  do_matchinfo_tes
2220: 74 20 34 2e 34 2e 35 20 74 35 20 7b 74 35 20 4d  t 4.4.5 t5 {t5 M
2230: 41 54 43 48 20 27 22 61 20 62 22 20 22 61 20 62  ATCH '"a b" "a b
2240: 22 27 7d 20 7b 20 73 20 7b 32 7d 20 7d 0a 0a 64  "'} { s {2} }..d
2250: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34  o_execsql_test 4
2260: 2e 35 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20  .5.0 {.  CREATE 
2270: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 36  VIRTUAL TABLE t6
2280: 20 55 53 49 4e 47 20 66 74 73 34 28 61 2c 20 62   USING fts4(a, b
2290: 2c 20 63 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , c);.  INSERT I
22a0: 4e 54 4f 20 74 36 20 56 41 4c 55 45 53 28 27 61  NTO t6 VALUES('a
22b0: 27 2c 20 27 62 27 2c 20 27 63 27 29 3b 0a 7d 0a  ', 'b', 'c');.}.
22c0: 64 6f 5f 6d 61 74 63 68 69 6e 66 6f 5f 74 65 73  do_matchinfo_tes
22d0: 74 20 34 2e 35 2e 31 20 74 36 20 7b 74 36 20 4d  t 4.5.1 t6 {t6 M
22e0: 41 54 43 48 20 27 61 20 62 20 63 27 7d 20 20 20  ATCH 'a b c'}   
22f0: 20 20 20 20 7b 20 73 20 7b 7b 31 20 31 20 31 7d      { s {{1 1 1}
2300: 7d 20 7d 0a 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d  } }...#---------
2310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2350: 0a 23 20 43 68 65 63 6b 20 74 68 65 20 66 6f 6c  .# Check the fol
2360: 6c 6f 77 69 6e 67 20 72 65 73 74 72 69 63 74 69  lowing restricti
2370: 6f 6e 73 3a 0a 23 0a 23 20 20 20 2b 20 4d 61 74  ons:.#.#   + Mat
2380: 63 68 69 6e 66 6f 20 66 6c 61 67 73 20 27 61 27  chinfo flags 'a'
2390: 2c 20 27 6c 27 20 61 6e 64 20 27 6e 27 20 63 61  , 'l' and 'n' ca
23a0: 6e 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 77  n only be used w
23b0: 69 74 68 20 66 74 73 34 2c 20 6e 6f 74 20 66 74  ith fts4, not ft
23c0: 73 33 2e 0a 23 20 20 20 2b 20 4d 61 74 63 68 69  s3..#   + Matchi
23d0: 6e 66 6f 20 66 6c 61 67 20 27 6c 27 20 63 61 6e  nfo flag 'l' can
23e0: 6e 6f 74 20 62 65 20 75 73 65 64 20 77 69 74 68  not be used with
23f0: 20 6d 61 74 63 68 69 6e 66 6f 3d 66 74 73 33 2e   matchinfo=fts3.
2400: 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .#.do_execsql_te
2410: 73 74 20 35 2e 31 20 7b 0a 20 20 43 52 45 41 54  st 5.1 {.  CREAT
2420: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
2430: 74 37 20 55 53 49 4e 47 20 66 74 73 33 28 61 2c  t7 USING fts3(a,
2440: 20 62 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e   b);.  INSERT IN
2450: 54 4f 20 74 37 20 56 41 4c 55 45 53 28 27 75 20  TO t7 VALUES('u 
2460: 76 20 77 27 2c 20 27 78 20 79 20 7a 27 29 3b 0a  v w', 'x y z');.
2470: 0a 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41  .  CREATE VIRTUA
2480: 4c 20 54 41 42 4c 45 20 74 38 20 55 53 49 4e 47  L TABLE t8 USING
2490: 20 66 74 73 34 28 61 2c 20 62 2c 20 6d 61 74 63   fts4(a, b, matc
24a0: 68 69 6e 66 6f 3d 66 74 73 33 29 3b 0a 20 20 49  hinfo=fts3);.  I
24b0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 38 20 56 41  NSERT INTO t8 VA
24c0: 4c 55 45 53 28 27 75 20 76 20 77 27 2c 20 27 78  LUES('u v w', 'x
24d0: 20 79 20 7a 27 29 3b 0a 7d 0a 0a 64 6f 5f 63 61   y z');.}..do_ca
24e0: 74 63 68 73 71 6c 5f 74 65 73 74 20 35 2e 32 2e  tchsql_test 5.2.
24f0: 31 20 7b 20 0a 20 20 53 45 4c 45 43 54 20 6d 61  1 { .  SELECT ma
2500: 74 63 68 69 6e 66 6f 28 74 37 2c 20 27 61 27 29  tchinfo(t7, 'a')
2510: 20 46 52 4f 4d 20 74 37 20 57 48 45 52 45 20 74   FROM t7 WHERE t
2520: 37 20 4d 41 54 43 48 20 27 78 20 79 27 0a 7d 20  7 MATCH 'x y'.} 
2530: 7b 31 20 7b 75 6e 72 65 63 6f 67 6e 69 7a 65 64  {1 {unrecognized
2540: 20 6d 61 74 63 68 69 6e 66 6f 20 72 65 71 75 65   matchinfo reque
2550: 73 74 3a 20 61 7d 7d 0a 64 6f 5f 63 61 74 63 68  st: a}}.do_catch
2560: 73 71 6c 5f 74 65 73 74 20 35 2e 32 2e 32 20 7b  sql_test 5.2.2 {
2570: 20 0a 20 20 53 45 4c 45 43 54 20 6d 61 74 63 68   .  SELECT match
2580: 69 6e 66 6f 28 74 37 2c 20 27 6c 27 29 20 46 52  info(t7, 'l') FR
2590: 4f 4d 20 74 37 20 57 48 45 52 45 20 74 37 20 4d  OM t7 WHERE t7 M
25a0: 41 54 43 48 20 27 78 20 79 27 0a 7d 20 7b 31 20  ATCH 'x y'.} {1 
25b0: 7b 75 6e 72 65 63 6f 67 6e 69 7a 65 64 20 6d 61  {unrecognized ma
25c0: 74 63 68 69 6e 66 6f 20 72 65 71 75 65 73 74 3a  tchinfo request:
25d0: 20 6c 7d 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c   l}}.do_catchsql
25e0: 5f 74 65 73 74 20 35 2e 32 2e 33 20 7b 20 0a 20  _test 5.2.3 { . 
25f0: 20 53 45 4c 45 43 54 20 6d 61 74 63 68 69 6e 66   SELECT matchinf
2600: 6f 28 74 37 2c 20 27 6e 27 29 20 46 52 4f 4d 20  o(t7, 'n') FROM 
2610: 74 37 20 57 48 45 52 45 20 74 37 20 4d 41 54 43  t7 WHERE t7 MATC
2620: 48 20 27 78 20 79 27 0a 7d 20 7b 31 20 7b 75 6e  H 'x y'.} {1 {un
2630: 72 65 63 6f 67 6e 69 7a 65 64 20 6d 61 74 63 68  recognized match
2640: 69 6e 66 6f 20 72 65 71 75 65 73 74 3a 20 6e 7d  info request: n}
2650: 7d 0a 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74  }..do_catchsql_t
2660: 65 73 74 20 35 2e 33 2e 31 20 7b 20 0a 20 20 53  est 5.3.1 { .  S
2670: 45 4c 45 43 54 20 6d 61 74 63 68 69 6e 66 6f 28  ELECT matchinfo(
2680: 74 38 2c 20 27 6c 27 29 20 46 52 4f 4d 20 74 38  t8, 'l') FROM t8
2690: 20 57 48 45 52 45 20 74 38 20 4d 41 54 43 48 20   WHERE t8 MATCH 
26a0: 27 78 20 79 27 0a 7d 20 7b 31 20 7b 75 6e 72 65  'x y'.} {1 {unre
26b0: 63 6f 67 6e 69 7a 65 64 20 6d 61 74 63 68 69 6e  cognized matchin
26c0: 66 6f 20 72 65 71 75 65 73 74 3a 20 6c 7d 7d 0a  fo request: l}}.
26d0: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
26e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
26f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2700: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65  -----------.# Te
2720: 73 74 20 74 68 61 74 20 74 68 65 20 6f 66 66 73  st that the offs
2730: 65 74 73 28 29 20 66 75 6e 63 74 69 6f 6e 20 68  ets() function h
2740: 61 6e 64 6c 65 73 20 63 6f 72 72 75 70 74 69 6f  andles corruptio
2750: 6e 20 69 6e 20 74 68 65 20 25 5f 63 6f 6e 74 65  n in the %_conte
2760: 6e 74 0a 23 20 74 61 62 6c 65 20 63 6f 72 72 65  nt.# table corre
2770: 63 74 6c 79 2e 0a 23 0a 64 6f 5f 65 78 65 63 73  ctly..#.do_execs
2780: 71 6c 5f 74 65 73 74 20 36 2e 31 20 7b 0a 20 20  ql_test 6.1 {.  
2790: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
27a0: 41 42 4c 45 20 74 39 20 55 53 49 4e 47 20 66 74  ABLE t9 USING ft
27b0: 73 34 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  s4;.  INSERT INT
27c0: 4f 20 74 39 20 56 41 4c 55 45 53 28 0a 20 20 20  O t9 VALUES(.   
27d0: 20 27 74 68 69 73 20 72 65 63 6f 72 64 20 69 73   'this record is
27e0: 20 75 73 65 64 20 74 6f 20 74 72 79 20 74 6f 20   used to try to 
27f0: 64 65 63 74 65 63 74 20 63 6f 72 72 75 70 74 69  dectect corrupti
2800: 6f 6e 27 0a 20 20 29 3b 0a 20 20 53 45 4c 45 43  on'.  );.  SELEC
2810: 54 20 6f 66 66 73 65 74 73 28 74 39 29 20 46 52  T offsets(t9) FR
2820: 4f 4d 20 74 39 20 57 48 45 52 45 20 74 39 20 4d  OM t9 WHERE t9 M
2830: 41 54 43 48 20 27 74 6f 27 3b 0a 7d 20 7b 7b 30  ATCH 'to';.} {{0
2840: 20 30 20 32 30 20 32 20 30 20 30 20 32 37 20 32   0 20 2 0 0 27 2
2850: 7d 7d 0a 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f  }}..do_catchsql_
2860: 74 65 73 74 20 36 2e 32 20 7b 0a 20 20 55 50 44  test 6.2 {.  UPD
2870: 41 54 45 20 74 39 5f 63 6f 6e 74 65 6e 74 20 53  ATE t9_content S
2880: 45 54 20 63 30 63 6f 6e 74 65 6e 74 20 3d 20 27  ET c0content = '
2890: 74 68 69 73 20 72 65 63 6f 72 64 20 69 73 20 75  this record is u
28a0: 73 65 64 20 74 6f 27 3b 20 0a 20 20 53 45 4c 45  sed to'; .  SELE
28b0: 43 54 20 6f 66 66 73 65 74 73 28 74 39 29 20 46  CT offsets(t9) F
28c0: 52 4f 4d 20 74 39 20 57 48 45 52 45 20 74 39 20  ROM t9 WHERE t9 
28d0: 4d 41 54 43 48 20 27 74 6f 27 3b 0a 7d 20 7b 31  MATCH 'to';.} {1
28e0: 20 7b 64 61 74 61 62 61 73 65 20 64 69 73 6b 20   {database disk 
28f0: 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f 72 6d  image is malform
2900: 65 64 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d  ed}}..#---------
2910: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2920: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2950: 0a 23 20 54 65 73 74 20 74 68 65 20 6f 75 74 63  .# Test the outc
2960: 6f 6d 65 20 6f 66 20 6d 61 74 63 68 69 6e 66 6f  ome of matchinfo
2970: 28 29 20 77 68 65 6e 20 75 73 65 64 20 77 69 74  () when used wit
2980: 68 69 6e 20 61 20 71 75 65 72 79 20 74 68 61 74  hin a query that
2990: 20 64 6f 65 73 20 6e 6f 74 0a 23 20 75 73 65 20   does not.# use 
29a0: 74 68 65 20 66 75 6c 6c 2d 74 65 78 74 20 69 6e  the full-text in
29b0: 64 65 78 20 28 69 2e 65 2e 20 6c 6f 6f 6b 75 70  dex (i.e. lookup
29c0: 20 62 79 20 72 6f 77 69 64 20 6f 72 20 66 75 6c   by rowid or ful
29d0: 6c 2d 74 61 62 6c 65 20 73 63 61 6e 29 2e 0a 23  l-table scan)..#
29e0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
29f0: 20 37 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20   7.1 {.  CREATE 
2a00: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 31  VIRTUAL TABLE t1
2a10: 30 20 55 53 49 4e 47 20 66 74 73 34 3b 0a 20 20  0 USING fts4;.  
2a20: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 30 20  INSERT INTO t10 
2a30: 56 41 4c 55 45 53 28 27 66 69 72 73 74 20 72 65  VALUES('first re
2a40: 63 6f 72 64 27 29 3b 0a 20 20 49 4e 53 45 52 54  cord');.  INSERT
2a50: 20 49 4e 54 4f 20 74 31 30 20 56 41 4c 55 45 53   INTO t10 VALUES
2a60: 28 27 73 65 63 6f 6e 64 20 72 65 63 6f 72 64 27  ('second record'
2a70: 29 3b 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  );.}.do_execsql_
2a80: 74 65 73 74 20 37 2e 32 20 7b 0a 20 20 53 45 4c  test 7.2 {.  SEL
2a90: 45 43 54 20 74 79 70 65 6f 66 28 6d 61 74 63 68  ECT typeof(match
2aa0: 69 6e 66 6f 28 74 31 30 29 29 2c 20 6c 65 6e 67  info(t10)), leng
2ab0: 74 68 28 6d 61 74 63 68 69 6e 66 6f 28 74 31 30  th(matchinfo(t10
2ac0: 29 29 20 46 52 4f 4d 20 74 31 30 3b 0a 7d 20 7b  )) FROM t10;.} {
2ad0: 62 6c 6f 62 20 30 20 62 6c 6f 62 20 30 7d 0a 64  blob 0 blob 0}.d
2ae0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 37  o_execsql_test 7
2af0: 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 74 79  .3 {.  SELECT ty
2b00: 70 65 6f 66 28 6d 61 74 63 68 69 6e 66 6f 28 74  peof(matchinfo(t
2b10: 31 30 29 29 2c 20 6c 65 6e 67 74 68 28 6d 61 74  10)), length(mat
2b20: 63 68 69 6e 66 6f 28 74 31 30 29 29 20 46 52 4f  chinfo(t10)) FRO
2b30: 4d 20 74 31 30 20 57 48 45 52 45 20 64 6f 63 69  M t10 WHERE doci
2b40: 64 3d 31 3b 0a 7d 20 7b 62 6c 6f 62 20 30 7d 0a  d=1;.} {blob 0}.
2b50: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
2b60: 37 2e 34 20 7b 0a 20 20 53 45 4c 45 43 54 20 74  7.4 {.  SELECT t
2b70: 79 70 65 6f 66 28 6d 61 74 63 68 69 6e 66 6f 28  ypeof(matchinfo(
2b80: 74 31 30 29 29 2c 20 6c 65 6e 67 74 68 28 6d 61  t10)), length(ma
2b90: 74 63 68 69 6e 66 6f 28 74 31 30 29 29 20 0a 20  tchinfo(t10)) . 
2ba0: 20 46 52 4f 4d 20 74 31 30 20 57 48 45 52 45 20   FROM t10 WHERE 
2bb0: 74 31 30 20 4d 41 54 43 48 20 27 72 65 63 6f 72  t10 MATCH 'recor
2bc0: 64 27 0a 7d 20 7b 62 6c 6f 62 20 32 30 20 62 6c  d'.} {blob 20 bl
2bd0: 6f 62 20 32 30 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  ob 20}..#-------
2be0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2bf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c20: 2d 2d 0a 23 20 54 65 73 74 20 61 20 73 70 65 63  --.# Test a spec
2c30: 69 61 6c 20 63 61 73 65 20 2d 20 6d 61 74 63 68  ial case - match
2c40: 69 6e 66 6f 28 27 6e 78 61 27 29 20 77 69 74 68  info('nxa') with
2c50: 20 6d 61 6e 79 20 7a 65 72 6f 20 6c 65 6e 67 74   many zero lengt
2c60: 68 20 64 6f 63 75 6d 65 6e 74 73 2e 20 0a 23 20  h documents. .# 
2c70: 53 70 65 63 69 61 6c 20 62 65 63 61 75 73 65 20  Special because 
2c80: 22 78 22 20 69 6e 74 65 72 6e 61 6c 6c 79 20 75  "x" internally u
2c90: 73 65 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20  ses a statement 
2ca0: 75 73 65 64 20 62 79 20 62 6f 74 68 20 22 6e 22  used by both "n"
2cb0: 20 61 6e 64 20 22 61 22 2e 20 0a 23 20 54 68 69   and "a". .# Thi
2cc0: 73 20 77 61 73 20 63 61 75 73 69 6e 67 20 61 20  s was causing a 
2cd0: 70 72 6f 62 6c 65 6d 20 61 74 20 6f 6e 65 20 70  problem at one p
2ce0: 6f 69 6e 74 20 69 6e 20 74 68 65 20 6f 62 73 63  oint in the obsc
2cf0: 75 72 65 20 63 61 73 65 20 77 68 65 72 65 20 74  ure case where t
2d00: 68 65 0a 23 20 74 6f 74 61 6c 20 6e 75 6d 62 65  he.# total numbe
2d10: 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61  r of bytes of da
2d20: 74 61 20 73 74 6f 72 65 64 20 69 6e 20 61 6e 20  ta stored in an 
2d30: 66 74 73 33 20 74 61 62 6c 65 20 77 61 73 20 67  fts3 table was g
2d40: 72 65 61 74 65 72 20 74 68 61 6e 0a 23 20 74 68  reater than.# th
2d50: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
2d60: 2e 20 69 2e 65 2e 20 77 68 65 6e 20 74 68 65 20  . i.e. when the 
2d70: 66 6f 6c 6c 6f 77 69 6e 67 20 71 75 65 72 79 20  following query 
2d80: 72 65 74 75 72 6e 73 20 74 72 75 65 3a 0a 23 0a  returns true:.#.
2d90: 23 20 20 20 53 45 4c 45 43 54 20 73 75 6d 28 6c  #   SELECT sum(l
2da0: 65 6e 67 74 68 28 63 6f 6e 74 65 6e 74 29 29 20  ength(content)) 
2db0: 3c 20 63 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20  < count(*) FROM 
2dc0: 66 74 73 34 74 61 62 6c 65 3b 0a 23 0a 64 6f 5f  fts4table;.#.do_
2dd0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 38 2e 31  execsql_test 8.1
2de0: 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49 52 54   {.  CREATE VIRT
2df0: 55 41 4c 20 54 41 42 4c 45 20 74 31 31 20 55 53  UAL TABLE t11 US
2e00: 49 4e 47 20 66 74 73 34 3b 0a 20 20 49 4e 53 45  ING fts4;.  INSE
2e10: 52 54 20 49 4e 54 4f 20 74 31 31 28 74 31 31 29  RT INTO t11(t11)
2e20: 20 56 41 4c 55 45 53 28 27 6e 6f 64 65 73 69 7a   VALUES('nodesiz
2e30: 65 3d 32 34 27 29 3b 0a 20 20 49 4e 53 45 52 54  e=24');.  INSERT
2e40: 20 49 4e 54 4f 20 74 31 31 20 56 41 4c 55 45 53   INTO t11 VALUES
2e50: 28 27 71 75 69 74 65 61 6c 6f 6e 67 73 74 72 69  ('quitealongstri
2e60: 6e 67 6f 66 74 65 78 74 27 29 3b 0a 20 20 49 4e  ngoftext');.  IN
2e70: 53 45 52 54 20 49 4e 54 4f 20 74 31 31 20 56 41  SERT INTO t11 VA
2e80: 4c 55 45 53 28 27 61 6e 6f 74 68 65 72 71 75 69  LUES('anotherqui
2e90: 74 65 61 6c 6f 6e 67 73 74 72 69 6e 67 6f 66 74  tealongstringoft
2ea0: 65 78 74 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  ext');.  INSERT 
2eb0: 49 4e 54 4f 20 74 31 31 20 56 41 4c 55 45 53 28  INTO t11 VALUES(
2ec0: 27 61 74 68 69 72 64 6c 6f 6e 67 73 74 72 69 6e  'athirdlongstrin
2ed0: 67 6f 66 74 65 78 74 27 29 3b 0a 20 20 49 4e 53  goftext');.  INS
2ee0: 45 52 54 20 49 4e 54 4f 20 74 31 31 20 56 41 4c  ERT INTO t11 VAL
2ef0: 55 45 53 28 27 61 6e 64 6f 6e 65 6d 6f 72 65 66  UES('andonemoref
2f00: 6f 72 67 6f 6f 64 6c 75 63 6b 27 29 3b 0a 7d 0a  orgoodluck');.}.
2f10: 64 6f 5f 74 65 73 74 20 38 2e 32 20 7b 0a 20 20  do_test 8.2 {.  
2f20: 66 6f 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24  for {set i 0} {$
2f30: 69 20 3c 20 32 30 30 7d 20 7b 69 6e 63 72 20 69  i < 200} {incr i
2f40: 7d 20 7b 0a 20 20 20 20 65 78 65 63 73 71 6c 20  } {.    execsql 
2f50: 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31  { INSERT INTO t1
2f60: 31 20 56 41 4c 55 45 53 28 27 27 29 20 7d 0a 20  1 VALUES('') }. 
2f70: 20 7d 0a 20 20 65 78 65 63 73 71 6c 20 7b 20 49   }.  execsql { I
2f80: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 31 28 74  NSERT INTO t11(t
2f90: 31 31 29 20 56 41 4c 55 45 53 28 27 6f 70 74 69  11) VALUES('opti
2fa0: 6d 69 7a 65 27 29 20 7d 0a 7d 20 7b 7d 0a 64 6f  mize') }.} {}.do
2fb0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 38 2e  _execsql_test 8.
2fc0: 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 6d 69 74  3 {.  SELECT mit
2fd0: 28 6d 61 74 63 68 69 6e 66 6f 28 74 31 31 2c 20  (matchinfo(t11, 
2fe0: 27 6e 78 61 27 29 29 20 46 52 4f 4d 20 74 31 31  'nxa')) FROM t11
2ff0: 20 57 48 45 52 45 20 74 31 31 20 4d 41 54 43 48   WHERE t11 MATCH
3000: 20 27 61 2a 27 0a 7d 20 7b 7b 32 30 34 20 31 20   'a*'.} {{204 1 
3010: 33 20 33 20 30 7d 20 7b 32 30 34 20 31 20 33 20  3 3 0} {204 1 3 
3020: 33 20 30 7d 20 7b 32 30 34 20 31 20 33 20 33 20  3 0} {204 1 3 3 
3030: 30 7d 7d 0a 0a 23 20 43 6f 72 72 75 70 74 69 6f  0}}..# Corruptio
3040: 6e 20 72 65 6c 61 74 65 64 20 74 65 73 74 73 2e  n related tests.
3050: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
3060: 20 20 38 2e 34 2e 31 2e 31 20 7b 20 55 50 44 41    8.4.1.1 { UPDA
3070: 54 45 20 74 31 31 5f 73 74 61 74 20 53 45 54 20  TE t11_stat SET 
3080: 76 61 6c 75 65 20 3d 20 58 27 30 30 30 30 27 3b  value = X'0000';
3090: 20 7d 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74   }.do_catchsql_t
30a0: 65 73 74 20 38 2e 35 2e 31 2e 32 20 7b 0a 20 20  est 8.5.1.2 {.  
30b0: 53 45 4c 45 43 54 20 6d 69 74 28 6d 61 74 63 68  SELECT mit(match
30c0: 69 6e 66 6f 28 74 31 31 2c 20 27 6e 78 61 27 29  info(t11, 'nxa')
30d0: 29 20 46 52 4f 4d 20 74 31 31 20 57 48 45 52 45  ) FROM t11 WHERE
30e0: 20 74 31 31 20 4d 41 54 43 48 20 27 61 2a 27 0a   t11 MATCH 'a*'.
30f0: 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20 64  } {1 {database d
3100: 69 73 6b 20 69 6d 61 67 65 20 69 73 20 6d 61 6c  isk image is mal
3110: 66 6f 72 6d 65 64 7d 7d 0a 0a 64 6f 5f 65 78 65  formed}}..do_exe
3120: 63 73 71 6c 5f 74 65 73 74 20 20 38 2e 34 2e 32  csql_test  8.4.2
3130: 2e 31 20 7b 20 55 50 44 41 54 45 20 74 31 31 5f  .1 { UPDATE t11_
3140: 73 74 61 74 20 53 45 54 20 76 61 6c 75 65 20 3d  stat SET value =
3150: 20 58 27 30 30 27 3b 20 7d 0a 64 6f 5f 63 61 74   X'00'; }.do_cat
3160: 63 68 73 71 6c 5f 74 65 73 74 20 38 2e 35 2e 32  chsql_test 8.5.2
3170: 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 6d 69  .2 {.  SELECT mi
3180: 74 28 6d 61 74 63 68 69 6e 66 6f 28 74 31 31 2c  t(matchinfo(t11,
3190: 20 27 6e 78 61 27 29 29 20 46 52 4f 4d 20 74 31   'nxa')) FROM t1
31a0: 31 20 57 48 45 52 45 20 74 31 31 20 4d 41 54 43  1 WHERE t11 MATC
31b0: 48 20 27 61 2a 27 0a 7d 20 7b 31 20 7b 64 61 74  H 'a*'.} {1 {dat
31c0: 61 62 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65  abase disk image
31d0: 20 69 73 20 6d 61 6c 66 6f 72 6d 65 64 7d 7d 0a   is malformed}}.
31e0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
31f0: 20 20 38 2e 34 2e 33 2e 31 20 7b 20 55 50 44 41    8.4.3.1 { UPDA
3200: 54 45 20 74 31 31 5f 73 74 61 74 20 53 45 54 20  TE t11_stat SET 
3210: 76 61 6c 75 65 20 3d 20 4e 55 4c 4c 3b 20 7d 0a  value = NULL; }.
3220: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
3230: 20 38 2e 35 2e 33 2e 32 20 7b 0a 20 20 53 45 4c   8.5.3.2 {.  SEL
3240: 45 43 54 20 6d 69 74 28 6d 61 74 63 68 69 6e 66  ECT mit(matchinf
3250: 6f 28 74 31 31 2c 20 27 6e 78 61 27 29 29 20 46  o(t11, 'nxa')) F
3260: 52 4f 4d 20 74 31 31 20 57 48 45 52 45 20 74 31  ROM t11 WHERE t1
3270: 31 20 4d 41 54 43 48 20 27 61 2a 27 0a 7d 20 7b  1 MATCH 'a*'.} {
3280: 31 20 7b 64 61 74 61 62 61 73 65 20 64 69 73 6b  1 {database disk
3290: 20 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f 72   image is malfor
32a0: 6d 65 64 7d 7d 0a 0a 66 69 6e 69 73 68 5f 74 65  med}}..finish_te
32b0: 73 74 0a 0a                                      st..