/ Hex Artifact Content
Login

Artifact ef5c690535a797413acaf5ad9b8ab5d49972df69:


0000: 23 20 32 30 31 35 20 44 65 63 65 6d 62 65 72 20  # 2015 December 
0010: 31 38 0a 23 0a 23 20 54 68 65 20 61 75 74 68 6f  18.#.# The autho
0020: 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f 70 79  r disclaims copy
0030: 72 69 67 68 74 20 74 6f 20 74 68 69 73 20 73 6f  right to this so
0040: 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e 20 70  urce code.  In p
0050: 6c 61 63 65 20 6f 66 0a 23 20 61 20 6c 65 67 61  lace of.# a lega
0060: 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72 65 20 69  l notice, here i
0070: 73 20 61 20 62 6c 65 73 73 69 6e 67 3a 0a 23 0a  s a blessing:.#.
0080: 23 20 20 20 20 4d 61 79 20 79 6f 75 20 64 6f 20  #    May you do 
0090: 67 6f 6f 64 20 61 6e 64 20 6e 6f 74 20 65 76 69  good and not evi
00a0: 6c 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20  l..#    May you 
00b0: 66 69 6e 64 20 66 6f 72 67 69 76 65 6e 65 73 73  find forgiveness
00c0: 20 66 6f 72 20 79 6f 75 72 73 65 6c 66 20 61 6e   for yourself an
00d0: 64 20 66 6f 72 67 69 76 65 20 6f 74 68 65 72 73  d forgive others
00e0: 2e 0a 23 20 20 20 20 4d 61 79 20 79 6f 75 20 73  ..#    May you s
00f0: 68 61 72 65 20 66 72 65 65 6c 79 2c 20 6e 65 76  hare freely, nev
0100: 65 72 20 74 61 6b 69 6e 67 20 6d 6f 72 65 20 74  er taking more t
0110: 68 61 6e 20 79 6f 75 20 67 69 76 65 2e 0a 23 0a  han you give..#.
0120: 23 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  #***************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 23 20 54 68 69  **********.# Thi
0170: 73 20 66 69 6c 65 20 69 6d 70 6c 65 6d 65 6e 74  s file implement
0180: 73 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  s regression tes
0190: 74 73 20 66 6f 72 20 53 51 4c 69 74 65 20 6c 69  ts for SQLite li
01a0: 62 72 61 72 79 2e 20 20 54 68 65 0a 23 20 66 6f  brary.  The.# fo
01b0: 63 75 73 20 6f 66 20 74 68 69 73 20 73 63 72 69  cus of this scri
01c0: 70 74 20 69 73 20 74 65 73 74 69 6e 67 20 74 68  pt is testing th
01d0: 65 20 46 54 53 35 20 6d 6f 64 75 6c 65 2e 0a 23  e FTS5 module..#
01e0: 0a 0a 73 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a  ..source [file j
01f0: 6f 69 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  oin [file dirnam
0200: 65 20 5b 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d  e [info script]]
0210: 20 66 74 73 35 5f 63 6f 6d 6d 6f 6e 2e 74 63 6c   fts5_common.tcl
0220: 5d 0a 73 65 74 20 74 65 73 74 70 72 65 66 69 78  ].set testprefix
0230: 20 66 74 73 35 64 65 74 61 69 6c 0a 0a 23 20 49   fts5detail..# I
0240: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
0250: 46 54 53 35 20 69 73 20 6e 6f 74 20 64 65 66 69  FTS5 is not defi
0260: 6e 65 64 2c 20 6f 6d 69 74 20 74 68 69 73 20 66  ned, omit this f
0270: 69 6c 65 2e 0a 69 66 63 61 70 61 62 6c 65 20 21  ile..ifcapable !
0280: 66 74 73 35 20 7b 0a 20 20 66 69 6e 69 73 68 5f  fts5 {.  finish_
0290: 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a 7d 0a  test.  return.}.
02a0: 0a 66 74 73 35 5f 61 75 78 5f 74 65 73 74 5f 66  .fts5_aux_test_f
02b0: 75 6e 63 74 69 6f 6e 73 20 64 62 0a 0a 23 2d 2d  unctions db..#--
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 2d 2d 2d 2d 2d 2d 2d 0a 23 20 53 69 6d 70 6c  --------.# Simpl
0310: 65 20 74 65 73 74 73 2e 0a 23 0a 64 6f 5f 65 78  e tests..#.do_ex
0320: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 30 20 7b  ecsql_test 1.0 {
0330: 0a 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41  .  CREATE VIRTUA
0340: 4c 20 54 41 42 4c 45 20 74 31 20 55 53 49 4e 47  L TABLE t1 USING
0350: 20 66 74 73 35 28 61 2c 20 62 2c 20 63 2c 20 64   fts5(a, b, c, d
0360: 65 74 61 69 6c 3d 63 6f 6c 29 3b 0a 20 20 49 4e  etail=col);.  IN
0370: 53 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c  SERT INTO t1 VAL
0380: 55 45 53 28 27 68 20 64 20 67 27 2c 20 27 6a 20  UES('h d g', 'j 
0390: 62 20 62 20 67 20 62 27 2c 20 27 69 20 65 20 69  b b g b', 'i e i
03a0: 20 64 20 68 20 67 20 67 27 29 3b 20 2d 2d 20 31   d h g g'); -- 1
03b0: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
03c0: 31 20 56 41 4c 55 45 53 28 27 68 20 6a 20 64 27  1 VALUES('h j d'
03d0: 2c 20 27 6a 20 68 20 64 20 61 20 68 27 2c 20 27  , 'j h d a h', '
03e0: 66 20 64 20 64 20 67 20 67 20 66 20 62 27 29 3b  f d d g g f b');
03f0: 20 2d 2d 20 32 0a 20 20 49 4e 53 45 52 54 20 49   -- 2.  INSERT I
0400: 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 6a  NTO t1 VALUES('j
0410: 20 63 20 69 27 2c 20 27 66 20 66 20 68 20 65 20   c i', 'f f h e 
0420: 66 27 2c 20 27 63 20 6a 20 69 20 6a 20 63 20 68  f', 'c j i j c h
0430: 20 66 27 29 3b 20 2d 2d 20 33 0a 20 20 49 4e 53   f'); -- 3.  INS
0440: 45 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55  ERT INTO t1 VALU
0450: 45 53 28 27 65 20 67 20 67 27 2c 20 27 67 20 65  ES('e g g', 'g e
0460: 20 64 20 68 20 69 27 2c 20 27 65 20 64 20 62 20   d h i', 'e d b 
0470: 65 20 67 20 64 20 63 27 29 3b 20 2d 2d 20 34 0a  e g d c'); -- 4.
0480: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31    INSERT INTO t1
0490: 20 56 41 4c 55 45 53 28 27 62 20 63 20 63 27 2c   VALUES('b c c',
04a0: 20 27 64 20 69 20 68 20 61 20 66 27 2c 20 27 64   'd i h a f', 'd
04b0: 20 69 20 6a 20 66 20 61 20 62 20 63 27 29 3b 20   i j f a b c'); 
04c0: 2d 2d 20 35 0a 20 20 49 4e 53 45 52 54 20 49 4e  -- 5.  INSERT IN
04d0: 54 4f 20 74 31 20 56 41 4c 55 45 53 28 27 65 20  TO t1 VALUES('e 
04e0: 64 20 65 27 2c 20 27 62 20 63 20 6a 20 67 20 64  d e', 'b c j g d
04f0: 27 2c 20 27 61 20 69 20 66 20 64 20 68 20 62 20  ', 'a i f d h b 
0500: 64 27 29 3b 20 2d 2d 20 36 0a 20 20 49 4e 53 45  d'); -- 6.  INSE
0510: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0520: 53 28 27 67 20 68 20 65 27 2c 20 27 62 20 63 20  S('g h e', 'b c 
0530: 64 20 69 20 64 27 2c 20 27 65 20 66 20 63 20 69  d i d', 'e f c i
0540: 20 66 20 69 20 63 27 29 3b 20 2d 2d 20 37 0a 20   f i c'); -- 7. 
0550: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 31 20   INSERT INTO t1 
0560: 56 41 4c 55 45 53 28 27 63 20 66 20 6a 27 2c 20  VALUES('c f j', 
0570: 27 6a 20 6a 20 69 20 65 20 61 27 2c 20 27 68 20  'j j i e a', 'h 
0580: 61 20 63 20 66 20 64 20 68 20 65 27 29 3b 20 2d  a c f d h e'); -
0590: 2d 20 38 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  - 8.  INSERT INT
05a0: 4f 20 74 31 20 56 41 4c 55 45 53 28 27 61 20 68  O t1 VALUES('a h
05b0: 20 69 27 2c 20 27 63 20 69 20 61 20 66 20 61 27   i', 'c i a f a'
05c0: 2c 20 27 63 20 66 20 64 20 68 20 67 20 64 20 67  , 'c f d h g d g
05d0: 27 29 3b 20 2d 2d 20 39 0a 20 20 49 4e 53 45 52  '); -- 9.  INSER
05e0: 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53  T INTO t1 VALUES
05f0: 28 27 6a 20 67 20 67 27 2c 20 27 65 20 66 20 65  ('j g g', 'e f e
0600: 20 66 20 66 27 2c 20 27 68 20 6a 20 62 20 69 20   f f', 'h j b i 
0610: 63 20 67 20 65 27 29 3b 20 2d 2d 20 31 30 0a 7d  c g e'); -- 10.}
0620: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
0630: 74 20 31 2e 31 20 7b 0a 20 20 49 4e 53 45 52 54  t 1.1 {.  INSERT
0640: 20 49 4e 54 4f 20 74 31 28 74 31 29 20 56 41 4c   INTO t1(t1) VAL
0650: 55 45 53 28 27 69 6e 74 65 67 72 69 74 79 2d 63  UES('integrity-c
0660: 68 65 63 6b 27 29 3b 0a 7d 0a 0a 66 6f 72 65 61  heck');.}..forea
0670: 63 68 20 7b 74 6e 20 6d 61 74 63 68 20 72 65 73  ch {tn match res
0680: 7d 20 7b 0a 20 20 31 20 22 61 3a 61 22 20 7b 39  } {.  1 "a:a" {9
0690: 7d 0a 20 20 32 20 22 62 3a 67 22 20 7b 31 20 34  }.  2 "b:g" {1 4
06a0: 20 36 7d 0a 20 20 33 20 22 63 3a 68 22 20 7b 31   6}.  3 "c:h" {1
06b0: 20 33 20 36 20 38 20 39 20 31 30 7d 0a 7d 20 7b   3 6 8 9 10}.} {
06c0: 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .  do_execsql_te
06d0: 73 74 20 31 2e 32 2e 24 74 6e 2e 31 20 7b 0a 20  st 1.2.$tn.1 {. 
06e0: 20 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20     SELECT rowid 
06f0: 46 52 4f 4d 20 74 31 28 24 6d 61 74 63 68 29 3b  FROM t1($match);
0700: 0a 20 20 7d 20 24 72 65 73 0a 0a 20 20 64 6f 5f  .  } $res..  do_
0710: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 32  execsql_test 1.2
0720: 2e 24 74 6e 2e 32 20 7b 0a 20 20 20 20 53 45 4c  .$tn.2 {.    SEL
0730: 45 43 54 20 72 6f 77 69 64 20 46 52 4f 4d 20 74  ECT rowid FROM t
0740: 31 28 24 6d 61 74 63 68 20 7c 7c 20 27 2a 27 29  1($match || '*')
0750: 3b 0a 20 20 7d 20 24 72 65 73 0a 7d 0a 0a 64 6f  ;.  } $res.}..do
0760: 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 31  _catchsql_test 1
0770: 2e 33 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20  .3.1 {.  SELECT 
0780: 72 6f 77 69 64 20 46 52 4f 4d 20 74 31 28 27 68  rowid FROM t1('h
0790: 20 2b 20 64 27 29 3b 0a 7d 20 7b 31 20 7b 66 74   + d');.} {1 {ft
07a0: 73 35 3a 20 70 68 72 61 73 65 20 71 75 65 72 69  s5: phrase queri
07b0: 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70 70 6f  es are not suppo
07c0: 72 74 65 64 20 28 64 65 74 61 69 6c 21 3d 66 75  rted (detail!=fu
07d0: 6c 6c 29 7d 7d 0a 0a 64 6f 5f 63 61 74 63 68 73  ll)}}..do_catchs
07e0: 71 6c 5f 74 65 73 74 20 31 2e 33 2e 32 20 7b 0a  ql_test 1.3.2 {.
07f0: 20 20 53 45 4c 45 43 54 20 72 6f 77 69 64 20 46    SELECT rowid F
0800: 52 4f 4d 20 74 31 28 27 4e 45 41 52 28 68 20 64  ROM t1('NEAR(h d
0810: 29 27 29 3b 0a 7d 20 7b 31 20 7b 66 74 73 35 3a  )');.} {1 {fts5:
0820: 20 4e 45 41 52 20 71 75 65 72 69 65 73 20 61 72   NEAR queries ar
0830: 65 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20  e not supported 
0840: 28 64 65 74 61 69 6c 21 3d 66 75 6c 6c 29 7d 7d  (detail!=full)}}
0850: 0a 0a 0a 23 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 2d 2d 2d 2d 2d 2d 0a 23 20  -------------.# 
08a0: 69 6e 74 65 67 72 69 74 79 2d 63 68 65 63 6b 20  integrity-check 
08b0: 77 69 74 68 20 62 6f 74 68 20 64 65 74 61 69 6c  with both detail
08c0: 3d 20 61 6e 64 20 70 72 65 66 69 78 3d 20 6f 70  = and prefix= op
08d0: 74 69 6f 6e 73 2e 0a 23 0a 64 6f 5f 65 78 65 63  tions..#.do_exec
08e0: 73 71 6c 5f 74 65 73 74 20 32 2e 30 20 7b 0a 20  sql_test 2.0 {. 
08f0: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
0900: 54 41 42 4c 45 20 74 32 20 55 53 49 4e 47 20 66  TABLE t2 USING f
0910: 74 73 35 28 61 2c 20 64 65 74 61 69 6c 3d 63 6f  ts5(a, detail=co
0920: 6c 2c 20 70 72 65 66 69 78 3d 22 31 22 29 3b 0a  l, prefix="1");.
0930: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32    INSERT INTO t2
0940: 28 61 29 20 56 41 4c 55 45 53 28 27 61 61 20 61  (a) VALUES('aa a
0950: 62 27 29 3b 0a 7d 0a 0a 23 64 62 20 65 76 61 6c  b');.}..#db eval
0960: 20 7b 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20   {SELECT rowid, 
0970: 66 74 73 35 5f 64 65 63 6f 64 65 28 72 6f 77 69  fts5_decode(rowi
0980: 64 2c 20 62 6c 6f 63 6b 29 20 61 53 20 72 20 46  d, block) aS r F
0990: 52 4f 4d 20 74 32 5f 64 61 74 61 7d 20 7b 70 75  ROM t2_data} {pu
09a0: 74 73 20 24 72 7d 0a 0a 64 6f 5f 65 78 65 63 73  ts $r}..do_execs
09b0: 71 6c 5f 74 65 73 74 20 32 2e 31 20 7b 0a 20 20  ql_test 2.1 {.  
09c0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 32 28 74  INSERT INTO t2(t
09d0: 32 29 20 56 41 4c 55 45 53 28 27 69 6e 74 65 67  2) VALUES('integ
09e0: 72 69 74 79 2d 63 68 65 63 6b 27 29 3b 0a 7d 0a  rity-check');.}.
09f0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
0a00: 20 32 2e 32 20 7b 0a 20 20 53 45 4c 45 43 54 20   2.2 {.  SELECT 
0a10: 66 74 73 35 5f 74 65 73 74 5f 70 6f 73 6c 69 73  fts5_test_poslis
0a20: 74 28 74 32 29 20 46 52 4f 4d 20 74 32 28 27 61  t(t2) FROM t2('a
0a30: 61 27 29 3b 0a 7d 20 7b 30 2e 30 2e 30 7d 0a 0a  a');.} {0.0.0}..
0a40: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
0a50: 32 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 66  2.3 {.  SELECT f
0a60: 74 73 35 5f 74 65 73 74 5f 63 6f 6c 6c 69 73 74  ts5_test_collist
0a70: 28 74 32 29 20 46 52 4f 4d 20 74 32 28 27 61 61  (t2) FROM t2('aa
0a80: 27 29 3b 0a 7d 20 7b 30 2e 30 7d 0a 0a 73 65 74  ');.} {0.0}..set
0a90: 20 3a 3a 70 63 20 30 0a 23 70 75 74 73 20 5b 6e   ::pc 0.#puts [n
0aa0: 65 61 72 73 65 74 20 7b 7b 61 78 20 62 78 20 63  earset {{ax bx c
0ab0: 78 7d 7d 20 2d 70 63 20 3a 3a 70 63 20 2d 6e 65  x}} -pc ::pc -ne
0ac0: 61 72 20 31 30 20 2d 2d 20 62 2a 5d 0a 23 65 78  ar 10 -- b*].#ex
0ad0: 69 74 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  it..#-----------
0ae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0af0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0b10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23  --------------.#
0b20: 20 43 68 65 63 6b 20 74 68 61 74 20 74 68 65 20   Check that the 
0b30: 78 49 6e 73 74 43 6f 75 6e 74 2c 20 78 49 6e 73  xInstCount, xIns
0b40: 74 2c 20 78 50 68 72 61 73 65 46 69 72 73 74 20  t, xPhraseFirst 
0b50: 61 6e 64 20 78 50 68 72 61 73 65 4e 65 78 74 20  and xPhraseNext 
0b60: 41 50 49 73 0a 23 20 77 6f 72 6b 20 77 69 74 68  APIs.# work with
0b70: 20 64 65 74 61 69 6c 3d 63 6f 6c 20 74 61 62 6c   detail=col tabl
0b80: 65 73 2e 0a 23 0a 73 65 74 20 64 61 74 61 20 7b  es..#.set data {
0b90: 0a 20 20 31 20 20 7b 61 62 62 20 61 63 61 20 61  .  1  {abb aca a
0ba0: 63 61 7d 20 7b 61 62 61 20 62 61 62 20 61 61 62  ca} {aba bab aab
0bb0: 20 61 61 63 20 63 61 61 7d 20 7b 61 62 63 20 63   aac caa} {abc c
0bc0: 62 63 20 63 63 62 20 62 63 63 20 62 61 62 20 63  bc ccb bcc bab c
0bd0: 63 62 20 61 63 61 7d 0a 20 20 32 20 20 7b 62 63  cb aca}.  2  {bc
0be0: 61 20 61 63 61 20 61 63 62 7d 20 7b 63 63 62 20  a aca acb} {ccb 
0bf0: 62 63 63 20 62 63 61 20 61 61 62 20 62 63 63 7d  bcc bca aab bcc}
0c00: 20 7b 62 61 62 20 61 61 61 20 61 61 63 20 63 62   {bab aaa aac cb
0c10: 62 20 62 62 61 20 61 63 61 20 61 62 63 7d 0a 20  b bba aca abc}. 
0c20: 20 33 20 20 7b 63 63 61 20 61 62 63 20 63 61 62   3  {cca abc cab
0c30: 7d 20 7b 61 61 62 20 61 62 61 20 62 63 63 20 63  } {aab aba bcc c
0c40: 61 63 20 62 61 61 7d 20 7b 62 61 62 20 63 62 62  ac baa} {bab cbb
0c50: 20 61 63 62 20 61 62 61 20 61 61 62 20 63 63 63   acb aba aab ccc
0c60: 20 63 63 61 7d 0a 20 20 34 20 20 7b 63 63 62 20   cca}.  4  {ccb 
0c70: 62 63 62 20 61 62 61 7d 20 7b 61 62 61 20 62 62  bcb aba} {aba bb
0c80: 62 20 62 63 63 20 63 61 63 20 62 62 62 7d 20 7b  b bcc cac bbb} {
0c90: 63 62 62 20 61 61 61 20 62 63 61 20 62 63 63 20  cbb aaa bca bcc 
0ca0: 61 61 62 20 63 61 63 20 61 63 61 7d 0a 20 20 35  aab cac aca}.  5
0cb0: 20 20 7b 62 63 61 20 62 62 63 20 63 61 63 7d 20    {bca bbc cac} 
0cc0: 7b 61 62 61 20 63 62 62 20 63 61 63 20 63 63 61  {aba cbb cac cca
0cd0: 20 61 63 61 7d 20 7b 63 61 62 20 61 63 62 20 63   aca} {cab acb c
0ce0: 62 63 20 63 63 62 20 63 61 63 20 62 62 62 20 62  bc ccb cac bbb b
0cf0: 63 62 7d 0a 20 20 36 20 20 7b 61 63 63 20 62 62  cb}.  6  {acc bb
0d00: 61 20 63 62 61 7d 20 7b 62 61 62 20 62 62 63 20  a cba} {bab bbc 
0d10: 62 62 62 20 62 63 62 20 61 63 61 7d 20 7b 62 63  bbb bcb aca} {bc
0d20: 61 20 63 63 63 20 63 62 62 20 61 63 61 20 62 61  a ccc cbb aca ba
0d30: 63 20 63 63 63 20 63 63 62 7d 0a 20 20 37 20 20  c ccc ccb}.  7  
0d40: 7b 61 62 61 20 62 61 62 20 61 61 61 7d 20 7b 61  {aba bab aaa} {a
0d50: 62 62 20 62 63 61 20 61 61 63 20 62 63 62 20 62  bb bca aac bcb b
0d60: 63 63 7d 20 7b 62 63 62 20 62 62 63 20 61 62 61  cc} {bcb bbc aba
0d70: 20 61 61 61 20 63 62 61 20 61 62 63 20 61 63 63   aaa cba abc acc
0d80: 7d 0a 20 20 38 20 20 7b 63 61 62 20 61 62 61 20  }.  8  {cab aba 
0d90: 61 61 61 7d 20 7b 63 63 62 20 61 63 61 20 63 61  aaa} {ccb aca ca
0da0: 61 20 62 62 63 20 62 63 63 7d 20 7b 61 61 61 20  a bbc bcc} {aaa 
0db0: 61 62 63 20 63 63 62 20 62 62 62 20 63 61 63 20  abc ccb bbb cac 
0dc0: 63 63 61 20 61 62 62 7d 0a 20 20 39 20 20 7b 62  cca abb}.  9  {b
0dd0: 63 62 20 62 61 62 20 62 61 63 7d 20 7b 62 63 62  cb bab bac} {bcb
0de0: 20 63 62 61 20 63 61 63 20 62 62 62 20 61 62 63   cba cac bbb abc
0df0: 7d 20 7b 61 62 61 20 61 63 61 20 63 62 62 20 61  } {aba aca cbb a
0e00: 63 62 20 61 62 62 20 63 63 63 20 63 63 62 7d 0a  cb abb ccc ccb}.
0e10: 20 20 31 30 20 7b 61 62 61 20 61 61 62 20 63 63    10 {aba aab cc
0e20: 63 7d 20 7b 61 62 63 20 63 63 63 20 62 63 63 20  c} {abc ccc bcc 
0e30: 63 61 62 20 62 62 62 7d 20 7b 61 61 62 20 62 63  cab bbb} {aab bc
0e40: 63 20 63 62 62 20 63 63 63 20 61 61 61 20 62 61  c cbb ccc aaa ba
0e50: 63 20 62 61 61 7d 0a 20 20 31 31 20 7b 62 61 62  c baa}.  11 {bab
0e60: 20 61 63 62 20 63 62 61 7d 20 7b 61 61 63 20 63   acb cba} {aac c
0e70: 61 62 20 63 61 62 20 62 63 61 20 63 62 63 7d 20  ab cab bca cbc} 
0e80: 7b 61 61 62 20 63 62 63 20 61 61 63 20 62 61 61  {aab cbc aac baa
0e90: 20 63 63 62 20 61 63 63 20 63 61 63 7d 0a 20 20   ccb acc cac}.  
0ea0: 31 32 20 7b 63 63 63 20 63 62 62 20 63 62 63 7d  12 {ccc cbb cbc}
0eb0: 20 7b 61 61 61 20 61 61 62 20 62 63 63 20 61 61   {aaa aab bcc aa
0ec0: 63 20 62 62 63 7d 20 7b 63 62 63 20 63 62 63 20  c bbc} {cbc cbc 
0ed0: 62 61 63 20 62 61 63 20 63 63 63 20 62 62 63 20  bac bac ccc bbc 
0ee0: 61 63 63 7d 0a 20 20 31 33 20 7b 63 61 62 20 62  acc}.  13 {cab b
0ef0: 62 63 20 61 62 63 7d 20 7b 62 62 62 20 62 61 62  bc abc} {bbb bab
0f00: 20 62 62 61 20 61 63 61 20 62 61 62 7d 20 7b 62   bba aca bab} {b
0f10: 61 61 20 62 62 62 20 61 61 62 20 62 62 62 20 63  aa bbb aab bbb c
0f20: 63 62 20 62 62 62 20 63 63 63 7d 0a 20 20 31 34  cb bbb ccc}.  14
0f30: 20 7b 62 62 63 20 63 61 62 20 63 61 61 7d 20 7b   {bbc cab caa} {
0f40: 61 63 62 20 61 61 63 20 61 62 62 20 63 62 61 20  acb aac abb cba 
0f50: 61 63 63 7d 20 7b 63 62 61 20 62 62 61 20 62 62  acc} {cba bba bb
0f60: 61 20 61 63 62 20 61 62 63 20 61 62 62 20 62 61  a acb abc abb ba
0f70: 61 7d 0a 20 20 31 35 20 7b 61 62 61 20 63 63 61  a}.  15 {aba cca
0f80: 20 62 63 63 7d 20 7b 61 61 61 20 61 63 62 20 61   bcc} {aaa acb a
0f90: 62 63 20 61 61 62 20 63 63 62 7d 20 7b 63 63 61  bc aab ccb} {cca
0fa0: 20 62 63 62 20 61 63 63 20 61 61 61 20 63 61 61   bcb acc aaa caa
0fb0: 20 63 63 61 20 63 62 63 7d 0a 20 20 31 36 20 7b   cca cbc}.  16 {
0fc0: 62 63 62 20 62 62 61 20 61 62 61 7d 20 7b 63 62  bcb bba aba} {cb
0fd0: 63 20 61 63 62 20 63 61 62 20 63 61 61 20 63 63  c acb cab caa cc
0fe0: 62 7d 20 7b 61 61 63 20 61 61 61 20 62 62 63 20  b} {aac aaa bbc 
0ff0: 63 61 62 20 63 63 61 20 63 62 61 20 61 62 63 7d  cab cca cba abc}
1000: 0a 20 20 31 37 20 7b 63 61 61 20 63 62 62 20 61  .  17 {caa cbb a
1010: 63 63 7d 20 7b 63 63 62 20 62 63 62 20 62 63 61  cc} {ccb bcb bca
1020: 20 61 61 61 20 62 63 63 7d 20 7b 62 62 62 20 61   aaa bcc} {bbb a
1030: 63 61 20 62 63 62 20 62 63 61 20 63 62 63 20 63  ca bcb bca cbc c
1040: 62 63 20 63 63 61 7d 0a 20 20 31 38 20 7b 63 62  bc cca}.  18 {cb
1050: 62 20 62 62 63 20 61 61 63 7d 20 7b 63 63 63 20  b bbc aac} {ccc 
1060: 62 62 63 20 61 61 61 20 61 61 62 20 62 61 61 7d  bbc aaa aab baa}
1070: 20 7b 63 61 62 20 63 61 62 20 63 61 63 20 63 63   {cab cab cac cc
1080: 61 20 62 62 63 20 61 62 63 20 62 62 63 7d 0a 20  a bbc abc bbc}. 
1090: 20 31 39 20 7b 63 63 63 20 61 63 63 20 61 61 61   19 {ccc acc aaa
10a0: 7d 20 7b 61 61 62 20 63 62 62 20 62 63 61 20 63  } {aab cbb bca c
10b0: 63 61 20 63 61 61 7d 20 7b 62 63 62 20 61 63 61  ca caa} {bcb aca
10c0: 20 61 63 61 20 63 61 62 20 61 63 63 20 62 61 63   aca cab acc bac
10d0: 20 62 63 63 7d 0a 20 20 32 30 20 7b 61 61 62 20   bcc}.  20 {aab 
10e0: 63 63 63 20 62 63 62 7d 20 7b 62 62 63 20 63 62  ccc bcb} {bbc cb
10f0: 62 20 62 62 63 20 61 61 61 20 62 63 63 7d 20 7b  b bbc aaa bcc} {
1100: 63 62 63 20 61 61 62 20 63 63 63 20 61 61 61 20  cbc aab ccc aaa 
1110: 62 63 62 20 62 61 63 20 63 62 63 7d 0a 20 20 32  bcb bac cbc}.  2
1120: 31 20 7b 61 62 61 20 63 61 62 20 63 63 63 7d 20  1 {aba cab ccc} 
1130: 7b 62 62 63 20 63 62 63 20 63 62 61 20 61 63 63  {bbc cbc cba acc
1140: 20 62 62 62 7d 20 7b 61 63 63 20 61 61 62 20 61   bbb} {acc aab a
1150: 61 63 20 61 63 62 20 61 63 61 20 62 63 61 20 61  ac acb aca bca a
1160: 63 62 7d 0a 20 20 32 32 20 7b 62 63 62 20 62 63  cb}.  22 {bcb bc
1170: 61 20 62 61 61 7d 20 7b 63 63 61 20 62 62 63 20  a baa} {cca bbc 
1180: 61 63 61 20 63 63 62 20 63 62 62 7d 20 7b 61 61  aca ccb cbb} {aa
1190: 62 20 61 62 63 20 62 62 63 20 61 61 61 20 63 61  b abc bbc aaa ca
11a0: 62 20 62 63 63 20 62 63 63 7d 0a 20 20 32 33 20  b bcc bcc}.  23 
11b0: 7b 63 61 63 20 63 62 62 20 63 61 61 7d 20 7b 62  {cac cbb caa} {b
11c0: 62 63 20 61 62 61 20 62 62 62 20 62 63 63 20 63  bc aba bbb bcc c
11d0: 63 62 7d 20 7b 62 62 63 20 62 62 62 20 63 61 62  cb} {bbc bbb cab
11e0: 20 62 62 63 20 63 61 63 20 61 62 62 20 61 63 63   bbc cac abb acc
11f0: 7d 0a 20 20 32 34 20 7b 63 63 62 20 61 63 62 20  }.  24 {ccb acb 
1200: 63 61 61 7d 20 7b 63 61 62 20 62 62 61 20 63 61  caa} {cab bba ca
1210: 63 20 62 62 63 20 61 61 63 7d 20 7b 61 61 63 20  c bbc aac} {aac 
1220: 62 63 61 20 61 62 63 20 63 61 62 20 62 63 61 20  bca abc cab bca 
1230: 63 61 62 20 62 63 62 7d 0a 20 20 32 35 20 7b 62  cab bcb}.  25 {b
1240: 62 62 20 61 63 61 20 62 63 61 7d 20 7b 62 63 62  bb aca bca} {bcb
1250: 20 61 63 63 20 63 63 63 20 63 61 63 20 61 63 61   acc ccc cac aca
1260: 7d 20 7b 63 63 63 20 61 63 62 20 61 63 63 20 63  } {ccc acb acc c
1270: 61 63 20 63 61 63 20 62 62 61 20 62 62 63 7d 0a  ac cac bba bbc}.
1280: 20 20 32 36 20 7b 62 61 62 20 61 63 63 20 63 61    26 {bab acc ca
1290: 61 7d 20 7b 63 61 61 20 63 61 62 20 63 61 63 20  a} {caa cab cac 
12a0: 62 61 63 20 61 63 61 7d 20 7b 61 62 61 20 63 61  bac aca} {aba ca
12b0: 63 20 63 61 61 20 61 63 63 20 62 61 63 20 63 63  c caa acc bac cc
12c0: 63 20 61 61 61 7d 0a 20 20 32 37 20 7b 62 63 61  c aaa}.  27 {bca
12d0: 20 62 63 61 20 61 61 61 7d 20 7b 63 63 62 20 61   bca aaa} {ccb a
12e0: 63 61 20 62 63 61 20 61 61 61 20 62 61 61 7d 20  ca bca aaa baa} 
12f0: 7b 62 61 62 20 61 63 63 20 61 61 61 20 63 63 61  {bab acc aaa cca
1300: 20 63 62 61 20 63 63 61 20 62 61 63 7d 0a 20 20   cba cca bac}.  
1310: 32 38 20 7b 63 63 62 20 63 61 63 20 63 61 63 7d  28 {ccb cac cac}
1320: 20 7b 62 63 61 20 61 62 62 20 62 62 61 20 62 62   {bca abb bba bb
1330: 63 20 62 61 61 7d 20 7b 61 63 61 20 63 63 62 20  c baa} {aca ccb 
1340: 61 61 63 20 63 61 62 20 63 63 63 20 63 61 62 20  aac cab ccc cab 
1350: 63 61 61 7d 0a 20 20 32 39 20 7b 61 62 63 20 62  caa}.  29 {abc b
1360: 63 61 20 63 61 62 7d 20 7b 63 61 63 20 63 62 63  ca cab} {cac cbc
1370: 20 63 62 62 20 63 63 63 20 62 63 63 7d 20 7b 62   cbb ccc bcc} {b
1380: 63 63 20 61 61 61 20 61 61 61 20 61 63 63 20 61  cc aaa aaa acc a
1390: 61 63 20 63 61 63 20 61 61 63 7d 0a 20 20 33 30  ac cac aac}.  30
13a0: 20 7b 61 63 61 20 61 63 63 20 61 63 62 7d 20 7b   {aca acc acb} {
13b0: 61 61 62 20 61 61 63 20 63 62 62 20 63 61 61 20  aab aac cbb caa 
13c0: 61 63 62 7d 20 7b 61 63 62 20 62 62 63 20 62 62  acb} {acb bbc bb
13d0: 63 20 61 63 63 20 63 62 62 20 62 62 63 20 61 61  c acc cbb bbc aa
13e0: 63 7d 0a 20 20 33 31 20 7b 61 62 61 20 61 63 61  c}.  31 {aba aca
13f0: 20 62 61 61 7d 20 7b 61 63 61 20 62 63 63 20 63   baa} {aca bcc c
1400: 61 62 20 62 61 62 20 61 63 62 7d 20 7b 62 63 63  ab bab acb} {bcc
1410: 20 61 63 62 20 62 61 61 20 62 63 62 20 62 62 63   acb baa bcb bbc
1420: 20 61 63 63 20 61 62 61 7d 0a 20 20 33 32 20 7b   acc aba}.  32 {
1430: 61 62 62 20 63 62 63 20 63 61 61 7d 20 7b 63 62  abb cbc caa} {cb
1440: 61 20 61 62 62 20 62 62 62 20 63 62 62 20 61 63  a abb bbb cbb ac
1450: 61 7d 20 7b 62 61 63 20 61 63 61 20 63 61 61 20  a} {bac aca caa 
1460: 63 61 63 20 63 61 61 20 63 63 62 20 62 62 63 7d  cac caa ccb bbc}
1470: 0a 20 20 33 33 20 7b 62 63 63 20 62 63 62 20 62  .  33 {bcc bcb b
1480: 63 62 7d 20 7b 63 63 61 20 63 61 62 20 63 62 63  cb} {cca cab cbc
1490: 20 61 62 62 20 62 61 62 7d 20 7b 63 61 61 20 62   abb bab} {caa b
14a0: 62 63 20 61 61 63 20 62 62 62 20 63 61 62 20 63  bc aac bbb cab c
14b0: 62 61 20 61 61 61 7d 0a 20 20 33 34 20 7b 63 61  ba aaa}.  34 {ca
14c0: 61 20 63 61 62 20 61 63 63 7d 20 7b 63 63 63 20  a cab acc} {ccc 
14d0: 63 63 63 20 62 63 63 20 61 63 62 20 62 63 63 7d  ccc bcc acb bcc}
14e0: 20 7b 62 61 63 20 62 62 61 20 61 63 61 20 62 63   {bac bba aca bc
14f0: 62 20 62 62 61 20 62 63 62 20 63 61 63 7d 0a 20  b bba bcb cac}. 
1500: 20 33 35 20 7b 62 61 63 20 62 63 62 20 63 62 61   35 {bac bcb cba
1510: 7d 20 7b 62 63 63 20 61 63 62 20 62 62 63 20 63  } {bcc acb bbc c
1520: 62 61 20 62 61 62 7d 20 7b 61 62 62 20 63 62 62  ba bab} {abb cbb
1530: 20 61 62 63 20 61 62 63 20 62 61 63 20 61 63 63   abc abc bac acc
1540: 20 63 62 62 7d 0a 20 20 33 36 20 7b 63 61 62 20   cbb}.  36 {cab 
1550: 62 61 62 20 63 63 62 7d 20 7b 62 63 61 20 62 62  bab ccb} {bca bb
1560: 61 20 62 61 62 20 63 63 61 20 61 63 63 7d 20 7b  a bab cca acc} {
1570: 61 63 63 20 61 61 62 20 62 63 63 20 62 61 63 20  acc aab bcc bac 
1580: 61 63 62 20 63 62 62 20 63 61 61 7d 0a 20 20 33  acb cbb caa}.  3
1590: 37 20 7b 61 63 61 20 63 62 63 20 63 61 62 7d 20  7 {aca cbc cab} 
15a0: 7b 62 62 61 20 61 61 63 20 61 63 61 20 61 61 63  {bba aac aca aac
15b0: 20 61 61 61 7d 20 7b 62 61 61 20 63 62 62 20 63   aaa} {baa cbb c
15c0: 62 61 20 61 62 61 20 63 61 62 20 62 63 61 20 62  ba aba cab bca b
15d0: 63 62 7d 0a 20 20 33 38 20 7b 61 63 62 20 61 61  cb}.  38 {acb aa
15e0: 62 20 62 61 61 7d 20 7b 62 61 61 20 62 61 62 20  b baa} {baa bab 
15f0: 62 63 61 20 62 62 63 20 62 62 62 7d 20 7b 61 62  bca bbc bbb} {ab
1600: 63 20 62 61 61 20 61 63 63 20 61 62 61 20 63 61  c baa acc aba ca
1610: 62 20 62 61 61 20 63 61 63 7d 0a 20 20 33 39 20  b baa cac}.  39 
1620: 7b 62 63 62 20 61 61 63 20 63 62 61 7d 20 7b 62  {bcb aac cba} {b
1630: 63 62 20 62 61 61 20 63 61 61 20 63 61 63 20 62  cb baa caa cac b
1640: 62 63 7d 20 7b 63 62 63 20 63 63 63 20 62 61 62  bc} {cbc ccc bab
1650: 20 63 63 62 20 62 62 62 20 63 61 61 20 61 62 61   ccb bbb caa aba
1660: 7d 0a 20 20 34 30 20 7b 63 62 61 20 63 63 62 20  }.  40 {cba ccb 
1670: 61 62 63 7d 20 7b 63 62 62 20 63 61 61 20 63 62  abc} {cbb caa cb
1680: 61 20 61 61 63 20 62 61 62 7d 20 7b 63 62 62 20  a aac bab} {cbb 
1690: 62 62 62 20 62 63 61 20 62 62 62 20 62 61 63 20  bbb bca bbb bac 
16a0: 63 61 63 20 62 63 61 7d 0a 7d 0a 0a 73 65 74 20  cac bca}.}..set 
16b0: 64 61 74 61 20 7b 0a 20 20 31 20 20 7b 61 62 62  data {.  1  {abb
16c0: 20 61 63 61 20 61 63 61 7d 20 7b 61 62 61 20 62   aca aca} {aba b
16d0: 61 62 20 61 61 62 20 61 61 63 20 63 61 61 7d 20  ab aab aac caa} 
16e0: 7b 61 62 63 20 63 62 63 20 63 63 62 20 62 63 63  {abc cbc ccb bcc
16f0: 20 62 61 62 20 63 63 62 20 61 63 61 7d 0a 7d 0a   bab ccb aca}.}.
1700: 0a 70 72 6f 63 20 6d 61 74 63 68 64 61 74 61 20  .proc matchdata 
1710: 7b 65 78 70 72 20 7b 62 41 73 63 20 31 7d 7d 20  {expr {bAsc 1}} 
1720: 7b 0a 0a 20 20 73 65 74 20 74 63 6c 65 78 70 72  {..  set tclexpr
1730: 20 5b 64 62 20 6f 6e 65 20 7b 0a 20 20 20 20 53   [db one {.    S
1740: 45 4c 45 43 54 20 66 74 73 35 5f 65 78 70 72 5f  ELECT fts5_expr_
1750: 74 63 6c 28 24 65 78 70 72 2c 20 27 6e 65 61 72  tcl($expr, 'near
1760: 73 65 74 20 24 63 6f 6c 73 20 2d 70 63 20 3a 3a  set $cols -pc ::
1770: 70 63 27 2c 20 27 78 27 2c 20 27 79 27 2c 20 27  pc', 'x', 'y', '
1780: 7a 27 29 0a 20 20 7d 5d 0a 20 20 73 65 74 20 72  z').  }].  set r
1790: 65 73 20 5b 6c 69 73 74 5d 0a 0a 20 20 23 70 75  es [list]..  #pu
17a0: 74 73 20 22 24 65 78 70 72 20 2d 3e 20 24 74 63  ts "$expr -> $tc
17b0: 6c 65 78 70 72 22 0a 20 20 66 6f 72 65 61 63 68  lexpr".  foreach
17c0: 20 7b 69 64 20 78 20 79 20 7a 7d 20 24 3a 3a 64   {id x y z} $::d
17d0: 61 74 61 20 7b 0a 20 20 20 20 73 65 74 20 63 6f  ata {.    set co
17e0: 6c 73 20 5b 6c 69 73 74 20 24 78 20 24 79 20 24  ls [list $x $y $
17f0: 7a 5d 0a 20 20 20 20 73 65 74 20 3a 3a 70 63 20  z].    set ::pc 
1800: 30 0a 20 20 20 20 23 73 65 74 20 68 69 74 73 20  0.    #set hits 
1810: 5b 6c 73 6f 72 74 20 2d 63 6f 6d 6d 61 6e 64 20  [lsort -command 
1820: 69 6e 73 74 63 6f 6d 70 61 72 65 20 5b 65 76 61  instcompare [eva
1830: 6c 20 24 74 63 6c 65 78 70 72 5d 5d 0a 20 20 20  l $tclexpr]].   
1840: 20 73 65 74 20 68 69 74 73 20 5b 65 76 61 6c 20   set hits [eval 
1850: 24 74 63 6c 65 78 70 72 5d 0a 20 20 20 20 69 66  $tclexpr].    if
1860: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 68 69 74 73   {[llength $hits
1870: 5d 3e 30 7d 20 7b 0a 20 20 20 20 20 20 6c 61 70  ]>0} {.      lap
1880: 70 65 6e 64 20 72 65 73 20 5b 6c 69 73 74 20 24  pend res [list $
1890: 69 64 20 24 68 69 74 73 5d 0a 20 20 20 20 7d 0a  id $hits].    }.
18a0: 20 20 7d 0a 0a 20 20 69 66 20 7b 24 62 41 73 63    }..  if {$bAsc
18b0: 7d 20 7b 0a 20 20 20 20 73 65 74 20 72 65 73 20  } {.    set res 
18c0: 5b 6c 73 6f 72 74 20 2d 69 6e 74 65 67 65 72 20  [lsort -integer 
18d0: 2d 69 6e 63 72 65 61 73 69 6e 67 20 2d 69 6e 64  -increasing -ind
18e0: 65 78 20 30 20 24 72 65 73 5d 0a 20 20 7d 20 65  ex 0 $res].  } e
18f0: 6c 73 65 20 7b 0a 20 20 20 20 73 65 74 20 72 65  lse {.    set re
1900: 73 20 5b 6c 73 6f 72 74 20 2d 69 6e 74 65 67 65  s [lsort -intege
1910: 72 20 2d 64 65 63 72 65 61 73 69 6e 67 20 2d 69  r -decreasing -i
1920: 6e 64 65 78 20 30 20 24 72 65 73 5d 0a 20 20 7d  ndex 0 $res].  }
1930: 0a 0a 20 20 72 65 74 75 72 6e 20 5b 63 6f 6e 63  ..  return [conc
1940: 61 74 20 7b 2a 7d 24 72 65 73 5d 0a 7d 0a 0a 66  at {*}$res].}..f
1950: 6f 72 65 61 63 68 20 7b 74 6e 20 74 62 6c 7d 20  oreach {tn tbl} 
1960: 7b 0a 20 20 31 20 7b 20 43 52 45 41 54 45 20 56  {.  1 { CREATE V
1970: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 33 20  IRTUAL TABLE t3 
1980: 55 53 49 4e 47 20 66 74 73 35 28 78 2c 20 79 2c  USING fts5(x, y,
1990: 20 7a 2c 20 64 65 74 61 69 6c 3d 63 6f 6c 29 20   z, detail=col) 
19a0: 7d 0a 20 20 32 20 7b 20 43 52 45 41 54 45 20 56  }.  2 { CREATE V
19b0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 33 20  IRTUAL TABLE t3 
19c0: 55 53 49 4e 47 20 66 74 73 35 28 78 2c 20 79 2c  USING fts5(x, y,
19d0: 20 7a 2c 20 64 65 74 61 69 6c 3d 6e 6f 6e 65 29   z, detail=none)
19e0: 20 7d 0a 7d 20 7b 0a 20 20 72 65 73 65 74 5f 64   }.} {.  reset_d
19f0: 62 0a 20 20 66 74 73 35 5f 61 75 78 5f 74 65 73  b.  fts5_aux_tes
1a00: 74 5f 66 75 6e 63 74 69 6f 6e 73 20 64 62 0a 20  t_functions db. 
1a10: 20 65 78 65 63 73 71 6c 20 24 74 62 6c 0a 20 20   execsql $tbl.  
1a20: 66 6f 72 65 61 63 68 20 7b 69 64 20 78 20 79 20  foreach {id x y 
1a30: 7a 7d 20 24 64 61 74 61 20 7b 0a 20 20 20 20 65  z} $data {.    e
1a40: 78 65 63 73 71 6c 20 7b 20 49 4e 53 45 52 54 20  xecsql { INSERT 
1a50: 49 4e 54 4f 20 74 33 28 72 6f 77 69 64 2c 20 78  INTO t3(rowid, x
1a60: 2c 20 79 2c 20 7a 29 20 56 41 4c 55 45 53 28 24  , y, z) VALUES($
1a70: 69 64 2c 20 24 78 2c 20 24 79 2c 20 24 7a 29 20  id, $x, $y, $z) 
1a80: 7d 0a 20 20 7d 0a 20 20 66 6f 72 65 61 63 68 20  }.  }.  foreach 
1a90: 7b 74 6e 32 20 65 78 70 72 7d 20 7b 0a 20 20 20  {tn2 expr} {.   
1aa0: 20 31 20 61 61 61 20 20 20 20 32 20 63 63 63 20   1 aaa    2 ccc 
1ab0: 20 20 20 33 20 62 61 62 20 20 20 20 34 20 61 61     3 bab    4 aa
1ac0: 63 0a 20 20 20 20 35 20 61 61 2a 20 20 20 20 36  c.    5 aa*    6
1ad0: 20 63 63 2a 20 20 20 20 37 20 62 61 2a 20 20 20   cc*    7 ba*   
1ae0: 20 38 20 61 61 2a 0a 20 20 20 20 39 20 61 2a 20   8 aa*.    9 a* 
1af0: 20 20 20 20 31 30 20 62 2a 20 20 20 31 31 20 63      10 b*   11 c
1b00: 2a 0a 20 20 7d 20 7b 0a 0a 20 20 20 20 73 65 74  *.  } {..    set
1b10: 20 72 65 73 20 5b 6d 61 74 63 68 64 61 74 61 20   res [matchdata 
1b20: 24 65 78 70 72 5d 0a 0a 20 20 20 20 64 6f 5f 65  $expr]..    do_e
1b30: 78 65 63 73 71 6c 5f 74 65 73 74 20 33 2e 24 74  xecsql_test 3.$t
1b40: 6e 2e 24 74 6e 32 2e 31 20 7b 0a 20 20 20 20 20  n.$tn2.1 {.     
1b50: 20 53 45 4c 45 43 54 20 72 6f 77 69 64 2c 20 66   SELECT rowid, f
1b60: 74 73 35 5f 74 65 73 74 5f 70 6f 73 6c 69 73 74  ts5_test_poslist
1b70: 28 74 33 29 20 46 52 4f 4d 20 74 33 28 24 65 78  (t3) FROM t3($ex
1b80: 70 72 29 0a 20 20 20 20 7d 20 24 72 65 73 0a 0a  pr).    } $res..
1b90: 20 20 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74      do_execsql_t
1ba0: 65 73 74 20 33 2e 24 74 6e 2e 24 74 6e 32 2e 32  est 3.$tn.$tn2.2
1bb0: 20 7b 0a 20 20 20 20 20 20 53 45 4c 45 43 54 20   {.      SELECT 
1bc0: 72 6f 77 69 64 2c 20 66 74 73 35 5f 74 65 73 74  rowid, fts5_test
1bd0: 5f 70 6f 73 6c 69 73 74 32 28 74 33 29 20 46 52  _poslist2(t3) FR
1be0: 4f 4d 20 74 33 28 24 65 78 70 72 29 0a 20 20 20  OM t3($expr).   
1bf0: 20 7d 20 24 72 65 73 0a 20 20 7d 0a 7d 0a 0a 23   } $res.  }.}..#
1c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 53 69 6d 70  ---------.# Simp
1c50: 6c 65 20 74 65 73 74 73 20 66 6f 72 20 64 65 74  le tests for det
1c60: 61 69 6c 3d 6e 6f 6e 65 20 74 61 62 6c 65 73 2e  ail=none tables.
1c70: 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .#.do_execsql_te
1c80: 73 74 20 34 2e 30 20 7b 0a 20 20 43 52 45 41 54  st 4.0 {.  CREAT
1c90: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
1ca0: 74 34 20 55 53 49 4e 47 20 66 74 73 35 28 61 2c  t4 USING fts5(a,
1cb0: 20 62 2c 20 63 2c 20 64 65 74 61 69 6c 3d 6e 6f   b, c, detail=no
1cc0: 6e 65 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  ne);.  INSERT IN
1cd0: 54 4f 20 74 34 20 56 41 4c 55 45 53 28 27 61 20  TO t4 VALUES('a 
1ce0: 62 20 63 27 2c 20 27 62 20 63 20 64 27 2c 20 27  b c', 'b c d', '
1cf0: 65 20 66 20 67 27 29 3b 0a 20 20 49 4e 53 45 52  e f g');.  INSER
1d00: 54 20 49 4e 54 4f 20 74 34 20 56 41 4c 55 45 53  T INTO t4 VALUES
1d10: 28 27 31 20 32 20 33 27 2c 20 27 34 20 35 20 36  ('1 2 3', '4 5 6
1d20: 27 2c 20 27 37 20 38 20 39 27 29 3b 0a 7d 0a 0a  ', '7 8 9');.}..
1d30: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
1d40: 20 34 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20   4.1 {.  SELECT 
1d50: 2a 20 46 52 4f 4d 20 74 34 28 27 61 3a 61 27 29  * FROM t4('a:a')
1d60: 0a 7d 20 7b 31 20 7b 66 74 73 35 3a 20 63 6f 6c  .} {1 {fts5: col
1d70: 75 6d 6e 20 71 75 65 72 69 65 73 20 61 72 65 20  umn queries are 
1d80: 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 20 28 64  not supported (d
1d90: 65 74 61 69 6c 3d 6e 6f 6e 65 29 7d 7d 0a 0a 23  etail=none)}}..#
1da0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1db0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1dc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74  ---------.# Test
1df0: 20 74 68 61 74 20 66 6f 72 20 74 68 65 20 73 61   that for the sa
1e00: 6d 65 20 63 6f 6e 74 65 6e 74 20 64 65 74 61 69  me content detai
1e10: 6c 3d 6e 6f 6e 65 20 75 73 65 73 20 6c 65 73 73  l=none uses less
1e20: 20 73 70 61 63 65 20 74 68 61 6e 20 0a 23 20 64   space than .# d
1e30: 65 74 61 69 6c 3d 63 6f 6c 2c 20 61 6e 64 20 74  etail=col, and t
1e40: 68 61 74 20 64 65 74 61 69 6c 3d 63 6f 6c 20 75  hat detail=col u
1e50: 73 65 73 20 6c 65 73 73 20 73 70 61 63 65 20 74  ses less space t
1e60: 68 61 6e 20 64 65 74 61 69 6c 3d 66 75 6c 6c 0a  han detail=full.
1e70: 23 0a 72 65 73 65 74 5f 64 62 0a 64 6f 5f 74 65  #.reset_db.do_te
1e80: 73 74 20 35 2e 31 20 7b 0a 20 20 66 6f 72 65 61  st 5.1 {.  forea
1e90: 63 68 20 7b 74 62 6c 20 64 65 74 61 69 6c 7d 20  ch {tbl detail} 
1ea0: 7b 74 31 20 6e 6f 6e 65 20 74 32 20 63 6f 6c 20  {t1 none t2 col 
1eb0: 74 33 20 66 75 6c 6c 7d 20 7b 0a 20 20 20 20 65  t3 full} {.    e
1ec0: 78 65 63 73 71 6c 20 22 43 52 45 41 54 45 20 56  xecsql "CREATE V
1ed0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 24 74 62  IRTUAL TABLE $tb
1ee0: 6c 20 55 53 49 4e 47 20 66 74 73 35 28 78 2c 20  l USING fts5(x, 
1ef0: 79 2c 20 7a 2c 20 64 65 74 61 69 6c 3d 24 64 65  y, z, detail=$de
1f00: 74 61 69 6c 29 22 0a 20 20 20 20 66 6f 72 65 61  tail)".    forea
1f10: 63 68 20 7b 72 6f 77 69 64 20 78 20 79 20 7a 7d  ch {rowid x y z}
1f20: 20 24 3a 3a 64 61 74 61 20 7b 0a 20 20 20 20 20   $::data {.     
1f30: 20 65 78 65 63 73 71 6c 20 22 49 4e 53 45 52 54   execsql "INSERT
1f40: 20 49 4e 54 4f 20 24 74 62 6c 20 28 72 6f 77 69   INTO $tbl (rowi
1f50: 64 2c 20 78 2c 20 79 2c 20 7a 29 20 56 41 4c 55  d, x, y, z) VALU
1f60: 45 53 28 5c 24 72 6f 77 69 64 2c 20 5c 24 78 2c  ES(\$rowid, \$x,
1f70: 20 5c 24 79 2c 20 5c 24 7a 29 22 0a 20 20 20 20   \$y, \$z)".    
1f80: 7d 0a 20 20 7d 0a 7d 20 7b 7d 0a 0a 64 6f 5f 65  }.  }.} {}..do_e
1f90: 78 65 63 73 71 6c 5f 74 65 73 74 20 35 2e 32 20  xecsql_test 5.2 
1fa0: 7b 0a 20 20 53 45 4c 45 43 54 20 0a 20 20 20 20  {.  SELECT .    
1fb0: 28 53 45 4c 45 43 54 20 73 75 6d 28 6c 65 6e 67  (SELECT sum(leng
1fc0: 74 68 28 62 6c 6f 63 6b 29 29 20 66 72 6f 6d 20  th(block)) from 
1fd0: 74 31 5f 64 61 74 61 29 20 3c 0a 20 20 20 20 28  t1_data) <.    (
1fe0: 53 45 4c 45 43 54 20 73 75 6d 28 6c 65 6e 67 74  SELECT sum(lengt
1ff0: 68 28 62 6c 6f 63 6b 29 29 20 66 72 6f 6d 20 74  h(block)) from t
2000: 32 5f 64 61 74 61 29 0a 7d 20 7b 31 7d 0a 0a 64  2_data).} {1}..d
2010: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35  o_execsql_test 5
2020: 2e 33 20 7b 0a 20 20 53 45 4c 45 43 54 20 0a 20  .3 {.  SELECT . 
2030: 20 20 20 28 53 45 4c 45 43 54 20 73 75 6d 28 6c     (SELECT sum(l
2040: 65 6e 67 74 68 28 62 6c 6f 63 6b 29 29 20 66 72  ength(block)) fr
2050: 6f 6d 20 74 32 5f 64 61 74 61 29 20 3c 0a 20 20  om t2_data) <.  
2060: 20 20 28 53 45 4c 45 43 54 20 73 75 6d 28 6c 65    (SELECT sum(le
2070: 6e 67 74 68 28 62 6c 6f 63 6b 29 29 20 66 72 6f  ngth(block)) fro
2080: 6d 20 74 33 5f 64 61 74 61 29 0a 7d 20 7b 31 7d  m t3_data).} {1}
2090: 0a 0a 0a 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a  ....finish_test.
20a0: 0a                                               .