/ Hex Artifact Content
Login

Artifact 1651815b8008de170e8e600dcacc17521d765482ea8f074ae82cfa870d8bb7fb:


0000: 23 20 32 30 31 34 20 44 65 63 20 32 30 0a 23 0a  # 2014 Dec 20.#.
0010: 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73  # The author dis
0020: 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74  claims copyright
0030: 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20   to this source 
0040: 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20  code.  In place 
0050: 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74  of.# a legal not
0060: 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62  ice, here is a b
0070: 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20  lessing:.#.#    
0080: 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20  May you do good 
0090: 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20  and not evil..# 
00a0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00b0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00c0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00d0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20  give others..#  
00e0: 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20    May you share 
00f0: 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61  freely, never ta
0100: 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79  king more than y
0110: 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a  ou give..#.#****
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 0a 23 0a 23 20 54 65 73 74 73 20 66 6f  ***.#.# Tests fo
0170: 63 75 73 69 6e 67 20 6f 6e 20 63 75 73 74 6f 6d  cusing on custom
0180: 20 74 6f 6b 65 6e 69 7a 65 72 73 20 74 68 61 74   tokenizers that
0190: 20 73 75 70 70 6f 72 74 20 73 79 6e 6f 6e 79 6d   support synonym
01a0: 73 2e 0a 23 0a 0a 73 6f 75 72 63 65 20 5b 66 69  s..#..source [fi
01b0: 6c 65 20 6a 6f 69 6e 20 5b 66 69 6c 65 20 64 69  le join [file di
01c0: 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63 72 69  rname [info scri
01d0: 70 74 5d 5d 20 66 74 73 35 5f 63 6f 6d 6d 6f 6e  pt]] fts5_common
01e0: 2e 74 63 6c 5d 0a 73 65 74 20 74 65 73 74 70 72  .tcl].set testpr
01f0: 65 66 69 78 20 66 74 73 35 73 79 6e 6f 6e 79 6d  efix fts5synonym
0200: 0a 0a 23 20 49 66 20 53 51 4c 49 54 45 5f 45 4e  ..# If SQLITE_EN
0210: 41 42 4c 45 5f 46 54 53 35 20 69 73 20 64 65 66  ABLE_FTS5 is def
0220: 69 6e 65 64 2c 20 6f 6d 69 74 20 74 68 69 73 20  ined, omit this 
0230: 66 69 6c 65 2e 0a 69 66 63 61 70 61 62 6c 65 20  file..ifcapable 
0240: 21 66 74 73 35 20 7b 0a 20 20 66 69 6e 69 73 68  !fts5 {.  finish
0250: 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d  _test.  return.}
0260: 0a 0a 70 72 6f 63 20 74 63 6c 5f 63 72 65 61 74  ..proc tcl_creat
0270: 65 20 7b 61 72 67 73 7d 20 7b 20 72 65 74 75 72  e {args} { retur
0280: 6e 20 22 74 63 6c 5f 74 6f 6b 65 6e 69 7a 65 22  n "tcl_tokenize"
0290: 20 7d 0a 0a 66 6f 72 65 61 63 68 5f 64 65 74 61   }..foreach_deta
02a0: 69 6c 5f 6d 6f 64 65 20 24 74 65 73 74 70 72 65  il_mode $testpre
02b0: 66 69 78 20 7b 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  fix {..#--------
02c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
02f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0300: 2d 0a 23 20 57 61 72 6d 20 62 6f 64 79 20 74 65  -.# Warm body te
0310: 73 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20  st for the code 
0320: 69 6e 20 66 74 73 35 5f 74 63 6c 2e 63 2e 0a 23  in fts5_tcl.c..#
0330: 0a 66 74 73 35 5f 74 63 6c 6e 75 6d 5f 72 65 67  .fts5_tclnum_reg
0340: 69 73 74 65 72 20 64 62 0a 64 6f 5f 65 78 65 63  ister db.do_exec
0350: 73 71 6c 5f 74 65 73 74 20 31 2e 30 20 7b 0a 20  sql_test 1.0 {. 
0360: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
0370: 54 41 42 4c 45 20 66 74 20 55 53 49 4e 47 20 66  TABLE ft USING f
0380: 74 73 35 28 78 2c 20 74 6f 6b 65 6e 69 7a 65 20  ts5(x, tokenize 
0390: 3d 20 22 74 63 6c 6e 75 6d 20 64 6f 63 75 6d 65  = "tclnum docume
03a0: 6e 74 22 2c 20 64 65 74 61 69 6c 3d 25 44 45 54  nt", detail=%DET
03b0: 41 49 4c 25 29 3b 0a 20 20 49 4e 53 45 52 54 20  AIL%);.  INSERT 
03c0: 49 4e 54 4f 20 66 74 20 56 41 4c 55 45 53 28 27  INTO ft VALUES('
03d0: 61 62 63 20 64 65 66 20 67 68 69 27 29 3b 0a 20  abc def ghi');. 
03e0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 20   INSERT INTO ft 
03f0: 56 41 4c 55 45 53 28 27 6a 6b 6c 20 6d 6e 6f 20  VALUES('jkl mno 
0400: 70 71 72 27 29 3b 0a 20 20 53 45 4c 45 43 54 20  pqr');.  SELECT 
0410: 72 6f 77 69 64 2c 20 78 20 46 52 4f 4d 20 66 74  rowid, x FROM ft
0420: 20 57 48 45 52 45 20 66 74 20 4d 41 54 43 48 20   WHERE ft MATCH 
0430: 27 64 65 66 27 3b 0a 20 20 53 45 4c 45 43 54 20  'def';.  SELECT 
0440: 78 2c 20 72 6f 77 69 64 20 46 52 4f 4d 20 66 74  x, rowid FROM ft
0450: 20 57 48 45 52 45 20 66 74 20 4d 41 54 43 48 20   WHERE ft MATCH 
0460: 27 70 71 72 27 3b 0a 7d 20 7b 31 20 7b 61 62 63  'pqr';.} {1 {abc
0470: 20 64 65 66 20 67 68 69 7d 20 7b 6a 6b 6c 20 6d   def ghi} {jkl m
0480: 6e 6f 20 70 71 72 7d 20 32 7d 0a 0a 23 2d 2d 2d  no pqr} 2}..#---
0490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
04d0: 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 61 20  ------.# Test a 
04e0: 74 6f 6b 65 6e 69 7a 65 72 20 74 68 61 74 20 73  tokenizer that s
04f0: 75 70 70 6f 72 74 73 20 73 79 6e 6f 6e 79 6d 73  upports synonyms
0500: 20 62 79 20 61 64 64 69 6e 67 20 65 78 74 72 61   by adding extra
0510: 20 65 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a   entries to the.
0520: 23 20 46 54 53 20 69 6e 64 65 78 2e 0a 23 0a 72  # FTS index..#.r
0530: 65 73 65 74 5f 64 62 0a 66 74 73 35 5f 74 63 6c  eset_db.fts5_tcl
0540: 6e 75 6d 5f 72 65 67 69 73 74 65 72 20 64 62 0a  num_register db.
0550: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0560: 20 32 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20   2.0 {.  CREATE 
0570: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 66 74  VIRTUAL TABLE ft
0580: 20 55 53 49 4e 47 20 66 74 73 35 28 0a 20 20 20   USING fts5(.   
0590: 20 20 20 78 2c 20 74 6f 6b 65 6e 69 7a 65 20 3d     x, tokenize =
05a0: 20 22 74 63 6c 6e 75 6d 20 64 6f 63 75 6d 65 6e   "tclnum documen
05b0: 74 22 2c 20 64 65 74 61 69 6c 3d 25 44 45 54 41  t", detail=%DETA
05c0: 49 4c 25 0a 20 20 29 3b 0a 20 20 49 4e 53 45 52  IL%.  );.  INSER
05d0: 54 20 49 4e 54 4f 20 66 74 20 56 41 4c 55 45 53  T INTO ft VALUES
05e0: 28 27 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 27  ('one two three'
05f0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
0600: 20 66 74 20 56 41 4c 55 45 53 28 27 66 6f 75 72   ft VALUES('four
0610: 20 66 69 76 65 20 73 69 78 27 29 3b 0a 20 20 49   five six');.  I
0620: 4e 53 45 52 54 20 49 4e 54 4f 20 66 74 20 56 41  NSERT INTO ft VA
0630: 4c 55 45 53 28 27 65 69 67 68 74 20 6e 69 6e 65  LUES('eight nine
0640: 20 74 65 6e 27 29 3b 0a 7d 20 7b 7d 0a 0a 66 6f   ten');.} {}..fo
0650: 72 65 61 63 68 20 7b 74 6e 20 65 78 70 72 20 72  reach {tn expr r
0660: 65 73 7d 20 7b 0a 20 20 31 20 22 33 22 20 31 0a  es} {.  1 "3" 1.
0670: 20 20 32 20 22 65 69 67 68 74 20 4f 52 20 38 20    2 "eight OR 8 
0680: 4f 52 20 35 22 20 7b 32 20 33 7d 0a 20 20 33 20  OR 5" {2 3}.  3 
0690: 22 31 30 22 20 7b 7d 0a 20 20 34 20 22 31 2a 22  "10" {}.  4 "1*"
06a0: 20 7b 31 7d 0a 20 20 35 20 22 31 20 2b 20 32 22   {1}.  5 "1 + 2"
06b0: 20 7b 31 7d 0a 7d 20 7b 0a 20 20 69 66 20 7b 21   {1}.} {.  if {!
06c0: 5b 66 74 73 35 5f 65 78 70 72 5f 6f 6b 20 24 65  [fts5_expr_ok $e
06d0: 78 70 72 20 66 74 5d 7d 20 63 6f 6e 74 69 6e 75  xpr ft]} continu
06e0: 65 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74  e.  do_execsql_t
06f0: 65 73 74 20 32 2e 31 2e 24 74 6e 20 7b 0a 20 20  est 2.1.$tn {.  
0700: 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46    SELECT rowid F
0710: 52 4f 4d 20 66 74 20 57 48 45 52 45 20 66 74 20  ROM ft WHERE ft 
0720: 4d 41 54 43 48 20 24 65 78 70 72 0a 20 20 7d 20  MATCH $expr.  } 
0730: 24 72 65 73 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  $res.}..#-------
0740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0780: 2d 2d 0a 23 20 54 65 73 74 20 73 6f 6d 65 20 62  --.# Test some b
0790: 72 6f 6b 65 6e 20 74 6f 6b 65 6e 69 7a 65 72 73  roken tokenizers
07a0: 3a 0a 23 0a 23 20 20 20 33 2e 31 2e 2a 3a 20 41  :.#.#   3.1.*: A
07b0: 20 74 6f 6b 65 6e 69 7a 65 72 20 74 68 61 74 20   tokenizer that 
07c0: 64 65 63 6c 61 72 65 73 20 74 68 65 20 76 65 72  declares the ver
07d0: 79 20 66 69 72 73 74 20 74 6f 6b 65 6e 20 74 6f  y first token to
07e0: 20 62 65 20 63 6f 6c 6f 63 61 74 65 64 2e 0a 23   be colocated..#
07f0: 0a 23 20 20 20 33 2e 32 2e 2a 3a 20 41 20 74 6f  .#   3.2.*: A to
0800: 6b 65 6e 69 7a 65 72 20 74 68 61 74 20 72 65 70  kenizer that rep
0810: 6f 72 74 73 20 74 77 6f 20 69 64 65 6e 74 69 63  orts two identic
0820: 61 6c 20 74 6f 6b 65 6e 73 20 61 74 20 74 68 65  al tokens at the
0830: 20 73 61 6d 65 20 70 6f 73 69 74 69 6f 6e 2e 0a   same position..
0840: 23 20 20 20 20 20 20 20 20 20 20 54 68 69 73 20  #          This 
0850: 69 73 20 61 6c 6c 6f 77 65 64 2e 0a 23 0a 72 65  is allowed..#.re
0860: 73 65 74 5f 64 62 0a 73 71 6c 69 74 65 33 5f 66  set_db.sqlite3_f
0870: 74 73 35 5f 63 72 65 61 74 65 5f 74 6f 6b 65 6e  ts5_create_token
0880: 69 7a 65 72 20 64 62 20 74 63 6c 20 74 63 6c 5f  izer db tcl tcl_
0890: 63 72 65 61 74 65 0a 70 72 6f 63 20 74 63 6c 5f  create.proc tcl_
08a0: 74 6f 6b 65 6e 69 7a 65 20 7b 74 66 6c 61 67 73  tokenize {tflags
08b0: 20 74 65 78 74 7d 20 7b 0a 20 20 73 65 74 20 62   text} {.  set b
08c0: 43 6f 6c 6f 20 31 0a 20 20 66 6f 72 65 61 63 68  Colo 1.  foreach
08d0: 20 7b 77 20 69 53 74 61 72 74 20 69 45 6e 64 7d   {w iStart iEnd}
08e0: 20 5b 66 74 73 35 5f 74 6f 6b 65 6e 69 7a 65 5f   [fts5_tokenize_
08f0: 73 70 6c 69 74 20 24 74 65 78 74 5d 20 7b 0a 20  split $text] {. 
0900: 20 20 20 69 66 20 7b 24 62 43 6f 6c 6f 7d 20 7b     if {$bColo} {
0910: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
0920: 74 73 35 5f 74 6f 6b 65 6e 20 2d 63 6f 6c 6f 20  ts5_token -colo 
0930: 24 77 20 24 69 53 74 61 72 74 20 24 69 45 6e 64  $w $iStart $iEnd
0940: 0a 20 20 20 20 20 20 73 65 74 20 62 43 6f 6c 6f  .      set bColo
0950: 20 30 0a 20 20 20 20 7d 20 7b 0a 20 20 20 20 20   0.    } {.     
0960: 20 73 71 6c 69 74 65 33 5f 66 74 73 35 5f 74 6f   sqlite3_fts5_to
0970: 6b 65 6e 20 24 77 20 24 69 53 74 61 72 74 20 24  ken $w $iStart $
0980: 69 45 6e 64 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d  iEnd.    }.  }.}
0990: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
09a0: 20 33 2e 31 2e 30 20 7b 0a 20 20 43 52 45 41 54   3.1.0 {.  CREAT
09b0: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
09c0: 66 74 20 55 53 49 4e 47 20 66 74 73 35 28 78 2c  ft USING fts5(x,
09d0: 20 74 6f 6b 65 6e 69 7a 65 20 3d 20 74 63 6c 29   tokenize = tcl)
09e0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
09f0: 66 74 20 56 41 4c 55 45 53 28 27 6f 6e 65 20 74  ft VALUES('one t
0a00: 77 6f 20 74 68 72 65 65 27 29 3b 0a 20 20 43 52  wo three');.  CR
0a10: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
0a20: 4c 45 20 76 76 20 55 53 49 4e 47 20 66 74 73 35  LE vv USING fts5
0a30: 76 6f 63 61 62 28 66 74 2c 20 72 6f 77 29 3b 0a  vocab(ft, row);.
0a40: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
0a50: 76 76 3b 0a 7d 20 7b 0a 20 20 6f 6e 65 20 31 20  vv;.} {.  one 1 
0a60: 31 20 20 20 74 68 72 65 65 20 31 20 31 20 20 20  1   three 1 1   
0a70: 74 77 6f 20 31 20 31 0a 7d 0a 0a 64 6f 5f 65 78  two 1 1.}..do_ex
0a80: 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 31 2e 31  ecsql_test 3.1.1
0a90: 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f   {.  INSERT INTO
0aa0: 20 66 74 28 66 74 29 20 56 41 4c 55 45 53 28 27   ft(ft) VALUES('
0ab0: 69 6e 74 65 67 72 69 74 79 2d 63 68 65 63 6b 27  integrity-check'
0ac0: 29 3b 0a 7d 20 7b 7d 0a 0a 70 72 6f 63 20 74 63  );.} {}..proc tc
0ad0: 6c 5f 74 6f 6b 65 6e 69 7a 65 20 7b 74 66 6c 61  l_tokenize {tfla
0ae0: 67 73 20 74 65 78 74 7d 20 7b 0a 20 20 66 6f 72  gs text} {.  for
0af0: 65 61 63 68 20 7b 77 20 69 53 74 61 72 74 20 69  each {w iStart i
0b00: 45 6e 64 7d 20 5b 66 74 73 35 5f 74 6f 6b 65 6e  End} [fts5_token
0b10: 69 7a 65 5f 73 70 6c 69 74 20 24 74 65 78 74 5d  ize_split $text]
0b20: 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66   {.    sqlite3_f
0b30: 74 73 35 5f 74 6f 6b 65 6e 20 24 77 20 24 69 53  ts5_token $w $iS
0b40: 74 61 72 74 20 24 69 45 6e 64 0a 20 20 7d 0a 7d  tart $iEnd.  }.}
0b50: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
0b60: 74 20 33 2e 31 2e 32 20 7b 0a 20 20 53 45 4c 45  t 3.1.2 {.  SELE
0b70: 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 66 74  CT rowid FROM ft
0b80: 20 57 48 45 52 45 20 66 74 20 4d 41 54 43 48 20   WHERE ft MATCH 
0b90: 27 6f 6e 65 20 74 77 6f 20 74 68 72 65 65 27 0a  'one two three'.
0ba0: 7d 20 7b 31 7d 0a 0a 72 65 73 65 74 5f 64 62 0a  } {1}..reset_db.
0bb0: 73 71 6c 69 74 65 33 5f 66 74 73 35 5f 63 72 65  sqlite3_fts5_cre
0bc0: 61 74 65 5f 74 6f 6b 65 6e 69 7a 65 72 20 64 62  ate_tokenizer db
0bd0: 20 74 63 6c 20 74 63 6c 5f 63 72 65 61 74 65 0a   tcl tcl_create.
0be0: 70 72 6f 63 20 74 63 6c 5f 74 6f 6b 65 6e 69 7a  proc tcl_tokeniz
0bf0: 65 20 7b 74 66 6c 61 67 73 20 74 65 78 74 7d 20  e {tflags text} 
0c00: 7b 0a 20 20 66 6f 72 65 61 63 68 20 7b 77 20 69  {.  foreach {w i
0c10: 53 74 61 72 74 20 69 45 6e 64 7d 20 5b 66 74 73  Start iEnd} [fts
0c20: 35 5f 74 6f 6b 65 6e 69 7a 65 5f 73 70 6c 69 74  5_tokenize_split
0c30: 20 24 74 65 78 74 5d 20 7b 0a 20 20 20 20 73 71   $text] {.    sq
0c40: 6c 69 74 65 33 5f 66 74 73 35 5f 74 6f 6b 65 6e  lite3_fts5_token
0c50: 20 24 77 20 24 69 53 74 61 72 74 20 24 69 45 6e   $w $iStart $iEn
0c60: 64 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 74  d.    sqlite3_ft
0c70: 73 35 5f 74 6f 6b 65 6e 20 2d 63 6f 6c 6f 20 24  s5_token -colo $
0c80: 77 20 24 69 53 74 61 72 74 20 24 69 45 6e 64 0a  w $iStart $iEnd.
0c90: 20 20 7d 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c    }.}.do_execsql
0ca0: 5f 74 65 73 74 20 33 2e 32 2e 30 20 7b 0a 20 20  _test 3.2.0 {.  
0cb0: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
0cc0: 41 42 4c 45 20 66 74 20 55 53 49 4e 47 20 66 74  ABLE ft USING ft
0cd0: 73 35 28 78 2c 20 74 6f 6b 65 6e 69 7a 65 20 3d  s5(x, tokenize =
0ce0: 20 74 63 6c 29 3b 0a 20 20 49 4e 53 45 52 54 20   tcl);.  INSERT 
0cf0: 49 4e 54 4f 20 66 74 20 56 41 4c 55 45 53 28 27  INTO ft VALUES('
0d00: 6f 6e 65 20 6f 6e 65 20 74 77 6f 20 74 68 72 65  one one two thre
0d10: 65 27 29 3b 0a 20 20 43 52 45 41 54 45 20 56 49  e');.  CREATE VI
0d20: 52 54 55 41 4c 20 54 41 42 4c 45 20 76 76 20 55  RTUAL TABLE vv U
0d30: 53 49 4e 47 20 66 74 73 35 76 6f 63 61 62 28 66  SING fts5vocab(f
0d40: 74 2c 20 72 6f 77 29 3b 0a 20 20 53 45 4c 45 43  t, row);.  SELEC
0d50: 54 20 2a 20 46 52 4f 4d 20 76 76 3b 0a 7d 20 7b  T * FROM vv;.} {
0d60: 0a 20 20 6f 6e 65 20 31 20 34 20 20 20 74 68 72  .  one 1 4   thr
0d70: 65 65 20 31 20 32 20 20 20 74 77 6f 20 31 20 32  ee 1 2   two 1 2
0d80: 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .}.do_execsql_te
0d90: 73 74 20 33 2e 32 2e 31 20 7b 0a 20 20 53 45 4c  st 3.2.1 {.  SEL
0da0: 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 66  ECT rowid FROM f
0db0: 74 20 57 48 45 52 45 20 66 74 20 4d 41 54 43 48  t WHERE ft MATCH
0dc0: 20 27 6f 6e 65 27 3b 0a 7d 20 7b 31 7d 0a 64 6f   'one';.} {1}.do
0dd0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33 2e  _execsql_test 3.
0de0: 32 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 72  2.2 {.  SELECT r
0df0: 6f 77 69 64 20 46 52 4f 4d 20 66 74 20 57 48 45  owid FROM ft WHE
0e00: 52 45 20 66 74 20 4d 41 54 43 48 20 27 6f 6e 65  RE ft MATCH 'one
0e10: 20 74 77 6f 20 74 68 72 65 65 27 3b 0a 7d 20 7b   two three';.} {
0e20: 31 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  1}.do_execsql_te
0e30: 73 74 20 33 2e 32 2e 33 20 7b 0a 20 20 53 45 4c  st 3.2.3 {.  SEL
0e40: 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 66  ECT rowid FROM f
0e50: 74 20 57 48 45 52 45 20 66 74 20 4d 41 54 43 48  t WHERE ft MATCH
0e60: 20 27 6f 6e 65 20 2b 20 6f 6e 65 20 2b 20 74 77   'one + one + tw
0e70: 6f 20 2b 20 74 68 72 65 65 27 3b 0a 7d 20 7b 31  o + three';.} {1
0e80: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
0e90: 74 20 33 2e 32 2e 34 20 7b 0a 20 20 53 45 4c 45  t 3.2.4 {.  SELE
0ea0: 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 66 74  CT rowid FROM ft
0eb0: 20 57 48 45 52 45 20 66 74 20 4d 41 54 43 48 20   WHERE ft MATCH 
0ec0: 27 6f 6e 65 20 74 77 6f 20 74 77 6f 20 74 68 72  'one two two thr
0ed0: 65 65 27 3b 0a 7d 20 7b 31 7d 0a 64 6f 5f 65 78  ee';.} {1}.do_ex
0ee0: 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 32 2e 35  ecsql_test 3.2.5
0ef0: 20 7b 0a 20 20 53 45 4c 45 43 54 20 72 6f 77 69   {.  SELECT rowi
0f00: 64 20 46 52 4f 4d 20 66 74 20 57 48 45 52 45 20  d FROM ft WHERE 
0f10: 66 74 20 4d 41 54 43 48 20 27 6f 6e 65 20 2b 20  ft MATCH 'one + 
0f20: 74 77 6f 20 2b 20 74 77 6f 20 2b 20 74 68 72 65  two + two + thre
0f30: 65 27 3b 0a 7d 20 7b 7d 0a 0a 23 2d 2d 2d 2d 2d  e';.} {}..#-----
0f40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0f50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0f60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0f70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0f80: 2d 2d 2d 2d 0a 23 20 43 68 65 63 6b 20 74 68 61  ----.# Check tha
0f90: 74 20 65 78 70 72 65 73 73 69 6f 6e 73 20 77 69  t expressions wi
0fa0: 74 68 20 73 79 6e 6f 6e 79 6d 73 20 63 61 6e 20  th synonyms can 
0fb0: 62 65 20 70 61 72 73 65 64 20 61 6e 64 20 65 78  be parsed and ex
0fc0: 65 63 75 74 65 64 2e 0a 23 0a 72 65 73 65 74 5f  ecuted..#.reset_
0fd0: 64 62 0a 66 74 73 35 5f 74 63 6c 6e 75 6d 5f 72  db.fts5_tclnum_r
0fe0: 65 67 69 73 74 65 72 20 64 62 0a 0a 66 6f 72 65  egister db..fore
0ff0: 61 63 68 20 7b 74 6e 20 65 78 70 72 20 72 65 73  ach {tn expr res
1000: 7d 20 7b 0a 20 20 31 20 20 7b 61 62 63 7d 20 20  } {.  1  {abc}  
1010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1020: 20 20 20 20 20 20 20 20 20 7b 22 61 62 63 22 7d           {"abc"}
1030: 0a 20 20 32 20 20 7b 6f 6e 65 7d 20 20 20 20 20  .  2  {one}     
1040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1050: 20 20 20 20 20 20 7b 22 6f 6e 65 22 7c 22 69 22        {"one"|"i"
1060: 7c 22 31 22 7d 0a 20 20 33 20 20 7b 33 7d 20 20  |"1"}.  3  {3}  
1070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1080: 20 20 20 20 20 20 20 20 20 20 20 7b 22 33 22 7c             {"3"|
1090: 22 69 69 69 22 7c 22 74 68 72 65 65 22 7d 0a 20  "iii"|"three"}. 
10a0: 20 34 20 20 7b 33 2a 7d 20 20 20 20 20 20 20 20   4  {3*}        
10b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c0: 20 20 20 20 7b 22 33 22 20 2a 7d 0a 7d 20 7b 0a      {"3" *}.} {.
10d0: 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73    do_execsql_tes
10e0: 74 20 34 2e 31 2e 24 74 6e 20 7b 0a 20 20 20 20  t 4.1.$tn {.    
10f0: 53 45 4c 45 43 54 20 66 74 73 35 5f 65 78 70 72  SELECT fts5_expr
1100: 28 24 65 78 70 72 2c 20 27 74 6f 6b 65 6e 69 7a  ($expr, 'tokeniz
1110: 65 3d 74 63 6c 6e 75 6d 27 29 0a 20 20 7d 20 5b  e=tclnum').  } [
1120: 6c 69 73 74 20 24 72 65 73 5d 0a 7d 0a 0a 64 6f  list $res].}..do
1130: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e  _execsql_test 4.
1140: 32 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20 56  2.1 {.  CREATE V
1150: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 78 20  IRTUAL TABLE xx 
1160: 55 53 49 4e 47 20 66 74 73 35 28 78 2c 20 74 6f  USING fts5(x, to
1170: 6b 65 6e 69 7a 65 3d 74 63 6c 6e 75 6d 2c 20 64  kenize=tclnum, d
1180: 65 74 61 69 6c 3d 25 44 45 54 41 49 4c 25 29 3b  etail=%DETAIL%);
1190: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78  .  INSERT INTO x
11a0: 78 20 56 41 4c 55 45 53 28 27 6f 6e 65 20 74 77  x VALUES('one tw
11b0: 6f 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  o');.  INSERT IN
11c0: 54 4f 20 78 78 20 56 41 4c 55 45 53 28 27 74 68  TO xx VALUES('th
11d0: 72 65 65 20 66 6f 75 72 27 29 3b 0a 7d 0a 0a 64  ree four');.}..d
11e0: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34  o_execsql_test 4
11f0: 2e 32 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20  .2.2 {.  SELECT 
1200: 72 6f 77 69 64 20 46 52 4f 4d 20 78 78 20 57 48  rowid FROM xx WH
1210: 45 52 45 20 78 78 20 4d 41 54 43 48 20 27 32 27  ERE xx MATCH '2'
1220: 0a 7d 20 7b 31 7d 0a 0a 64 6f 5f 65 78 65 63 73  .} {1}..do_execs
1230: 71 6c 5f 74 65 73 74 20 34 2e 32 2e 33 20 7b 0a  ql_test 4.2.3 {.
1240: 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46    SELECT rowid F
1250: 52 4f 4d 20 78 78 20 57 48 45 52 45 20 78 78 20  ROM xx WHERE xx 
1260: 4d 41 54 43 48 20 27 33 27 0a 7d 20 7b 32 7d 0a  MATCH '3'.} {2}.
1270: 0a 64 6f 5f 74 65 73 74 20 35 2e 30 20 7b 0a 20  .do_test 5.0 {. 
1280: 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20 20   execsql { .    
1290: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
12a0: 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20 66 74  ABLE t1 USING ft
12b0: 73 35 28 61 2c 20 62 2c 20 74 6f 6b 65 6e 69 7a  s5(a, b, tokeniz
12c0: 65 3d 74 63 6c 6e 75 6d 2c 20 64 65 74 61 69 6c  e=tclnum, detail
12d0: 3d 25 44 45 54 41 49 4c 25 29 0a 20 20 7d 0a 20  =%DETAIL%).  }. 
12e0: 20 66 6f 72 65 61 63 68 20 7b 72 6f 77 69 64 20   foreach {rowid 
12f0: 61 20 62 7d 20 7b 0a 20 20 20 20 31 20 7b 66 6f  a b} {.    1 {fo
1300: 75 72 20 76 20 34 20 69 20 74 68 72 65 65 7d 20  ur v 4 i three} 
1310: 7b 31 20 33 20 66 69 76 65 20 66 69 76 65 20 34  {1 3 five five 4
1320: 20 6f 6e 65 7d 0a 20 20 20 20 32 20 7b 35 20 31   one}.    2 {5 1
1330: 20 33 20 34 20 69 7d 20 7b 32 20 32 20 76 20 74   3 4 i} {2 2 v t
1340: 77 6f 20 34 7d 0a 20 20 20 20 33 20 7b 35 20 69  wo 4}.    3 {5 i
1350: 20 35 20 32 20 66 6f 75 72 20 34 20 31 7d 20 7b   5 2 four 4 1} {
1360: 69 69 69 20 69 69 20 66 69 76 65 20 74 77 6f 20  iii ii five two 
1370: 31 7d 0a 20 20 20 20 34 20 7b 69 69 20 66 6f 75  1}.    4 {ii fou
1380: 72 20 34 20 6f 6e 65 20 35 20 74 68 72 65 65 20  r 4 one 5 three 
1390: 66 69 76 65 7d 20 7b 6f 6e 65 20 35 20 31 20 69  five} {one 5 1 i
13a0: 69 69 20 34 20 33 7d 0a 20 20 20 20 35 20 7b 74  ii 4 3}.    5 {t
13b0: 68 72 65 65 20 69 20 76 20 69 20 66 6f 75 72 20  hree i v i four 
13c0: 34 20 31 7d 20 7b 69 69 20 66 69 76 65 20 66 69  4 1} {ii five fi
13d0: 76 65 20 66 69 76 65 20 69 69 69 7d 0a 20 20 20  ve five iii}.   
13e0: 20 36 20 7b 34 20 32 20 69 69 20 74 77 6f 20 32   6 {4 2 ii two 2
13f0: 20 69 69 69 7d 20 7b 74 68 72 65 65 20 31 20 66   iii} {three 1 f
1400: 6f 75 72 20 34 20 69 76 20 31 20 69 76 7d 0a 20  our 4 iv 1 iv}. 
1410: 20 20 20 37 20 7b 69 69 20 69 69 20 74 77 6f 20     7 {ii ii two 
1420: 74 68 72 65 65 20 32 20 35 7d 20 7b 69 69 69 20  three 2 5} {iii 
1430: 69 20 69 69 20 69 69 69 20 69 69 69 20 6f 6e 65  i ii iii iii one
1440: 20 6f 6e 65 7d 0a 20 20 20 20 38 20 7b 32 20 69   one}.    8 {2 i
1450: 69 20 69 20 74 77 6f 20 33 20 74 68 72 65 65 20  i i two 3 three 
1460: 32 7d 20 7b 74 77 6f 20 69 76 20 76 20 69 69 69  2} {two iv v iii
1470: 20 33 20 66 69 76 65 7d 0a 20 20 20 20 39 20 7b   3 five}.    9 {
1480: 69 20 32 20 69 76 20 33 20 66 69 76 65 20 66 6f  i 2 iv 3 five fo
1490: 75 72 20 76 7d 20 7b 69 69 69 20 34 20 74 68 72  ur v} {iii 4 thr
14a0: 65 65 20 69 20 74 68 72 65 65 20 69 69 20 31 7d  ee i three ii 1}
14b0: 0a 20 20 7d 20 7b 0a 20 20 20 20 65 78 65 63 73  .  } {.    execs
14c0: 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54 4f  ql { INSERT INTO
14d0: 20 74 31 28 72 6f 77 69 64 2c 20 61 2c 20 62 29   t1(rowid, a, b)
14e0: 20 56 41 4c 55 45 53 28 24 72 6f 77 69 64 2c 20   VALUES($rowid, 
14f0: 24 61 2c 20 24 62 29 20 7d 0a 20 20 7d 0a 7d 20  $a, $b) }.  }.} 
1500: 7b 7d 0a 0a 0a 66 6f 72 65 61 63 68 20 7b 74 6e  {}...foreach {tn
1510: 20 71 20 72 65 73 7d 20 7b 0a 20 20 31 20 7b 6f   q res} {.  1 {o
1520: 6e 65 7d 20 7b 0a 20 20 20 20 31 20 7b 66 6f 75  ne} {.    1 {fou
1530: 72 20 76 20 34 20 5b 69 5d 20 74 68 72 65 65 7d  r v 4 [i] three}
1540: 20 7b 5b 31 5d 20 33 20 66 69 76 65 20 66 69 76   {[1] 3 five fiv
1550: 65 20 34 20 5b 6f 6e 65 5d 7d 0a 20 20 20 20 32  e 4 [one]}.    2
1560: 20 7b 35 20 5b 31 5d 20 33 20 34 20 5b 69 5d 7d   {5 [1] 3 4 [i]}
1570: 20 7b 32 20 32 20 76 20 74 77 6f 20 34 7d 0a 20   {2 2 v two 4}. 
1580: 20 20 20 33 20 7b 35 20 5b 69 5d 20 35 20 32 20     3 {5 [i] 5 2 
1590: 66 6f 75 72 20 34 20 5b 31 5d 7d 20 7b 69 69 69  four 4 [1]} {iii
15a0: 20 69 69 20 66 69 76 65 20 74 77 6f 20 5b 31 5d   ii five two [1]
15b0: 7d 0a 20 20 20 20 34 20 7b 69 69 20 66 6f 75 72  }.    4 {ii four
15c0: 20 34 20 5b 6f 6e 65 5d 20 35 20 74 68 72 65 65   4 [one] 5 three
15d0: 20 66 69 76 65 7d 20 7b 5b 6f 6e 65 5d 20 35 20   five} {[one] 5 
15e0: 5b 31 5d 20 69 69 69 20 34 20 33 7d 0a 20 20 20  [1] iii 4 3}.   
15f0: 20 35 20 7b 74 68 72 65 65 20 5b 69 5d 20 76 20   5 {three [i] v 
1600: 5b 69 5d 20 66 6f 75 72 20 34 20 5b 31 5d 7d 20  [i] four 4 [1]} 
1610: 7b 69 69 20 66 69 76 65 20 66 69 76 65 20 66 69  {ii five five fi
1620: 76 65 20 69 69 69 7d 0a 20 20 20 20 36 20 7b 34  ve iii}.    6 {4
1630: 20 32 20 69 69 20 74 77 6f 20 32 20 69 69 69 7d   2 ii two 2 iii}
1640: 20 7b 74 68 72 65 65 20 5b 31 5d 20 66 6f 75 72   {three [1] four
1650: 20 34 20 69 76 20 5b 31 5d 20 69 76 7d 0a 20 20   4 iv [1] iv}.  
1660: 20 20 37 20 7b 69 69 20 69 69 20 74 77 6f 20 74    7 {ii ii two t
1670: 68 72 65 65 20 32 20 35 7d 20 7b 69 69 69 20 5b  hree 2 5} {iii [
1680: 69 5d 20 69 69 20 69 69 69 20 69 69 69 20 5b 6f  i] ii iii iii [o
1690: 6e 65 5d 20 5b 6f 6e 65 5d 7d 0a 20 20 20 20 38  ne] [one]}.    8
16a0: 20 7b 32 20 69 69 20 5b 69 5d 20 74 77 6f 20 33   {2 ii [i] two 3
16b0: 20 74 68 72 65 65 20 32 7d 20 7b 74 77 6f 20 69   three 2} {two i
16c0: 76 20 76 20 69 69 69 20 33 20 66 69 76 65 7d 0a  v v iii 3 five}.
16d0: 20 20 20 20 39 20 7b 5b 69 5d 20 32 20 69 76 20      9 {[i] 2 iv 
16e0: 33 20 66 69 76 65 20 66 6f 75 72 20 76 7d 20 7b  3 five four v} {
16f0: 69 69 69 20 34 20 74 68 72 65 65 20 5b 69 5d 20  iii 4 three [i] 
1700: 74 68 72 65 65 20 69 69 20 5b 31 5d 7d 0a 20 20  three ii [1]}.  
1710: 7d 0a 20 20 32 20 7b 66 69 76 65 20 66 6f 75 72  }.  2 {five four
1720: 7d 20 7b 0a 20 20 20 20 31 20 7b 5b 66 6f 75 72  } {.    1 {[four
1730: 5d 20 5b 76 5d 20 5b 34 5d 20 69 20 74 68 72 65  ] [v] [4] i thre
1740: 65 7d 20 7b 31 20 33 20 5b 66 69 76 65 5d 20 5b  e} {1 3 [five] [
1750: 66 69 76 65 5d 20 5b 34 5d 20 6f 6e 65 7d 0a 20  five] [4] one}. 
1760: 20 20 20 32 20 7b 5b 35 5d 20 31 20 33 20 5b 34     2 {[5] 1 3 [4
1770: 5d 20 69 7d 20 7b 32 20 32 20 5b 76 5d 20 74 77  ] i} {2 2 [v] tw
1780: 6f 20 5b 34 5d 7d 0a 20 20 20 20 33 20 7b 5b 35  o [4]}.    3 {[5
1790: 5d 20 69 20 5b 35 5d 20 32 20 5b 66 6f 75 72 5d  ] i [5] 2 [four]
17a0: 20 5b 34 5d 20 31 7d 20 7b 69 69 69 20 69 69 20   [4] 1} {iii ii 
17b0: 5b 66 69 76 65 5d 20 74 77 6f 20 31 7d 0a 20 20  [five] two 1}.  
17c0: 20 20 34 20 7b 69 69 20 5b 66 6f 75 72 5d 20 5b    4 {ii [four] [
17d0: 34 5d 20 6f 6e 65 20 5b 35 5d 20 74 68 72 65 65  4] one [5] three
17e0: 20 5b 66 69 76 65 5d 7d 20 7b 6f 6e 65 20 5b 35   [five]} {one [5
17f0: 5d 20 31 20 69 69 69 20 5b 34 5d 20 33 7d 0a 20  ] 1 iii [4] 3}. 
1800: 20 20 20 35 20 7b 74 68 72 65 65 20 69 20 5b 76     5 {three i [v
1810: 5d 20 69 20 5b 66 6f 75 72 5d 20 5b 34 5d 20 31  ] i [four] [4] 1
1820: 7d 20 7b 69 69 20 5b 66 69 76 65 5d 20 5b 66 69  } {ii [five] [fi
1830: 76 65 5d 20 5b 66 69 76 65 5d 20 69 69 69 7d 0a  ve] [five] iii}.
1840: 20 20 20 20 38 20 7b 32 20 69 69 20 69 20 74 77      8 {2 ii i tw
1850: 6f 20 33 20 74 68 72 65 65 20 32 7d 20 7b 74 77  o 3 three 2} {tw
1860: 6f 20 5b 69 76 5d 20 5b 76 5d 20 69 69 69 20 33  o [iv] [v] iii 3
1870: 20 5b 66 69 76 65 5d 7d 0a 20 20 20 20 39 20 7b   [five]}.    9 {
1880: 69 20 32 20 5b 69 76 5d 20 33 20 5b 66 69 76 65  i 2 [iv] 3 [five
1890: 5d 20 5b 66 6f 75 72 5d 20 5b 76 5d 7d 20 7b 69  ] [four] [v]} {i
18a0: 69 69 20 5b 34 5d 20 74 68 72 65 65 20 69 20 74  ii [4] three i t
18b0: 68 72 65 65 20 69 69 20 31 7d 0a 20 20 7d 0a 20  hree ii 1}.  }. 
18c0: 20 33 20 7b 6f 6e 65 20 4f 52 20 74 77 6f 20 4f   3 {one OR two O
18d0: 52 20 69 69 69 20 4f 52 20 34 20 4f 52 20 76 7d  R iii OR 4 OR v}
18e0: 20 7b 0a 20 20 20 20 31 20 7b 5b 66 6f 75 72 5d   {.    1 {[four]
18f0: 20 5b 76 5d 20 5b 34 5d 20 5b 69 5d 20 5b 74 68   [v] [4] [i] [th
1900: 72 65 65 5d 7d 20 7b 5b 31 5d 20 5b 33 5d 20 5b  ree]} {[1] [3] [
1910: 66 69 76 65 5d 20 5b 66 69 76 65 5d 20 5b 34 5d  five] [five] [4]
1920: 20 5b 6f 6e 65 5d 7d 0a 20 20 20 20 32 20 7b 5b   [one]}.    2 {[
1930: 35 5d 20 5b 31 5d 20 5b 33 5d 20 5b 34 5d 20 5b  5] [1] [3] [4] [
1940: 69 5d 7d 20 7b 5b 32 5d 20 5b 32 5d 20 5b 76 5d  i]} {[2] [2] [v]
1950: 20 5b 74 77 6f 5d 20 5b 34 5d 7d 0a 20 20 20 20   [two] [4]}.    
1960: 33 20 7b 5b 35 5d 20 5b 69 5d 20 5b 35 5d 20 5b  3 {[5] [i] [5] [
1970: 32 5d 20 5b 66 6f 75 72 5d 20 5b 34 5d 20 5b 31  2] [four] [4] [1
1980: 5d 7d 20 7b 5b 69 69 69 5d 20 5b 69 69 5d 20 5b  ]} {[iii] [ii] [
1990: 66 69 76 65 5d 20 5b 74 77 6f 5d 20 5b 31 5d 7d  five] [two] [1]}
19a0: 0a 20 20 20 20 34 20 7b 5b 69 69 5d 20 5b 66 6f  .    4 {[ii] [fo
19b0: 75 72 5d 20 5b 34 5d 20 5b 6f 6e 65 5d 20 5b 35  ur] [4] [one] [5
19c0: 5d 20 5b 74 68 72 65 65 5d 20 5b 66 69 76 65 5d  ] [three] [five]
19d0: 7d 20 7b 5b 6f 6e 65 5d 20 5b 35 5d 20 5b 31 5d  } {[one] [5] [1]
19e0: 20 5b 69 69 69 5d 20 5b 34 5d 20 5b 33 5d 7d 0a   [iii] [4] [3]}.
19f0: 20 20 20 20 35 20 7b 5b 74 68 72 65 65 5d 20 5b      5 {[three] [
1a00: 69 5d 20 5b 76 5d 20 5b 69 5d 20 5b 66 6f 75 72  i] [v] [i] [four
1a10: 5d 20 5b 34 5d 20 5b 31 5d 7d 20 7b 5b 69 69 5d  ] [4] [1]} {[ii]
1a20: 20 5b 66 69 76 65 5d 20 5b 66 69 76 65 5d 20 5b   [five] [five] [
1a30: 66 69 76 65 5d 20 5b 69 69 69 5d 7d 0a 20 20 20  five] [iii]}.   
1a40: 20 36 20 7b 5b 34 5d 20 5b 32 5d 20 5b 69 69 5d   6 {[4] [2] [ii]
1a50: 20 5b 74 77 6f 5d 20 5b 32 5d 20 5b 69 69 69 5d   [two] [2] [iii]
1a60: 7d 20 7b 5b 74 68 72 65 65 5d 20 5b 31 5d 20 5b  } {[three] [1] [
1a70: 66 6f 75 72 5d 20 5b 34 5d 20 5b 69 76 5d 20 5b  four] [4] [iv] [
1a80: 31 5d 20 5b 69 76 5d 7d 0a 20 20 20 20 37 20 7b  1] [iv]}.    7 {
1a90: 5b 69 69 5d 20 5b 69 69 5d 20 5b 74 77 6f 5d 20  [ii] [ii] [two] 
1aa0: 5b 74 68 72 65 65 5d 20 5b 32 5d 20 5b 35 5d 7d  [three] [2] [5]}
1ab0: 20 7b 5b 69 69 69 5d 20 5b 69 5d 20 5b 69 69 5d   {[iii] [i] [ii]
1ac0: 20 5b 69 69 69 5d 20 5b 69 69 69 5d 20 5b 6f 6e   [iii] [iii] [on
1ad0: 65 5d 20 5b 6f 6e 65 5d 7d 0a 20 20 20 20 38 20  e] [one]}.    8 
1ae0: 7b 5b 32 5d 20 5b 69 69 5d 20 5b 69 5d 20 5b 74  {[2] [ii] [i] [t
1af0: 77 6f 5d 20 5b 33 5d 20 5b 74 68 72 65 65 5d 20  wo] [3] [three] 
1b00: 5b 32 5d 7d 20 7b 5b 74 77 6f 5d 20 5b 69 76 5d  [2]} {[two] [iv]
1b10: 20 5b 76 5d 20 5b 69 69 69 5d 20 5b 33 5d 20 5b   [v] [iii] [3] [
1b20: 66 69 76 65 5d 7d 0a 20 20 20 20 39 20 7b 5b 69  five]}.    9 {[i
1b30: 5d 20 5b 32 5d 20 5b 69 76 5d 20 5b 33 5d 20 5b  ] [2] [iv] [3] [
1b40: 66 69 76 65 5d 20 5b 66 6f 75 72 5d 20 5b 76 5d  five] [four] [v]
1b50: 7d 20 7b 5b 69 69 69 5d 20 5b 34 5d 20 5b 74 68  } {[iii] [4] [th
1b60: 72 65 65 5d 20 5b 69 5d 20 5b 74 68 72 65 65 5d  ree] [i] [three]
1b70: 20 5b 69 69 5d 20 5b 31 5d 7d 0a 20 20 7d 0a 0a   [ii] [1]}.  }..
1b80: 20 20 34 20 7b 35 20 2b 20 31 7d 20 7b 0a 20 20    4 {5 + 1} {.  
1b90: 20 20 32 20 7b 5b 35 20 31 5d 20 33 20 34 20 69    2 {[5 1] 3 4 i
1ba0: 7d 20 7b 32 20 32 20 76 20 74 77 6f 20 34 7d 20  } {2 2 v two 4} 
1bb0: 0a 20 20 20 20 33 20 7b 5b 35 20 69 5d 20 35 20  .    3 {[5 i] 5 
1bc0: 32 20 66 6f 75 72 20 34 20 31 7d 20 7b 69 69 69  2 four 4 1} {iii
1bd0: 20 69 69 20 66 69 76 65 20 74 77 6f 20 31 7d 20   ii five two 1} 
1be0: 0a 20 20 20 20 34 20 7b 69 69 20 66 6f 75 72 20  .    4 {ii four 
1bf0: 34 20 6f 6e 65 20 35 20 74 68 72 65 65 20 66 69  4 one 5 three fi
1c00: 76 65 7d 20 7b 6f 6e 65 20 5b 35 20 31 5d 20 69  ve} {one [5 1] i
1c10: 69 69 20 34 20 33 7d 20 0a 20 20 20 20 35 20 7b  ii 4 3} .    5 {
1c20: 74 68 72 65 65 20 69 20 5b 76 20 69 5d 20 66 6f  three i [v i] fo
1c30: 75 72 20 34 20 31 7d 20 7b 69 69 20 66 69 76 65  ur 4 1} {ii five
1c40: 20 66 69 76 65 20 66 69 76 65 20 69 69 69 7d 0a   five five iii}.
1c50: 20 20 7d 0a 0a 20 20 35 20 7b 6f 6e 65 20 2b 20    }..  5 {one + 
1c60: 74 77 6f 20 2b 20 74 68 72 65 65 7d 20 7b 0a 20  two + three} {. 
1c70: 20 20 20 37 20 7b 69 69 20 69 69 20 74 77 6f 20     7 {ii ii two 
1c80: 74 68 72 65 65 20 32 20 35 7d 20 7b 69 69 69 20  three 2 5} {iii 
1c90: 5b 69 20 69 69 20 69 69 69 5d 20 69 69 69 20 6f  [i ii iii] iii o
1ca0: 6e 65 20 6f 6e 65 7d 0a 20 20 20 20 38 20 7b 32  ne one}.    8 {2
1cb0: 20 69 69 20 5b 69 20 74 77 6f 20 33 5d 20 74 68   ii [i two 3] th
1cc0: 72 65 65 20 32 7d 20 7b 74 77 6f 20 69 76 20 76  ree 2} {two iv v
1cd0: 20 69 69 69 20 33 20 66 69 76 65 7d 0a 20 20 7d   iii 3 five}.  }
1ce0: 0a 0a 20 20 36 20 7b 22 76 20 76 22 7d 20 7b 0a  ..  6 {"v v"} {.
1cf0: 20 20 20 20 31 20 7b 66 6f 75 72 20 76 20 34 20      1 {four v 4 
1d00: 69 20 74 68 72 65 65 7d 20 7b 31 20 33 20 5b 66  i three} {1 3 [f
1d10: 69 76 65 20 66 69 76 65 5d 20 34 20 6f 6e 65 7d  ive five] 4 one}
1d20: 0a 20 20 20 20 35 20 7b 74 68 72 65 65 20 69 20  .    5 {three i 
1d30: 76 20 69 20 66 6f 75 72 20 34 20 31 7d 20 7b 69  v i four 4 1} {i
1d40: 69 20 5b 66 69 76 65 20 66 69 76 65 20 66 69 76  i [five five fiv
1d50: 65 5d 20 69 69 69 7d 0a 20 20 7d 0a 7d 20 7b 0a  e] iii}.  }.} {.
1d60: 20 20 69 66 20 7b 21 5b 66 74 73 35 5f 65 78 70    if {![fts5_exp
1d70: 72 5f 6f 6b 20 24 71 20 74 31 5d 7d 20 63 6f 6e  r_ok $q t1]} con
1d80: 74 69 6e 75 65 0a 20 20 64 6f 5f 65 78 65 63 73  tinue.  do_execs
1d90: 71 6c 5f 74 65 73 74 20 35 2e 31 2e 24 74 6e 20  ql_test 5.1.$tn 
1da0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77  {.    SELECT row
1db0: 69 64 2c 20 68 69 67 68 6c 69 67 68 74 28 74 31  id, highlight(t1
1dc0: 2c 20 30 2c 20 27 5b 27 2c 20 27 5d 27 29 2c 20  , 0, '[', ']'), 
1dd0: 68 69 67 68 6c 69 67 68 74 28 74 31 2c 20 31 2c  highlight(t1, 1,
1de0: 20 27 5b 27 2c 20 27 5d 27 29 0a 20 20 20 20 46   '[', ']').    F
1df0: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 20  ROM t1 WHERE t1 
1e00: 4d 41 54 43 48 20 24 71 0a 20 20 7d 20 24 72 65  MATCH $q.  } $re
1e10: 73 0a 7d 0a 0a 23 20 54 65 73 74 20 74 68 61 74  s.}..# Test that
1e20: 20 74 68 65 20 78 51 75 65 72 79 50 68 72 61 73   the xQueryPhras
1e30: 65 28 29 20 41 50 49 20 77 6f 72 6b 73 20 77 69  e() API works wi
1e40: 74 68 20 73 79 6e 6f 6e 79 6d 73 2e 0a 23 0a 70  th synonyms..#.p
1e50: 72 6f 63 20 6d 69 74 20 7b 62 6c 6f 62 7d 20 7b  roc mit {blob} {
1e60: 0a 20 20 73 65 74 20 73 63 61 6e 28 6c 69 74 74  .  set scan(litt
1e70: 6c 65 45 6e 64 69 61 6e 29 20 69 2a 0a 20 20 73  leEndian) i*.  s
1e80: 65 74 20 73 63 61 6e 28 62 69 67 45 6e 64 69 61  et scan(bigEndia
1e90: 6e 29 20 49 2a 0a 20 20 62 69 6e 61 72 79 20 73  n) I*.  binary s
1ea0: 63 61 6e 20 24 62 6c 6f 62 20 24 73 63 61 6e 28  can $blob $scan(
1eb0: 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28  $::tcl_platform(
1ec0: 62 79 74 65 4f 72 64 65 72 29 29 20 72 0a 20 20  byteOrder)) r.  
1ed0: 72 65 74 75 72 6e 20 24 72 0a 7d 0a 64 62 20 66  return $r.}.db f
1ee0: 75 6e 63 20 6d 69 74 20 6d 69 74 0a 73 71 6c 69  unc mit mit.sqli
1ef0: 74 65 33 5f 66 74 73 35 5f 72 65 67 69 73 74 65  te3_fts5_registe
1f00: 72 5f 6d 61 74 63 68 69 6e 66 6f 20 64 62 0a 0a  r_matchinfo db..
1f10: 66 6f 72 65 61 63 68 20 7b 74 6e 20 71 20 72 65  foreach {tn q re
1f20: 73 7d 20 7b 0a 20 20 31 20 7b 6f 6e 65 7d 20 7b  s} {.  1 {one} {
1f30: 0a 20 20 20 20 20 20 31 20 7b 31 20 31 31 20 37  .      1 {1 11 7
1f40: 20 32 20 31 32 20 36 7d 20 20 20 20 20 32 20 7b   2 12 6}     2 {
1f50: 32 20 31 31 20 37 20 30 20 31 32 20 36 7d 20 0a  2 11 7 0 12 6} .
1f60: 20 20 20 20 20 20 33 20 7b 32 20 31 31 20 37 20        3 {2 11 7 
1f70: 31 20 31 32 20 36 7d 20 20 20 20 20 34 20 7b 31  1 12 6}     4 {1
1f80: 20 31 31 20 37 20 32 20 31 32 20 36 7d 20 0a 20   11 7 2 12 6} . 
1f90: 20 20 20 20 20 35 20 7b 33 20 31 31 20 37 20 30       5 {3 11 7 0
1fa0: 20 31 32 20 36 7d 20 20 20 20 20 36 20 7b 30 20   12 6}     6 {0 
1fb0: 31 31 20 37 20 32 20 31 32 20 36 7d 20 0a 20 20  11 7 2 12 6} .  
1fc0: 20 20 20 20 37 20 7b 30 20 31 31 20 37 20 33 20      7 {0 11 7 3 
1fd0: 31 32 20 36 7d 20 20 20 20 20 38 20 7b 31 20 31  12 6}     8 {1 1
1fe0: 31 20 37 20 30 20 31 32 20 36 7d 20 0a 20 20 20  1 7 0 12 6} .   
1ff0: 20 20 20 39 20 7b 31 20 31 31 20 37 20 32 20 31     9 {1 11 7 2 1
2000: 32 20 36 7d 0a 20 20 7d 0a 7d 20 7b 0a 20 20 64  2 6}.  }.} {.  d
2010: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35  o_execsql_test 5
2020: 2e 32 2e 24 74 6e 20 7b 0a 20 20 20 20 53 45 4c  .2.$tn {.    SEL
2030: 45 43 54 20 72 6f 77 69 64 2c 20 6d 69 74 28 6d  ECT rowid, mit(m
2040: 61 74 63 68 69 6e 66 6f 28 74 31 2c 20 27 78 27  atchinfo(t1, 'x'
2050: 29 29 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45  )) FROM t1 WHERE
2060: 20 74 31 20 4d 41 54 43 48 20 24 71 0a 20 20 7d   t1 MATCH $q.  }
2070: 20 24 72 65 73 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d   $res.}..#------
2080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
20a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
20b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
20c0: 2d 2d 2d 0a 23 20 54 65 73 74 20 74 65 72 6d 73  ---.# Test terms
20d0: 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20   with more than 
20e0: 34 20 73 79 6e 6f 6e 79 6d 73 2e 0a 23 0a 72 65  4 synonyms..#.re
20f0: 73 65 74 5f 64 62 0a 73 71 6c 69 74 65 33 5f 66  set_db.sqlite3_f
2100: 74 73 35 5f 63 72 65 61 74 65 5f 74 6f 6b 65 6e  ts5_create_token
2110: 69 7a 65 72 20 64 62 20 74 63 6c 20 74 63 6c 5f  izer db tcl tcl_
2120: 63 72 65 61 74 65 0a 70 72 6f 63 20 74 63 6c 5f  create.proc tcl_
2130: 74 6f 6b 65 6e 69 7a 65 20 7b 74 66 6c 61 67 73  tokenize {tflags
2140: 20 74 65 78 74 7d 20 7b 0a 20 20 66 6f 72 65 61   text} {.  forea
2150: 63 68 20 7b 77 20 69 53 74 61 72 74 20 69 45 6e  ch {w iStart iEn
2160: 64 7d 20 5b 66 74 73 35 5f 74 6f 6b 65 6e 69 7a  d} [fts5_tokeniz
2170: 65 5f 73 70 6c 69 74 20 24 74 65 78 74 5d 20 7b  e_split $text] {
2180: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 66 74 73  .    sqlite3_fts
2190: 35 5f 74 6f 6b 65 6e 20 24 77 20 24 69 53 74 61  5_token $w $iSta
21a0: 72 74 20 24 69 45 6e 64 0a 20 20 20 20 69 66 20  rt $iEnd.    if 
21b0: 7b 24 74 66 6c 61 67 73 3d 3d 22 71 75 65 72 79  {$tflags=="query
21c0: 22 20 26 26 20 5b 73 74 72 69 6e 67 20 6c 65 6e  " && [string len
21d0: 67 74 68 20 24 77 5d 3d 3d 31 7d 20 7b 0a 20 20  gth $w]==1} {.  
21e0: 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 20 32      for {set i 2
21f0: 7d 20 7b 24 69 3c 3d 31 30 7d 20 7b 69 6e 63 72  } {$i<=10} {incr
2200: 20 69 7d 20 7b 0a 20 20 20 20 20 20 20 20 73 71   i} {.        sq
2210: 6c 69 74 65 33 5f 66 74 73 35 5f 74 6f 6b 65 6e  lite3_fts5_token
2220: 20 2d 63 6f 6c 6f 20 5b 73 74 72 69 6e 67 20 72   -colo [string r
2230: 65 70 65 61 74 20 24 77 20 24 69 5d 20 24 69 53  epeat $w $i] $iS
2240: 74 61 72 74 20 24 69 45 6e 64 0a 20 20 20 20 20  tart $iEnd.     
2250: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 0a   }.    }.  }.}..
2260: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
2270: 36 2e 30 2e 31 20 7b 0a 20 20 43 52 45 41 54 45  6.0.1 {.  CREATE
2280: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74   VIRTUAL TABLE t
2290: 31 20 55 53 49 4e 47 20 66 74 73 35 28 78 2c 20  1 USING fts5(x, 
22a0: 74 6f 6b 65 6e 69 7a 65 3d 74 63 6c 2c 20 64 65  tokenize=tcl, de
22b0: 74 61 69 6c 3d 25 44 45 54 41 49 4c 25 29 3b 0a  tail=%DETAIL%);.
22c0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
22d0: 20 56 41 4c 55 45 53 28 27 79 79 20 78 78 20 71   VALUES('yy xx q
22e0: 71 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  q');.  INSERT IN
22f0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 79 79  TO t1 VALUES('yy
2300: 20 78 78 20 78 78 27 29 3b 0a 7d 0a 69 66 20 7b   xx xx');.}.if {
2310: 5b 66 74 73 35 5f 65 78 70 72 5f 6f 6b 20 22 4e  [fts5_expr_ok "N
2320: 45 41 52 28 79 20 71 29 22 20 74 31 5d 7d 20 7b  EAR(y q)" t1]} {
2330: 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .  do_execsql_te
2340: 73 74 20 36 2e 30 2e 32 20 7b 0a 20 20 20 20 53  st 6.0.2 {.    S
2350: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 31 20  ELECT * FROM t1 
2360: 57 48 45 52 45 20 74 31 20 4d 41 54 43 48 20 27  WHERE t1 MATCH '
2370: 4e 45 41 52 28 79 20 71 29 27 3b 0a 20 20 7d 20  NEAR(y q)';.  } 
2380: 7b 7b 79 79 20 78 78 20 71 71 7d 7d 0a 7d 0a 0a  {{yy xx qq}}.}..
2390: 64 6f 5f 74 65 73 74 20 36 2e 30 2e 33 20 7b 0a  do_test 6.0.3 {.
23a0: 20 20 65 78 65 63 73 71 6c 20 7b 20 0a 20 20 20    execsql { .   
23b0: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
23c0: 54 41 42 4c 45 20 74 32 20 55 53 49 4e 47 20 66  TABLE t2 USING f
23d0: 74 73 35 28 61 2c 20 62 2c 20 74 6f 6b 65 6e 69  ts5(a, b, tokeni
23e0: 7a 65 3d 74 63 6c 2c 20 64 65 74 61 69 6c 3d 25  ze=tcl, detail=%
23f0: 44 45 54 41 49 4c 25 29 0a 20 20 7d 0a 20 20 66  DETAIL%).  }.  f
2400: 6f 72 65 61 63 68 20 7b 72 6f 77 69 64 20 61 20  oreach {rowid a 
2410: 62 7d 20 7b 0a 20 20 20 20 31 20 7b 79 79 79 79  b} {.    1 {yyyy
2420: 20 76 76 76 76 76 20 71 71 20 6f 6f 20 79 79 79   vvvvv qq oo yyy
2430: 79 79 79 20 76 76 76 76 20 65 65 65 7d 20 7b 66  yyy vvvv eee} {f
2440: 66 66 66 20 75 75 20 72 20 71 71 20 61 61 61 61  fff uu r qq aaaa
2450: 7d 0a 20 20 20 20 32 20 7b 77 77 20 6f 6f 6f 6f  }.    2 {ww oooo
2460: 6f 6f 20 62 62 62 62 62 20 73 73 73 73 73 73 20  oo bbbbb ssssss 
2470: 6d 6d 7d 20 7b 66 66 66 66 66 66 20 79 79 20 69  mm} {ffffff yy i
2480: 69 69 69 20 72 72 20 73 20 63 63 63 20 71 71 71  iii rr s ccc qqq
2490: 71 71 7d 0a 20 20 20 20 33 20 7b 7a 7a 7a 7a 20  qq}.    3 {zzzz 
24a0: 6c 6c 6c 6c 20 67 67 67 67 67 67 20 63 63 63 63  llll gggggg cccc
24b0: 20 75 75 7d 20 7b 68 68 68 68 68 68 20 61 61 61   uu} {hhhhhh aaa
24c0: 61 20 70 70 70 70 70 20 72 72 20 65 65 20 6a 6a  a ppppp rr ee jj
24d0: 6a 6a 7d 0a 20 20 20 20 34 20 7b 72 20 66 20 69  jj}.    4 {r f i
24e0: 20 72 72 72 72 72 72 20 77 77 20 68 68 68 7d 20   rrrrrr ww hhh} 
24f0: 7b 61 61 20 79 79 79 20 74 20 78 20 61 61 61 61  {aa yyy t x aaaa
2500: 61 20 69 69 7d 0a 20 20 20 20 35 20 7b 66 66 66  a ii}.    5 {fff
2510: 66 66 20 6d 6d 20 76 76 76 76 20 6f 6f 6f 20 66  ff mm vvvv ooo f
2520: 66 66 66 66 66 20 6b 6b 6b 6b 20 74 74 74 74 7d  fffff kkkk tttt}
2530: 20 7b 63 63 63 63 63 63 20 62 62 20 65 20 7a 7a   {cccccc bb e zz
2540: 7a 20 64 20 6e 7d 0a 20 20 20 20 36 20 7b 69 69  z d n}.    6 {ii
2550: 69 20 64 64 64 64 20 68 68 20 71 71 71 71 20 64  i dddd hh qqqq d
2560: 64 64 20 6f 6f 6f 7d 20 7b 74 74 74 20 64 20 63  dd ooo} {ttt d c
2570: 20 62 20 61 61 61 61 61 61 20 71 71 71 71 7d 0a   b aaaaaa qqqq}.
2580: 20 20 20 20 37 20 7b 6a 6a 6a 6a 20 72 72 72 72      7 {jjjj rrrr
2590: 20 76 20 7a 7a 7a 7a 7a 20 75 20 74 74 20 74 7d   v zzzzz u tt t}
25a0: 20 7b 70 70 70 70 70 20 70 70 20 64 64 64 64 20   {ppppp pp dddd 
25b0: 6d 6d 20 68 68 68 20 75 75 75 7d 0a 20 20 20 20  mm hhh uuu}.    
25c0: 38 20 7b 67 67 67 67 20 72 72 72 72 72 72 20 6b  8 {gggg rrrrrr k
25d0: 6b 6b 6b 20 76 76 76 76 20 67 67 67 67 20 6a 6a  kkk vvvv gggg jj
25e0: 6a 6a 6a 6a 20 62 7d 20 7b 64 64 64 64 64 64 20  jjjj b} {dddddd 
25f0: 6a 6a 20 72 20 77 20 63 63 63 63 20 77 77 77 77  jj r w cccc wwww
2600: 77 77 20 73 73 7d 0a 20 20 20 20 39 20 7b 6b 6b  ww ss}.    9 {kk
2610: 6b 6b 6b 20 71 71 71 20 6f 6f 6f 6f 20 65 20 74  kkk qqq oooo e t
2620: 74 74 74 74 74 20 6d 6d 6d 7d 20 7b 65 20 73 73  ttttt mmm} {e ss
2630: 20 71 71 71 71 71 71 20 68 68 68 68 20 6c 6c 6c   qqqqqq hhhh lll
2640: 6c 6c 6c 20 67 67 7d 0a 20 20 7d 20 7b 0a 20 20  lll gg}.  } {.  
2650: 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45    execsql { INSE
2660: 52 54 20 49 4e 54 4f 20 74 32 28 72 6f 77 69 64  RT INTO t2(rowid
2670: 2c 20 61 2c 20 62 29 20 56 41 4c 55 45 53 28 24  , a, b) VALUES($
2680: 72 6f 77 69 64 2c 20 24 61 2c 20 24 62 29 20 7d  rowid, $a, $b) }
2690: 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 66 6f 72 65 61  .  }.} {}..forea
26a0: 63 68 20 7b 74 6e 20 71 20 72 65 73 7d 20 7b 0a  ch {tn q res} {.
26b0: 20 20 31 20 7b 61 7d 20 7b 0a 20 20 20 20 31 20    1 {a} {.    1 
26c0: 7b 79 79 79 79 20 76 76 76 76 76 20 71 71 20 6f  {yyyy vvvvv qq o
26d0: 6f 20 79 79 79 79 79 79 20 76 76 76 76 20 65 65  o yyyyyy vvvv ee
26e0: 65 7d 20 7b 66 66 66 66 20 75 75 20 72 20 71 71  e} {ffff uu r qq
26f0: 20 5b 61 61 61 61 5d 7d 0a 20 20 20 20 33 20 7b   [aaaa]}.    3 {
2700: 7a 7a 7a 7a 20 6c 6c 6c 6c 20 67 67 67 67 67 67  zzzz llll gggggg
2710: 20 63 63 63 63 20 75 75 7d 20 7b 68 68 68 68 68   cccc uu} {hhhhh
2720: 68 20 5b 61 61 61 61 5d 20 70 70 70 70 70 20 72  h [aaaa] ppppp r
2730: 72 20 65 65 20 6a 6a 6a 6a 7d 0a 20 20 20 20 34  r ee jjjj}.    4
2740: 20 7b 72 20 66 20 69 20 72 72 72 72 72 72 20 77   {r f i rrrrrr w
2750: 77 20 68 68 68 7d 20 7b 5b 61 61 5d 20 79 79 79  w hhh} {[aa] yyy
2760: 20 74 20 78 20 5b 61 61 61 61 61 5d 20 69 69 7d   t x [aaaaa] ii}
2770: 0a 20 20 20 20 36 20 7b 69 69 69 20 64 64 64 64  .    6 {iii dddd
2780: 20 68 68 20 71 71 71 71 20 64 64 64 20 6f 6f 6f   hh qqqq ddd ooo
2790: 7d 20 7b 74 74 74 20 64 20 63 20 62 20 5b 61 61  } {ttt d c b [aa
27a0: 61 61 61 61 5d 20 71 71 71 71 7d 0a 20 20 7d 0a  aaaa] qqqq}.  }.
27b0: 0a 20 20 32 20 7b 61 20 41 4e 44 20 71 7d 20 7b  .  2 {a AND q} {
27c0: 0a 20 20 20 20 31 20 7b 79 79 79 79 20 76 76 76  .    1 {yyyy vvv
27d0: 76 76 20 5b 71 71 5d 20 6f 6f 20 79 79 79 79 79  vv [qq] oo yyyyy
27e0: 79 20 76 76 76 76 20 65 65 65 7d 20 7b 66 66 66  y vvvv eee} {fff
27f0: 66 20 75 75 20 72 20 5b 71 71 5d 20 5b 61 61 61  f uu r [qq] [aaa
2800: 61 5d 7d 0a 20 20 20 20 36 20 7b 69 69 69 20 64  a]}.    6 {iii d
2810: 64 64 64 20 68 68 20 5b 71 71 71 71 5d 20 64 64  ddd hh [qqqq] dd
2820: 64 20 6f 6f 6f 7d 20 7b 74 74 74 20 64 20 63 20  d ooo} {ttt d c 
2830: 62 20 5b 61 61 61 61 61 61 5d 20 5b 71 71 71 71  b [aaaaaa] [qqqq
2840: 5d 7d 0a 20 20 7d 0a 0a 20 20 33 20 7b 6f 20 4f  ]}.  }..  3 {o O
2850: 52 20 28 71 20 41 4e 44 20 61 29 7d 20 7b 0a 20  R (q AND a)} {. 
2860: 20 20 20 31 20 7b 79 79 79 79 20 76 76 76 76 76     1 {yyyy vvvvv
2870: 20 5b 71 71 5d 20 5b 6f 6f 5d 20 79 79 79 79 79   [qq] [oo] yyyyy
2880: 79 20 76 76 76 76 20 65 65 65 7d 20 7b 66 66 66  y vvvv eee} {fff
2890: 66 20 75 75 20 72 20 5b 71 71 5d 20 5b 61 61 61  f uu r [qq] [aaa
28a0: 61 5d 7d 0a 20 20 20 20 32 20 7b 77 77 20 5b 6f  a]}.    2 {ww [o
28b0: 6f 6f 6f 6f 6f 5d 20 62 62 62 62 62 20 73 73 73  ooooo] bbbbb sss
28c0: 73 73 73 20 6d 6d 7d 20 7b 66 66 66 66 66 66 20  sss mm} {ffffff 
28d0: 79 79 20 69 69 69 69 20 72 72 20 73 20 63 63 63  yy iiii rr s ccc
28e0: 20 71 71 71 71 71 7d 0a 20 20 20 20 35 20 7b 66   qqqqq}.    5 {f
28f0: 66 66 66 66 20 6d 6d 20 76 76 76 76 20 5b 6f 6f  ffff mm vvvv [oo
2900: 6f 5d 20 66 66 66 66 66 66 20 6b 6b 6b 6b 20 74  o] ffffff kkkk t
2910: 74 74 74 7d 20 7b 63 63 63 63 63 63 20 62 62 20  ttt} {cccccc bb 
2920: 65 20 7a 7a 7a 20 64 20 6e 7d 0a 20 20 20 20 36  e zzz d n}.    6
2930: 20 7b 69 69 69 20 64 64 64 64 20 68 68 20 5b 71   {iii dddd hh [q
2940: 71 71 71 5d 20 64 64 64 20 5b 6f 6f 6f 5d 7d 20  qqq] ddd [ooo]} 
2950: 7b 74 74 74 20 64 20 63 20 62 20 5b 61 61 61 61  {ttt d c b [aaaa
2960: 61 61 5d 20 5b 71 71 71 71 5d 7d 0a 20 20 20 20  aa] [qqqq]}.    
2970: 39 20 7b 6b 6b 6b 6b 6b 20 71 71 71 20 5b 6f 6f  9 {kkkkk qqq [oo
2980: 6f 6f 5d 20 65 20 74 74 74 74 74 74 20 6d 6d 6d  oo] e tttttt mmm
2990: 7d 20 7b 65 20 73 73 20 71 71 71 71 71 71 20 68  } {e ss qqqqqq h
29a0: 68 68 68 20 6c 6c 6c 6c 6c 6c 20 67 67 7d 0a 20  hhh llllll gg}. 
29b0: 20 7d 0a 0a 20 20 34 20 7b 4e 45 41 52 28 71 20   }..  4 {NEAR(q 
29c0: 79 2c 20 32 30 29 7d 20 7b 0a 20 20 20 20 31 20  y, 20)} {.    1 
29d0: 7b 5b 79 79 79 79 5d 20 76 76 76 76 76 20 5b 71  {[yyyy] vvvvv [q
29e0: 71 5d 20 6f 6f 20 5b 79 79 79 79 79 79 5d 20 76  q] oo [yyyyyy] v
29f0: 76 76 76 20 65 65 65 7d 20 7b 66 66 66 66 20 75  vvv eee} {ffff u
2a00: 75 20 72 20 71 71 20 61 61 61 61 7d 0a 20 20 20  u r qq aaaa}.   
2a10: 20 32 20 7b 77 77 20 6f 6f 6f 6f 6f 6f 20 62 62   2 {ww oooooo bb
2a20: 62 62 62 20 73 73 73 73 73 73 20 6d 6d 7d 20 7b  bbb ssssss mm} {
2a30: 66 66 66 66 66 66 20 5b 79 79 5d 20 69 69 69 69  ffffff [yy] iiii
2a40: 20 72 72 20 73 20 63 63 63 20 5b 71 71 71 71 71   rr s ccc [qqqqq
2a50: 5d 7d 0a 20 20 7d 0a 7d 20 7b 0a 20 20 69 66 20  ]}.  }.} {.  if 
2a60: 7b 21 5b 66 74 73 35 5f 65 78 70 72 5f 6f 6b 20  {![fts5_expr_ok 
2a70: 24 71 20 74 32 5d 7d 20 63 6f 6e 74 69 6e 75 65  $q t2]} continue
2a80: 0a 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ..  do_execsql_t
2a90: 65 73 74 20 36 2e 31 2e 24 74 6e 2e 61 73 63 20  est 6.1.$tn.asc 
2aa0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77  {.    SELECT row
2ab0: 69 64 2c 20 68 69 67 68 6c 69 67 68 74 28 74 32  id, highlight(t2
2ac0: 2c 20 30 2c 20 27 5b 27 2c 20 27 5d 27 29 2c 20  , 0, '[', ']'), 
2ad0: 68 69 67 68 6c 69 67 68 74 28 74 32 2c 20 31 2c  highlight(t2, 1,
2ae0: 20 27 5b 27 2c 20 27 5d 27 29 0a 20 20 20 20 46   '[', ']').    F
2af0: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 74 32 20  ROM t2 WHERE t2 
2b00: 4d 41 54 43 48 20 24 71 0a 20 20 7d 20 24 72 65  MATCH $q.  } $re
2b10: 73 0a 0a 20 20 73 65 74 20 72 65 73 32 20 5b 6c  s..  set res2 [l
2b20: 69 73 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 7b  ist].  foreach {
2b30: 72 6f 77 69 64 20 61 20 62 7d 20 24 72 65 73 20  rowid a b} $res 
2b40: 7b 0a 20 20 20 20 73 65 74 20 72 65 73 32 20 5b  {.    set res2 [
2b50: 63 6f 6e 63 61 74 20 5b 6c 69 73 74 20 24 72 6f  concat [list $ro
2b60: 77 69 64 20 24 61 20 24 62 5d 20 24 72 65 73 32  wid $a $b] $res2
2b70: 5d 0a 20 20 7d 0a 0a 20 20 64 6f 5f 65 78 65 63  ].  }..  do_exec
2b80: 73 71 6c 5f 74 65 73 74 20 36 2e 31 2e 24 74 6e  sql_test 6.1.$tn
2b90: 2e 64 65 73 63 20 7b 0a 20 20 20 20 53 45 4c 45  .desc {.    SELE
2ba0: 43 54 20 72 6f 77 69 64 2c 20 68 69 67 68 6c 69  CT rowid, highli
2bb0: 67 68 74 28 74 32 2c 20 30 2c 20 27 5b 27 2c 20  ght(t2, 0, '[', 
2bc0: 27 5d 27 29 2c 20 68 69 67 68 6c 69 67 68 74 28  ']'), highlight(
2bd0: 74 32 2c 20 31 2c 20 27 5b 27 2c 20 27 5d 27 29  t2, 1, '[', ']')
2be0: 0a 20 20 20 20 46 52 4f 4d 20 74 32 20 57 48 45  .    FROM t2 WHE
2bf0: 52 45 20 74 32 20 4d 41 54 43 48 20 24 71 20 4f  RE t2 MATCH $q O
2c00: 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45  RDER BY rowid DE
2c10: 53 43 0a 20 20 7d 20 24 72 65 73 32 0a 7d 0a 0a  SC.  } $res2.}..
2c20: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
2c30: 36 2e 32 2e 31 20 7b 0a 20 20 49 4e 53 45 52 54  6.2.1 {.  INSERT
2c40: 20 49 4e 54 4f 20 74 32 28 72 6f 77 69 64 2c 20   INTO t2(rowid, 
2c50: 61 2c 20 62 29 20 56 41 4c 55 45 53 28 31 33 2c  a, b) VALUES(13,
2c60: 0a 20 20 20 20 20 20 27 78 20 78 78 20 78 78 78  .      'x xx xxx
2c70: 20 78 78 78 78 20 78 78 78 78 78 20 78 78 78 78   xxxx xxxxx xxxx
2c80: 78 78 20 78 78 78 78 78 78 78 27 2c 20 27 79 20  xx xxxxxxx', 'y 
2c90: 79 79 20 79 79 79 20 79 79 79 79 20 79 79 79 79  yy yyy yyyy yyyy
2ca0: 79 20 79 79 79 79 79 79 20 79 79 79 79 79 79 79  y yyyyyy yyyyyyy
2cb0: 27 0a 20 20 29 3b 0a 20 20 53 45 4c 45 43 54 20  '.  );.  SELECT 
2cc0: 72 6f 77 69 64 2c 20 68 69 67 68 6c 69 67 68 74  rowid, highlight
2cd0: 28 74 32 2c 20 30 2c 20 27 3c 27 2c 20 27 3e 27  (t2, 0, '<', '>'
2ce0: 29 2c 20 68 69 67 68 6c 69 67 68 74 28 74 32 2c  ), highlight(t2,
2cf0: 20 31 2c 20 27 28 27 2c 20 27 29 27 29 0a 20 20   1, '(', ')').  
2d00: 46 52 4f 4d 20 74 32 20 57 48 45 52 45 20 74 32  FROM t2 WHERE t2
2d10: 20 4d 41 54 43 48 20 27 78 20 4f 52 20 79 27 0a   MATCH 'x OR y'.
2d20: 7d 20 7b 0a 20 20 31 20 7b 3c 79 79 79 79 3e 20  } {.  1 {<yyyy> 
2d30: 76 76 76 76 76 20 71 71 20 6f 6f 20 3c 79 79 79  vvvvv qq oo <yyy
2d40: 79 79 79 3e 20 76 76 76 76 20 65 65 65 7d 20 7b  yyy> vvvv eee} {
2d50: 66 66 66 66 20 75 75 20 72 20 71 71 20 61 61 61  ffff uu r qq aaa
2d60: 61 7d 0a 20 20 32 20 7b 77 77 20 6f 6f 6f 6f 6f  a}.  2 {ww ooooo
2d70: 6f 20 62 62 62 62 62 20 73 73 73 73 73 73 20 6d  o bbbbb ssssss m
2d80: 6d 7d 20 7b 66 66 66 66 66 66 20 28 79 79 29 20  m} {ffffff (yy) 
2d90: 69 69 69 69 20 72 72 20 73 20 63 63 63 20 71 71  iiii rr s ccc qq
2da0: 71 71 71 7d 0a 20 20 34 20 7b 72 20 66 20 69 20  qqq}.  4 {r f i 
2db0: 72 72 72 72 72 72 20 77 77 20 68 68 68 7d 20 7b  rrrrrr ww hhh} {
2dc0: 61 61 20 28 79 79 79 29 20 74 20 28 78 29 20 61  aa (yyy) t (x) a
2dd0: 61 61 61 61 20 69 69 7d 0a 20 20 31 33 20 7b 3c  aaaa ii}.  13 {<
2de0: 78 3e 20 3c 78 78 3e 20 3c 78 78 78 3e 20 3c 78  x> <xx> <xxx> <x
2df0: 78 78 78 3e 20 3c 78 78 78 78 78 3e 20 3c 78 78  xxx> <xxxxx> <xx
2e00: 78 78 78 78 3e 20 3c 78 78 78 78 78 78 78 3e 7d  xxxx> <xxxxxxx>}
2e10: 0a 20 20 20 20 20 7b 28 79 29 20 28 79 79 29 20  .     {(y) (yy) 
2e20: 28 79 79 79 29 20 28 79 79 79 79 29 20 28 79 79  (yyy) (yyyy) (yy
2e30: 79 79 79 29 20 28 79 79 79 79 79 79 29 20 28 79  yyy) (yyyyyy) (y
2e40: 79 79 79 79 79 79 29 7d 0a 7d 0a 0a 23 2d 2d 2d  yyyyyy)}.}..#---
2e50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2e60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2e90: 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 74 68  ------.# Test th
2ea0: 61 74 20 74 68 65 20 78 43 6f 6c 75 6d 6e 53 69  at the xColumnSi
2eb0: 7a 65 28 29 20 41 50 49 20 69 73 20 6e 6f 74 20  ze() API is not 
2ec0: 63 6f 6e 66 75 73 65 64 20 62 79 20 63 6f 6c 6f  confused by colo
2ed0: 63 61 74 65 64 20 74 6f 6b 65 6e 73 2e 0a 23 0a  cated tokens..#.
2ee0: 72 65 73 65 74 5f 64 62 0a 73 71 6c 69 74 65 33  reset_db.sqlite3
2ef0: 5f 66 74 73 35 5f 63 72 65 61 74 65 5f 74 6f 6b  _fts5_create_tok
2f00: 65 6e 69 7a 65 72 20 64 62 20 74 63 6c 20 74 63  enizer db tcl tc
2f10: 6c 5f 63 72 65 61 74 65 0a 66 74 73 35 5f 61 75  l_create.fts5_au
2f20: 78 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 73  x_test_functions
2f30: 20 64 62 0a 70 72 6f 63 20 74 63 6c 5f 74 6f 6b   db.proc tcl_tok
2f40: 65 6e 69 7a 65 20 7b 74 66 6c 61 67 73 20 74 65  enize {tflags te
2f50: 78 74 7d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20  xt} {.  foreach 
2f60: 7b 77 20 69 53 74 61 72 74 20 69 45 6e 64 7d 20  {w iStart iEnd} 
2f70: 5b 66 74 73 35 5f 74 6f 6b 65 6e 69 7a 65 5f 73  [fts5_tokenize_s
2f80: 70 6c 69 74 20 24 74 65 78 74 5d 20 7b 0a 20 20  plit $text] {.  
2f90: 20 20 73 71 6c 69 74 65 33 5f 66 74 73 35 5f 74    sqlite3_fts5_t
2fa0: 6f 6b 65 6e 20 24 77 20 24 69 53 74 61 72 74 20  oken $w $iStart 
2fb0: 24 69 45 6e 64 0a 20 20 20 20 69 66 20 7b 5b 73  $iEnd.    if {[s
2fc0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 77 5d  tring length $w]
2fd0: 3d 3d 31 7d 20 7b 0a 20 20 20 20 20 20 66 6f 72  ==1} {.      for
2fe0: 20 7b 73 65 74 20 69 20 32 7d 20 7b 24 69 3c 3d   {set i 2} {$i<=
2ff0: 31 30 7d 20 7b 69 6e 63 72 20 69 7d 20 7b 0a 20  10} {incr i} {. 
3000: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66         sqlite3_f
3010: 74 73 35 5f 74 6f 6b 65 6e 20 2d 63 6f 6c 6f 20  ts5_token -colo 
3020: 5b 73 74 72 69 6e 67 20 72 65 70 65 61 74 20 24  [string repeat $
3030: 77 20 24 69 5d 20 24 69 53 74 61 72 74 20 24 69  w $i] $iStart $i
3040: 45 6e 64 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  End.      }.    
3050: 7d 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f 65 78 65 63  }.  }.}..do_exec
3060: 73 71 6c 5f 74 65 73 74 20 37 2e 30 2e 31 20 7b  sql_test 7.0.1 {
3070: 0a 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41  .  CREATE VIRTUA
3080: 4c 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47  L TABLE t1 USING
3090: 20 66 74 73 35 28 61 2c 20 62 2c 20 63 6f 6c 75   fts5(a, b, colu
30a0: 6d 6e 73 69 7a 65 3d 31 2c 20 74 6f 6b 65 6e 69  mnsize=1, tokeni
30b0: 7a 65 3d 74 63 6c 2c 20 64 65 74 61 69 6c 3d 25  ze=tcl, detail=%
30c0: 44 45 54 41 49 4c 25 29 3b 0a 20 20 49 4e 53 45  DETAIL%);.  INSE
30d0: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
30e0: 53 28 27 30 20 32 20 33 27 2c 20 27 34 20 35 20  S('0 2 3', '4 5 
30f0: 36 20 37 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  6 7');.  INSERT 
3100: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
3110: 38 20 39 27 2c 20 27 30 20 30 20 30 20 30 20 30  8 9', '0 0 0 0 0
3120: 20 30 20 30 20 30 20 30 20 30 27 29 3b 0a 20 20   0 0 0 0 0');.  
3130: 53 45 4c 45 43 54 20 66 74 73 35 5f 74 65 73 74  SELECT fts5_test
3140: 5f 63 6f 6c 75 6d 6e 73 69 7a 65 28 74 31 29 20  _columnsize(t1) 
3150: 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31  FROM t1 WHERE t1
3160: 20 4d 41 54 43 48 20 27 30 30 30 20 41 4e 44 20   MATCH '000 AND 
3170: 30 30 20 41 4e 44 20 30 27 3b 0a 7d 20 7b 7b 33  00 AND 0';.} {{3
3180: 20 34 7d 20 7b 32 20 31 30 7d 7d 0a 0a 64 6f 5f   4} {2 10}}..do_
3190: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 37 2e 30  execsql_test 7.0
31a0: 2e 32 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e  .2 {.  INSERT IN
31b0: 54 4f 20 74 31 28 74 31 29 20 56 41 4c 55 45 53  TO t1(t1) VALUES
31c0: 28 27 69 6e 74 65 67 72 69 74 79 2d 63 68 65 63  ('integrity-chec
31d0: 6b 27 29 3b 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73  k');.}..do_execs
31e0: 71 6c 5f 74 65 73 74 20 37 2e 31 2e 31 20 7b 0a  ql_test 7.1.1 {.
31f0: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
3200: 20 54 41 42 4c 45 20 74 32 20 55 53 49 4e 47 20   TABLE t2 USING 
3210: 66 74 73 35 28 61 2c 20 62 2c 20 63 6f 6c 75 6d  fts5(a, b, colum
3220: 6e 73 69 7a 65 3d 30 2c 20 74 6f 6b 65 6e 69 7a  nsize=0, tokeniz
3230: 65 3d 74 63 6c 2c 20 64 65 74 61 69 6c 3d 25 44  e=tcl, detail=%D
3240: 45 54 41 49 4c 25 29 3b 0a 20 20 49 4e 53 45 52  ETAIL%);.  INSER
3250: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
3260: 28 27 30 20 32 20 33 27 2c 20 27 34 20 35 20 36  ('0 2 3', '4 5 6
3270: 20 37 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49   7');.  INSERT I
3280: 4e 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27 38  NTO t2 VALUES('8
3290: 20 39 27 2c 20 27 30 20 30 20 30 20 30 20 30 20   9', '0 0 0 0 0 
32a0: 30 20 30 20 30 20 30 20 30 27 29 3b 0a 20 20 53  0 0 0 0 0');.  S
32b0: 45 4c 45 43 54 20 66 74 73 35 5f 74 65 73 74 5f  ELECT fts5_test_
32c0: 63 6f 6c 75 6d 6e 73 69 7a 65 28 74 32 29 20 46  columnsize(t2) F
32d0: 52 4f 4d 20 74 32 20 57 48 45 52 45 20 74 32 20  ROM t2 WHERE t2 
32e0: 4d 41 54 43 48 20 27 30 30 30 20 41 4e 44 20 30  MATCH '000 AND 0
32f0: 30 20 41 4e 44 20 30 27 3b 0a 7d 20 7b 7b 33 20  0 AND 0';.} {{3 
3300: 34 7d 20 7b 32 20 31 30 7d 7d 0a 0a 64 6f 5f 65  4} {2 10}}..do_e
3310: 78 65 63 73 71 6c 5f 74 65 73 74 20 37 2e 31 2e  xecsql_test 7.1.
3320: 32 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  2 {.  INSERT INT
3330: 4f 20 74 32 28 74 32 29 20 56 41 4c 55 45 53 28  O t2(t2) VALUES(
3340: 27 69 6e 74 65 67 72 69 74 79 2d 63 68 65 63 6b  'integrity-check
3350: 27 29 3b 0a 7d 0a 0a 7d 20 3b 23 20 66 6f 72 65  ');.}..} ;# fore
3360: 61 63 68 5f 64 65 74 61 69 6c 5f 6d 6f 64 65 0a  ach_detail_mode.
3370: 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a           .finish_test.