/ Hex Artifact Content
Login

Artifact ddc558e3e3b52db0101f7541b2e3849b77052c92:


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 64 6f 5f 65 78 65 63 73 71  urn.}..do_execsq
02a0: 6c 5f 74 65 73 74 20 31 2e 30 20 7b 0a 20 20 43  l_test 1.0 {.  C
02b0: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
02c0: 42 4c 45 20 74 31 20 55 53 49 4e 47 20 66 74 73  BLE t1 USING fts
02d0: 35 28 61 2c 20 62 29 3b 0a 20 20 49 4e 53 45 52  5(a, b);.  INSER
02e0: 54 20 49 4e 54 4f 20 74 31 28 74 31 2c 20 72 61  T INTO t1(t1, ra
02f0: 6e 6b 29 20 56 41 4c 55 45 53 28 27 70 67 73 7a  nk) VALUES('pgsz
0300: 27 2c 20 33 32 29 3b 0a 7d 0a 0a 64 6f 5f 65 78  ', 32);.}..do_ex
0310: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 31 20 7b  ecsql_test 1.1 {
0320: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
0330: 31 20 56 41 4c 55 45 53 28 27 68 65 6c 6c 6f 27  1 VALUES('hello'
0340: 2c 20 27 77 6f 72 6c 64 27 29 3b 0a 20 20 53 45  , 'world');.  SE
0350: 4c 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20  LECT rowid FROM 
0360: 74 31 20 57 48 45 52 45 20 74 31 20 4d 41 54 43  t1 WHERE t1 MATC
0370: 48 20 27 68 65 6c 6c 6f 27 20 4f 52 44 45 52 20  H 'hello' ORDER 
0380: 42 59 20 72 6f 77 69 64 20 41 53 43 3b 0a 7d 20  BY rowid ASC;.} 
0390: 7b 31 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  {1}..do_execsql_
03a0: 74 65 73 74 20 31 2e 32 20 7b 0a 20 20 49 4e 53  test 1.2 {.  INS
03b0: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
03c0: 45 53 28 27 77 6f 72 6c 64 27 2c 20 27 68 65 6c  ES('world', 'hel
03d0: 6c 6f 27 29 3b 0a 20 20 53 45 4c 45 43 54 20 72  lo');.  SELECT r
03e0: 6f 77 69 64 20 46 52 4f 4d 20 74 31 20 57 48 45  owid FROM t1 WHE
03f0: 52 45 20 74 31 20 4d 41 54 43 48 20 27 68 65 6c  RE t1 MATCH 'hel
0400: 6c 6f 27 20 4f 52 44 45 52 20 42 59 20 72 6f 77  lo' ORDER BY row
0410: 69 64 20 41 53 43 3b 0a 7d 20 7b 31 20 32 7d 0a  id ASC;.} {1 2}.
0420: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0430: 20 31 2e 33 20 7b 0a 20 20 49 4e 53 45 52 54 20   1.3 {.  INSERT 
0440: 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27  INTO t1 VALUES('
0450: 77 6f 72 6c 64 27 2c 20 27 77 6f 72 6c 64 27 29  world', 'world')
0460: 3b 0a 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64  ;.  SELECT rowid
0470: 20 46 52 4f 4d 20 74 31 20 57 48 45 52 45 20 74   FROM t1 WHERE t
0480: 31 20 4d 41 54 43 48 20 27 68 65 6c 6c 6f 27 20  1 MATCH 'hello' 
0490: 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20 41  ORDER BY rowid A
04a0: 53 43 3b 0a 7d 20 7b 31 20 32 7d 0a 0a 64 6f 5f  SC;.} {1 2}..do_
04b0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 34  execsql_test 1.4
04c0: 2e 31 20 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e  .1 {.  INSERT IN
04d0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 68 65  TO t1 VALUES('he
04e0: 6c 6c 6f 27 2c 20 27 68 65 6c 6c 6f 27 29 3b 0a  llo', 'hello');.
04f0: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
0500: 73 74 20 31 2e 34 2e 32 20 7b 0a 20 20 53 45 4c  st 1.4.2 {.  SEL
0510: 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74  ECT rowid FROM t
0520: 31 20 57 48 45 52 45 20 74 31 20 4d 41 54 43 48  1 WHERE t1 MATCH
0530: 20 27 68 65 6c 6c 6f 27 20 4f 52 44 45 52 20 42   'hello' ORDER B
0540: 59 20 72 6f 77 69 64 20 41 53 43 3b 0a 7d 20 7b  Y rowid ASC;.} {
0550: 31 20 32 20 34 7d 0a 0a 66 74 73 35 5f 61 75 78  1 2 4}..fts5_aux
0560: 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 73 20  _test_functions 
0570: 64 62 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  db..#-----------
0580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
05a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
05b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
05c0: 20 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73   .do_execsql_tes
05d0: 74 20 32 2e 30 20 7b 0a 20 20 43 52 45 41 54 45  t 2.0 {.  CREATE
05e0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74   VIRTUAL TABLE t
05f0: 32 20 55 53 49 4e 47 20 66 74 73 35 28 78 2c 20  2 USING fts5(x, 
0600: 79 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  y);.  INSERT INT
0610: 4f 20 74 32 20 56 41 4c 55 45 53 28 27 75 20 74  O t2 VALUES('u t
0620: 20 6c 20 77 20 77 20 6d 20 73 27 2c 20 27 6d 20   l w w m s', 'm 
0630: 66 20 6d 20 6f 20 6c 20 74 20 6b 20 6f 20 70 20  f m o l t k o p 
0640: 65 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  e');.  INSERT IN
0650: 54 4f 20 74 32 20 56 41 4c 55 45 53 28 27 66 20  TO t2 VALUES('f 
0660: 67 20 71 20 65 20 6c 20 6e 20 64 20 6d 20 7a 20  g q e l n d m z 
0670: 78 20 71 27 2c 20 27 7a 20 73 20 69 20 69 20 69  x q', 'z s i i i
0680: 20 6d 20 66 20 77 20 77 20 66 20 6e 20 67 20 70   m f w w f n g p
0690: 27 29 3b 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71  ');.}..do_execsq
06a0: 6c 5f 74 65 73 74 20 32 2e 31 20 7b 0a 20 20 53  l_test 2.1 {.  S
06b0: 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 66 74 73  ELECT rowid, fts
06c0: 35 5f 74 65 73 74 5f 70 6f 73 6c 69 73 74 28 74  5_test_poslist(t
06d0: 32 29 20 46 52 4f 4d 20 74 32 20 0a 20 20 57 48  2) FROM t2 .  WH
06e0: 45 52 45 20 74 32 20 4d 41 54 43 48 20 27 6d 27  ERE t2 MATCH 'm'
06f0: 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 3b   ORDER BY rowid;
0700: 0a 7d 20 7b 0a 20 20 31 20 7b 30 2e 30 2e 35 20  .} {.  1 {0.0.5 
0710: 30 2e 31 2e 30 20 30 2e 31 2e 32 7d 20 0a 20 20  0.1.0 0.1.2} .  
0720: 32 20 7b 30 2e 30 2e 37 20 30 2e 31 2e 35 7d 0a  2 {0.0.7 0.1.5}.
0730: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
0740: 73 74 20 32 2e 32 20 7b 0a 20 20 53 45 4c 45 43  st 2.2 {.  SELEC
0750: 54 20 72 6f 77 69 64 2c 20 66 74 73 35 5f 74 65  T rowid, fts5_te
0760: 73 74 5f 70 6f 73 6c 69 73 74 28 74 32 29 20 46  st_poslist(t2) F
0770: 52 4f 4d 20 74 32 20 0a 20 20 57 48 45 52 45 20  ROM t2 .  WHERE 
0780: 74 32 20 4d 41 54 43 48 20 27 75 20 4f 52 20 71  t2 MATCH 'u OR q
0790: 27 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  ' ORDER BY rowid
07a0: 3b 0a 7d 20 7b 0a 20 20 31 20 7b 30 2e 30 2e 30  ;.} {.  1 {0.0.0
07b0: 7d 0a 20 20 32 20 7b 31 2e 30 2e 32 20 31 2e 30  }.  2 {1.0.2 1.0
07c0: 2e 31 30 7d 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73  .10}.}..do_execs
07d0: 71 6c 5f 74 65 73 74 20 32 2e 33 20 7b 0a 20 20  ql_test 2.3 {.  
07e0: 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 66 74  SELECT rowid, ft
07f0: 73 35 5f 74 65 73 74 5f 70 6f 73 6c 69 73 74 28  s5_test_poslist(
0800: 74 32 29 20 46 52 4f 4d 20 74 32 20 0a 20 20 57  t2) FROM t2 .  W
0810: 48 45 52 45 20 74 32 20 4d 41 54 43 48 20 27 79  HERE t2 MATCH 'y
0820: 3a 6f 27 20 4f 52 44 45 52 20 42 59 20 72 6f 77  :o' ORDER BY row
0830: 69 64 3b 0a 7d 20 7b 0a 20 20 31 20 7b 30 2e 31  id;.} {.  1 {0.1
0840: 2e 33 20 30 2e 31 2e 37 7d 0a 7d 0a 0a 23 2d 2d  .3 0.1.7}.}..#--
0850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0860: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0870: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0880: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0890: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 0a 64 6f 5f 65 78  -------.# .do_ex
08a0: 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 30 20 7b  ecsql_test 3.0 {
08b0: 0a 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41  .  CREATE VIRTUA
08c0: 4c 20 54 41 42 4c 45 20 74 33 20 55 53 49 4e 47  L TABLE t3 USING
08d0: 20 66 74 73 35 28 78 2c 20 79 29 3b 0a 20 20 49   fts5(x, y);.  I
08e0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41  NSERT INTO t3 VA
08f0: 4c 55 45 53 28 20 27 6a 20 66 20 68 20 6f 20 78  LUES( 'j f h o x
0900: 20 78 20 61 20 7a 20 67 20 62 20 61 20 66 20 61   x a z g b a f a
0910: 20 6d 20 69 20 62 27 2c 20 27 6a 20 7a 20 63 20   m i b', 'j z c 
0920: 7a 20 79 20 78 20 77 20 74 27 29 3b 0a 20 20 49  z y x w t');.  I
0930: 4e 53 45 52 54 20 49 4e 54 4f 20 74 33 20 56 41  NSERT INTO t3 VA
0940: 4c 55 45 53 28 20 27 72 20 63 27 2c 20 27 27 29  LUES( 'r c', '')
0950: 3b 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  ;.}..do_execsql_
0960: 74 65 73 74 20 33 2e 31 20 7b 0a 20 20 53 45 4c  test 3.1 {.  SEL
0970: 45 43 54 20 72 6f 77 69 64 2c 20 66 74 73 35 5f  ECT rowid, fts5_
0980: 74 65 73 74 5f 70 6f 73 6c 69 73 74 28 74 33 29  test_poslist(t3)
0990: 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 74   FROM t3 WHERE t
09a0: 33 20 4d 41 54 43 48 20 27 4e 45 41 52 28 61 20  3 MATCH 'NEAR(a 
09b0: 62 29 27 3b 0a 7d 20 7b 0a 20 20 31 20 7b 30 2e  b)';.} {.  1 {0.
09c0: 30 2e 36 20 31 2e 30 2e 39 20 30 2e 30 2e 31 30  0.6 1.0.9 0.0.10
09d0: 20 30 2e 30 2e 31 32 20 31 2e 30 2e 31 35 7d 0a   0.0.12 1.0.15}.
09e0: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
09f0: 73 74 20 33 2e 32 20 7b 0a 20 20 53 45 4c 45 43  st 3.2 {.  SELEC
0a00: 54 20 72 6f 77 69 64 2c 20 66 74 73 35 5f 74 65  T rowid, fts5_te
0a10: 73 74 5f 70 6f 73 6c 69 73 74 28 74 33 29 20 46  st_poslist(t3) F
0a20: 52 4f 4d 20 74 33 20 57 48 45 52 45 20 74 33 20  ROM t3 WHERE t3 
0a30: 4d 41 54 43 48 20 27 4e 45 41 52 28 72 20 63 29  MATCH 'NEAR(r c)
0a40: 27 3b 0a 7d 20 7b 0a 20 20 32 20 7b 30 2e 30 2e  ';.} {.  2 {0.0.
0a50: 30 20 31 2e 30 2e 31 7d 0a 7d 0a 0a 64 6f 5f 65  0 1.0.1}.}..do_e
0a60: 78 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 33 20  xecsql_test 3.3 
0a70: 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  {.  INSERT INTO 
0a80: 74 33 20 0a 20 20 56 41 4c 55 45 53 28 27 6b 20  t3 .  VALUES('k 
0a90: 78 20 6a 20 72 20 6d 20 61 20 64 20 6f 20 69 20  x j r m a d o i 
0aa0: 7a 20 6a 27 2c 20 27 72 20 74 20 74 20 74 20 66  z j', 'r t t t f
0ab0: 20 65 20 62 20 72 20 78 20 69 20 76 20 6a 20 76   e b r x i v j v
0ac0: 20 67 20 6f 27 29 3b 0a 20 20 53 45 4c 45 43 54   g o');.  SELECT
0ad0: 20 72 6f 77 69 64 2c 20 66 74 73 35 5f 74 65 73   rowid, fts5_tes
0ae0: 74 5f 70 6f 73 6c 69 73 74 28 74 33 29 20 0a 20  t_poslist(t3) . 
0af0: 20 46 52 4f 4d 20 74 33 20 57 48 45 52 45 20 74   FROM t3 WHERE t
0b00: 33 20 4d 41 54 43 48 20 27 61 20 4f 52 20 62 20  3 MATCH 'a OR b 
0b10: 41 4e 44 20 63 27 3b 0a 7d 20 7b 0a 20 20 31 20  AND c';.} {.  1 
0b20: 7b 30 2e 30 2e 36 20 31 2e 30 2e 39 20 30 2e 30  {0.0.6 1.0.9 0.0
0b30: 2e 31 30 20 30 2e 30 2e 31 32 20 31 2e 30 2e 31  .10 0.0.12 1.0.1
0b40: 35 20 32 2e 31 2e 32 7d 0a 20 20 33 20 30 2e 30  5 2.1.2}.  3 0.0
0b50: 2e 35 20 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  .5 .}..#--------
0b60: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ba0: 2d 0a 23 20 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  -.# .do_execsql_
0bb0: 74 65 73 74 20 34 2e 30 20 7b 0a 20 20 43 52 45  test 4.0 {.  CRE
0bc0: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
0bd0: 45 20 74 34 20 55 53 49 4e 47 20 66 74 73 35 28  E t4 USING fts5(
0be0: 78 2c 20 79 29 3b 0a 20 20 49 4e 53 45 52 54 20  x, y);.  INSERT 
0bf0: 49 4e 54 4f 20 74 34 20 0a 20 20 56 41 4c 55 45  INTO t4 .  VALUE
0c00: 53 28 27 6b 20 78 20 6a 20 72 20 6d 20 61 20 64  S('k x j r m a d
0c10: 20 6f 20 69 20 7a 20 6a 27 2c 20 27 72 20 74 20   o i z j', 'r t 
0c20: 74 20 74 20 66 20 65 20 62 20 72 20 78 20 69 20  t t f e b r x i 
0c30: 76 20 6a 20 76 20 67 20 6f 27 29 3b 0a 7d 0a 0a  v j v g o');.}..
0c40: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0c50: 34 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 72  4.1 {.  SELECT r
0c60: 6f 77 69 64 2c 20 66 74 73 35 5f 74 65 73 74 5f  owid, fts5_test_
0c70: 70 6f 73 6c 69 73 74 28 74 34 29 20 46 52 4f 4d  poslist(t4) FROM
0c80: 20 74 34 20 57 48 45 52 45 20 74 34 20 4d 41 54   t4 WHERE t4 MAT
0c90: 43 48 20 27 61 20 4f 52 20 62 20 41 4e 44 20 63  CH 'a OR b AND c
0ca0: 27 3b 0a 7d 20 7b 0a 20 20 31 20 30 2e 30 2e 35  ';.} {.  1 0.0.5
0cb0: 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .}..#-----------
0cc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0cd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0ce0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0cf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
0d00: 20 54 65 73 74 20 74 68 61 74 20 74 68 65 20 78   Test that the x
0d10: 43 6f 6c 75 6d 6e 53 69 7a 65 28 29 20 61 6e 64  ColumnSize() and
0d20: 20 78 43 6f 6c 75 6d 6e 41 76 67 73 69 7a 65 28   xColumnAvgsize(
0d30: 29 20 41 50 49 73 20 77 6f 72 6b 2e 0a 23 0a 72  ) APIs work..#.r
0d40: 65 73 65 74 5f 64 62 0a 66 74 73 35 5f 61 75 78  eset_db.fts5_aux
0d50: 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e 73 20  _test_functions 
0d60: 64 62 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  db..do_execsql_t
0d70: 65 73 74 20 35 2e 31 20 7b 0a 20 20 43 52 45 41  est 5.1 {.  CREA
0d80: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
0d90: 20 74 35 20 55 53 49 4e 47 20 66 74 73 35 28 78   t5 USING fts5(x
0da0: 2c 20 79 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  , y);.  INSERT I
0db0: 4e 54 4f 20 74 35 20 56 41 4c 55 45 53 28 27 61  NTO t5 VALUES('a
0dc0: 20 62 20 63 20 64 27 2c 20 27 65 20 66 20 67 20   b c d', 'e f g 
0dd0: 68 20 69 20 6a 27 29 3b 0a 20 20 49 4e 53 45 52  h i j');.  INSER
0de0: 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55 45 53  T INTO t5 VALUES
0df0: 28 27 27 2c 20 27 61 27 29 3b 0a 20 20 49 4e 53  ('', 'a');.  INS
0e00: 45 52 54 20 49 4e 54 4f 20 74 35 20 56 41 4c 55  ERT INTO t5 VALU
0e10: 45 53 28 27 61 27 2c 20 27 27 29 3b 0a 7d 0a 64  ES('a', '');.}.d
0e20: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35  o_execsql_test 5
0e30: 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20 72 6f  .2 {.  SELECT ro
0e40: 77 69 64 2c 20 66 74 73 35 5f 74 65 73 74 5f 63  wid, fts5_test_c
0e50: 6f 6c 75 6d 6e 73 69 7a 65 28 74 35 29 20 46 52  olumnsize(t5) FR
0e60: 4f 4d 20 74 35 20 57 48 45 52 45 20 74 35 20 4d  OM t5 WHERE t5 M
0e70: 41 54 43 48 20 27 61 27 0a 20 20 4f 52 44 45 52  ATCH 'a'.  ORDER
0e80: 20 42 59 20 72 6f 77 69 64 20 44 45 53 43 3b 0a   BY rowid DESC;.
0e90: 7d 20 7b 0a 20 20 33 20 7b 31 20 30 7d 0a 20 20  } {.  3 {1 0}.  
0ea0: 32 20 7b 30 20 31 7d 0a 20 20 31 20 7b 34 20 36  2 {0 1}.  1 {4 6
0eb0: 7d 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  }.}..do_execsql_
0ec0: 74 65 73 74 20 35 2e 33 20 7b 0a 20 20 53 45 4c  test 5.3 {.  SEL
0ed0: 45 43 54 20 72 6f 77 69 64 2c 20 66 74 73 35 5f  ECT rowid, fts5_
0ee0: 74 65 73 74 5f 63 6f 6c 75 6d 6e 74 65 78 74 28  test_columntext(
0ef0: 74 35 29 20 46 52 4f 4d 20 74 35 20 57 48 45 52  t5) FROM t5 WHER
0f00: 45 20 74 35 20 4d 41 54 43 48 20 27 61 27 0a 20  E t5 MATCH 'a'. 
0f10: 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 20   ORDER BY rowid 
0f20: 44 45 53 43 3b 0a 7d 20 7b 0a 20 20 33 20 7b 61  DESC;.} {.  3 {a
0f30: 20 7b 7d 7d 0a 20 20 32 20 7b 7b 7d 20 61 7d 0a   {}}.  2 {{} a}.
0f40: 20 20 31 20 7b 7b 61 20 62 20 63 20 64 7d 20 7b    1 {{a b c d} {
0f50: 65 20 66 20 67 20 68 20 69 20 6a 7d 7d 0a 7d 0a  e f g h i j}}.}.
0f60: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0f70: 20 35 2e 34 20 7b 0a 20 20 53 45 4c 45 43 54 20   5.4 {.  SELECT 
0f80: 72 6f 77 69 64 2c 20 66 74 73 35 5f 74 65 73 74  rowid, fts5_test
0f90: 5f 63 6f 6c 75 6d 6e 74 6f 74 61 6c 73 69 7a 65  _columntotalsize
0fa0: 28 74 35 29 20 46 52 4f 4d 20 74 35 20 57 48 45  (t5) FROM t5 WHE
0fb0: 52 45 20 74 35 20 4d 41 54 43 48 20 27 61 27 0a  RE t5 MATCH 'a'.
0fc0: 20 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64    ORDER BY rowid
0fd0: 20 44 45 53 43 3b 0a 7d 20 7b 0a 20 20 33 20 7b   DESC;.} {.  3 {
0fe0: 35 20 37 7d 0a 20 20 32 20 7b 35 20 37 7d 0a 20  5 7}.  2 {5 7}. 
0ff0: 20 31 20 7b 35 20 37 7d 0a 7d 0a 0a 64 6f 5f 65   1 {5 7}.}..do_e
1000: 78 65 63 73 71 6c 5f 74 65 73 74 20 35 2e 35 20  xecsql_test 5.5 
1010: 7b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  {.  INSERT INTO 
1020: 74 35 20 56 41 4c 55 45 53 28 27 78 20 79 20 7a  t5 VALUES('x y z
1030: 27 2c 20 27 76 20 77 20 78 20 79 20 7a 27 29 3b  ', 'v w x y z');
1040: 0a 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c  .  SELECT rowid,
1050: 20 66 74 73 35 5f 74 65 73 74 5f 63 6f 6c 75 6d   fts5_test_colum
1060: 6e 74 6f 74 61 6c 73 69 7a 65 28 74 35 29 20 46  ntotalsize(t5) F
1070: 52 4f 4d 20 74 35 20 57 48 45 52 45 20 74 35 20  ROM t5 WHERE t5 
1080: 4d 41 54 43 48 20 27 61 27 0a 20 20 4f 52 44 45  MATCH 'a'.  ORDE
1090: 52 20 42 59 20 72 6f 77 69 64 20 44 45 53 43 3b  R BY rowid DESC;
10a0: 0a 7d 20 7b 0a 20 20 33 20 7b 38 20 31 32 7d 0a  .} {.  3 {8 12}.
10b0: 20 20 32 20 7b 38 20 31 32 7d 0a 20 20 31 20 7b    2 {8 12}.  1 {
10c0: 38 20 31 32 7d 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d  8 12}.}..#------
10d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
10f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1110: 2d 2d 2d 0a 23 20 54 65 73 74 20 74 68 65 20 78  ---.# Test the x
1120: 54 6f 6b 65 6e 69 7a 65 28 29 20 41 50 49 0a 23  Tokenize() API.#
1130: 0a 72 65 73 65 74 5f 64 62 0a 66 74 73 35 5f 61  .reset_db.fts5_a
1140: 75 78 5f 74 65 73 74 5f 66 75 6e 63 74 69 6f 6e  ux_test_function
1150: 73 20 64 62 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  s db.do_execsql_
1160: 74 65 73 74 20 36 2e 31 20 7b 0a 20 20 43 52 45  test 6.1 {.  CRE
1170: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
1180: 45 20 74 36 20 55 53 49 4e 47 20 66 74 73 35 28  E t6 USING fts5(
1190: 78 2c 20 79 29 3b 0a 20 20 49 4e 53 45 52 54 20  x, y);.  INSERT 
11a0: 49 4e 54 4f 20 74 36 20 56 41 4c 55 45 53 28 27  INTO t6 VALUES('
11b0: 54 68 65 72 65 20 61 72 65 20 6d 6f 72 65 27 2c  There are more',
11c0: 20 27 74 68 69 6e 67 73 20 69 6e 20 68 65 61 76   'things in heav
11d0: 65 6e 20 61 6e 64 20 65 61 72 74 68 27 29 3b 0a  en and earth');.
11e0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 36    INSERT INTO t6
11f0: 20 56 41 4c 55 45 53 28 27 2c 20 48 6f 72 61 74   VALUES(', Horat
1200: 69 6f 2c 20 54 68 61 6e 20 61 72 65 27 2c 20 27  io, Than are', '
1210: 64 72 65 61 6d 74 20 6f 66 20 69 6e 20 79 6f 75  dreamt of in you
1220: 72 20 70 68 69 6c 6f 73 6f 70 68 79 2e 27 29 3b  r philosophy.');
1230: 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  .}..do_execsql_t
1240: 65 73 74 20 36 2e 32 20 7b 0a 20 20 53 45 4c 45  est 6.2 {.  SELE
1250: 43 54 20 72 6f 77 69 64 2c 20 66 74 73 35 5f 74  CT rowid, fts5_t
1260: 65 73 74 5f 74 6f 6b 65 6e 69 7a 65 28 74 36 29  est_tokenize(t6)
1270: 20 46 52 4f 4d 20 74 36 20 57 48 45 52 45 20 74   FROM t6 WHERE t
1280: 36 20 4d 41 54 43 48 20 27 74 2a 27 0a 7d 20 7b  6 MATCH 't*'.} {
1290: 0a 20 20 31 20 7b 7b 74 68 65 72 65 20 61 72 65  .  1 {{there are
12a0: 20 6d 6f 72 65 7d 20 7b 74 68 69 6e 67 73 20 69   more} {things i
12b0: 6e 20 68 65 61 76 65 6e 20 61 6e 64 20 65 61 72  n heaven and ear
12c0: 74 68 7d 7d 0a 20 20 32 20 7b 7b 68 6f 72 61 74  th}}.  2 {{horat
12d0: 69 6f 20 74 68 61 6e 20 61 72 65 7d 20 7b 64 72  io than are} {dr
12e0: 65 61 6d 74 20 6f 66 20 69 6e 20 79 6f 75 72 20  eamt of in your 
12f0: 70 68 69 6c 6f 73 6f 70 68 79 7d 7d 0a 7d 0a 0a  philosophy}}.}..
1300: 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  #---------------
1310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1340: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73  ----------.# Tes
1350: 74 20 74 68 65 20 78 51 75 65 72 79 50 68 72 61  t the xQueryPhra
1360: 73 65 28 29 20 41 50 49 0a 23 0a 72 65 73 65 74  se() API.#.reset
1370: 5f 64 62 0a 66 74 73 35 5f 61 75 78 5f 74 65 73  _db.fts5_aux_tes
1380: 74 5f 66 75 6e 63 74 69 6f 6e 73 20 64 62 0a 64  t_functions db.d
1390: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 37  o_execsql_test 7
13a0: 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49  .1 {.  CREATE VI
13b0: 52 54 55 41 4c 20 54 41 42 4c 45 20 74 37 20 55  RTUAL TABLE t7 U
13c0: 53 49 4e 47 20 66 74 73 35 28 78 2c 20 79 29 3b  SING fts5(x, y);
13d0: 0a 7d 0a 64 6f 5f 74 65 73 74 20 37 2e 32 20 7b  .}.do_test 7.2 {
13e0: 0a 20 20 66 6f 72 65 61 63 68 20 7b 78 20 79 7d  .  foreach {x y}
13f0: 20 7b 0a 20 20 20 20 7b 71 20 69 20 62 20 77 20   {.    {q i b w 
1400: 73 20 61 20 61 20 65 20 6c 20 6f 7d 20 7b 69 20  s a a e l o} {i 
1410: 62 20 7a 20 61 20 6c 20 66 20 70 20 74 20 65 20  b z a l f p t e 
1420: 75 7d 0a 20 20 20 20 7b 62 20 61 20 7a 20 74 20  u}.    {b a z t 
1430: 61 20 6c 20 6f 20 78 20 64 20 69 7d 20 7b 62 20  a l o x d i} {b 
1440: 70 20 61 20 64 20 62 20 66 20 68 20 64 20 77 20  p a d b f h d w 
1450: 79 7d 0a 20 20 20 20 7b 7a 20 6d 20 68 20 6e 20  y}.    {z m h n 
1460: 70 20 70 20 75 20 69 20 65 20 67 7d 20 7b 76 20  p p u i e g} {v 
1470: 68 20 64 20 76 20 62 20 78 20 6a 20 6a 20 63 20  h d v b x j j c 
1480: 7a 7d 0a 20 20 20 20 7b 61 20 67 20 69 20 6d 20  z}.    {a g i m 
1490: 76 20 61 20 75 20 63 20 62 20 69 7d 20 7b 70 20  v a u c b i} {p 
14a0: 6b 20 73 20 6f 20 74 20 6c 20 72 20 74 20 62 20  k s o t l r t b 
14b0: 6d 7d 0a 20 20 20 20 7b 76 20 76 20 63 20 6a 20  m}.    {v v c j 
14c0: 6f 20 64 20 61 20 73 20 63 20 70 7d 20 7b 66 20  o d a s c p} {f 
14d0: 66 20 76 20 6f 20 6b 20 70 20 6f 20 66 20 6f 20  f v o k p o f o 
14e0: 67 7d 0a 20 20 7d 20 7b 0a 20 20 20 20 65 78 65  g}.  } {.    exe
14f0: 63 73 71 6c 20 7b 49 4e 53 45 52 54 20 49 4e 54  csql {INSERT INT
1500: 4f 20 74 37 20 56 41 4c 55 45 53 28 24 78 2c 20  O t7 VALUES($x, 
1510: 24 79 29 7d 0a 20 20 7d 0a 20 20 65 78 65 63 73  $y)}.  }.  execs
1520: 71 6c 20 7b 20 53 45 4c 45 43 54 20 63 6f 75 6e  ql { SELECT coun
1530: 74 28 2a 29 20 46 52 4f 4d 20 74 37 20 7d 0a 7d  t(*) FROM t7 }.}
1540: 20 7b 35 7d 0a 0a 66 6f 72 65 61 63 68 20 7b 74   {5}..foreach {t
1550: 6e 20 71 20 72 65 73 7d 20 7b 0a 20 20 31 20 61  n q res} {.  1 a
1560: 20 7b 7b 34 20 32 7d 7d 0a 20 20 32 20 62 20 7b   {{4 2}}.  2 b {
1570: 7b 33 20 34 7d 7d 0a 20 20 33 20 63 20 7b 7b 32  {3 4}}.  3 c {{2
1580: 20 31 7d 7d 0a 20 20 34 20 64 20 7b 7b 32 20 32   1}}.  4 d {{2 2
1590: 7d 7d 0a 20 20 35 20 7b 61 20 41 4e 44 20 62 7d  }}.  5 {a AND b}
15a0: 20 7b 7b 34 20 32 7d 20 7b 33 20 34 7d 7d 0a 20   {{4 2} {3 4}}. 
15b0: 20 36 20 7b 61 20 4f 52 20 62 20 4f 52 20 63 20   6 {a OR b OR c 
15c0: 4f 52 20 64 7d 20 7b 7b 34 20 32 7d 20 7b 33 20  OR d} {{4 2} {3 
15d0: 34 7d 20 7b 32 20 31 7d 20 7b 32 20 32 7d 7d 0a  4} {2 1} {2 2}}.
15e0: 7d 20 7b 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c  } {.  do_execsql
15f0: 5f 74 65 73 74 20 37 2e 33 2e 24 74 6e 20 7b 20  _test 7.3.$tn { 
1600: 0a 20 20 20 20 53 45 4c 45 43 54 20 66 74 73 35  .    SELECT fts5
1610: 5f 74 65 73 74 5f 71 75 65 72 79 70 68 72 61 73  _test_queryphras
1620: 65 28 74 37 29 20 46 52 4f 4d 20 74 37 20 57 48  e(t7) FROM t7 WH
1630: 45 52 45 20 74 37 20 4d 41 54 43 48 20 24 71 20  ERE t7 MATCH $q 
1640: 4c 49 4d 49 54 20 31 0a 20 20 7d 20 5b 6c 69 73  LIMIT 1.  } [lis
1650: 74 20 24 72 65 73 5d 0a 7d 0a 0a 64 6f 5f 65 78  t $res].}..do_ex
1660: 65 63 73 71 6c 5f 74 65 73 74 20 37 2e 34 20 7b  ecsql_test 7.4 {
1670: 0a 20 20 53 45 4c 45 43 54 20 66 74 73 35 5f 74  .  SELECT fts5_t
1680: 65 73 74 5f 72 6f 77 63 6f 75 6e 74 28 74 37 29  est_rowcount(t7)
1690: 20 46 52 4f 4d 20 74 37 20 57 48 45 52 45 20 74   FROM t7 WHERE t
16a0: 37 20 4d 41 54 43 48 20 27 61 27 3b 0a 7d 20 7b  7 MATCH 'a';.} {
16b0: 35 20 35 20 35 20 35 7d 0a 0a 23 64 6f 5f 65 78  5 5 5 5}..#do_ex
16c0: 65 63 73 71 6c 5f 74 65 73 74 20 37 2e 34 20 7b  ecsql_test 7.4 {
16d0: 0a 23 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64  .#  SELECT rowid
16e0: 2c 20 62 6d 32 35 64 65 62 75 67 28 74 37 29 20  , bm25debug(t7) 
16f0: 46 52 4f 4d 20 74 37 20 57 48 45 52 45 20 74 37  FROM t7 WHERE t7
1700: 20 4d 41 54 43 48 20 27 61 27 3b 0a 23 7d 20 7b   MATCH 'a';.#} {
1710: 35 20 35 20 35 20 35 7d 0a 23 0a 0a 23 2d 2d 2d  5 5 5 5}.#..#---
1720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1760: 2d 2d 2d 2d 2d 2d 0a 23 0a 64 6f 5f 74 65 73 74  ------.#.do_test
1770: 20 38 2e 31 20 7b 0a 20 20 65 78 65 63 73 71 6c   8.1 {.  execsql
1780: 20 7b 20 43 52 45 41 54 45 20 56 49 52 54 55 41   { CREATE VIRTUA
1790: 4c 20 54 41 42 4c 45 20 74 38 20 55 53 49 4e 47  L TABLE t8 USING
17a0: 20 66 74 73 35 28 78 2c 20 79 29 20 7d 0a 20 20   fts5(x, y) }.  
17b0: 66 6f 72 65 61 63 68 20 7b 72 6f 77 69 64 20 78  foreach {rowid x
17c0: 20 79 7d 20 7b 0a 20 20 20 20 20 30 20 7b 41 20   y} {.     0 {A 
17d0: 6f 7d 20 20 20 7b 6f 20 6f 20 6f 20 43 20 6f 20  o}   {o o o C o 
17e0: 6f 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f 7d 0a 20  o o o o o o o}. 
17f0: 20 20 20 20 31 20 7b 6f 20 6f 20 42 7d 20 7b 6f      1 {o o B} {o
1800: 20 6f 20 6f 20 43 20 43 20 6f 20 6f 20 6f 20 6f   o o C C o o o o
1810: 20 6f 20 6f 20 6f 7d 0a 20 20 20 20 20 32 20 7b   o o o}.     2 {
1820: 41 20 6f 20 6f 7d 20 7b 6f 20 6f 20 6f 20 6f 20  A o o} {o o o o 
1830: 44 20 44 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f 7d  D D o o o o o o}
1840: 0a 20 20 20 20 20 33 20 7b 6f 20 42 7d 20 20 20  .     3 {o B}   
1850: 7b 6f 20 6f 20 6f 20 6f 20 6f 20 44 20 6f 20 6f  {o o o o o D o o
1860: 20 6f 20 6f 20 6f 20 6f 7d 0a 20 20 20 20 20 34   o o o o}.     4
1870: 20 7b 45 20 6f 20 47 7d 20 7b 48 20 6f 20 6f 20   {E o G} {H o o 
1880: 6f 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f 20  o o o o o o o o 
1890: 6f 7d 0a 20 20 20 20 20 35 20 7b 46 20 6f 20 47  o}.     5 {F o G
18a0: 7d 20 7b 49 20 6f 20 4a 20 6f 20 6f 20 6f 20 6f  } {I o J o o o o
18b0: 20 6f 20 6f 20 6f 20 6f 20 6f 7d 0a 20 20 20 20   o o o o o}.    
18c0: 20 36 20 7b 45 20 6f 20 6f 7d 20 7b 48 20 6f 20   6 {E o o} {H o 
18d0: 4a 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f 20  J o o o o o o o 
18e0: 6f 20 6f 7d 0a 20 20 20 20 20 37 20 7b 6f 20 6f  o o}.     7 {o o
18f0: 20 6f 7d 20 7b 6f 20 6f 20 6f 20 6f 20 6f 20 6f   o} {o o o o o o
1900: 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f 7d 0a 20 20   o o o o o o}.  
1910: 20 20 20 39 20 7b 6f 20 6f 20 6f 7d 20 7b 6f 20     9 {o o o} {o 
1920: 6f 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f 20 6f 20  o o o o o o o o 
1930: 6f 20 6f 20 6f 7d 0a 20 20 7d 20 7b 0a 20 20 20  o o o}.  } {.   
1940: 20 65 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52   execsql { INSER
1950: 54 20 49 4e 54 4f 20 74 38 28 72 6f 77 69 64 2c  T INTO t8(rowid,
1960: 20 78 2c 20 79 29 20 56 41 4c 55 45 53 28 24 72   x, y) VALUES($r
1970: 6f 77 69 64 2c 20 24 78 2c 20 24 79 29 20 7d 0a  owid, $x, $y) }.
1980: 20 20 7d 0a 7d 20 7b 7d 0a 0a 66 6f 72 65 61 63    }.} {}..foreac
1990: 68 20 7b 74 6e 20 71 20 72 65 73 7d 20 7b 0a 20  h {tn q res} {. 
19a0: 20 31 20 7b 61 7d 20 7b 30 20 32 7d 0a 20 20 32   1 {a} {0 2}.  2
19b0: 20 7b 62 7d 20 7b 33 20 31 7d 0a 20 20 33 20 7b   {b} {3 1}.  3 {
19c0: 63 7d 20 7b 31 20 30 7d 0a 20 20 34 20 7b 64 7d  c} {1 0}.  4 {d}
19d0: 20 7b 32 20 33 7d 0a 20 20 35 20 7b 67 20 41 4e   {2 3}.  5 {g AN
19e0: 44 20 28 65 20 4f 52 20 66 29 7d 20 7b 35 20 34  D (e OR f)} {5 4
19f0: 7d 0a 20 20 36 20 7b 6a 20 41 4e 44 20 28 68 20  }.  6 {j AND (h 
1a00: 4f 52 20 69 29 7d 20 7b 35 20 36 7d 0a 7d 20 7b  OR i)} {5 6}.} {
1a10: 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .  do_execsql_te
1a20: 73 74 20 38 2e 32 2e 24 74 6e 2e 31 20 7b 0a 20  st 8.2.$tn.1 {. 
1a30: 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20     SELECT rowid 
1a40: 46 52 4f 4d 20 74 38 20 57 48 45 52 45 20 74 38  FROM t8 WHERE t8
1a50: 20 4d 41 54 43 48 20 24 71 20 4f 52 44 45 52 20   MATCH $q ORDER 
1a60: 42 59 20 62 6d 32 35 28 74 38 29 3b 0a 20 20 7d  BY bm25(t8);.  }
1a70: 20 24 72 65 73 0a 0a 20 20 64 6f 5f 65 78 65 63   $res..  do_exec
1a80: 73 71 6c 5f 74 65 73 74 20 38 2e 32 2e 24 74 6e  sql_test 8.2.$tn
1a90: 2e 32 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  .2 {.    SELECT 
1aa0: 72 6f 77 69 64 20 46 52 4f 4d 20 74 38 20 57 48  rowid FROM t8 WH
1ab0: 45 52 45 20 74 38 20 4d 41 54 43 48 20 24 71 20  ERE t8 MATCH $q 
1ac0: 4f 52 44 45 52 20 42 59 20 2b 72 61 6e 6b 3b 0a  ORDER BY +rank;.
1ad0: 20 20 7d 20 24 72 65 73 0a 0a 20 20 64 6f 5f 65    } $res..  do_e
1ae0: 78 65 63 73 71 6c 5f 74 65 73 74 20 38 2e 32 2e  xecsql_test 8.2.
1af0: 24 74 6e 2e 33 20 7b 0a 20 20 20 20 53 45 4c 45  $tn.3 {.    SELE
1b00: 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74 38  CT rowid FROM t8
1b10: 20 57 48 45 52 45 20 74 38 20 4d 41 54 43 48 20   WHERE t8 MATCH 
1b20: 24 71 20 4f 52 44 45 52 20 42 59 20 72 61 6e 6b  $q ORDER BY rank
1b30: 3b 0a 20 20 7d 20 24 72 65 73 0a 7d 0a 0a 66 69  ;.  } $res.}..fi
1b40: 6e 69 73 68 5f 74 65 73 74 0a 0a                 nish_test..