/ Hex Artifact Content
Login

Artifact 480d780aa6b699816c5066225fbd86f3a0239477:


0000: 23 20 32 30 31 35 20 41 70 72 20 32 34 0a 23 0a  # 2015 Apr 24.#.
0010: 23 20 54 68 65 20 61 75 74 68 6f 72 20 64 69 73  # The author dis
0020: 63 6c 61 69 6d 73 20 63 6f 70 79 72 69 67 68 74  claims copyright
0030: 20 74 6f 20 74 68 69 73 20 73 6f 75 72 63 65 20   to this source 
0040: 63 6f 64 65 2e 20 20 49 6e 20 70 6c 61 63 65 20  code.  In place 
0050: 6f 66 0a 23 20 61 20 6c 65 67 61 6c 20 6e 6f 74  of.# a legal not
0060: 69 63 65 2c 20 68 65 72 65 20 69 73 20 61 20 62  ice, here is a b
0070: 6c 65 73 73 69 6e 67 3a 0a 23 0a 23 20 20 20 20  lessing:.#.#    
0080: 4d 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20  May you do good 
0090: 61 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 23 20  and not evil..# 
00a0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00b0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00c0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00d0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 23 20 20  give others..#  
00e0: 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20    May you share 
00f0: 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61  freely, never ta
0100: 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79  king more than y
0110: 6f 75 20 67 69 76 65 2e 0a 23 0a 23 2a 2a 2a 2a  ou give..#.#****
0120: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 0a 23 0a 23 20 54 68 65 20 74 65 73 74  ***.#.# The test
0170: 73 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20 66  s in this file f
0180: 6f 63 75 73 20 6f 6e 20 74 65 73 74 69 6e 67 20  ocus on testing 
0190: 74 68 65 20 66 74 73 35 76 6f 63 61 62 20 6d 6f  the fts5vocab mo
01a0: 64 75 6c 65 2e 0a 23 0a 0a 73 6f 75 72 63 65 20  dule..#..source 
01b0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 66 69 6c 65  [file join [file
01c0: 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 73   dirname [info s
01d0: 63 72 69 70 74 5d 5d 20 66 74 73 35 5f 63 6f 6d  cript]] fts5_com
01e0: 6d 6f 6e 2e 74 63 6c 5d 0a 73 65 74 20 74 65 73  mon.tcl].set tes
01f0: 74 70 72 65 66 69 78 20 66 74 73 35 76 6f 63 61  tprefix fts5voca
0200: 62 0a 0a 23 20 49 66 20 53 51 4c 49 54 45 5f 45  b..# If SQLITE_E
0210: 4e 41 42 4c 45 5f 46 54 53 35 20 69 73 20 64 65  NABLE_FTS5 is de
0220: 66 69 6e 65 64 2c 20 6f 6d 69 74 20 74 68 69 73  fined, omit this
0230: 20 66 69 6c 65 2e 0a 69 66 63 61 70 61 62 6c 65   file..ifcapable
0240: 20 21 66 74 73 35 20 7b 0a 20 20 66 69 6e 69 73   !fts5 {.  finis
0250: 68 5f 74 65 73 74 0a 20 20 72 65 74 75 72 6e 0a  h_test.  return.
0260: 7d 0a 0a 66 6f 72 65 61 63 68 5f 64 65 74 61 69  }..foreach_detai
0270: 6c 5f 6d 6f 64 65 20 24 74 65 73 74 70 72 65 66  l_mode $testpref
0280: 69 78 20 7b 0a 0a 70 72 6f 63 20 6e 75 6c 6c 5f  ix {..proc null_
0290: 6c 69 73 74 5f 65 6e 74 72 69 65 73 20 7b 69 46  list_entries {iF
02a0: 69 72 73 74 20 6e 49 6e 74 65 72 76 61 6c 20 4c  irst nInterval L
02b0: 7d 20 7b 0a 20 20 66 6f 72 20 7b 73 65 74 20 69  } {.  for {set i
02c0: 20 24 69 46 69 72 73 74 7d 20 7b 24 69 20 3c 20   $iFirst} {$i < 
02d0: 5b 6c 6c 65 6e 67 74 68 20 24 4c 5d 7d 20 7b 69  [llength $L]} {i
02e0: 6e 63 72 20 69 20 24 6e 49 6e 74 65 72 76 61 6c  ncr i $nInterval
02f0: 7d 20 7b 0a 20 20 20 20 6c 73 65 74 20 4c 20 24  } {.    lset L $
0300: 69 20 7b 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72  i {}.  }.  retur
0310: 6e 20 24 4c 0a 7d 0a 0a 70 72 6f 63 20 73 74 61  n $L.}..proc sta
0320: 72 5f 66 72 6f 6d 5f 72 6f 77 20 7b 4c 7d 20 7b  r_from_row {L} {
0330: 0a 20 20 69 66 20 7b 5b 64 65 74 61 69 6c 5f 69  .  if {[detail_i
0340: 73 5f 66 75 6c 6c 5d 3d 3d 30 7d 20 7b 0a 20 20  s_full]==0} {.  
0350: 20 20 73 65 74 20 4c 20 5b 6e 75 6c 6c 5f 6c 69    set L [null_li
0360: 73 74 5f 65 6e 74 72 69 65 73 20 32 20 33 20 24  st_entries 2 3 $
0370: 4c 5d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  L].  }.  return 
0380: 24 4c 0a 7d 0a 0a 70 72 6f 63 20 73 74 61 72 5f  $L.}..proc star_
0390: 66 72 6f 6d 5f 63 6f 6c 20 7b 4c 7d 20 7b 0a 20  from_col {L} {. 
03a0: 20 69 66 20 7b 5b 64 65 74 61 69 6c 5f 69 73 5f   if {[detail_is_
03b0: 63 6f 6c 5d 7d 20 7b 0a 20 20 20 20 73 65 74 20  col]} {.    set 
03c0: 4c 20 5b 6e 75 6c 6c 5f 6c 69 73 74 5f 65 6e 74  L [null_list_ent
03d0: 72 69 65 73 20 33 20 34 20 24 4c 5d 0a 20 20 7d  ries 3 4 $L].  }
03e0: 0a 20 20 69 66 20 7b 5b 64 65 74 61 69 6c 5f 69  .  if {[detail_i
03f0: 73 5f 6e 6f 6e 65 5d 7d 20 7b 0a 20 20 20 20 73  s_none]} {.    s
0400: 65 74 20 4c 20 5b 6e 75 6c 6c 5f 6c 69 73 74 5f  et L [null_list_
0410: 65 6e 74 72 69 65 73 20 31 20 34 20 24 4c 5d 0a  entries 1 4 $L].
0420: 20 20 20 20 73 65 74 20 4c 20 5b 6e 75 6c 6c 5f      set L [null_
0430: 6c 69 73 74 5f 65 6e 74 72 69 65 73 20 33 20 34  list_entries 3 4
0440: 20 24 4c 5d 0a 20 20 7d 0a 20 20 72 65 74 75 72   $L].  }.  retur
0450: 6e 20 24 4c 0a 7d 0a 0a 70 72 6f 63 20 72 6f 77  n $L.}..proc row
0460: 5f 74 6f 5f 63 6f 6c 20 7b 4c 7d 20 7b 0a 20 20  _to_col {L} {.  
0470: 69 66 20 7b 5b 64 65 74 61 69 6c 5f 69 73 5f 6e  if {[detail_is_n
0480: 6f 6e 65 5d 3d 3d 30 7d 20 7b 20 65 72 72 6f 72  one]==0} { error
0490: 20 22 74 68 69 73 20 69 73 20 66 6f 72 20 64 65   "this is for de
04a0: 74 61 69 6c 3d 6e 6f 6e 65 20 6d 6f 64 65 22 20  tail=none mode" 
04b0: 7d 0a 20 20 73 65 74 20 72 65 74 20 5b 6c 69 73  }.  set ret [lis
04c0: 74 5d 0a 20 20 66 6f 72 65 61 63 68 20 7b 61 20  t].  foreach {a 
04d0: 62 20 63 7d 20 24 4c 20 7b 0a 20 20 20 20 6c 61  b c} $L {.    la
04e0: 70 70 65 6e 64 20 72 65 74 20 24 61 20 7b 7d 20  ppend ret $a {} 
04f0: 24 62 20 7b 7d 0a 20 20 7d 0a 20 20 73 65 74 20  $b {}.  }.  set 
0500: 72 65 74 0a 7d 0a 0a 69 66 20 31 20 7b 0a 0a 64  ret.}..if 1 {..d
0510: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31  o_execsql_test 1
0520: 2e 31 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20  .1.1 {.  CREATE 
0530: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 31  VIRTUAL TABLE t1
0540: 20 55 53 49 4e 47 20 66 74 73 35 28 6f 6e 65 2c   USING fts5(one,
0550: 20 70 72 65 66 69 78 3d 31 2c 20 64 65 74 61 69   prefix=1, detai
0560: 6c 3d 25 44 45 54 41 49 4c 25 29 3b 0a 20 20 43  l=%DETAIL%);.  C
0570: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
0580: 42 4c 45 20 76 31 20 55 53 49 4e 47 20 66 74 73  BLE v1 USING fts
0590: 35 76 6f 63 61 62 28 74 31 2c 20 27 72 6f 77 27  5vocab(t1, 'row'
05a0: 29 3b 0a 20 20 50 52 41 47 4d 41 20 74 61 62 6c  );.  PRAGMA tabl
05b0: 65 5f 69 6e 66 6f 20 3d 20 76 31 3b 0a 7d 20 7b  e_info = v1;.} {
05c0: 0a 20 20 30 20 74 65 72 6d 20 7b 7d 20 30 20 7b  .  0 term {} 0 {
05d0: 7d 20 30 0a 20 20 31 20 64 6f 63 20 7b 7d 20 30  } 0.  1 doc {} 0
05e0: 20 7b 7d 20 30 0a 20 20 32 20 63 6e 74 20 7b 7d   {} 0.  2 cnt {}
05f0: 20 30 20 7b 7d 20 30 0a 7d 0a 0a 64 6f 5f 65 78   0 {} 0.}..do_ex
0600: 65 63 73 71 6c 5f 74 65 73 74 20 31 2e 31 2e 32  ecsql_test 1.1.2
0610: 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49 52 54   {.  CREATE VIRT
0620: 55 41 4c 20 54 41 42 4c 45 20 76 32 20 55 53 49  UAL TABLE v2 USI
0630: 4e 47 20 66 74 73 35 76 6f 63 61 62 28 74 31 2c  NG fts5vocab(t1,
0640: 20 27 63 6f 6c 27 29 3b 0a 20 20 50 52 41 47 4d   'col');.  PRAGM
0650: 41 20 74 61 62 6c 65 5f 69 6e 66 6f 20 3d 20 76  A table_info = v
0660: 32 3b 0a 7d 20 7b 0a 20 20 30 20 74 65 72 6d 20  2;.} {.  0 term 
0670: 7b 7d 20 30 20 7b 7d 20 30 0a 20 20 31 20 63 6f  {} 0 {} 0.  1 co
0680: 6c 20 7b 7d 20 30 20 7b 7d 20 30 0a 20 20 32 20  l {} 0 {} 0.  2 
0690: 64 6f 63 20 7b 7d 20 30 20 7b 7d 20 30 0a 20 20  doc {} 0 {} 0.  
06a0: 33 20 63 6e 74 20 7b 7d 20 30 20 7b 7d 20 30 0a  3 cnt {} 0 {} 0.
06b0: 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  }..do_execsql_te
06c0: 73 74 20 31 2e 32 2e 31 20 7b 20 53 45 4c 45 43  st 1.2.1 { SELEC
06d0: 54 20 2a 20 46 52 4f 4d 20 76 31 20 7d 20 7b 20  T * FROM v1 } { 
06e0: 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  }.do_execsql_tes
06f0: 74 20 31 2e 32 2e 32 20 7b 20 53 45 4c 45 43 54  t 1.2.2 { SELECT
0700: 20 2a 20 46 52 4f 4d 20 76 32 20 7d 20 7b 20 7d   * FROM v2 } { }
0710: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
0720: 74 20 31 2e 33 20 7b 0a 20 20 49 4e 53 45 52 54  t 1.3 {.  INSERT
0730: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0740: 27 78 20 79 20 7a 27 29 3b 0a 20 20 49 4e 53 45  'x y z');.  INSE
0750: 52 54 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45  RT INTO t1 VALUE
0760: 53 28 27 78 20 78 20 78 27 29 3b 0a 7d 0a 0a 64  S('x x x');.}..d
0770: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 31  o_execsql_test 1
0780: 2e 34 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20  .4.1 {.  SELECT 
0790: 2a 20 46 52 4f 4d 20 76 31 3b 0a 7d 20 5b 73 74  * FROM v1;.} [st
07a0: 61 72 5f 66 72 6f 6d 5f 72 6f 77 20 7b 78 20 32  ar_from_row {x 2
07b0: 20 34 20 20 79 20 31 20 31 20 20 7a 20 31 20 31   4  y 1 1  z 1 1
07c0: 7d 5d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  }]..do_execsql_t
07d0: 65 73 74 20 31 2e 34 2e 32 20 7b 0a 20 20 53 45  est 1.4.2 {.  SE
07e0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 32 3b 0a  LECT * FROM v2;.
07f0: 7d 20 5b 73 74 61 72 5f 66 72 6f 6d 5f 63 6f 6c  } [star_from_col
0800: 20 7b 78 20 6f 6e 65 20 32 20 34 20 20 79 20 6f   {x one 2 4  y o
0810: 6e 65 20 31 20 31 20 20 7a 20 6f 6e 65 20 31 20  ne 1 1  z one 1 
0820: 31 7d 5d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  1}]..do_execsql_
0830: 74 65 73 74 20 31 2e 35 2e 31 20 7b 0a 20 20 42  test 1.5.1 {.  B
0840: 45 47 49 4e 3b 0a 20 20 20 20 49 4e 53 45 52 54  EGIN;.    INSERT
0850: 20 49 4e 54 4f 20 74 31 20 56 41 4c 55 45 53 28   INTO t1 VALUES(
0860: 27 61 20 62 20 63 27 29 3b 0a 20 20 20 20 53 45  'a b c');.    SE
0870: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 31 20 57  LECT * FROM v1 W
0880: 48 45 52 45 20 74 65 72 6d 3c 27 64 27 3b 0a 7d  HERE term<'d';.}
0890: 20 5b 73 74 61 72 5f 66 72 6f 6d 5f 72 6f 77 20   [star_from_row 
08a0: 7b 61 20 31 20 31 20 20 20 62 20 31 20 31 20 20  {a 1 1   b 1 1  
08b0: 20 63 20 31 20 31 7d 5d 0a 0a 64 6f 5f 65 78 65   c 1 1}]..do_exe
08c0: 63 73 71 6c 5f 74 65 73 74 20 31 2e 35 2e 32 20  csql_test 1.5.2 
08d0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
08e0: 52 4f 4d 20 76 32 20 57 48 45 52 45 20 74 65 72  ROM v2 WHERE ter
08f0: 6d 3c 27 64 27 3b 0a 20 20 43 4f 4d 4d 49 54 3b  m<'d';.  COMMIT;
0900: 0a 7d 20 5b 73 74 61 72 5f 66 72 6f 6d 5f 63 6f  .} [star_from_co
0910: 6c 20 7b 61 20 6f 6e 65 20 31 20 31 20 20 62 20  l {a one 1 1  b 
0920: 6f 6e 65 20 31 20 31 20 20 63 20 6f 6e 65 20 31  one 1 1  c one 1
0930: 20 31 7d 5d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c   1}]..do_execsql
0940: 5f 74 65 73 74 20 31 2e 36 20 7b 0a 20 20 44 45  _test 1.6 {.  DE
0950: 4c 45 54 45 20 46 52 4f 4d 20 74 31 20 57 48 45  LETE FROM t1 WHE
0960: 52 45 20 6f 6e 65 20 3d 20 27 61 20 62 20 63 27  RE one = 'a b c'
0970: 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  ;.  SELECT * FRO
0980: 4d 20 76 31 3b 0a 7d 20 5b 73 74 61 72 5f 66 72  M v1;.} [star_fr
0990: 6f 6d 5f 72 6f 77 20 7b 78 20 32 20 34 20 20 79  om_row {x 2 4  y
09a0: 20 31 20 31 20 20 7a 20 31 20 31 7d 5d 0a 0a 23   1 1  z 1 1}]..#
09b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
09c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
09d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
09e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
09f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 0a 64 6f 5f 65  ---------.#.do_e
0a00: 78 65 63 73 71 6c 5f 74 65 73 74 20 32 2e 30 20  xecsql_test 2.0 
0a10: 7b 0a 20 20 43 52 45 41 54 45 20 56 49 52 54 55  {.  CREATE VIRTU
0a20: 41 4c 20 54 41 42 4c 45 20 74 74 20 55 53 49 4e  AL TABLE tt USIN
0a30: 47 20 66 74 73 35 28 61 2c 20 62 2c 20 64 65 74  G fts5(a, b, det
0a40: 61 69 6c 3d 25 44 45 54 41 49 4c 25 29 3b 0a 20  ail=%DETAIL%);. 
0a50: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 74 20   INSERT INTO tt 
0a60: 56 41 4c 55 45 53 28 27 64 20 67 20 62 20 66 20  VALUES('d g b f 
0a70: 64 20 66 27 2c 20 27 66 20 63 20 65 20 63 20 64  d f', 'f c e c d
0a80: 20 61 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49   a');.  INSERT I
0a90: 4e 54 4f 20 74 74 20 56 41 4c 55 45 53 28 27 66  NTO tt VALUES('f
0aa0: 20 61 20 65 20 61 20 61 20 62 27 2c 20 27 65 20   a e a a b', 'e 
0ab0: 64 20 63 20 66 20 64 20 64 27 29 3b 0a 20 20 49  d c f d d');.  I
0ac0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 74 20 56 41  NSERT INTO tt VA
0ad0: 4c 55 45 53 28 27 62 20 63 20 61 20 61 20 61 20  LUES('b c a a a 
0ae0: 62 27 2c 20 27 66 20 66 20 63 20 63 20 62 20 63  b', 'f f c c b c
0af0: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
0b00: 4f 20 74 74 20 56 41 4c 55 45 53 28 27 66 20 64  O tt VALUES('f d
0b10: 20 63 20 61 20 63 20 65 27 2c 20 27 64 20 67 20   c a c e', 'd g 
0b20: 64 20 65 20 67 20 64 27 29 3b 0a 20 20 49 4e 53  d e g d');.  INS
0b30: 45 52 54 20 49 4e 54 4f 20 74 74 20 56 41 4c 55  ERT INTO tt VALU
0b40: 45 53 28 27 67 20 64 20 65 20 66 20 61 20 67 20  ES('g d e f a g 
0b50: 78 27 2c 20 27 66 20 66 20 64 20 61 20 61 20 62  x', 'f f d a a b
0b60: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
0b70: 4f 20 74 74 20 56 41 4c 55 45 53 28 27 67 20 63  O tt VALUES('g c
0b80: 20 66 20 62 20 63 20 67 27 2c 20 27 61 20 67 20   f b c g', 'a g 
0b90: 66 20 64 20 63 20 62 27 29 3b 0a 20 20 49 4e 53  f d c b');.  INS
0ba0: 45 52 54 20 49 4e 54 4f 20 74 74 20 56 41 4c 55  ERT INTO tt VALU
0bb0: 45 53 28 27 63 20 65 20 63 20 66 20 67 20 62 27  ES('c e c f g b'
0bc0: 2c 20 27 66 20 65 20 64 20 62 20 67 20 61 27 29  , 'f e d b g a')
0bd0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
0be0: 74 74 20 56 41 4c 55 45 53 28 27 67 20 64 20 65  tt VALUES('g d e
0bf0: 20 66 20 64 20 65 27 2c 20 27 61 20 63 20 64 20   f d e', 'a c d 
0c00: 62 20 61 20 67 27 29 3b 0a 20 20 49 4e 53 45 52  b a g');.  INSER
0c10: 54 20 49 4e 54 4f 20 74 74 20 56 41 4c 55 45 53  T INTO tt VALUES
0c20: 28 27 65 20 66 20 61 20 63 20 63 20 62 27 2c 20  ('e f a c c b', 
0c30: 27 62 20 66 20 65 20 61 20 66 20 64 20 79 27 29  'b f e a f d y')
0c40: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
0c50: 74 74 20 56 41 4c 55 45 53 28 27 63 20 63 20 61  tt VALUES('c c a
0c60: 20 61 20 63 20 66 27 2c 20 27 64 20 67 20 61 20   a c f', 'd g a 
0c70: 65 20 62 20 67 27 29 3b 0a 7d 0a 0a 73 65 74 20  e b g');.}..set 
0c80: 72 65 73 5f 72 6f 77 20 5b 73 74 61 72 5f 66 72  res_row [star_fr
0c90: 6f 6d 5f 72 6f 77 20 7b 0a 20 20 61 20 31 30 20  om_row {.  a 10 
0ca0: 32 30 20 20 20 62 20 39 20 31 34 20 20 20 63 20  20   b 9 14   c 
0cb0: 39 20 32 30 20 20 20 64 20 39 20 31 39 20 20 20  9 20   d 9 19   
0cc0: 0a 20 20 65 20 38 20 31 33 20 20 20 66 20 31 30  .  e 8 13   f 10
0cd0: 20 32 30 20 20 20 67 20 37 20 31 34 20 20 20 78   20   g 7 14   x
0ce0: 20 31 20 31 20 20 20 0a 20 20 79 20 31 20 31 0a   1 1   .  y 1 1.
0cf0: 7d 5d 0a 73 65 74 20 72 65 73 5f 63 6f 6c 20 5b  }].set res_col [
0d00: 73 74 61 72 5f 66 72 6f 6d 5f 63 6f 6c 20 7b 0a  star_from_col {.
0d10: 20 20 61 20 61 20 36 20 31 31 20 20 20 20 61 20    a a 6 11    a 
0d20: 62 20 37 20 39 0a 20 20 62 20 61 20 36 20 37 20  b 7 9.  b a 6 7 
0d30: 20 20 20 20 62 20 62 20 37 20 37 20 0a 20 20 63      b b 7 7 .  c
0d40: 20 61 20 36 20 31 32 20 20 20 20 63 20 62 20 35   a 6 12    c b 5
0d50: 20 38 20 0a 20 20 64 20 61 20 34 20 36 20 20 20   8 .  d a 4 6   
0d60: 20 20 64 20 62 20 39 20 31 33 20 0a 20 20 65 20    d b 9 13 .  e 
0d70: 61 20 36 20 37 20 20 20 20 20 65 20 62 20 36 20  a 6 7     e b 6 
0d80: 36 20 0a 20 20 66 20 61 20 39 20 31 30 20 20 20  6 .  f a 9 10   
0d90: 20 66 20 62 20 37 20 31 30 20 0a 20 20 67 20 61   f b 7 10 .  g a
0da0: 20 35 20 37 20 20 20 20 20 67 20 62 20 35 20 37   5 7     g b 5 7
0db0: 0a 20 20 78 20 61 20 31 20 31 20 20 20 20 20 79  .  x a 1 1     y
0dc0: 20 62 20 31 20 31 0a 7d 5d 0a 69 66 20 7b 5b 64   b 1 1.}].if {[d
0dd0: 65 74 61 69 6c 5f 69 73 5f 6e 6f 6e 65 5d 7d 20  etail_is_none]} 
0de0: 7b 0a 20 20 73 65 74 20 72 65 73 5f 63 6f 6c 20  {.  set res_col 
0df0: 5b 72 6f 77 5f 74 6f 5f 63 6f 6c 20 24 72 65 73  [row_to_col $res
0e00: 5f 72 6f 77 5d 0a 7d 0a 0a 66 6f 72 65 61 63 68  _row].}..foreach
0e10: 20 7b 74 6e 20 74 62 6c 20 72 65 73 6e 61 6d 65   {tn tbl resname
0e20: 7d 20 7b 0a 20 20 31 20 22 66 74 73 35 76 6f 63  } {.  1 "fts5voc
0e30: 61 62 28 74 74 2c 20 27 63 6f 6c 27 29 22 20 72  ab(tt, 'col')" r
0e40: 65 73 5f 63 6f 6c 0a 20 20 32 20 22 66 74 73 35  es_col.  2 "fts5
0e50: 76 6f 63 61 62 28 74 74 2c 20 27 72 6f 77 27 29  vocab(tt, 'row')
0e60: 22 20 72 65 73 5f 72 6f 77 0a 20 20 33 20 22 66  " res_row.  3 "f
0e70: 74 73 35 76 6f 63 61 62 28 74 74 2c 20 5c 22 72  ts5vocab(tt, \"r
0e80: 6f 77 5c 22 29 22 20 72 65 73 5f 72 6f 77 0a 20  ow\")" res_row. 
0e90: 20 34 20 22 66 74 73 35 76 6f 63 61 62 28 74 74   4 "fts5vocab(tt
0ea0: 2c 20 5b 72 6f 77 5d 29 22 20 72 65 73 5f 72 6f  , [row])" res_ro
0eb0: 77 0a 20 20 35 20 22 66 74 73 35 76 6f 63 61 62  w.  5 "fts5vocab
0ec0: 28 74 74 2c 20 60 72 6f 77 60 29 22 20 72 65 73  (tt, `row`)" res
0ed0: 5f 72 6f 77 0a 0a 20 20 36 20 22 66 74 73 35 76  _row..  6 "fts5v
0ee0: 6f 63 61 62 28 27 74 74 27 2c 20 27 72 6f 77 27  ocab('tt', 'row'
0ef0: 29 22 20 72 65 73 5f 72 6f 77 0a 20 20 37 20 22  )" res_row.  7 "
0f00: 66 74 73 35 76 6f 63 61 62 28 5c 22 74 74 5c 22  fts5vocab(\"tt\"
0f10: 2c 20 5c 22 72 6f 77 5c 22 29 22 20 72 65 73 5f  , \"row\")" res_
0f20: 72 6f 77 0a 20 20 38 20 22 66 74 73 35 76 6f 63  row.  8 "fts5voc
0f30: 61 62 28 5b 74 74 5d 2c 20 5b 72 6f 77 5d 29 22  ab([tt], [row])"
0f40: 20 72 65 73 5f 72 6f 77 0a 20 20 39 20 22 66 74   res_row.  9 "ft
0f50: 73 35 76 6f 63 61 62 28 60 74 74 60 2c 20 60 72  s5vocab(`tt`, `r
0f60: 6f 77 60 29 22 20 72 65 73 5f 72 6f 77 0a 7d 20  ow`)" res_row.} 
0f70: 7b 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74  {.  do_execsql_t
0f80: 65 73 74 20 32 2e 24 74 6e 20 22 0a 20 20 20 20  est 2.$tn ".    
0f90: 44 52 4f 50 20 54 41 42 4c 45 20 49 46 20 45 58  DROP TABLE IF EX
0fa0: 49 53 54 53 20 74 76 3b 0a 20 20 20 20 43 52 45  ISTS tv;.    CRE
0fb0: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
0fc0: 45 20 74 76 20 55 53 49 4e 47 20 24 74 62 6c 3b  E tv USING $tbl;
0fd0: 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52  .    SELECT * FR
0fe0: 4f 4d 20 74 76 3b 0a 20 20 22 20 5b 73 65 74 20  OM tv;.  " [set 
0ff0: 24 72 65 73 6e 61 6d 65 5d 0a 7d 0a 0a 23 2d 2d  $resname].}..#--
1000: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1010: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1020: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1030: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1040: 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 65  -------.# Test e
1050: 72 72 6f 72 73 20 69 6e 20 74 68 65 20 43 52 45  rrors in the CRE
1060: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
1070: 45 20 73 74 61 74 65 6d 65 6e 74 2e 0a 23 0a 66  E statement..#.f
1080: 6f 72 65 61 63 68 20 7b 74 6e 20 73 71 6c 7d 20  oreach {tn sql} 
1090: 7b 0a 20 20 31 20 7b 20 43 52 45 41 54 45 20 56  {.  1 { CREATE V
10a0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 61 61 20  IRTUAL TABLE aa 
10b0: 55 53 49 4e 47 20 66 74 73 35 76 6f 63 61 62 28  USING fts5vocab(
10c0: 29 20 7d 0a 20 20 32 20 7b 20 43 52 45 41 54 45  ) }.  2 { CREATE
10d0: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 61   VIRTUAL TABLE a
10e0: 61 20 55 53 49 4e 47 20 66 74 73 35 76 6f 63 61  a USING fts5voca
10f0: 62 28 78 29 20 7d 0a 20 20 33 20 7b 20 43 52 45  b(x) }.  3 { CRE
1100: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
1110: 45 20 61 61 20 55 53 49 4e 47 20 66 74 73 35 76  E aa USING fts5v
1120: 6f 63 61 62 28 78 2c 79 2c 7a 29 20 7d 0a 20 20  ocab(x,y,z) }.  
1130: 34 20 7b 20 43 52 45 41 54 45 20 56 49 52 54 55  4 { CREATE VIRTU
1140: 41 4c 20 54 41 42 4c 45 20 74 65 6d 70 2e 61 61  AL TABLE temp.aa
1150: 20 55 53 49 4e 47 20 66 74 73 35 76 6f 63 61 62   USING fts5vocab
1160: 28 78 2c 79 2c 7a 2c 79 29 20 7d 0a 7d 20 7b 0a  (x,y,z,y) }.} {.
1170: 20 20 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65    do_catchsql_te
1180: 73 74 20 33 2e 24 74 6e 20 24 73 71 6c 20 7b 31  st 3.$tn $sql {1
1190: 20 7b 77 72 6f 6e 67 20 6e 75 6d 62 65 72 20 6f   {wrong number o
11a0: 66 20 76 74 61 62 6c 65 20 61 72 67 75 6d 65 6e  f vtable argumen
11b0: 74 73 7d 7d 0a 7d 0a 0a 64 6f 5f 63 61 74 63 68  ts}}.}..do_catch
11c0: 73 71 6c 5f 74 65 73 74 20 34 2e 30 20 7b 0a 20  sql_test 4.0 {. 
11d0: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
11e0: 54 41 42 4c 45 20 63 63 20 55 53 49 4e 47 20 66  TABLE cc USING f
11f0: 74 73 35 76 6f 63 61 62 28 74 62 6c 2c 20 75 6e  ts5vocab(tbl, un
1200: 6b 6e 6f 77 6e 29 3b 0a 7d 20 7b 31 20 7b 66 74  known);.} {1 {ft
1210: 73 35 76 6f 63 61 62 3a 20 75 6e 6b 6e 6f 77 6e  s5vocab: unknown
1220: 20 74 61 62 6c 65 20 74 79 70 65 3a 20 27 75 6e   table type: 'un
1230: 6b 6e 6f 77 6e 27 7d 7d 0a 0a 64 6f 5f 63 61 74  known'}}..do_cat
1240: 63 68 73 71 6c 5f 74 65 73 74 20 34 2e 31 20 7b  chsql_test 4.1 {
1250: 0a 20 20 41 54 54 41 43 48 20 27 74 65 73 74 2e  .  ATTACH 'test.
1260: 64 62 27 20 41 53 20 61 75 78 3b 0a 20 20 43 52  db' AS aux;.  CR
1270: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
1280: 4c 45 20 61 75 78 2e 63 63 20 55 53 49 4e 47 20  LE aux.cc USING 
1290: 66 74 73 35 76 6f 63 61 62 28 6d 61 69 6e 2c 20  fts5vocab(main, 
12a0: 74 62 6c 2c 20 72 6f 77 29 3b 0a 7d 20 7b 31 20  tbl, row);.} {1 
12b0: 7b 77 72 6f 6e 67 20 6e 75 6d 62 65 72 20 6f 66  {wrong number of
12c0: 20 76 74 61 62 6c 65 20 61 72 67 75 6d 65 6e 74   vtable argument
12d0: 73 7d 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  s}}..#----------
12e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
12f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1300: 2d 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 0a  ---------------.
1320: 23 20 54 65 73 74 20 66 74 73 35 76 6f 63 61 62  # Test fts5vocab
1330: 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 64 20   tables created 
1340: 69 6e 20 74 68 65 20 74 65 6d 70 20 73 63 68 65  in the temp sche
1350: 6d 61 2e 20 0a 23 0a 72 65 73 65 74 5f 64 62 0a  ma. .#.reset_db.
1360: 66 6f 72 63 65 64 65 6c 65 74 65 20 74 65 73 74  forcedelete test
1370: 2e 64 62 32 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  .db2.do_execsql_
1380: 74 65 73 74 20 35 2e 30 20 7b 0a 20 20 41 54 54  test 5.0 {.  ATT
1390: 41 43 48 20 27 74 65 73 74 2e 64 62 32 27 20 41  ACH 'test.db2' A
13a0: 53 20 61 75 78 3b 0a 20 20 43 52 45 41 54 45 20  S aux;.  CREATE 
13b0: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 31  VIRTUAL TABLE t1
13c0: 20 55 53 49 4e 47 20 66 74 73 35 28 78 2c 20 64   USING fts5(x, d
13d0: 65 74 61 69 6c 3d 25 44 45 54 41 49 4c 25 29 3b  etail=%DETAIL%);
13e0: 0a 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41  .  CREATE VIRTUA
13f0: 4c 20 54 41 42 4c 45 20 74 65 6d 70 2e 74 31 20  L TABLE temp.t1 
1400: 55 53 49 4e 47 20 66 74 73 35 28 78 2c 20 64 65  USING fts5(x, de
1410: 74 61 69 6c 3d 25 44 45 54 41 49 4c 25 29 3b 0a  tail=%DETAIL%);.
1420: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
1430: 20 54 41 42 4c 45 20 61 75 78 2e 74 31 20 55 53   TABLE aux.t1 US
1440: 49 4e 47 20 66 74 73 35 28 78 2c 20 64 65 74 61  ING fts5(x, deta
1450: 69 6c 3d 25 44 45 54 41 49 4c 25 29 3b 0a 0a 20  il=%DETAIL%);.. 
1460: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 6d 61 69   INSERT INTO mai
1470: 6e 2e 74 31 20 56 41 4c 55 45 53 28 27 61 20 62  n.t1 VALUES('a b
1480: 20 63 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49   c');.  INSERT I
1490: 4e 54 4f 20 6d 61 69 6e 2e 74 31 20 56 41 4c 55  NTO main.t1 VALU
14a0: 45 53 28 27 64 20 65 20 66 27 29 3b 0a 20 20 49  ES('d e f');.  I
14b0: 4e 53 45 52 54 20 49 4e 54 4f 20 6d 61 69 6e 2e  NSERT INTO main.
14c0: 74 31 20 56 41 4c 55 45 53 28 27 61 20 65 20 63  t1 VALUES('a e c
14d0: 27 29 3b 0a 0a 20 20 49 4e 53 45 52 54 20 49 4e  ');..  INSERT IN
14e0: 54 4f 20 74 65 6d 70 2e 74 31 20 56 41 4c 55 45  TO temp.t1 VALUE
14f0: 53 28 27 31 20 32 20 33 27 29 3b 0a 20 20 49 4e  S('1 2 3');.  IN
1500: 53 45 52 54 20 49 4e 54 4f 20 74 65 6d 70 2e 74  SERT INTO temp.t
1510: 31 20 56 41 4c 55 45 53 28 27 34 20 35 20 36 27  1 VALUES('4 5 6'
1520: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
1530: 20 74 65 6d 70 2e 74 31 20 56 41 4c 55 45 53 28   temp.t1 VALUES(
1540: 27 31 20 35 20 33 27 29 3b 0a 0a 20 20 49 4e 53  '1 5 3');..  INS
1550: 45 52 54 20 49 4e 54 4f 20 61 75 78 2e 74 31 20  ERT INTO aux.t1 
1560: 56 41 4c 55 45 53 28 27 78 20 79 20 7a 27 29 3b  VALUES('x y z');
1570: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 61  .  INSERT INTO a
1580: 75 78 2e 74 31 20 56 41 4c 55 45 53 28 27 6d 20  ux.t1 VALUES('m 
1590: 6e 20 6f 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  n o');.  INSERT 
15a0: 49 4e 54 4f 20 61 75 78 2e 74 31 20 56 41 4c 55  INTO aux.t1 VALU
15b0: 45 53 28 27 78 20 6e 20 7a 27 29 3b 0a 7d 0a 0a  ES('x n z');.}..
15c0: 62 72 65 61 6b 70 6f 69 6e 74 0a 64 6f 5f 65 78  breakpoint.do_ex
15d0: 65 63 73 71 6c 5f 74 65 73 74 20 35 2e 31 20 7b  ecsql_test 5.1 {
15e0: 0a 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41  .  CREATE VIRTUA
15f0: 4c 20 54 41 42 4c 45 20 74 65 6d 70 2e 76 6d 20  L TABLE temp.vm 
1600: 20 55 53 49 4e 47 20 66 74 73 35 76 6f 63 61 62   USING fts5vocab
1610: 28 6d 61 69 6e 2c 20 74 31 2c 20 72 6f 77 29 3b  (main, t1, row);
1620: 0a 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41  .  CREATE VIRTUA
1630: 4c 20 54 41 42 4c 45 20 74 65 6d 70 2e 76 74 31  L TABLE temp.vt1
1640: 20 55 53 49 4e 47 20 66 74 73 35 76 6f 63 61 62   USING fts5vocab
1650: 28 74 31 2c 20 72 6f 77 29 3b 0a 20 20 43 52 45  (t1, row);.  CRE
1660: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
1670: 45 20 74 65 6d 70 2e 76 74 32 20 55 53 49 4e 47  E temp.vt2 USING
1680: 20 66 74 73 35 76 6f 63 61 62 28 74 65 6d 70 2c   fts5vocab(temp,
1690: 20 74 31 2c 20 72 6f 77 29 3b 0a 20 20 43 52 45   t1, row);.  CRE
16a0: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
16b0: 45 20 74 65 6d 70 2e 76 61 20 20 55 53 49 4e 47  E temp.va  USING
16c0: 20 66 74 73 35 76 6f 63 61 62 28 61 75 78 2c 20   fts5vocab(aux, 
16d0: 74 31 2c 20 72 6f 77 29 3b 0a 7d 0a 0a 64 6f 5f  t1, row);.}..do_
16e0: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35 2e 32  execsql_test 5.2
16f0: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
1700: 20 76 6d 20 7d 20 5b 73 74 61 72 5f 66 72 6f 6d   vm } [star_from
1710: 5f 72 6f 77 20 7b 0a 20 20 61 20 32 20 32 20 62  _row {.  a 2 2 b
1720: 20 31 20 31 20 63 20 32 20 32 20 64 20 31 20 31   1 1 c 2 2 d 1 1
1730: 20 65 20 32 20 32 20 66 20 31 20 31 0a 7d 5d 0a   e 2 2 f 1 1.}].
1740: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
1750: 35 2e 33 20 7b 20 53 45 4c 45 43 54 20 2a 20 46  5.3 { SELECT * F
1760: 52 4f 4d 20 76 74 31 20 7d 20 5b 73 74 61 72 5f  ROM vt1 } [star_
1770: 66 72 6f 6d 5f 72 6f 77 20 7b 0a 20 20 31 20 32  from_row {.  1 2
1780: 20 32 20 32 20 31 20 31 20 33 20 32 20 32 20 34   2 2 1 1 3 2 2 4
1790: 20 31 20 31 20 35 20 32 20 32 20 36 20 31 20 31   1 1 5 2 2 6 1 1
17a0: 0a 7d 5d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  .}].do_execsql_t
17b0: 65 73 74 20 35 2e 34 20 7b 20 53 45 4c 45 43 54  est 5.4 { SELECT
17c0: 20 2a 20 46 52 4f 4d 20 76 74 32 20 7d 20 5b 73   * FROM vt2 } [s
17d0: 74 61 72 5f 66 72 6f 6d 5f 72 6f 77 20 7b 0a 20  tar_from_row {. 
17e0: 20 31 20 32 20 32 20 32 20 31 20 31 20 33 20 32   1 2 2 2 1 1 3 2
17f0: 20 32 20 34 20 31 20 31 20 35 20 32 20 32 20 36   2 4 1 1 5 2 2 6
1800: 20 31 20 31 0a 7d 5d 0a 64 6f 5f 65 78 65 63 73   1 1.}].do_execs
1810: 71 6c 5f 74 65 73 74 20 35 2e 35 20 7b 20 53 45  ql_test 5.5 { SE
1820: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 61 20 7d  LECT * FROM va }
1830: 20 5b 73 74 61 72 5f 66 72 6f 6d 5f 72 6f 77 20   [star_from_row 
1840: 7b 0a 20 20 6d 20 31 20 31 20 6e 20 32 20 32 20  {.  m 1 1 n 2 2 
1850: 6f 20 31 20 31 20 78 20 32 20 32 20 79 20 31 20  o 1 1 x 2 2 y 1 
1860: 31 20 7a 20 32 20 32 0a 7d 5d 0a 0a 23 2d 2d 2d  1 z 2 2.}]..#---
1870: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1880: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1890: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
18b0: 2d 2d 2d 2d 2d 2d 0a 23 0a 64 6f 5f 65 78 65 63  ------.#.do_exec
18c0: 73 71 6c 5f 74 65 73 74 20 36 2e 30 20 7b 0a 20  sql_test 6.0 {. 
18d0: 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 69 69   CREATE TABLE ii
18e0: 69 28 69 69 69 29 3b 0a 20 20 43 52 45 41 54 45  i(iii);.  CREATE
18f0: 20 54 41 42 4c 45 20 6a 6a 6a 28 78 29 3b 0a 7d   TABLE jjj(x);.}
1900: 0a 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65  ..do_catchsql_te
1910: 73 74 20 36 2e 31 20 7b 0a 20 20 43 52 45 41 54  st 6.1 {.  CREAT
1920: 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
1930: 76 6f 63 61 62 31 20 55 53 49 4e 47 20 66 74 73  vocab1 USING fts
1940: 35 76 6f 63 61 62 28 69 69 69 2c 20 72 6f 77 29  5vocab(iii, row)
1950: 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  ;.  SELECT * FRO
1960: 4d 20 76 6f 63 61 62 31 3b 0a 7d 20 7b 31 20 7b  M vocab1;.} {1 {
1970: 6e 6f 20 73 75 63 68 20 66 74 73 35 20 74 61 62  no such fts5 tab
1980: 6c 65 3a 20 6d 61 69 6e 2e 69 69 69 7d 7d 0a 0a  le: main.iii}}..
1990: 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74  do_catchsql_test
19a0: 20 36 2e 32 20 7b 0a 20 20 43 52 45 41 54 45 20   6.2 {.  CREATE 
19b0: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 76 6f  VIRTUAL TABLE vo
19c0: 63 61 62 32 20 55 53 49 4e 47 20 66 74 73 35 76  cab2 USING fts5v
19d0: 6f 63 61 62 28 6a 6a 6a 2c 20 72 6f 77 29 3b 0a  ocab(jjj, row);.
19e0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
19f0: 76 6f 63 61 62 32 3b 0a 7d 20 7b 31 20 7b 6e 6f  vocab2;.} {1 {no
1a00: 20 73 75 63 68 20 66 74 73 35 20 74 61 62 6c 65   such fts5 table
1a10: 3a 20 6d 61 69 6e 2e 6a 6a 6a 7d 7d 0a 0a 64 6f  : main.jjj}}..do
1a20: 5f 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 36  _catchsql_test 6
1a30: 2e 32 20 7b 0a 20 20 43 52 45 41 54 45 20 56 49  .2 {.  CREATE VI
1a40: 52 54 55 41 4c 20 54 41 42 4c 45 20 76 6f 63 61  RTUAL TABLE voca
1a50: 62 33 20 55 53 49 4e 47 20 66 74 73 35 76 6f 63  b3 USING fts5voc
1a60: 61 62 28 6c 6c 6c 2c 20 72 6f 77 29 3b 0a 20 20  ab(lll, row);.  
1a70: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 6f  SELECT * FROM vo
1a80: 63 61 62 33 3b 0a 7d 20 7b 31 20 7b 6e 6f 20 73  cab3;.} {1 {no s
1a90: 75 63 68 20 66 74 73 35 20 74 61 62 6c 65 3a 20  uch fts5 table: 
1aa0: 6d 61 69 6e 2e 6c 6c 6c 7d 7d 0a 0a 23 2d 2d 2d  main.lll}}..#---
1ab0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1ac0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1ad0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1ae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1af0: 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20 73 69  ------.# Test si
1b00: 6e 67 6c 65 20 74 65 72 6d 20 71 75 65 72 69 65  ngle term querie
1b10: 73 20 6f 6e 20 66 74 73 35 76 6f 63 61 62 20 74  s on fts5vocab t
1b20: 61 62 6c 65 73 20 28 69 2e 65 2e 20 74 68 6f 73  ables (i.e. thos
1b30: 65 20 77 69 74 68 20 74 65 72 6d 3d 3f 0a 23 20  e with term=?.# 
1b40: 63 6f 6e 73 74 72 61 69 6e 74 73 20 69 6e 20 74  constraints in t
1b50: 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 29  he WHERE clause)
1b60: 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  ..#.do_execsql_t
1b70: 65 73 74 20 37 2e 30 20 7b 0a 20 20 43 52 45 41  est 7.0 {.  CREA
1b80: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
1b90: 20 74 78 20 55 53 49 4e 47 20 66 74 73 35 28 6f   tx USING fts5(o
1ba0: 6e 65 2c 20 74 77 6f 2c 20 64 65 74 61 69 6c 3d  ne, two, detail=
1bb0: 25 44 45 54 41 49 4c 25 29 3b 0a 20 20 49 4e 53  %DETAIL%);.  INS
1bc0: 45 52 54 20 49 4e 54 4f 20 74 78 20 56 41 4c 55  ERT INTO tx VALU
1bd0: 45 53 28 27 67 20 61 20 67 67 67 20 67 20 61 20  ES('g a ggg g a 
1be0: 62 20 65 65 65 27 2c 20 20 20 20 20 20 27 63 63  b eee',      'cc
1bf0: 20 64 20 61 61 20 66 66 20 67 20 65 65 27 29 3b   d aa ff g ee');
1c00: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
1c10: 78 20 56 41 4c 55 45 53 28 27 64 64 20 66 66 66  x VALUES('dd fff
1c20: 20 69 20 61 20 69 20 6a 6a 6a 27 2c 20 20 20 20   i a i jjj',    
1c30: 20 20 20 27 66 20 66 66 66 20 68 68 20 6a 6a 20     'f fff hh jj 
1c40: 65 20 66 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  e f');.  INSERT 
1c50: 49 4e 54 4f 20 74 78 20 56 41 4c 55 45 53 28 27  INTO tx VALUES('
1c60: 67 67 67 20 61 20 66 20 66 20 66 66 66 20 64 64  ggg a f f fff dd
1c70: 20 61 61 27 2c 20 20 20 20 27 64 20 67 67 67 20   aa',    'd ggg 
1c80: 66 20 66 20 6a 20 67 67 20 64 64 64 27 29 3b 0a  f f j gg ddd');.
1c90: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 78    INSERT INTO tx
1ca0: 20 56 41 4c 55 45 53 28 27 65 20 62 62 20 68 20   VALUES('e bb h 
1cb0: 6a 6a 6a 20 69 69 20 67 67 27 2c 20 20 20 20 20  jjj ii gg',     
1cc0: 20 20 27 65 20 61 61 20 65 20 66 20 63 20 66 66    'e aa e f c ff
1cd0: 66 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  f');.  INSERT IN
1ce0: 54 4f 20 74 78 20 56 41 4c 55 45 53 28 27 6a 20  TO tx VALUES('j 
1cf0: 66 66 20 61 61 20 61 20 68 27 2c 20 20 20 20 20  ff aa a h',     
1d00: 20 20 20 20 20 20 20 27 68 20 61 20 6a 20 62 62         'h a j bb
1d10: 62 20 62 62 27 29 3b 0a 20 20 49 4e 53 45 52 54  b bb');.  INSERT
1d20: 20 49 4e 54 4f 20 74 78 20 56 41 4c 55 45 53 28   INTO tx VALUES(
1d30: 27 63 63 20 69 20 66 66 20 63 20 64 20 66 27 2c  'cc i ff c d f',
1d40: 20 20 20 20 20 20 20 20 20 20 27 64 64 20 69 69            'dd ii
1d50: 20 66 66 66 20 66 20 63 20 63 63 20 64 27 29 3b   fff f c cc d');
1d60: 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74  .  INSERT INTO t
1d70: 78 20 56 41 4c 55 45 53 28 27 6a 6a 6a 20 67 20  x VALUES('jjj g 
1d80: 69 20 62 62 20 63 63 20 65 65 65 27 2c 20 20 20  i bb cc eee',   
1d90: 20 20 20 27 68 68 68 20 69 69 69 20 61 61 61 20     'hhh iii aaa 
1da0: 62 20 62 62 62 20 61 61 61 27 29 3b 0a 20 20 49  b bbb aaa');.  I
1db0: 4e 53 45 52 54 20 49 4e 54 4f 20 74 78 20 56 41  NSERT INTO tx VA
1dc0: 4c 55 45 53 28 27 68 68 68 20 68 68 68 20 68 68  LUES('hhh hhh hh
1dd0: 68 20 62 62 20 66 66 66 20 66 27 2c 20 20 20 27  h bb fff f',   '
1de0: 66 66 66 20 67 67 20 61 61 20 69 69 20 68 20 61  fff gg aa ii h a
1df0: 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54  ');.  INSERT INT
1e00: 4f 20 74 78 20 56 41 4c 55 45 53 28 27 62 20 63  O tx VALUES('b c
1e10: 20 63 63 20 61 61 61 20 69 69 69 20 67 67 67 20   cc aaa iii ggg 
1e20: 66 27 2c 20 20 20 27 69 69 69 20 66 66 20 65 65  f',   'iii ff ee
1e30: 20 61 20 66 66 20 63 20 63 63 27 29 3b 0a 20 20   a ff c cc');.  
1e40: 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 78 20 56  INSERT INTO tx V
1e50: 41 4c 55 45 53 28 27 68 68 68 20 62 20 68 68 68  ALUES('hhh b hhh
1e60: 20 61 61 61 20 6a 20 69 20 69 27 2c 20 20 20 20   aaa j i i',    
1e70: 27 64 64 20 65 65 20 65 65 20 61 61 20 62 62 62  'dd ee ee aa bbb
1e80: 20 69 69 69 27 29 3b 0a 20 20 49 4e 53 45 52 54   iii');.  INSERT
1e90: 20 49 4e 54 4f 20 74 78 20 56 41 4c 55 45 53 28   INTO tx VALUES(
1ea0: 27 68 68 20 64 64 20 68 20 62 20 67 20 66 66 20  'hh dd h b g ff 
1eb0: 69 27 2c 20 20 20 20 20 20 20 27 63 63 63 20 62  i',       'ccc b
1ec0: 62 20 63 63 20 63 63 63 20 66 20 61 20 64 27 29  b cc ccc f a d')
1ed0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
1ee0: 74 78 20 56 41 4c 55 45 53 28 27 67 20 64 20 62  tx VALUES('g d b
1ef0: 20 67 67 67 20 6a 6a 27 2c 20 20 20 20 20 20 20   ggg jj',       
1f00: 20 20 20 20 27 66 66 66 20 6a 6a 20 66 66 20 6a      'fff jj ff j
1f10: 6a 20 67 20 67 67 20 65 65 27 29 3b 0a 20 20 49  j g gg ee');.  I
1f20: 4e 53 45 52 54 20 49 4e 54 4f 20 74 78 20 56 41  NSERT INTO tx VA
1f30: 4c 55 45 53 28 27 67 20 65 65 20 67 67 67 20 67  LUES('g ee ggg g
1f40: 67 67 20 63 63 20 62 62 20 65 65 65 27 2c 20 27  gg cc bb eee', '
1f50: 61 61 20 6a 20 6a 6a 6a 20 62 62 62 20 64 64 20  aa j jjj bbb dd 
1f60: 65 65 65 20 66 66 27 29 3b 0a 20 20 49 4e 53 45  eee ff');.  INSE
1f70: 52 54 20 49 4e 54 4f 20 74 78 20 56 41 4c 55 45  RT INTO tx VALUE
1f80: 53 28 27 63 20 6a 6a 6a 20 68 68 20 64 64 64 20  S('c jjj hh ddd 
1f90: 64 64 20 68 27 2c 20 20 20 20 20 20 27 65 20 61  dd h',      'e a
1fa0: 61 61 20 68 20 6a 6a 6a 20 67 67 27 29 3b 0a 0a  aa h jjj gg');..
1fb0: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
1fc0: 20 54 41 42 4c 45 20 74 78 72 20 55 53 49 4e 47   TABLE txr USING
1fd0: 20 66 74 73 35 76 6f 63 61 62 28 74 78 2c 20 72   fts5vocab(tx, r
1fe0: 6f 77 29 3b 0a 20 20 43 52 45 41 54 45 20 56 49  ow);.  CREATE VI
1ff0: 52 54 55 41 4c 20 54 41 42 4c 45 20 74 78 63 20  RTUAL TABLE txc 
2000: 55 53 49 4e 47 20 66 74 73 35 76 6f 63 61 62 28  USING fts5vocab(
2010: 74 78 2c 20 63 6f 6c 29 3b 0a 7d 0a 0a 70 72 6f  tx, col);.}..pro
2020: 63 20 63 6f 6e 74 20 7b 4c 20 65 6c 65 6d 7d 20  c cont {L elem} 
2030: 7b 0a 20 20 73 65 74 20 6e 20 30 0a 20 20 66 6f  {.  set n 0.  fo
2040: 72 65 61 63 68 20 65 20 24 4c 20 7b 20 69 66 20  reach e $L { if 
2050: 7b 24 65 6c 65 6d 3d 3d 24 65 7d 20 7b 69 6e 63  {$elem==$e} {inc
2060: 72 20 6e 7d 20 7d 0a 20 20 73 65 74 20 6e 0a 7d  r n} }.  set n.}
2070: 0a 64 62 20 66 75 6e 63 20 63 6f 6e 74 20 63 6f  .db func cont co
2080: 6e 74 0a 0a 66 6f 72 65 61 63 68 20 7b 74 65 72  nt..foreach {ter
2090: 6d 7d 20 7b 0a 20 20 61 20 61 61 20 61 61 61 0a  m} {.  a aa aaa.
20a0: 20 20 62 20 62 62 20 62 62 62 0a 20 20 63 20 63    b bb bbb.  c c
20b0: 63 20 63 63 63 0a 20 20 64 20 64 64 20 64 64 64  c ccc.  d dd ddd
20c0: 0a 20 20 65 20 65 65 20 65 65 65 0a 20 20 66 20  .  e ee eee.  f 
20d0: 66 66 20 66 66 66 0a 20 20 67 20 67 67 20 67 67  ff fff.  g gg gg
20e0: 67 0a 20 20 68 20 68 68 20 68 68 68 0a 20 20 69  g.  h hh hhh.  i
20f0: 20 69 69 20 69 69 69 0a 20 20 6a 20 6a 6a 20 6a   ii iii.  j jj j
2100: 6a 6a 0a 7d 20 7b 0a 20 20 73 65 74 20 72 65 73  jj.} {.  set res
2110: 72 20 5b 64 62 20 65 76 61 6c 20 7b 0a 20 20 20  r [db eval {.   
2120: 20 53 45 4c 45 43 54 20 24 74 65 72 6d 2c 20 0a   SELECT $term, .
2130: 20 20 20 20 20 20 73 75 6d 28 63 6f 6e 74 28 6f        sum(cont(o
2140: 6e 65 20 7c 7c 20 27 20 27 20 7c 7c 20 74 77 6f  ne || ' ' || two
2150: 2c 20 24 74 65 72 6d 29 20 3e 20 30 29 2c 0a 20  , $term) > 0),. 
2160: 20 20 20 20 20 73 75 6d 28 63 6f 6e 74 28 6f 6e       sum(cont(on
2170: 65 20 7c 7c 20 27 20 27 20 7c 7c 20 74 77 6f 2c  e || ' ' || two,
2180: 20 24 74 65 72 6d 29 29 0a 20 20 20 20 46 52 4f   $term)).    FRO
2190: 4d 20 74 78 0a 20 20 7d 5d 0a 20 20 69 66 20 7b  M tx.  }].  if {
21a0: 5b 6c 69 6e 64 65 78 20 24 72 65 73 72 20 31 5d  [lindex $resr 1]
21b0: 3d 3d 30 7d 20 7b 73 65 74 20 72 65 73 72 20 5b  ==0} {set resr [
21c0: 6c 69 73 74 5d 7d 0a 0a 20 20 73 65 74 20 72 31  list]}..  set r1
21d0: 20 5b 64 62 20 65 76 61 6c 20 7b 0a 20 20 20 20   [db eval {.    
21e0: 53 45 4c 45 43 54 20 24 74 65 72 6d 2c 20 27 6f  SELECT $term, 'o
21f0: 6e 65 27 2c 20 73 75 6d 28 63 6f 6e 74 28 6f 6e  ne', sum(cont(on
2200: 65 2c 20 24 74 65 72 6d 29 3e 30 29 2c 20 73 75  e, $term)>0), su
2210: 6d 28 63 6f 6e 74 28 6f 6e 65 2c 20 24 74 65 72  m(cont(one, $ter
2220: 6d 29 29 20 46 52 4f 4d 20 74 78 0a 20 20 7d 5d  m)) FROM tx.  }]
2230: 0a 20 20 69 66 20 7b 5b 6c 69 6e 64 65 78 20 24  .  if {[lindex $
2240: 72 31 20 32 5d 3d 3d 30 7d 20 7b 73 65 74 20 72  r1 2]==0} {set r
2250: 31 20 5b 6c 69 73 74 5d 7d 0a 0a 20 20 73 65 74  1 [list]}..  set
2260: 20 72 32 20 5b 64 62 20 65 76 61 6c 20 7b 0a 20   r2 [db eval {. 
2270: 20 20 20 53 45 4c 45 43 54 20 24 74 65 72 6d 2c     SELECT $term,
2280: 20 27 74 77 6f 27 2c 20 73 75 6d 28 63 6f 6e 74   'two', sum(cont
2290: 28 74 77 6f 2c 20 24 74 65 72 6d 29 3e 30 29 2c  (two, $term)>0),
22a0: 20 73 75 6d 28 63 6f 6e 74 28 74 77 6f 2c 20 24   sum(cont(two, $
22b0: 74 65 72 6d 29 29 20 46 52 4f 4d 20 74 78 0a 20  term)) FROM tx. 
22c0: 20 7d 5d 0a 20 20 69 66 20 7b 5b 6c 69 6e 64 65   }].  if {[linde
22d0: 78 20 24 72 32 20 32 5d 3d 3d 30 7d 20 7b 73 65  x $r2 2]==0} {se
22e0: 74 20 72 32 20 5b 6c 69 73 74 5d 7d 0a 0a 20 20  t r2 [list]}..  
22f0: 73 65 74 20 72 65 73 63 20 5b 63 6f 6e 63 61 74  set resc [concat
2300: 20 24 72 31 20 24 72 32 5d 0a 0a 20 20 73 65 74   $r1 $r2]..  set
2310: 20 72 65 73 63 20 5b 73 74 61 72 5f 66 72 6f 6d   resc [star_from
2320: 5f 63 6f 6c 20 24 72 65 73 63 5d 0a 20 20 73 65  _col $resc].  se
2330: 74 20 72 65 73 72 20 5b 73 74 61 72 5f 66 72 6f  t resr [star_fro
2340: 6d 5f 72 6f 77 20 24 72 65 73 72 5d 0a 20 20 69  m_row $resr].  i
2350: 66 20 7b 5b 64 65 74 61 69 6c 5f 69 73 5f 6e 6f  f {[detail_is_no
2360: 6e 65 5d 7d 20 7b 20 73 65 74 20 72 65 73 63 20  ne]} { set resc 
2370: 5b 72 6f 77 5f 74 6f 5f 63 6f 6c 20 24 72 65 73  [row_to_col $res
2380: 72 5d 20 7d 0a 20 20 64 6f 5f 65 78 65 63 73 71  r] }.  do_execsq
2390: 6c 5f 74 65 73 74 20 37 2e 24 74 65 72 6d 2e 31  l_test 7.$term.1
23a0: 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20   {SELECT * FROM 
23b0: 74 78 63 20 57 48 45 52 45 20 74 65 72 6d 3d 24  txc WHERE term=$
23c0: 74 65 72 6d 7d 20 24 72 65 73 63 0a 20 20 64 6f  term} $resc.  do
23d0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 37 2e  _execsql_test 7.
23e0: 24 74 65 72 6d 2e 32 20 7b 53 45 4c 45 43 54 20  $term.2 {SELECT 
23f0: 2a 20 46 52 4f 4d 20 74 78 72 20 57 48 45 52 45  * FROM txr WHERE
2400: 20 74 65 72 6d 3d 24 74 65 72 6d 7d 20 24 72 65   term=$term} $re
2410: 73 72 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c  sr.}..do_execsql
2420: 5f 74 65 73 74 20 37 2e 31 20 7b 0a 20 20 43 52  _test 7.1 {.  CR
2430: 45 41 54 45 20 54 41 42 4c 45 20 74 78 72 5f 63  EATE TABLE txr_c
2440: 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   AS SELECT * FRO
2450: 4d 20 74 78 72 3b 0a 20 20 43 52 45 41 54 45 20  M txr;.  CREATE 
2460: 54 41 42 4c 45 20 74 78 63 5f 63 20 41 53 20 53  TABLE txc_c AS S
2470: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 78 63  ELECT * FROM txc
2480: 3b 0a 7d 0a 0a 23 20 54 65 73 74 20 72 61 6e 67  ;.}..# Test rang
2490: 65 20 71 75 65 72 69 65 73 20 6f 6e 20 74 68 65  e queries on the
24a0: 20 66 74 73 35 76 6f 63 61 62 20 74 61 62 6c 65   fts5vocab table
24b0: 73 20 63 72 65 61 74 65 64 20 61 62 6f 76 65 2e  s created above.
24c0: 0a 23 0a 66 6f 72 65 61 63 68 20 7b 74 6e 20 61  .#.foreach {tn a
24d0: 20 62 7d 20 7b 0a 20 20 31 20 20 20 61 20 20 20   b} {.  1   a   
24e0: 6a 6a 6a 0a 20 20 32 20 20 20 62 62 20 20 6a 0a  jjj.  2   bb  j.
24f0: 20 20 33 20 20 20 63 63 63 20 64 64 64 0a 20 20    3   ccc ddd.  
2500: 34 20 20 20 64 64 20 20 78 79 7a 0a 20 20 35 20  4   dd  xyz.  5 
2510: 20 20 78 7a 79 20 64 64 0a 20 20 36 20 20 20 68    xzy dd.  6   h
2520: 20 20 20 68 68 0a 7d 20 7b 0a 20 20 64 6f 5f 65     hh.} {.  do_e
2530: 78 65 63 73 71 6c 5f 74 65 73 74 20 37 2e 32 2e  xecsql_test 7.2.
2540: 24 74 6e 2e 31 20 7b 0a 20 20 20 20 53 45 4c 45  $tn.1 {.    SELE
2550: 43 54 20 2a 20 46 52 4f 4d 20 74 78 72 20 57 48  CT * FROM txr WH
2560: 45 52 45 20 74 65 72 6d 3e 3d 24 61 0a 20 20 7d  ERE term>=$a.  }
2570: 20 5b 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43   [db eval {SELEC
2580: 54 20 2a 20 46 52 4f 4d 20 74 78 72 5f 63 20 57  T * FROM txr_c W
2590: 48 45 52 45 20 74 65 72 6d 3e 3d 24 61 7d 5d 0a  HERE term>=$a}].
25a0: 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73    do_execsql_tes
25b0: 74 20 37 2e 32 2e 24 74 6e 2e 32 20 7b 0a 20 20  t 7.2.$tn.2 {.  
25c0: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
25d0: 74 78 72 20 57 48 45 52 45 20 74 65 72 6d 3c 3d  txr WHERE term<=
25e0: 24 62 0a 20 20 7d 20 5b 64 62 20 65 76 61 6c 20  $b.  } [db eval 
25f0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
2600: 78 72 5f 63 20 57 48 45 52 45 20 74 65 72 6d 20  xr_c WHERE term 
2610: 3c 3d 24 62 7d 5d 0a 20 20 64 6f 5f 65 78 65 63  <=$b}].  do_exec
2620: 73 71 6c 5f 74 65 73 74 20 37 2e 32 2e 24 74 6e  sql_test 7.2.$tn
2630: 2e 33 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20  .3 {.    SELECT 
2640: 2a 20 46 52 4f 4d 20 74 78 72 20 57 48 45 52 45  * FROM txr WHERE
2650: 20 74 65 72 6d 3e 3d 24 61 20 41 4e 44 20 74 65   term>=$a AND te
2660: 72 6d 3c 3d 24 62 0a 20 20 7d 20 5b 64 62 20 65  rm<=$b.  } [db e
2670: 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  val {SELECT * FR
2680: 4f 4d 20 74 78 72 5f 63 20 57 48 45 52 45 20 74  OM txr_c WHERE t
2690: 65 72 6d 3e 3d 24 61 20 41 4e 44 20 74 65 72 6d  erm>=$a AND term
26a0: 20 3c 3d 24 62 7d 5d 0a 0a 20 20 64 6f 5f 65 78   <=$b}]..  do_ex
26b0: 65 63 73 71 6c 5f 74 65 73 74 20 37 2e 32 2e 24  ecsql_test 7.2.$
26c0: 74 6e 2e 34 20 7b 0a 20 20 20 20 53 45 4c 45 43  tn.4 {.    SELEC
26d0: 54 20 2a 20 46 52 4f 4d 20 74 78 63 20 57 48 45  T * FROM txc WHE
26e0: 52 45 20 74 65 72 6d 3e 3d 24 61 0a 20 20 7d 20  RE term>=$a.  } 
26f0: 5b 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54  [db eval {SELECT
2700: 20 2a 20 46 52 4f 4d 20 74 78 63 5f 63 20 57 48   * FROM txc_c WH
2710: 45 52 45 20 74 65 72 6d 3e 3d 24 61 7d 5d 0a 20  ERE term>=$a}]. 
2720: 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74   do_execsql_test
2730: 20 37 2e 32 2e 24 74 6e 2e 35 20 7b 0a 20 20 20   7.2.$tn.5 {.   
2740: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2750: 78 63 20 57 48 45 52 45 20 74 65 72 6d 3c 3d 24  xc WHERE term<=$
2760: 62 0a 20 20 7d 20 5b 64 62 20 65 76 61 6c 20 7b  b.  } [db eval {
2770: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 78  SELECT * FROM tx
2780: 63 5f 63 20 57 48 45 52 45 20 74 65 72 6d 20 3c  c_c WHERE term <
2790: 3d 24 62 7d 5d 0a 20 20 64 6f 5f 65 78 65 63 73  =$b}].  do_execs
27a0: 71 6c 5f 74 65 73 74 20 37 2e 32 2e 24 74 6e 2e  ql_test 7.2.$tn.
27b0: 36 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a  6 {.    SELECT *
27c0: 20 46 52 4f 4d 20 74 78 63 20 57 48 45 52 45 20   FROM txc WHERE 
27d0: 74 65 72 6d 3e 3d 24 61 20 41 4e 44 20 74 65 72  term>=$a AND ter
27e0: 6d 3c 3d 24 62 0a 20 20 7d 20 5b 64 62 20 65 76  m<=$b.  } [db ev
27f0: 61 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  al {SELECT * FRO
2800: 4d 20 74 78 63 5f 63 20 57 48 45 52 45 20 74 65  M txc_c WHERE te
2810: 72 6d 3e 3d 24 61 20 41 4e 44 20 74 65 72 6d 20  rm>=$a AND term 
2820: 3c 3d 24 62 7d 5d 0a 0a 20 20 64 6f 5f 65 78 65  <=$b}]..  do_exe
2830: 63 73 71 6c 5f 74 65 73 74 20 37 2e 32 2e 24 74  csql_test 7.2.$t
2840: 6e 2e 37 20 7b 0a 20 20 20 20 53 45 4c 45 43 54  n.7 {.    SELECT
2850: 20 2a 20 46 52 4f 4d 20 74 78 72 20 57 48 45 52   * FROM txr WHER
2860: 45 20 74 65 72 6d 3e 24 61 0a 20 20 7d 20 5b 64  E term>$a.  } [d
2870: 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a  b eval {SELECT *
2880: 20 46 52 4f 4d 20 74 78 72 5f 63 20 57 48 45 52   FROM txr_c WHER
2890: 45 20 74 65 72 6d 3e 24 61 7d 5d 0a 20 20 64 6f  E term>$a}].  do
28a0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 37 2e  _execsql_test 7.
28b0: 32 2e 24 74 6e 2e 38 20 7b 0a 20 20 20 20 53 45  2.$tn.8 {.    SE
28c0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 78 72 20  LECT * FROM txr 
28d0: 57 48 45 52 45 20 74 65 72 6d 3c 24 62 0a 20 20  WHERE term<$b.  
28e0: 7d 20 5b 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  } [db eval {SELE
28f0: 43 54 20 2a 20 46 52 4f 4d 20 74 78 72 5f 63 20  CT * FROM txr_c 
2900: 57 48 45 52 45 20 74 65 72 6d 3c 24 62 7d 5d 0a  WHERE term<$b}].
2910: 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73    do_execsql_tes
2920: 74 20 37 2e 32 2e 24 74 6e 2e 39 20 7b 0a 20 20  t 7.2.$tn.9 {.  
2930: 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20    SELECT * FROM 
2940: 74 78 72 20 57 48 45 52 45 20 74 65 72 6d 3e 24  txr WHERE term>$
2950: 61 20 41 4e 44 20 74 65 72 6d 3c 24 62 0a 20 20  a AND term<$b.  
2960: 7d 20 5b 64 62 20 65 76 61 6c 20 7b 53 45 4c 45  } [db eval {SELE
2970: 43 54 20 2a 20 46 52 4f 4d 20 74 78 72 5f 63 20  CT * FROM txr_c 
2980: 57 48 45 52 45 20 74 65 72 6d 3e 24 61 20 41 4e  WHERE term>$a AN
2990: 44 20 74 65 72 6d 20 3c 24 62 7d 5d 0a 0a 20 20  D term <$b}]..  
29a0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
29b0: 37 2e 32 2e 24 74 6e 2e 31 30 20 7b 0a 20 20 20  7.2.$tn.10 {.   
29c0: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
29d0: 78 63 20 57 48 45 52 45 20 74 65 72 6d 3e 24 61  xc WHERE term>$a
29e0: 0a 20 20 7d 20 5b 64 62 20 65 76 61 6c 20 7b 53  .  } [db eval {S
29f0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 78 63  ELECT * FROM txc
2a00: 5f 63 20 57 48 45 52 45 20 74 65 72 6d 3e 24 61  _c WHERE term>$a
2a10: 7d 5d 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f  }].  do_execsql_
2a20: 74 65 73 74 20 37 2e 32 2e 24 74 6e 2e 31 31 20  test 7.2.$tn.11 
2a30: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
2a40: 52 4f 4d 20 74 78 63 20 57 48 45 52 45 20 74 65  ROM txc WHERE te
2a50: 72 6d 3c 24 62 0a 20 20 7d 20 5b 64 62 20 65 76  rm<$b.  } [db ev
2a60: 61 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  al {SELECT * FRO
2a70: 4d 20 74 78 63 5f 63 20 57 48 45 52 45 20 74 65  M txc_c WHERE te
2a80: 72 6d 3c 24 62 7d 5d 0a 20 20 64 6f 5f 65 78 65  rm<$b}].  do_exe
2a90: 63 73 71 6c 5f 74 65 73 74 20 37 2e 32 2e 24 74  csql_test 7.2.$t
2aa0: 6e 2e 31 32 20 7b 0a 20 20 20 20 53 45 4c 45 43  n.12 {.    SELEC
2ab0: 54 20 2a 20 46 52 4f 4d 20 74 78 63 20 57 48 45  T * FROM txc WHE
2ac0: 52 45 20 74 65 72 6d 3e 24 61 20 41 4e 44 20 74  RE term>$a AND t
2ad0: 65 72 6d 3c 24 62 0a 20 20 7d 20 5b 64 62 20 65  erm<$b.  } [db e
2ae0: 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  val {SELECT * FR
2af0: 4f 4d 20 74 78 63 5f 63 20 57 48 45 52 45 20 74  OM txc_c WHERE t
2b00: 65 72 6d 3e 24 61 20 41 4e 44 20 74 65 72 6d 20  erm>$a AND term 
2b10: 3c 24 62 7d 5d 0a 7d 0a 0a 64 6f 5f 65 78 65 63  <$b}].}..do_exec
2b20: 73 71 6c 5f 74 65 73 74 20 37 2e 33 2e 31 20 7b  sql_test 7.3.1 {
2b30: 0a 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74 28  .  SELECT count(
2b40: 2a 29 20 46 52 4f 4d 20 74 78 72 2c 20 74 78 72  *) FROM txr, txr
2b50: 5f 63 20 57 48 45 52 45 20 74 78 72 2e 74 65 72  _c WHERE txr.ter
2b60: 6d 20 3d 20 74 78 72 5f 63 2e 74 65 72 6d 3b 0a  m = txr_c.term;.
2b70: 7d 20 7b 33 30 7d 0a 0a 69 66 20 7b 21 5b 64 65  } {30}..if {![de
2b80: 74 61 69 6c 5f 69 73 5f 6e 6f 6e 65 5d 7d 20 7b  tail_is_none]} {
2b90: 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .  do_execsql_te
2ba0: 73 74 20 37 2e 33 2e 32 20 7b 0a 20 20 20 20 53  st 7.3.2 {.    S
2bb0: 45 4c 45 43 54 20 63 6f 75 6e 74 28 2a 29 20 46  ELECT count(*) F
2bc0: 52 4f 4d 20 74 78 63 2c 20 74 78 63 5f 63 0a 20  ROM txc, txc_c. 
2bd0: 20 20 20 20 20 57 48 45 52 45 20 74 78 63 2e 74       WHERE txc.t
2be0: 65 72 6d 20 3d 20 74 78 63 5f 63 2e 74 65 72 6d  erm = txc_c.term
2bf0: 20 41 4e 44 20 74 78 63 2e 63 6f 6c 3d 74 78 63   AND txc.col=txc
2c00: 5f 63 2e 63 6f 6c 3b 0a 20 20 7d 20 7b 35 37 7d  _c.col;.  } {57}
2c10: 0a 7d 0a 0a 7d 0a 0a 23 2d 2d 2d 2d 2d 2d 2d 2d  .}..}..#--------
2c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2c60: 2d 0a 23 20 54 65 73 74 20 74 68 65 20 66 74 73  -.# Test the fts
2c70: 35 76 6f 63 61 62 20 74 61 62 6c 65 73 20 72 65  5vocab tables re
2c80: 73 70 6f 6e 73 65 20 74 6f 20 61 20 73 70 65 63  sponse to a spec
2c90: 69 66 69 63 20 74 79 70 65 73 20 6f 66 20 63 6f  ific types of co
2ca0: 72 72 75 70 74 69 6f 6e 3a 0a 23 20 77 68 65 72  rruption:.# wher
2cb0: 65 20 74 68 65 20 66 74 73 35 20 69 6e 64 65 78  e the fts5 index
2cc0: 20 63 6f 6e 74 61 69 6e 73 20 68 69 74 73 20 66   contains hits f
2cd0: 6f 72 20 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20  or columns that 
2ce0: 64 6f 20 6e 6f 74 20 65 78 69 73 74 2e 0a 23 0a  do not exist..#.
2cf0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
2d00: 38 2e 30 20 7b 0a 20 20 43 52 45 41 54 45 20 56  8.0 {.  CREATE V
2d10: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 31 20  IRTUAL TABLE x1 
2d20: 55 53 49 4e 47 20 66 74 73 35 28 61 2c 20 62 2c  USING fts5(a, b,
2d30: 20 63 2c 20 64 65 74 61 69 6c 3d 25 44 45 54 41   c, detail=%DETA
2d40: 49 4c 25 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  IL%);.  INSERT I
2d50: 4e 54 4f 20 78 31 20 56 41 4c 55 45 53 28 27 61  NTO x1 VALUES('a
2d60: 20 62 20 63 27 2c 20 27 64 20 65 20 66 27 2c 20   b c', 'd e f', 
2d70: 27 67 20 68 20 69 27 29 3b 0a 20 20 49 4e 53 45  'g h i');.  INSE
2d80: 52 54 20 49 4e 54 4f 20 78 31 20 56 41 4c 55 45  RT INTO x1 VALUE
2d90: 53 28 27 67 20 68 20 69 27 2c 20 27 61 20 62 20  S('g h i', 'a b 
2da0: 63 27 2c 20 27 64 20 65 20 66 27 29 3b 0a 20 20  c', 'd e f');.  
2db0: 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31 20 56  INSERT INTO x1 V
2dc0: 41 4c 55 45 53 28 27 64 20 65 20 66 27 2c 20 27  ALUES('d e f', '
2dd0: 67 20 68 20 69 27 2c 20 27 61 20 62 20 63 27 29  g h i', 'a b c')
2de0: 3b 0a 20 20 43 52 45 41 54 45 20 56 49 52 54 55  ;.  CREATE VIRTU
2df0: 41 4c 20 54 41 42 4c 45 20 78 31 5f 72 20 55 53  AL TABLE x1_r US
2e00: 49 4e 47 20 66 74 73 35 76 6f 63 61 62 28 78 31  ING fts5vocab(x1
2e10: 2c 20 72 6f 77 29 3b 0a 20 20 43 52 45 41 54 45  , row);.  CREATE
2e20: 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78   VIRTUAL TABLE x
2e30: 31 5f 63 20 55 53 49 4e 47 20 66 74 73 35 76 6f  1_c USING fts5vo
2e40: 63 61 62 28 78 31 2c 20 63 6f 6c 29 3b 0a 7d 0a  cab(x1, col);.}.
2e50: 0a 73 65 74 20 72 65 73 72 20 5b 73 74 61 72 5f  .set resr [star_
2e60: 66 72 6f 6d 5f 72 6f 77 20 7b 61 20 33 20 33 20  from_row {a 3 3 
2e70: 62 20 33 20 33 20 63 20 33 20 33 20 64 20 33 20  b 3 3 c 3 3 d 3 
2e80: 33 20 65 20 33 20 33 20 66 20 33 20 33 20 67 20  3 e 3 3 f 3 3 g 
2e90: 33 20 33 20 68 20 33 20 33 20 69 20 33 20 33 7d  3 3 h 3 3 i 3 3}
2ea0: 5d 0a 73 65 74 20 72 65 73 63 20 5b 73 74 61 72  ].set resc [star
2eb0: 5f 66 72 6f 6d 5f 63 6f 6c 20 7b 0a 20 20 61 20  _from_col {.  a 
2ec0: 61 20 31 20 31 20 61 20 62 20 31 20 31 20 61 20  a 1 1 a b 1 1 a 
2ed0: 63 20 31 20 31 20 62 20 61 20 31 20 31 20 0a 20  c 1 1 b a 1 1 . 
2ee0: 20 62 20 62 20 31 20 31 20 62 20 63 20 31 20 31   b b 1 1 b c 1 1
2ef0: 20 63 20 61 20 31 20 31 20 63 20 62 20 31 20 31   c a 1 1 c b 1 1
2f00: 20 0a 20 20 63 20 63 20 31 20 31 20 64 20 61 20   .  c c 1 1 d a 
2f10: 31 20 31 20 64 20 62 20 31 20 31 20 64 20 63 20  1 1 d b 1 1 d c 
2f20: 31 20 31 0a 20 20 65 20 61 20 31 20 31 20 65 20  1 1.  e a 1 1 e 
2f30: 62 20 31 20 31 20 65 20 63 20 31 20 31 20 66 20  b 1 1 e c 1 1 f 
2f40: 61 20 31 20 31 20 0a 20 20 66 20 62 20 31 20 31  a 1 1 .  f b 1 1
2f50: 20 66 20 63 20 31 20 31 20 67 20 61 20 31 20 31   f c 1 1 g a 1 1
2f60: 20 67 20 62 20 31 20 31 20 0a 20 20 67 20 63 20   g b 1 1 .  g c 
2f70: 31 20 31 20 68 20 61 20 31 20 31 20 68 20 62 20  1 1 h a 1 1 h b 
2f80: 31 20 31 20 68 20 63 20 31 20 31 20 0a 20 20 69  1 1 h c 1 1 .  i
2f90: 20 61 20 31 20 31 20 69 20 62 20 31 20 31 20 69   a 1 1 i b 1 1 i
2fa0: 20 63 20 31 20 31 0a 7d 5d 0a 69 66 20 7b 5b 64   c 1 1.}].if {[d
2fb0: 65 74 61 69 6c 5f 69 73 5f 6e 6f 6e 65 5d 7d 20  etail_is_none]} 
2fc0: 7b 20 73 65 74 20 72 65 73 63 20 5b 72 6f 77 5f  { set resc [row_
2fd0: 74 6f 5f 63 6f 6c 20 24 72 65 73 72 5d 20 7d 0a  to_col $resr] }.
2fe0: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
2ff0: 20 38 2e 31 2e 31 20 7b 20 53 45 4c 45 43 54 20   8.1.1 { SELECT 
3000: 2a 20 46 52 4f 4d 20 78 31 5f 72 3b 20 7d 20 24  * FROM x1_r; } $
3010: 72 65 73 72 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  resr.do_execsql_
3020: 74 65 73 74 20 38 2e 31 2e 32 20 7b 20 53 45 4c  test 8.1.2 { SEL
3030: 45 43 54 20 2a 20 46 52 4f 4d 20 78 31 5f 63 20  ECT * FROM x1_c 
3040: 7d 20 24 72 65 73 63 0a 0a 64 6f 5f 65 78 65 63  } $resc..do_exec
3050: 73 71 6c 5f 74 65 73 74 20 38 2e 32 20 7b 0a 20  sql_test 8.2 {. 
3060: 20 50 52 41 47 4d 41 20 77 72 69 74 61 62 6c 65   PRAGMA writable
3070: 5f 73 63 68 65 6d 61 20 3d 20 31 3b 0a 20 20 55  _schema = 1;.  U
3080: 50 44 41 54 45 20 73 71 6c 69 74 65 5f 6d 61 73  PDATE sqlite_mas
3090: 74 65 72 20 0a 20 20 53 45 54 20 73 71 6c 20 3d  ter .  SET sql =
30a0: 20 27 43 52 45 41 54 45 20 56 49 52 54 55 41 4c   'CREATE VIRTUAL
30b0: 20 54 41 42 4c 45 20 78 31 20 55 53 49 4e 47 20   TABLE x1 USING 
30c0: 66 74 73 35 28 61 2c 20 64 65 74 61 69 6c 3d 25  fts5(a, detail=%
30d0: 44 45 54 41 49 4c 25 29 27 0a 20 20 57 48 45 52  DETAIL%)'.  WHER
30e0: 45 20 6e 61 6d 65 20 3d 20 27 78 31 27 3b 0a 7d  E name = 'x1';.}
30f0: 0a 64 62 20 63 6c 6f 73 65 0a 73 71 6c 69 74 65  .db close.sqlite
3100: 33 20 64 62 20 74 65 73 74 2e 64 62 0a 73 71 6c  3 db test.db.sql
3110: 69 74 65 33 5f 66 74 73 35 5f 6d 61 79 5f 62 65  ite3_fts5_may_be
3120: 5f 63 6f 72 72 75 70 74 20 31 0a 0a 64 6f 5f 65  _corrupt 1..do_e
3130: 78 65 63 73 71 6c 5f 74 65 73 74 20 38 2e 32 2e  xecsql_test 8.2.
3140: 31 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f  1 { SELECT * FRO
3150: 4d 20 78 31 5f 72 20 7d 20 24 72 65 73 72 0a 0a  M x1_r } $resr..
3160: 69 66 20 7b 5b 64 65 74 61 69 6c 5f 69 73 5f 6e  if {[detail_is_n
3170: 6f 6e 65 5d 7d 20 7b 0a 20 20 64 6f 5f 65 78 65  one]} {.  do_exe
3180: 63 73 71 6c 5f 74 65 73 74 20 38 2e 32 2e 32 20  csql_test 8.2.2 
3190: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
31a0: 78 31 5f 63 20 7d 20 24 72 65 73 63 0a 7d 20 65  x1_c } $resc.} e
31b0: 6c 73 65 20 7b 0a 20 20 64 6f 5f 63 61 74 63 68  lse {.  do_catch
31c0: 73 71 6c 5f 74 65 73 74 20 38 2e 32 2e 32 20 7b  sql_test 8.2.2 {
31d0: 20 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46   .    SELECT * F
31e0: 52 4f 4d 20 78 31 5f 63 20 0a 20 20 7d 20 7b 31  ROM x1_c .  } {1
31f0: 20 7b 64 61 74 61 62 61 73 65 20 64 69 73 6b 20   {database disk 
3200: 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f 72 6d  image is malform
3210: 65 64 7d 7d 0a 7d 0a 0a 73 71 6c 69 74 65 33 5f  ed}}.}..sqlite3_
3220: 66 74 73 35 5f 6d 61 79 5f 62 65 5f 63 6f 72 72  fts5_may_be_corr
3230: 75 70 74 20 30 0a 0a 7d 0a 0a 66 69 6e 69 73 68  upt 0..}..finish
3240: 5f 74 65 73 74 0a 0a                             _test..