/ Hex Artifact Content
Login

Artifact 1142d16d9cc193894dc13cc8f9c7a8a21411ac61b5567a878514df6f9f0d7bb7:


0000: 23 20 32 30 31 34 20 4a 75 6e 65 20 31 37 0a 23  # 2014 June 17.#
0010: 0a 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69  .# The author di
0020: 73 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68  sclaims copyrigh
0030: 74 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65  t to this source
0040: 20 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65   code.  In place
0050: 20 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f   of.# a legal no
0060: 74 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20  tice, here is a 
0070: 62 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20  blessing:.#.#   
0080: 20 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64   May you do good
0090: 20 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23   and not evil..#
00a0: 20 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64      May you find
00b0: 20 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72   forgiveness for
00c0: 20 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f   yourself and fo
00d0: 72 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20  rgive others..# 
00e0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
00f0: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0100: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0110: 79 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a  you give..#.#***
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69 73 20 66 69  ******.# This fi
0170: 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 73 20 72 65  le implements re
0180: 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 66  gression tests f
0190: 6f 72 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  or SQLite librar
01a0: 79 2e 20 20 54 68 65 0a 23 20 66 6f 63 75 73 20  y.  The.# focus 
01b0: 6f 66 20 74 68 69 73 20 73 63 72 69 70 74 20 69  of this script i
01c0: 73 20 74 65 73 74 69 6e 67 20 74 68 65 20 46 54  s testing the FT
01d0: 53 35 20 6d 6f 64 75 6c 65 2e 0a 23 0a 23 0a 0a  S5 module..#.#..
01e0: 73 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69  source [file joi
01f0: 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  n [file dirname 
0200: 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 20 66  [info script]] f
0210: 74 73 35 5f 63 6f 6d 6d 6f 6e 2e 74 63 6c 5d 0a  ts5_common.tcl].
0220: 73 65 74 20 74 65 73 74 70 72 65 66 69 78 20 66  set testprefix f
0230: 74 73 35 61 65 0a 0a 23 20 49 66 20 53 51 4c 49  ts5ae..# If SQLI
0240: 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 35 20 69  TE_ENABLE_FTS5 i
0250: 73 20 64 65 66 69 6e 65 64 2c 20 6f 6d 69 74 20  s defined, omit 
0260: 74 68 69 73 20 66 69 6c 65 2e 0a 69 66 63 61 70  this file..ifcap
0270: 61 62 6c 65 20 21 66 74 73 35 20 7b 0a 20 20 66  able !fts5 {.  f
0280: 69 6e 69 73 68 5f 74 65 73 74 0a 20 20 72 65 74  inish_test.  ret
0290: 75 72 6e 0a 7d 0a 0a 66 6f 72 65 61 63 68 5f 64  urn.}..foreach_d
02a0: 65 74 61 69 6c 5f 6d 6f 64 65 20 24 74 65 73 74  etail_mode $test
02b0: 70 72 65 66 69 78 20 7b 0a 0a 64 6f 5f 65 78 65  prefix {..do_exe
02c0: 63 73 71 6c 5f 74 65 73 74 20 31 2e 30 20 7b 0a  csql_test 1.0 {.
02d0: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
02e0: 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47 20   TABLE t1 USING 
02f0: 66 74 73 35 28 61 2c 20 62 2c 20 64 65 74 61 69  fts5(a, b, detai
0300: 6c 3d 25 44 45 54 41 49 4c 25 29 3b 0a 20 20 49  l=%DETAIL%);.  I
0310: 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 28 74 31  NSERT INTO t1(t1
0320: 2c 20 72 61 6e 6b 29 20 56 41 4c 55 45 53 28 27  , rank) VALUES('
0330: 70 67 73 7a 27 2c 20 33 32 29 3b 0a 7d 0a 0a 64  pgsz', 32);.}..d
0340: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31  o_execsql_test 1
0350: 2e 31 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e  .1 {.  INSERT IN
0360: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 68 65  TO t1 VALUES('he
0370: 6c 6c 6f 27 2c 20 27 77 6f 72 6c 64 27 29 3b 0a  llo', 'world');.
0380: 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46    SELECT rowid F
0390: 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 20  ROM t1 WHERE t1 
03a0: 4d 41 54 43 48 20 27 68 65 6c 6c 6f 27 20 4f 52  MATCH 'hello' OR
03b0: 44 45 52 20 42 59 20 72 6f 77 69 64 20 41 53 43  DER BY rowid ASC
03c0: 3b 0a 7d 20 7b 31 7d 0a 0a 64 6f 5f 65 78 65 63  ;.} {1}..do_exec
03d0: 73 71 6c 5f 74 65 73 74 20 31 2e 32 20 7b 0a 20  sql_test 1.2 {. 
03e0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
03f0: 56 41 4c 55 45 53 28 27 77 6f 72 6c 64 27 2c 20  VALUES('world', 
0400: 27 68 65 6c 6c 6f 27 29 3b 0a 20 20 53 45 4c 45  'hello');.  SELE
0410: 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 31  CT rowid FROM t1
0420: 20 57 48 45 52 45 20 74 31 20 4d 41 54 43 48 20   WHERE t1 MATCH 
0430: 27 68 65 6c 6c 6f 27 20 4f 52 44 45 52 20 42 59  'hello' ORDER BY
0440: 20 72 6f 77 69 64 20 41 53 43 3b 0a 7d 20 7b 31   rowid ASC;.} {1
0450: 20 32 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f   2}..do_execsql_
0460: 74 65 73 74 20 31 2e 33 20 7b 0a 20 20 49 4e 53  test 1.3 {.  INS
0470: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
0480: 45 53 28 27 77 6f 72 6c 64 27 2c 20 27 77 6f 72  ES('world', 'wor
0490: 6c 64 27 29 3b 0a 20 20 53 45 4c 45 43 54 20 72  ld');.  SELECT r
04a0: 6f 77 69 64 20 46 52 4f 4d 20 74 31 20 57 48 45  owid FROM t1 WHE
04b0: 52 45 20 74 31 20 4d 41 54 43 48 20 27 68 65 6c  RE t1 MATCH 'hel
04c0: 6c 6f 27 20 4f 52 44 45 52 20 42 59 20 72 6f 77  lo' ORDER BY row
04d0: 69 64 20 41 53 43 3b 0a 7d 20 7b 31 20 32 7d 0a  id ASC;.} {1 2}.
04e0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
04f0: 20 31 2e 34 2e 31 20 7b 0a 20 20 49 4e 53 45 52   1.4.1 {.  INSER
0500: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
0510: 28 27 68 65 6c 6c 6f 27 2c 20 27 68 65 6c 6c 6f  ('hello', 'hello
0520: 27 29 3b 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  ');.}..do_execsq
0530: 6c 5f 74 65 73 74 20 31 2e 34 2e 32 20 7b 0a 20  l_test 1.4.2 {. 
0540: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46 52   SELECT rowid FR
0550: 4f 4d 20 74 31 20 57 48 45 52 45 20 74 31 20 4d  OM t1 WHERE t1 M
0560: 41 54 43 48 20 27 68 65 6c 6c 6f 27 20 4f 52 44  ATCH 'hello' ORD
0570: 45 52 20 42 59 20 72 6f 77 69 64 20 41 53 43 3b  ER BY rowid ASC;
0580: 0a 7d 20 7b 31 20 32 20 34 7d 0a 0a 66 74 73 35  .} {1 2 4}..fts5
0590: 5f 61 75 78 5f 74 65 73 74 5f 66 75 6e 63 74 69  _aux_test_functi
05a0: 6f 6e 73 20 64 62 0a 0a 23 2d 2d 2d 2d 2d 2d 2d  ons db..#-------
05b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
05c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
05d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
05e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
05f0: 2d 2d 0a 23 20 0a 64 6f 5f 65 78 65 63 73 71 6c  --.# .do_execsql
0600: 5f 74 65 73 74 20 32 2e 30 20 7b 0a 20 20 43 52  _test 2.0 {.  CR
0610: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
0620: 4c 45 20 74 32 20 55 53 49 4e 47 20 66 74 73 35  LE t2 USING fts5
0630: 28 78 2c 20 79 2c 20 64 65 74 61 69 6c 3d 25 44  (x, y, detail=%D
0640: 45 54 41 49 4c 25 29 3b 0a 20 20 49 4e 53 45 52  ETAIL%);.  INSER
0650: 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45 53  T INTO t2 VALUES
0660: 28 27 75 20 74 20 6c 20 77 20 77 20 6d 20 73 27  ('u t l w w m s'
0670: 2c 20 27 6d 20 66 20 6d 20 6f 20 6c 20 74 20 6b  , 'm f m o l t k
0680: 20 6f 20 70 20 65 27 29 3b 0a 20 20 49 4e 53 45   o p e');.  INSE
0690: 52 54 20 49 4e 54 4f 20 74 32 20 56 41 4c 55 45  RT INTO t2 VALUE
06a0: 53 28 27 66 20 67 20 71 20 65 20 6c 20 6e 20 64  S('f g q e l n d
06b0: 20 6d 20 7a 20 78 20 71 27 2c 20 27 7a 20 73 20   m z x q', 'z s 
06c0: 69 20 69 20 69 20 6d 20 66 20 77 20 77 20 66 20  i i i m f w w f 
06d0: 6e 20 67 20 70 27 29 3b 0a 7d 0a 0a 64 6f 5f 65  n g p');.}..do_e
06e0: 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 31 20  xecsql_test 2.1 
06f0: 7b 0a 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64  {.  SELECT rowid
0700: 2c 20 66 74 73 35 5f 74 65 73 74 5f 70 6f 73 6c  , fts5_test_posl
0710: 69 73 74 28 74 32 29 20 46 52 4f 4d 20 74 32 20  ist(t2) FROM t2 
0720: 0a 20 20 57 48 45 52 45 20 74 32 20 4d 41 54 43  .  WHERE t2 MATC
0730: 48 20 27 6d 27 20 4f 52 44 45 52 20 42 59 20 72  H 'm' ORDER BY r
0740: 6f 77 69 64 3b 0a 7d 20 7b 0a 20 20 31 20 7b 30  owid;.} {.  1 {0
0750: 2e 30 2e 35 20 30 2e 31 2e 30 20 30 2e 31 2e 32  .0.5 0.1.0 0.1.2
0760: 7d 20 0a 20 20 32 20 7b 30 2e 30 2e 37 20 30 2e  } .  2 {0.0.7 0.
0770: 31 2e 35 7d 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73  1.5}.}..do_execs
0780: 71 6c 5f 74 65 73 74 20 32 2e 32 20 7b 0a 20 20  ql_test 2.2 {.  
0790: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 66 74  SELECT rowid, ft
07a0: 73 35 5f 74 65 73 74 5f 70 6f 73 6c 69 73 74 28  s5_test_poslist(
07b0: 74 32 29 20 46 52 4f 4d 20 74 32 20 0a 20 20 57  t2) FROM t2 .  W
07c0: 48 45 52 45 20 74 32 20 4d 41 54 43 48 20 27 75  HERE t2 MATCH 'u
07d0: 20 4f 52 20 71 27 20 4f 52 44 45 52 20 42 59 20   OR q' ORDER BY 
07e0: 72 6f 77 69 64 3b 0a 7d 20 7b 0a 20 20 31 20 7b  rowid;.} {.  1 {
07f0: 30 2e 30 2e 30 7d 0a 20 20 32 20 7b 31 2e 30 2e  0.0.0}.  2 {1.0.
0800: 32 20 31 2e 30 2e 31 30 7d 0a 7d 0a 0a 69 66 20  2 1.0.10}.}..if 
0810: 7b 5b 64 65 74 61 69 6c 5f 69 73 5f 66 75 6c 6c  {[detail_is_full
0820: 5d 7d 20 7b 0a 20 20 64 6f 5f 65 78 65 63 73 71  ]} {.  do_execsq
0830: 6c 5f 74 65 73 74 20 32 2e 33 20 7b 0a 20 20 20  l_test 2.3 {.   
0840: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 66   SELECT rowid, f
0850: 74 73 35 5f 74 65 73 74 5f 70 6f 73 6c 69 73 74  ts5_test_poslist
0860: 28 74 32 29 20 46 52 4f 4d 20 74 32 20 0a 20 20  (t2) FROM t2 .  
0870: 20 20 20 20 57 48 45 52 45 20 74 32 20 4d 41 54      WHERE t2 MAT
0880: 43 48 20 27 79 3a 6f 27 20 4f 52 44 45 52 20 42  CH 'y:o' ORDER B
0890: 59 20 72 6f 77 69 64 3b 0a 20 20 7d 20 7b 0a 20  Y rowid;.  } {. 
08a0: 20 20 20 31 20 7b 30 2e 31 2e 33 20 30 2e 31 2e     1 {0.1.3 0.1.
08b0: 37 7d 0a 20 20 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d  7}.  }.}..#-----
08c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
08d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
08e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
08f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0900: 2d 2d 2d 2d 0a 23 20 0a 64 6f 5f 65 78 65 63 73  ----.# .do_execs
0910: 71 6c 5f 74 65 73 74 20 33 2e 30 20 7b 0a 20 20  ql_test 3.0 {.  
0920: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
0930: 41 42 4c 45 20 74 33 20 55 53 49 4e 47 20 66 74  ABLE t3 USING ft
0940: 73 35 28 78 2c 20 79 2c 20 64 65 74 61 69 6c 3d  s5(x, y, detail=
0950: 25 44 45 54 41 49 4c 25 29 3b 0a 20 20 49 4e 53  %DETAIL%);.  INS
0960: 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55  ERT INTO t3 VALU
0970: 45 53 28 20 27 6a 20 66 20 68 20 6f 20 78 20 78  ES( 'j f h o x x
0980: 20 61 20 7a 20 67 20 62 20 61 20 66 20 61 20 6d   a z g b a f a m
0990: 20 69 20 62 27 2c 20 27 6a 20 7a 20 63 20 7a 20   i b', 'j z c z 
09a0: 79 20 78 20 77 20 74 27 29 3b 0a 20 20 49 4e 53  y x w t');.  INS
09b0: 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41 4c 55  ERT INTO t3 VALU
09c0: 45 53 28 20 27 72 20 63 27 2c 20 27 27 29 3b 0a  ES( 'r c', '');.
09d0: 7d 0a 0a 69 66 20 7b 5b 64 65 74 61 69 6c 5f 69  }..if {[detail_i
09e0: 73 5f 66 75 6c 6c 5d 7d 20 7b 0a 20 20 64 6f 5f  s_full]} {.  do_
09f0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 31  execsql_test 3.1
0a00: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 72 6f   {.    SELECT ro
0a10: 77 69 64 2c 20 66 74 73 35 5f 74 65 73 74 5f 70  wid, fts5_test_p
0a20: 6f 73 6c 69 73 74 28 74 33 29 20 46 52 4f 4d 20  oslist(t3) FROM 
0a30: 74 33 20 57 48 45 52 45 20 74 33 20 4d 41 54 43  t3 WHERE t3 MATC
0a40: 48 20 27 4e 45 41 52 28 61 20 62 29 27 3b 0a 20  H 'NEAR(a b)';. 
0a50: 20 7d 20 7b 0a 20 20 20 20 31 20 7b 30 2e 30 2e   } {.    1 {0.0.
0a60: 36 20 31 2e 30 2e 39 20 30 2e 30 2e 31 30 20 30  6 1.0.9 0.0.10 0
0a70: 2e 30 2e 31 32 20 31 2e 30 2e 31 35 7d 0a 20 20  .0.12 1.0.15}.  
0a80: 7d 0a 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f  }..  do_execsql_
0a90: 74 65 73 74 20 33 2e 32 20 7b 0a 20 20 20 20 53  test 3.2 {.    S
0aa0: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 66 74 73  ELECT rowid, fts
0ab0: 35 5f 74 65 73 74 5f 70 6f 73 6c 69 73 74 28 74  5_test_poslist(t
0ac0: 33 29 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45  3) FROM t3 WHERE
0ad0: 20 74 33 20 4d 41 54 43 48 20 27 4e 45 41 52 28   t3 MATCH 'NEAR(
0ae0: 72 20 63 29 27 3b 0a 20 20 7d 20 7b 0a 20 20 20  r c)';.  } {.   
0af0: 20 32 20 7b 30 2e 30 2e 30 20 31 2e 30 2e 31 7d   2 {0.0.0 1.0.1}
0b00: 0a 20 20 7d 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73  .  }.}..do_execs
0b10: 71 6c 5f 74 65 73 74 20 33 2e 33 20 7b 0a 20 20  ql_test 3.3 {.  
0b20: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 0a  INSERT INTO t3 .
0b30: 20 20 56 41 4c 55 45 53 28 27 6b 20 78 20 6a 20    VALUES('k x j 
0b40: 72 20 6d 20 61 20 64 20 6f 20 69 20 7a 20 6a 27  r m a d o i z j'
0b50: 2c 20 27 72 20 74 20 74 20 74 20 66 20 65 20 62  , 'r t t t f e b
0b60: 20 72 20 78 20 69 20 76 20 6a 20 76 20 67 20 6f   r x i v j v g o
0b70: 27 29 3b 0a 20 20 53 45 4c 45 43 54 20 72 6f 77  ');.  SELECT row
0b80: 69 64 2c 20 66 74 73 35 5f 74 65 73 74 5f 70 6f  id, fts5_test_po
0b90: 73 6c 69 73 74 28 74 33 29 20 0a 20 20 46 52 4f  slist(t3) .  FRO
0ba0: 4d 20 74 33 20 57 48 45 52 45 20 74 33 20 4d 41  M t3 WHERE t3 MA
0bb0: 54 43 48 20 27 61 20 4f 52 20 62 20 41 4e 44 20  TCH 'a OR b AND 
0bc0: 63 27 3b 0a 7d 20 7b 0a 20 20 31 20 7b 30 2e 30  c';.} {.  1 {0.0
0bd0: 2e 36 20 31 2e 30 2e 39 20 30 2e 30 2e 31 30 20  .6 1.0.9 0.0.10 
0be0: 30 2e 30 2e 31 32 20 31 2e 30 2e 31 35 20 32 2e  0.0.12 1.0.15 2.
0bf0: 31 2e 32 7d 0a 20 20 33 20 30 2e 30 2e 35 20 0a  1.2}.  3 0.0.5 .
0c00: 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  }..#------------
0c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
0c50: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0c60: 20 34 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20   4.0 {.  CREATE 
0c70: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 34  VIRTUAL TABLE t4
0c80: 20 55 53 49 4e 47 20 66 74 73 35 28 78 2c 20 79   USING fts5(x, y
0c90: 2c 20 64 65 74 61 69 6c 3d 25 44 45 54 41 49 4c  , detail=%DETAIL
0ca0: 25 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  %);.  INSERT INT
0cb0: 4f 20 74 34 20 0a 20 20 56 41 4c 55 45 53 28 27  O t4 .  VALUES('
0cc0: 6b 20 78 20 6a 20 72 20 6d 20 61 20 64 20 6f 20  k x j r m a d o 
0cd0: 69 20 7a 20 6a 27 2c 20 27 72 20 74 20 74 20 74  i z j', 'r t t t
0ce0: 20 66 20 65 20 62 20 72 20 78 20 69 20 76 20 6a   f e b r x i v j
0cf0: 20 76 20 67 20 6f 27 29 3b 0a 7d 0a 0a 64 6f 5f   v g o');.}..do_
0d00: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 34 2e 31  execsql_test 4.1
0d10: 20 7b 0a 20 20 53 45 4c 45 43 54 20 72 6f 77 69   {.  SELECT rowi
0d20: 64 2c 20 66 74 73 35 5f 74 65 73 74 5f 70 6f 73  d, fts5_test_pos
0d30: 6c 69 73 74 28 74 34 29 20 46 52 4f 4d 20 74 34  list(t4) FROM t4
0d40: 20 57 48 45 52 45 20 74 34 20 4d 41 54 43 48 20   WHERE t4 MATCH 
0d50: 27 61 20 4f 52 20 62 20 41 4e 44 20 63 27 3b 0a  'a OR b AND c';.
0d60: 7d 20 7b 0a 20 20 31 20 30 2e 30 2e 35 0a 7d 0a  } {.  1 0.0.5.}.
0d70: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
0d80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0d90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0db0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65  -----------.# Te
0dc0: 73 74 20 74 68 61 74 20 74 68 65 20 78 43 6f 6c  st that the xCol
0dd0: 75 6d 6e 53 69 7a 65 28 29 20 61 6e 64 20 78 43  umnSize() and xC
0de0: 6f 6c 75 6d 6e 41 76 67 73 69 7a 65 28 29 20 41  olumnAvgsize() A
0df0: 50 49 73 20 77 6f 72 6b 2e 0a 23 0a 72 65 73 65  PIs work..#.rese
0e00: 74 5f 64 62 0a 66 74 73 35 5f 61 75 78 5f 74 65  t_db.fts5_aux_te
0e10: 73 74 5f 66 75 6e 63 74 69 6f 6e 73 20 64 62 0a  st_functions db.
0e20: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0e30: 20 35 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20   5.1 {.  CREATE 
0e40: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 35  VIRTUAL TABLE t5
0e50: 20 55 53 49 4e 47 20 66 74 73 35 28 78 2c 20 79   USING fts5(x, y
0e60: 2c 20 64 65 74 61 69 6c 3d 25 44 45 54 41 49 4c  , detail=%DETAIL
0e70: 25 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  %);.  INSERT INT
0e80: 4f 20 74 35 20 56 41 4c 55 45 53 28 27 61 20 62  O t5 VALUES('a b
0e90: 20 63 20 64 27 2c 20 27 65 20 66 20 67 20 68 20   c d', 'e f g h 
0ea0: 69 20 6a 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  i j');.  INSERT 
0eb0: 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28 27  INTO t5 VALUES('
0ec0: 27 2c 20 27 61 27 29 3b 0a 20 20 49 4e 53 45 52  ', 'a');.  INSER
0ed0: 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53  T INTO t5 VALUES
0ee0: 28 27 61 27 2c 20 27 27 29 3b 0a 7d 0a 64 6f 5f  ('a', '');.}.do_
0ef0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35 2e 32  execsql_test 5.2
0f00: 20 7b 0a 20 20 53 45 4c 45 43 54 20 72 6f 77 69   {.  SELECT rowi
0f10: 64 2c 20 66 74 73 35 5f 74 65 73 74 5f 63 6f 6c  d, fts5_test_col
0f20: 75 6d 6e 73 69 7a 65 28 74 35 29 20 46 52 4f 4d  umnsize(t5) FROM
0f30: 20 74 35 20 57 48 45 52 45 20 74 35 20 4d 41 54   t5 WHERE t5 MAT
0f40: 43 48 20 27 61 27 0a 20 20 4f 52 44 45 52 20 42  CH 'a'.  ORDER B
0f50: 59 20 72 6f 77 69 64 20 44 45 53 43 3b 0a 7d 20  Y rowid DESC;.} 
0f60: 7b 0a 20 20 33 20 7b 31 20 30 7d 0a 20 20 32 20  {.  3 {1 0}.  2 
0f70: 7b 30 20 31 7d 0a 20 20 31 20 7b 34 20 36 7d 0a  {0 1}.  1 {4 6}.
0f80: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
0f90: 73 74 20 35 2e 33 20 7b 0a 20 20 53 45 4c 45 43  st 5.3 {.  SELEC
0fa0: 54 20 72 6f 77 69 64 2c 20 66 74 73 35 5f 74 65  T rowid, fts5_te
0fb0: 73 74 5f 63 6f 6c 75 6d 6e 74 65 78 74 28 74 35  st_columntext(t5
0fc0: 29 20 46 52 4f 4d 20 74 35 20 57 48 45 52 45 20  ) FROM t5 WHERE 
0fd0: 74 35 20 4d 41 54 43 48 20 27 61 27 0a 20 20 4f  t5 MATCH 'a'.  O
0fe0: 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 44 45  RDER BY rowid DE
0ff0: 53 43 3b 0a 7d 20 7b 0a 20 20 33 20 7b 61 20 7b  SC;.} {.  3 {a {
1000: 7d 7d 0a 20 20 32 20 7b 7b 7d 20 61 7d 0a 20 20  }}.  2 {{} a}.  
1010: 31 20 7b 7b 61 20 62 20 63 20 64 7d 20 7b 65 20  1 {{a b c d} {e 
1020: 66 20 67 20 68 20 69 20 6a 7d 7d 0a 7d 0a 0a 64  f g h i j}}.}..d
1030: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35  o_execsql_test 5
1040: 2e 34 20 7b 0a 20 20 53 45 4c 45 43 54 20 72 6f  .4 {.  SELECT ro
1050: 77 69 64 2c 20 66 74 73 35 5f 74 65 73 74 5f 63  wid, fts5_test_c
1060: 6f 6c 75 6d 6e 74 6f 74 61 6c 73 69 7a 65 28 74  olumntotalsize(t
1070: 35 29 20 46 52 4f 4d 20 74 35 20 57 48 45 52 45  5) FROM t5 WHERE
1080: 20 74 35 20 4d 41 54 43 48 20 27 61 27 0a 20 20   t5 MATCH 'a'.  
1090: 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 44  ORDER BY rowid D
10a0: 45 53 43 3b 0a 7d 20 7b 0a 20 20 33 20 7b 35 20  ESC;.} {.  3 {5 
10b0: 37 7d 0a 20 20 32 20 7b 35 20 37 7d 0a 20 20 31  7}.  2 {5 7}.  1
10c0: 20 7b 35 20 37 7d 0a 7d 0a 0a 64 6f 5f 65 78 65   {5 7}.}..do_exe
10d0: 63 73 71 6c 5f 74 65 73 74 20 35 2e 35 20 7b 0a  csql_test 5.5 {.
10e0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 35    INSERT INTO t5
10f0: 20 56 41 4c 55 45 53 28 27 78 20 79 20 7a 27 2c   VALUES('x y z',
1100: 20 27 76 20 77 20 78 20 79 20 7a 27 29 3b 0a 20   'v w x y z');. 
1110: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 66   SELECT rowid, f
1120: 74 73 35 5f 74 65 73 74 5f 63 6f 6c 75 6d 6e 74  ts5_test_columnt
1130: 6f 74 61 6c 73 69 7a 65 28 74 35 29 20 46 52 4f  otalsize(t5) FRO
1140: 4d 20 74 35 20 57 48 45 52 45 20 74 35 20 4d 41  M t5 WHERE t5 MA
1150: 54 43 48 20 27 61 27 0a 20 20 4f 52 44 45 52 20  TCH 'a'.  ORDER 
1160: 42 59 20 72 6f 77 69 64 20 44 45 53 43 3b 0a 7d  BY rowid DESC;.}
1170: 20 7b 0a 20 20 33 20 7b 38 20 31 32 7d 0a 20 20   {.  3 {8 12}.  
1180: 32 20 7b 38 20 31 32 7d 0a 20 20 31 20 7b 38 20  2 {8 12}.  1 {8 
1190: 31 32 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  12}.}..#--------
11a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11e0: 2d 0a 23 20 54 65 73 74 20 74 68 65 20 78 54 6f  -.# Test the xTo
11f0: 6b 65 6e 69 7a 65 28 29 20 41 50 49 0a 23 0a 72  kenize() API.#.r
1200: 65 73 65 74 5f 64 62 0a 66 74 73 35 5f 61 75 78  eset_db.fts5_aux
1210: 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 73 20  _test_functions 
1220: 64 62 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  db.do_execsql_te
1230: 73 74 20 36 2e 31 20 7b 0a 20 20 43 52 45 41 54  st 6.1 {.  CREAT
1240: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
1250: 74 36 20 55 53 49 4e 47 20 66 74 73 35 28 78 2c  t6 USING fts5(x,
1260: 20 79 2c 20 64 65 74 61 69 6c 3d 25 44 45 54 41   y, detail=%DETA
1270: 49 4c 25 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  IL%);.  INSERT I
1280: 4e 54 4f 20 74 36 20 56 41 4c 55 45 53 28 27 54  NTO t6 VALUES('T
1290: 68 65 72 65 20 61 72 65 20 6d 6f 72 65 27 2c 20  here are more', 
12a0: 27 74 68 69 6e 67 73 20 69 6e 20 68 65 61 76 65  'things in heave
12b0: 6e 20 61 6e 64 20 65 61 72 74 68 27 29 3b 0a 20  n and earth');. 
12c0: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36 20   INSERT INTO t6 
12d0: 56 41 4c 55 45 53 28 27 2c 20 48 6f 72 61 74 69  VALUES(', Horati
12e0: 6f 2c 20 54 68 61 6e 20 61 72 65 27 2c 20 27 64  o, Than are', 'd
12f0: 72 65 61 6d 74 20 6f 66 20 69 6e 20 79 6f 75 72  reamt of in your
1300: 20 70 68 69 6c 6f 73 6f 70 68 79 2e 27 29 3b 0a   philosophy.');.
1310: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
1320: 73 74 20 36 2e 32 20 7b 0a 20 20 53 45 4c 45 43  st 6.2 {.  SELEC
1330: 54 20 72 6f 77 69 64 2c 20 66 74 73 35 5f 74 65  T rowid, fts5_te
1340: 73 74 5f 74 6f 6b 65 6e 69 7a 65 28 74 36 29 20  st_tokenize(t6) 
1350: 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20 74 36  FROM t6 WHERE t6
1360: 20 4d 41 54 43 48 20 27 74 2a 27 0a 7d 20 7b 0a   MATCH 't*'.} {.
1370: 20 20 31 20 7b 7b 74 68 65 72 65 20 61 72 65 20    1 {{there are 
1380: 6d 6f 72 65 7d 20 7b 74 68 69 6e 67 73 20 69 6e  more} {things in
1390: 20 68 65 61 76 65 6e 20 61 6e 64 20 65 61 72 74   heaven and eart
13a0: 68 7d 7d 0a 20 20 32 20 7b 7b 68 6f 72 61 74 69  h}}.  2 {{horati
13b0: 6f 20 74 68 61 6e 20 61 72 65 7d 20 7b 64 72 65  o than are} {dre
13c0: 61 6d 74 20 6f 66 20 69 6e 20 79 6f 75 72 20 70  amt of in your p
13d0: 68 69 6c 6f 73 6f 70 68 79 7d 7d 0a 7d 0a 0a 23  hilosophy}}.}..#
13e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
13f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1410: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1420: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74  ---------.# Test
1430: 20 74 68 65 20 78 51 75 65 72 79 50 68 72 61 73   the xQueryPhras
1440: 65 28 29 20 41 50 49 0a 23 0a 72 65 73 65 74 5f  e() API.#.reset_
1450: 64 62 0a 66 74 73 35 5f 61 75 78 5f 74 65 73 74  db.fts5_aux_test
1460: 5f 66 75 6e 63 74 69 6f 6e 73 20 64 62 0a 64 6f  _functions db.do
1470: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 37 2e  _execsql_test 7.
1480: 31 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49 52  1 {.  CREATE VIR
1490: 54 55 41 4c 20 54 41 42 4c 45 20 74 37 20 55 53  TUAL TABLE t7 US
14a0: 49 4e 47 20 66 74 73 35 28 78 2c 20 79 2c 20 64  ING fts5(x, y, d
14b0: 65 74 61 69 6c 3d 25 44 45 54 41 49 4c 25 29 3b  etail=%DETAIL%);
14c0: 0a 7d 0a 64 6f 5f 74 65 73 74 20 37 2e 32 20 7b  .}.do_test 7.2 {
14d0: 0a 20 20 66 6f 72 65 61 63 68 20 7b 78 20 79 7d  .  foreach {x y}
14e0: 20 7b 0a 20 20 20 20 7b 71 20 69 20 62 20 77 20   {.    {q i b w 
14f0: 73 20 61 20 61 20 65 20 6c 20 6f 7d 20 7b 69 20  s a a e l o} {i 
1500: 62 20 7a 20 61 20 6c 20 66 20 70 20 74 20 65 20  b z a l f p t e 
1510: 75 7d 0a 20 20 20 20 7b 62 20 61 20 7a 20 74 20  u}.    {b a z t 
1520: 61 20 6c 20 6f 20 78 20 64 20 69 7d 20 7b 62 20  a l o x d i} {b 
1530: 70 20 61 20 64 20 62 20 66 20 68 20 64 20 77 20  p a d b f h d w 
1540: 79 7d 0a 20 20 20 20 7b 7a 20 6d 20 68 20 6e 20  y}.    {z m h n 
1550: 70 20 70 20 75 20 69 20 65 20 67 7d 20 7b 76 20  p p u i e g} {v 
1560: 68 20 64 20 76 20 62 20 78 20 6a 20 6a 20 63 20  h d v b x j j c 
1570: 7a 7d 0a 20 20 20 20 7b 61 20 67 20 69 20 6d 20  z}.    {a g i m 
1580: 76 20 61 20 75 20 63 20 62 20 69 7d 20 7b 70 20  v a u c b i} {p 
1590: 6b 20 73 20 6f 20 74 20 6c 20 72 20 74 20 62 20  k s o t l r t b 
15a0: 6d 7d 0a 20 20 20 20 7b 76 20 76 20 63 20 6a 20  m}.    {v v c j 
15b0: 6f 20 64 20 61 20 73 20 63 20 70 7d 20 7b 66 20  o d a s c p} {f 
15c0: 66 20 76 20 6f 20 6b 20 70 20 6f 20 66 20 6f 20  f v o k p o f o 
15d0: 67 7d 0a 20 20 7d 20 7b 0a 20 20 20 20 65 78 65  g}.  } {.    exe
15e0: 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54  csql {INSERT INT
15f0: 4f 20 74 37 20 56 41 4c 55 45 53 28 24 78 2c 20  O t7 VALUES($x, 
1600: 24 79 29 7d 0a 20 20 7d 0a 20 20 65 78 65 63 73  $y)}.  }.  execs
1610: 71 6c 20 7b 20 53 45 4c 45 43 54 20 63 6f 75 6e  ql { SELECT coun
1620: 74 28 2a 29 20 46 52 4f 4d 20 74 37 20 7d 0a 7d  t(*) FROM t7 }.}
1630: 20 7b 35 7d 0a 0a 66 6f 72 65 61 63 68 20 7b 74   {5}..foreach {t
1640: 6e 20 71 20 72 65 73 7d 20 7b 0a 20 20 31 20 61  n q res} {.  1 a
1650: 20 7b 7b 34 20 32 7d 7d 0a 20 20 32 20 62 20 7b   {{4 2}}.  2 b {
1660: 7b 33 20 34 7d 7d 0a 20 20 33 20 63 20 7b 7b 32  {3 4}}.  3 c {{2
1670: 20 31 7d 7d 0a 20 20 34 20 64 20 7b 7b 32 20 32   1}}.  4 d {{2 2
1680: 7d 7d 0a 20 20 35 20 7b 61 20 41 4e 44 20 62 7d  }}.  5 {a AND b}
1690: 20 7b 7b 34 20 32 7d 20 7b 33 20 34 7d 7d 0a 20   {{4 2} {3 4}}. 
16a0: 20 36 20 7b 61 20 4f 52 20 62 20 4f 52 20 63 20   6 {a OR b OR c 
16b0: 4f 52 20 64 7d 20 7b 7b 34 20 32 7d 20 7b 33 20  OR d} {{4 2} {3 
16c0: 34 7d 20 7b 32 20 31 7d 20 7b 32 20 32 7d 7d 0a  4} {2 1} {2 2}}.
16d0: 7d 20 7b 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c  } {.  do_execsql
16e0: 5f 74 65 73 74 20 37 2e 33 2e 24 74 6e 20 7b 20  _test 7.3.$tn { 
16f0: 0a 20 20 20 20 53 45 4c 45 43 54 20 66 74 73 35  .    SELECT fts5
1700: 5f 74 65 73 74 5f 71 75 65 72 79 70 68 72 61 73  _test_queryphras
1710: 65 28 74 37 29 20 46 52 4f 4d 20 74 37 20 57 48  e(t7) FROM t7 WH
1720: 45 52 45 20 74 37 20 4d 41 54 43 48 20 24 71 20  ERE t7 MATCH $q 
1730: 4c 49 4d 49 54 20 31 0a 20 20 7d 20 5b 6c 69 73  LIMIT 1.  } [lis
1740: 74 20 24 72 65 73 5d 0a 7d 0a 0a 64 6f 5f 65 78  t $res].}..do_ex
1750: 65 63 73 71 6c 5f 74 65 73 74 20 37 2e 34 20 7b  ecsql_test 7.4 {
1760: 0a 20 20 53 45 4c 45 43 54 20 66 74 73 35 5f 74  .  SELECT fts5_t
1770: 65 73 74 5f 72 6f 77 63 6f 75 6e 74 28 74 37 29  est_rowcount(t7)
1780: 20 46 52 4f 4d 20 74 37 20 57 48 45 52 45 20 74   FROM t7 WHERE t
1790: 37 20 4d 41 54 43 48 20 27 61 27 3b 0a 7d 20 7b  7 MATCH 'a';.} {
17a0: 35 20 35 20 35 20 35 7d 0a 0a 23 64 6f 5f 65 78  5 5 5 5}..#do_ex
17b0: 65 63 73 71 6c 5f 74 65 73 74 20 37 2e 34 20 7b  ecsql_test 7.4 {
17c0: 0a 23 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64  .#  SELECT rowid
17d0: 2c 20 62 6d 32 35 64 65 62 75 67 28 74 37 29 20  , bm25debug(t7) 
17e0: 46 52 4f 4d 20 74 37 20 57 48 45 52 45 20 74 37  FROM t7 WHERE t7
17f0: 20 4d 41 54 43 48 20 27 61 27 3b 0a 23 7d 20 7b   MATCH 'a';.#} {
1800: 35 20 35 20 35 20 35 7d 0a 23 0a 0a 23 2d 2d 2d  5 5 5 5}.#..#---
1810: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1820: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1830: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1840: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1850: 2d 2d 2d 2d 2d 2d 0a 23 0a 64 6f 5f 74 65 73 74  ------.#.do_test
1860: 20 38 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c   8.1 {.  execsql
1870: 20 7b 20 43 52 45 41 54 45 20 56 49 52 54 55 41   { CREATE VIRTUA
1880: 4c 20 54 41 42 4c 45 20 74 38 20 55 53 49 4e 47  L TABLE t8 USING
1890: 20 66 74 73 35 28 78 2c 20 79 2c 20 64 65 74 61   fts5(x, y, deta
18a0: 69 6c 3d 25 44 45 54 41 49 4c 25 29 20 7d 0a 20  il=%DETAIL%) }. 
18b0: 20 66 6f 72 65 61 63 68 20 7b 72 6f 77 69 64 20   foreach {rowid 
18c0: 78 20 79 7d 20 7b 0a 20 20 20 20 20 30 20 7b 41  x y} {.     0 {A
18d0: 20 6f 7d 20 20 20 7b 6f 20 6f 20 6f 20 43 20 6f   o}   {o o o C o
18e0: 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f 7d 0a   o o o o o o o}.
18f0: 20 20 20 20 20 31 20 7b 6f 20 6f 20 42 7d 20 7b       1 {o o B} {
1900: 6f 20 6f 20 6f 20 43 20 43 20 6f 20 6f 20 6f 20  o o o C C o o o 
1910: 6f 20 6f 20 6f 20 6f 7d 0a 20 20 20 20 20 32 20  o o o o}.     2 
1920: 7b 41 20 6f 20 6f 7d 20 7b 6f 20 6f 20 6f 20 6f  {A o o} {o o o o
1930: 20 44 20 44 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f   D D o o o o o o
1940: 7d 0a 20 20 20 20 20 33 20 7b 6f 20 42 7d 20 20  }.     3 {o B}  
1950: 20 7b 6f 20 6f 20 6f 20 6f 20 6f 20 44 20 6f 20   {o o o o o D o 
1960: 6f 20 6f 20 6f 20 6f 20 6f 7d 0a 20 20 20 20 20  o o o o o}.     
1970: 34 20 7b 45 20 6f 20 47 7d 20 7b 48 20 6f 20 6f  4 {E o G} {H o o
1980: 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f   o o o o o o o o
1990: 20 6f 7d 0a 20 20 20 20 20 35 20 7b 46 20 6f 20   o}.     5 {F o 
19a0: 47 7d 20 7b 49 20 6f 20 4a 20 6f 20 6f 20 6f 20  G} {I o J o o o 
19b0: 6f 20 6f 20 6f 20 6f 20 6f 20 6f 7d 0a 20 20 20  o o o o o o}.   
19c0: 20 20 36 20 7b 45 20 6f 20 6f 7d 20 7b 48 20 6f    6 {E o o} {H o
19d0: 20 4a 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f   J o o o o o o o
19e0: 20 6f 20 6f 7d 0a 20 20 20 20 20 37 20 7b 6f 20   o o}.     7 {o 
19f0: 6f 20 6f 7d 20 7b 6f 20 6f 20 6f 20 6f 20 6f 20  o o} {o o o o o 
1a00: 6f 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f 7d 0a 20  o o o o o o o}. 
1a10: 20 20 20 20 39 20 7b 6f 20 6f 20 6f 7d 20 7b 6f      9 {o o o} {o
1a20: 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f   o o o o o o o o
1a30: 20 6f 20 6f 20 6f 7d 0a 20 20 7d 20 7b 0a 20 20   o o o}.  } {.  
1a40: 20 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45    execsql { INSE
1a50: 52 54 20 49 4e 54 4f 20 74 38 28 72 6f 77 69 64  RT INTO t8(rowid
1a60: 2c 20 78 2c 20 79 29 20 56 41 4c 55 45 53 28 24  , x, y) VALUES($
1a70: 72 6f 77 69 64 2c 20 24 78 2c 20 24 79 29 20 7d  rowid, $x, $y) }
1a80: 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 66 6f 72 65 61  .  }.} {}..forea
1a90: 63 68 20 7b 74 6e 20 71 20 72 65 73 7d 20 7b 0a  ch {tn q res} {.
1aa0: 20 20 31 20 7b 61 7d 20 7b 30 20 32 7d 0a 20 20    1 {a} {0 2}.  
1ab0: 32 20 7b 62 7d 20 7b 33 20 31 7d 0a 20 20 33 20  2 {b} {3 1}.  3 
1ac0: 7b 63 7d 20 7b 31 20 30 7d 0a 20 20 34 20 7b 64  {c} {1 0}.  4 {d
1ad0: 7d 20 7b 32 20 33 7d 0a 20 20 35 20 7b 67 20 41  } {2 3}.  5 {g A
1ae0: 4e 44 20 28 65 20 4f 52 20 66 29 7d 20 7b 35 20  ND (e OR f)} {5 
1af0: 34 7d 0a 20 20 36 20 7b 6a 20 41 4e 44 20 28 68  4}.  6 {j AND (h
1b00: 20 4f 52 20 69 29 7d 20 7b 35 20 36 7d 0a 7d 20   OR i)} {5 6}.} 
1b10: 7b 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {.  do_execsql_t
1b20: 65 73 74 20 38 2e 32 2e 24 74 6e 2e 31 20 7b 0a  est 8.2.$tn.1 {.
1b30: 20 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64      SELECT rowid
1b40: 20 46 52 4f 4d 20 74 38 20 57 48 45 52 45 20 74   FROM t8 WHERE t
1b50: 38 20 4d 41 54 43 48 20 24 71 20 4f 52 44 45 52  8 MATCH $q ORDER
1b60: 20 42 59 20 62 6d 32 35 28 74 38 29 3b 0a 20 20   BY bm25(t8);.  
1b70: 7d 20 24 72 65 73 0a 0a 20 20 64 6f 5f 65 78 65  } $res..  do_exe
1b80: 63 73 71 6c 5f 74 65 73 74 20 38 2e 32 2e 24 74  csql_test 8.2.$t
1b90: 6e 2e 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  n.2 {.    SELECT
1ba0: 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 38 20 57   rowid FROM t8 W
1bb0: 48 45 52 45 20 74 38 20 4d 41 54 43 48 20 24 71  HERE t8 MATCH $q
1bc0: 20 4f 52 44 45 52 20 42 59 20 2b 72 61 6e 6b 3b   ORDER BY +rank;
1bd0: 0a 20 20 7d 20 24 72 65 73 0a 0a 20 20 64 6f 5f  .  } $res..  do_
1be0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 38 2e 32  execsql_test 8.2
1bf0: 2e 24 74 6e 2e 33 20 7b 0a 20 20 20 20 53 45 4c  .$tn.3 {.    SEL
1c00: 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74  ECT rowid FROM t
1c10: 38 20 57 48 45 52 45 20 74 38 20 4d 41 54 43 48  8 WHERE t8 MATCH
1c20: 20 24 71 20 4f 52 44 45 52 20 42 59 20 72 61 6e   $q ORDER BY ran
1c30: 6b 3b 0a 20 20 7d 20 24 72 65 73 0a 7d 0a 0a 23  k;.  } $res.}..#
1c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74  ---------.# Test
1c90: 20 78 50 68 72 61 73 65 43 6f 75 6e 74 28 29 20   xPhraseCount() 
1ca0: 66 6f 72 20 73 6f 6d 65 20 64 69 66 66 65 72 65  for some differe
1cb0: 6e 74 20 71 75 65 72 69 65 73 2e 0a 23 0a 64 6f  nt queries..#.do
1cc0: 5f 74 65 73 74 20 39 2e 31 20 7b 0a 20 20 65 78  _test 9.1 {.  ex
1cd0: 65 63 73 71 6c 20 7b 20 43 52 45 41 54 45 20 56  ecsql { CREATE V
1ce0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 39 20  IRTUAL TABLE t9 
1cf0: 55 53 49 4e 47 20 66 74 73 35 28 78 29 20 7d 0a  USING fts5(x) }.
1d00: 20 20 66 6f 72 65 61 63 68 20 78 20 7b 0a 20 20    foreach x {.  
1d10: 20 20 22 61 20 62 20 63 22 20 22 64 20 65 20 66    "a b c" "d e f
1d20: 22 0a 20 20 7d 20 7b 0a 20 20 20 20 65 78 65 63  ".  } {.    exec
1d30: 73 71 6c 20 7b 20 49 4e 53 45 52 54 20 49 4e 54  sql { INSERT INT
1d40: 4f 20 74 39 20 56 41 4c 55 45 53 28 24 78 29 20  O t9 VALUES($x) 
1d50: 7d 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 66 6f 72 65  }.  }.} {}..fore
1d60: 61 63 68 20 7b 74 6e 20 71 20 63 6e 74 7d 20 7b  ach {tn q cnt} {
1d70: 0a 20 20 31 20 7b 61 20 41 4e 44 20 62 7d 20 20  .  1 {a AND b}  
1d80: 20 20 20 20 32 0a 20 20 32 20 7b 61 20 4f 52 20      2.  2 {a OR 
1d90: 62 7d 20 20 20 20 20 20 20 32 0a 20 20 33 20 7b  b}       2.  3 {
1da0: 61 20 4f 52 20 62 20 4f 52 20 63 7d 20 20 33 0a  a OR b OR c}  3.
1db0: 20 20 34 20 7b 4e 45 41 52 28 61 20 62 29 7d 20    4 {NEAR(a b)} 
1dc0: 20 20 20 32 0a 7d 20 7b 0a 20 20 64 6f 5f 65 78     2.} {.  do_ex
1dd0: 65 63 73 71 6c 5f 74 65 73 74 20 39 2e 32 2e 24  ecsql_test 9.2.$
1de0: 74 6e 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  tn {.    SELECT 
1df0: 66 74 73 35 5f 74 65 73 74 5f 70 68 72 61 73 65  fts5_test_phrase
1e00: 63 6f 75 6e 74 28 74 39 29 20 46 52 4f 4d 20 74  count(t9) FROM t
1e10: 39 20 57 48 45 52 45 20 74 39 20 4d 41 54 43 48  9 WHERE t9 MATCH
1e20: 20 24 71 20 4c 49 4d 49 54 20 31 0a 20 20 7d 20   $q LIMIT 1.  } 
1e30: 24 63 6e 74 0a 7d 0a 0a 7d 0a 0a 66 69 6e 69 73  $cnt.}..}..finis
1e40: 68 5f 74 65 73 74 0a                             h_test.