/ Hex Artifact Content
Login

Artifact 2ba98bcef0fcab3e5fead8eaabd6c0efb7e57bfe707a5cfcc18572ca9b277360:


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: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
15d0: 35 2e 31 20 7b 0a 20 20 43 52 45 41 54 45 20 56  5.1 {.  CREATE V
15e0: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 65 6d  IRTUAL TABLE tem
15f0: 70 2e 76 6d 20 20 55 53 49 4e 47 20 66 74 73 35  p.vm  USING fts5
1600: 76 6f 63 61 62 28 6d 61 69 6e 2c 20 74 31 2c 20  vocab(main, t1, 
1610: 72 6f 77 29 3b 0a 20 20 43 52 45 41 54 45 20 56  row);.  CREATE V
1620: 49 52 54 55 41 4c 20 54 41 42 4c 45 20 74 65 6d  IRTUAL TABLE tem
1630: 70 2e 76 74 31 20 55 53 49 4e 47 20 66 74 73 35  p.vt1 USING fts5
1640: 76 6f 63 61 62 28 74 31 2c 20 72 6f 77 29 3b 0a  vocab(t1, row);.
1650: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
1660: 20 54 41 42 4c 45 20 74 65 6d 70 2e 76 74 32 20   TABLE temp.vt2 
1670: 55 53 49 4e 47 20 66 74 73 35 76 6f 63 61 62 28  USING fts5vocab(
1680: 74 65 6d 70 2c 20 74 31 2c 20 72 6f 77 29 3b 0a  temp, t1, row);.
1690: 20 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c    CREATE VIRTUAL
16a0: 20 54 41 42 4c 45 20 74 65 6d 70 2e 76 61 20 20   TABLE temp.va  
16b0: 55 53 49 4e 47 20 66 74 73 35 76 6f 63 61 62 28  USING fts5vocab(
16c0: 61 75 78 2c 20 74 31 2c 20 72 6f 77 29 3b 0a 7d  aux, t1, row);.}
16d0: 0a 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73  ..do_execsql_tes
16e0: 74 20 35 2e 32 20 7b 20 53 45 4c 45 43 54 20 2a  t 5.2 { SELECT *
16f0: 20 46 52 4f 4d 20 76 6d 20 7d 20 5b 73 74 61 72   FROM vm } [star
1700: 5f 66 72 6f 6d 5f 72 6f 77 20 7b 0a 20 20 61 20  _from_row {.  a 
1710: 32 20 32 20 62 20 31 20 31 20 63 20 32 20 32 20  2 2 b 1 1 c 2 2 
1720: 64 20 31 20 31 20 65 20 32 20 32 20 66 20 31 20  d 1 1 e 2 2 f 1 
1730: 31 0a 7d 5d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  1.}].do_execsql_
1740: 74 65 73 74 20 35 2e 33 20 7b 20 53 45 4c 45 43  test 5.3 { SELEC
1750: 54 20 2a 20 46 52 4f 4d 20 76 74 31 20 7d 20 5b  T * FROM vt1 } [
1760: 73 74 61 72 5f 66 72 6f 6d 5f 72 6f 77 20 7b 0a  star_from_row {.
1770: 20 20 31 20 32 20 32 20 32 20 31 20 31 20 33 20    1 2 2 2 1 1 3 
1780: 32 20 32 20 34 20 31 20 31 20 35 20 32 20 32 20  2 2 4 1 1 5 2 2 
1790: 36 20 31 20 31 0a 7d 5d 0a 64 6f 5f 65 78 65 63  6 1 1.}].do_exec
17a0: 73 71 6c 5f 74 65 73 74 20 35 2e 34 20 7b 20 53  sql_test 5.4 { S
17b0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 76 74 32  ELECT * FROM vt2
17c0: 20 7d 20 5b 73 74 61 72 5f 66 72 6f 6d 5f 72 6f   } [star_from_ro
17d0: 77 20 7b 0a 20 20 31 20 32 20 32 20 32 20 31 20  w {.  1 2 2 2 1 
17e0: 31 20 33 20 32 20 32 20 34 20 31 20 31 20 35 20  1 3 2 2 4 1 1 5 
17f0: 32 20 32 20 36 20 31 20 31 0a 7d 5d 0a 64 6f 5f  2 2 6 1 1.}].do_
1800: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 35 2e 35  execsql_test 5.5
1810: 20 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d   { SELECT * FROM
1820: 20 76 61 20 7d 20 5b 73 74 61 72 5f 66 72 6f 6d   va } [star_from
1830: 5f 72 6f 77 20 7b 0a 20 20 6d 20 31 20 31 20 6e  _row {.  m 1 1 n
1840: 20 32 20 32 20 6f 20 31 20 31 20 78 20 32 20 32   2 2 o 1 1 x 2 2
1850: 20 79 20 31 20 31 20 7a 20 32 20 32 0a 7d 5d 0a   y 1 1 z 2 2.}].
1860: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
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 0a 23 0a 64 6f  -----------.#.do
18b0: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 36 2e  _execsql_test 6.
18c0: 30 20 7b 0a 20 20 43 52 45 41 54 45 20 54 41 42  0 {.  CREATE TAB
18d0: 4c 45 20 69 69 69 28 69 69 69 29 3b 0a 20 20 43  LE iii(iii);.  C
18e0: 52 45 41 54 45 20 54 41 42 4c 45 20 6a 6a 6a 28  REATE TABLE jjj(
18f0: 78 29 3b 0a 7d 0a 0a 64 6f 5f 63 61 74 63 68 73  x);.}..do_catchs
1900: 71 6c 5f 74 65 73 74 20 36 2e 31 20 7b 0a 20 20  ql_test 6.1 {.  
1910: 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54  CREATE VIRTUAL T
1920: 41 42 4c 45 20 76 6f 63 61 62 31 20 55 53 49 4e  ABLE vocab1 USIN
1930: 47 20 66 74 73 35 76 6f 63 61 62 28 69 69 69 2c  G fts5vocab(iii,
1940: 20 72 6f 77 29 3b 0a 20 20 53 45 4c 45 43 54 20   row);.  SELECT 
1950: 2a 20 46 52 4f 4d 20 76 6f 63 61 62 31 3b 0a 7d  * FROM vocab1;.}
1960: 20 7b 31 20 7b 6e 6f 20 73 75 63 68 20 66 74 73   {1 {no such fts
1970: 35 20 74 61 62 6c 65 3a 20 6d 61 69 6e 2e 69 69  5 table: main.ii
1980: 69 7d 7d 0a 0a 64 6f 5f 63 61 74 63 68 73 71 6c  i}}..do_catchsql
1990: 5f 74 65 73 74 20 36 2e 32 20 7b 0a 20 20 43 52  _test 6.2 {.  CR
19a0: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
19b0: 4c 45 20 76 6f 63 61 62 32 20 55 53 49 4e 47 20  LE vocab2 USING 
19c0: 66 74 73 35 76 6f 63 61 62 28 6a 6a 6a 2c 20 72  fts5vocab(jjj, r
19d0: 6f 77 29 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20  ow);.  SELECT * 
19e0: 46 52 4f 4d 20 76 6f 63 61 62 32 3b 0a 7d 20 7b  FROM vocab2;.} {
19f0: 31 20 7b 6e 6f 20 73 75 63 68 20 66 74 73 35 20  1 {no such fts5 
1a00: 74 61 62 6c 65 3a 20 6d 61 69 6e 2e 6a 6a 6a 7d  table: main.jjj}
1a10: 7d 0a 0a 64 6f 5f 63 61 74 63 68 73 71 6c 5f 74  }..do_catchsql_t
1a20: 65 73 74 20 36 2e 32 20 7b 0a 20 20 43 52 45 41  est 6.2 {.  CREA
1a30: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
1a40: 20 76 6f 63 61 62 33 20 55 53 49 4e 47 20 66 74   vocab3 USING ft
1a50: 73 35 76 6f 63 61 62 28 6c 6c 6c 2c 20 72 6f 77  s5vocab(lll, row
1a60: 29 3b 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52  );.  SELECT * FR
1a70: 4f 4d 20 76 6f 63 61 62 33 3b 0a 7d 20 7b 31 20  OM vocab3;.} {1 
1a80: 7b 6e 6f 20 73 75 63 68 20 66 74 73 35 20 74 61  {no such fts5 ta
1a90: 62 6c 65 3a 20 6d 61 69 6e 2e 6c 6c 6c 7d 7d 0a  ble: main.lll}}.
1aa0: 0a 23 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .#--------------
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 0a 23 20 54 65  -----------.# Te
1af0: 73 74 20 73 69 6e 67 6c 65 20 74 65 72 6d 20 71  st single term q
1b00: 75 65 72 69 65 73 20 6f 6e 20 66 74 73 35 76 6f  ueries on fts5vo
1b10: 63 61 62 20 74 61 62 6c 65 73 20 28 69 2e 65 2e  cab tables (i.e.
1b20: 20 74 68 6f 73 65 20 77 69 74 68 20 74 65 72 6d   those with term
1b30: 3d 3f 0a 23 20 63 6f 6e 73 74 72 61 69 6e 74 73  =?.# constraints
1b40: 20 69 6e 20 74 68 65 20 57 48 45 52 45 20 63 6c   in the WHERE cl
1b50: 61 75 73 65 29 2e 0a 23 0a 64 6f 5f 65 78 65 63  ause)..#.do_exec
1b60: 73 71 6c 5f 74 65 73 74 20 37 2e 30 20 7b 0a 20  sql_test 7.0 {. 
1b70: 20 43 52 45 41 54 45 20 56 49 52 54 55 41 4c 20   CREATE VIRTUAL 
1b80: 54 41 42 4c 45 20 74 78 20 55 53 49 4e 47 20 66  TABLE tx USING f
1b90: 74 73 35 28 6f 6e 65 2c 20 74 77 6f 2c 20 64 65  ts5(one, two, de
1ba0: 74 61 69 6c 3d 25 44 45 54 41 49 4c 25 29 3b 0a  tail=%DETAIL%);.
1bb0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 78    INSERT INTO tx
1bc0: 20 56 41 4c 55 45 53 28 27 67 20 61 20 67 67 67   VALUES('g a ggg
1bd0: 20 67 20 61 20 62 20 65 65 65 27 2c 20 20 20 20   g a b eee',    
1be0: 20 20 27 63 63 20 64 20 61 61 20 66 66 20 67 20    'cc d aa ff g 
1bf0: 65 65 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49  ee');.  INSERT I
1c00: 4e 54 4f 20 74 78 20 56 41 4c 55 45 53 28 27 64  NTO tx VALUES('d
1c10: 64 20 66 66 66 20 69 20 61 20 69 20 6a 6a 6a 27  d fff i a i jjj'
1c20: 2c 20 20 20 20 20 20 20 27 66 20 66 66 66 20 68  ,       'f fff h
1c30: 68 20 6a 6a 20 65 20 66 27 29 3b 0a 20 20 49 4e  h jj e f');.  IN
1c40: 53 45 52 54 20 49 4e 54 4f 20 74 78 20 56 41 4c  SERT INTO tx VAL
1c50: 55 45 53 28 27 67 67 67 20 61 20 66 20 66 20 66  UES('ggg a f f f
1c60: 66 66 20 64 64 20 61 61 27 2c 20 20 20 20 27 64  ff dd aa',    'd
1c70: 20 67 67 67 20 66 20 66 20 6a 20 67 67 20 64 64   ggg f f j gg dd
1c80: 64 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e  d');.  INSERT IN
1c90: 54 4f 20 74 78 20 56 41 4c 55 45 53 28 27 65 20  TO tx VALUES('e 
1ca0: 62 62 20 68 20 6a 6a 6a 20 69 69 20 67 67 27 2c  bb h jjj ii gg',
1cb0: 20 20 20 20 20 20 20 27 65 20 61 61 20 65 20 66         'e aa e f
1cc0: 20 63 20 66 66 66 27 29 3b 0a 20 20 49 4e 53 45   c fff');.  INSE
1cd0: 52 54 20 49 4e 54 4f 20 74 78 20 56 41 4c 55 45  RT INTO tx VALUE
1ce0: 53 28 27 6a 20 66 66 20 61 61 20 61 20 68 27 2c  S('j ff aa a h',
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 27 68 20 61              'h a
1d00: 20 6a 20 62 62 62 20 62 62 27 29 3b 0a 20 20 49   j bbb bb');.  I
1d10: 4e 53 45 52 54 20 49 4e 54 4f 20 74 78 20 56 41  NSERT INTO tx VA
1d20: 4c 55 45 53 28 27 63 63 20 69 20 66 66 20 63 20  LUES('cc i ff c 
1d30: 64 20 66 27 2c 20 20 20 20 20 20 20 20 20 20 27  d f',          '
1d40: 64 64 20 69 69 20 66 66 66 20 66 20 63 20 63 63  dd ii fff f c cc
1d50: 20 64 27 29 3b 0a 20 20 49 4e 53 45 52 54 20 49   d');.  INSERT I
1d60: 4e 54 4f 20 74 78 20 56 41 4c 55 45 53 28 27 6a  NTO tx VALUES('j
1d70: 6a 6a 20 67 20 69 20 62 62 20 63 63 20 65 65 65  jj g i bb cc eee
1d80: 27 2c 20 20 20 20 20 20 27 68 68 68 20 69 69 69  ',      'hhh iii
1d90: 20 61 61 61 20 62 20 62 62 62 20 61 61 61 27 29   aaa b bbb aaa')
1da0: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
1db0: 74 78 20 56 41 4c 55 45 53 28 27 68 68 68 20 68  tx VALUES('hhh h
1dc0: 68 68 20 68 68 68 20 62 62 20 66 66 66 20 66 27  hh hhh bb fff f'
1dd0: 2c 20 20 20 27 66 66 66 20 67 67 20 61 61 20 69  ,   'fff gg aa i
1de0: 69 20 68 20 61 27 29 3b 0a 20 20 49 4e 53 45 52  i h a');.  INSER
1df0: 54 20 49 4e 54 4f 20 74 78 20 56 41 4c 55 45 53  T INTO tx VALUES
1e00: 28 27 62 20 63 20 63 63 20 61 61 61 20 69 69 69  ('b c cc aaa iii
1e10: 20 67 67 67 20 66 27 2c 20 20 20 27 69 69 69 20   ggg f',   'iii 
1e20: 66 66 20 65 65 20 61 20 66 66 20 63 20 63 63 27  ff ee a ff c cc'
1e30: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
1e40: 20 74 78 20 56 41 4c 55 45 53 28 27 68 68 68 20   tx VALUES('hhh 
1e50: 62 20 68 68 68 20 61 61 61 20 6a 20 69 20 69 27  b hhh aaa j i i'
1e60: 2c 20 20 20 20 27 64 64 20 65 65 20 65 65 20 61  ,    'dd ee ee a
1e70: 61 20 62 62 62 20 69 69 69 27 29 3b 0a 20 20 49  a bbb iii');.  I
1e80: 4e 53 45 52 54 20 49 4e 54 4f 20 74 78 20 56 41  NSERT INTO tx VA
1e90: 4c 55 45 53 28 27 68 68 20 64 64 20 68 20 62 20  LUES('hh dd h b 
1ea0: 67 20 66 66 20 69 27 2c 20 20 20 20 20 20 20 27  g ff i',       '
1eb0: 63 63 63 20 62 62 20 63 63 20 63 63 63 20 66 20  ccc bb cc ccc f 
1ec0: 61 20 64 27 29 3b 0a 20 20 49 4e 53 45 52 54 20  a d');.  INSERT 
1ed0: 49 4e 54 4f 20 74 78 20 56 41 4c 55 45 53 28 27  INTO tx VALUES('
1ee0: 67 20 64 20 62 20 67 67 67 20 6a 6a 27 2c 20 20  g d b ggg jj',  
1ef0: 20 20 20 20 20 20 20 20 20 27 66 66 66 20 6a 6a           'fff jj
1f00: 20 66 66 20 6a 6a 20 67 20 67 67 20 65 65 27 29   ff jj g gg ee')
1f10: 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20  ;.  INSERT INTO 
1f20: 74 78 20 56 41 4c 55 45 53 28 27 67 20 65 65 20  tx VALUES('g ee 
1f30: 67 67 67 20 67 67 67 20 63 63 20 62 62 20 65 65  ggg ggg cc bb ee
1f40: 65 27 2c 20 27 61 61 20 6a 20 6a 6a 6a 20 62 62  e', 'aa j jjj bb
1f50: 62 20 64 64 20 65 65 65 20 66 66 27 29 3b 0a 20  b dd eee ff');. 
1f60: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 78 20   INSERT INTO tx 
1f70: 56 41 4c 55 45 53 28 27 63 20 6a 6a 6a 20 68 68  VALUES('c jjj hh
1f80: 20 64 64 64 20 64 64 20 68 27 2c 20 20 20 20 20   ddd dd h',     
1f90: 20 27 65 20 61 61 61 20 68 20 6a 6a 6a 20 67 67   'e aaa h jjj gg
1fa0: 27 29 3b 0a 0a 20 20 43 52 45 41 54 45 20 56 49  ');..  CREATE VI
1fb0: 52 54 55 41 4c 20 54 41 42 4c 45 20 74 78 72 20  RTUAL TABLE txr 
1fc0: 55 53 49 4e 47 20 66 74 73 35 76 6f 63 61 62 28  USING fts5vocab(
1fd0: 74 78 2c 20 72 6f 77 29 3b 0a 20 20 43 52 45 41  tx, row);.  CREA
1fe0: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
1ff0: 20 74 78 63 20 55 53 49 4e 47 20 66 74 73 35 76   txc USING fts5v
2000: 6f 63 61 62 28 74 78 2c 20 63 6f 6c 29 3b 0a 7d  ocab(tx, col);.}
2010: 0a 0a 70 72 6f 63 20 63 6f 6e 74 20 7b 4c 20 65  ..proc cont {L e
2020: 6c 65 6d 7d 20 7b 0a 20 20 73 65 74 20 6e 20 30  lem} {.  set n 0
2030: 0a 20 20 66 6f 72 65 61 63 68 20 65 20 24 4c 20  .  foreach e $L 
2040: 7b 20 69 66 20 7b 24 65 6c 65 6d 3d 3d 24 65 7d  { if {$elem==$e}
2050: 20 7b 69 6e 63 72 20 6e 7d 20 7d 0a 20 20 73 65   {incr n} }.  se
2060: 74 20 6e 0a 7d 0a 64 62 20 66 75 6e 63 20 63 6f  t n.}.db func co
2070: 6e 74 20 63 6f 6e 74 0a 0a 66 6f 72 65 61 63 68  nt cont..foreach
2080: 20 7b 74 65 72 6d 7d 20 7b 0a 20 20 61 20 61 61   {term} {.  a aa
2090: 20 61 61 61 0a 20 20 62 20 62 62 20 62 62 62 0a   aaa.  b bb bbb.
20a0: 20 20 63 20 63 63 20 63 63 63 0a 20 20 64 20 64    c cc ccc.  d d
20b0: 64 20 64 64 64 0a 20 20 65 20 65 65 20 65 65 65  d ddd.  e ee eee
20c0: 0a 20 20 66 20 66 66 20 66 66 66 0a 20 20 67 20  .  f ff fff.  g 
20d0: 67 67 20 67 67 67 0a 20 20 68 20 68 68 20 68 68  gg ggg.  h hh hh
20e0: 68 0a 20 20 69 20 69 69 20 69 69 69 0a 20 20 6a  h.  i ii iii.  j
20f0: 20 6a 6a 20 6a 6a 6a 0a 7d 20 7b 0a 20 20 73 65   jj jjj.} {.  se
2100: 74 20 72 65 73 72 20 5b 64 62 20 65 76 61 6c 20  t resr [db eval 
2110: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 24 74 65  {.    SELECT $te
2120: 72 6d 2c 20 0a 20 20 20 20 20 20 73 75 6d 28 63  rm, .      sum(c
2130: 6f 6e 74 28 6f 6e 65 20 7c 7c 20 27 20 27 20 7c  ont(one || ' ' |
2140: 7c 20 74 77 6f 2c 20 24 74 65 72 6d 29 20 3e 20  | two, $term) > 
2150: 30 29 2c 0a 20 20 20 20 20 20 73 75 6d 28 63 6f  0),.      sum(co
2160: 6e 74 28 6f 6e 65 20 7c 7c 20 27 20 27 20 7c 7c  nt(one || ' ' ||
2170: 20 74 77 6f 2c 20 24 74 65 72 6d 29 29 0a 20 20   two, $term)).  
2180: 20 20 46 52 4f 4d 20 74 78 0a 20 20 7d 5d 0a 20    FROM tx.  }]. 
2190: 20 69 66 20 7b 5b 6c 69 6e 64 65 78 20 24 72 65   if {[lindex $re
21a0: 73 72 20 31 5d 3d 3d 30 7d 20 7b 73 65 74 20 72  sr 1]==0} {set r
21b0: 65 73 72 20 5b 6c 69 73 74 5d 7d 0a 0a 20 20 73  esr [list]}..  s
21c0: 65 74 20 72 31 20 5b 64 62 20 65 76 61 6c 20 7b  et r1 [db eval {
21d0: 0a 20 20 20 20 53 45 4c 45 43 54 20 24 74 65 72  .    SELECT $ter
21e0: 6d 2c 20 27 6f 6e 65 27 2c 20 73 75 6d 28 63 6f  m, 'one', sum(co
21f0: 6e 74 28 6f 6e 65 2c 20 24 74 65 72 6d 29 3e 30  nt(one, $term)>0
2200: 29 2c 20 73 75 6d 28 63 6f 6e 74 28 6f 6e 65 2c  ), sum(cont(one,
2210: 20 24 74 65 72 6d 29 29 20 46 52 4f 4d 20 74 78   $term)) FROM tx
2220: 0a 20 20 7d 5d 0a 20 20 69 66 20 7b 5b 6c 69 6e  .  }].  if {[lin
2230: 64 65 78 20 24 72 31 20 32 5d 3d 3d 30 7d 20 7b  dex $r1 2]==0} {
2240: 73 65 74 20 72 31 20 5b 6c 69 73 74 5d 7d 0a 0a  set r1 [list]}..
2250: 20 20 73 65 74 20 72 32 20 5b 64 62 20 65 76 61    set r2 [db eva
2260: 6c 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 24  l {.    SELECT $
2270: 74 65 72 6d 2c 20 27 74 77 6f 27 2c 20 73 75 6d  term, 'two', sum
2280: 28 63 6f 6e 74 28 74 77 6f 2c 20 24 74 65 72 6d  (cont(two, $term
2290: 29 3e 30 29 2c 20 73 75 6d 28 63 6f 6e 74 28 74  )>0), sum(cont(t
22a0: 77 6f 2c 20 24 74 65 72 6d 29 29 20 46 52 4f 4d  wo, $term)) FROM
22b0: 20 74 78 0a 20 20 7d 5d 0a 20 20 69 66 20 7b 5b   tx.  }].  if {[
22c0: 6c 69 6e 64 65 78 20 24 72 32 20 32 5d 3d 3d 30  lindex $r2 2]==0
22d0: 7d 20 7b 73 65 74 20 72 32 20 5b 6c 69 73 74 5d  } {set r2 [list]
22e0: 7d 0a 0a 20 20 73 65 74 20 72 65 73 63 20 5b 63  }..  set resc [c
22f0: 6f 6e 63 61 74 20 24 72 31 20 24 72 32 5d 0a 0a  oncat $r1 $r2]..
2300: 20 20 73 65 74 20 72 65 73 63 20 5b 73 74 61 72    set resc [star
2310: 5f 66 72 6f 6d 5f 63 6f 6c 20 24 72 65 73 63 5d  _from_col $resc]
2320: 0a 20 20 73 65 74 20 72 65 73 72 20 5b 73 74 61  .  set resr [sta
2330: 72 5f 66 72 6f 6d 5f 72 6f 77 20 24 72 65 73 72  r_from_row $resr
2340: 5d 0a 20 20 69 66 20 7b 5b 64 65 74 61 69 6c 5f  ].  if {[detail_
2350: 69 73 5f 6e 6f 6e 65 5d 7d 20 7b 20 73 65 74 20  is_none]} { set 
2360: 72 65 73 63 20 5b 72 6f 77 5f 74 6f 5f 63 6f 6c  resc [row_to_col
2370: 20 24 72 65 73 72 5d 20 7d 0a 20 20 64 6f 5f 65   $resr] }.  do_e
2380: 78 65 63 73 71 6c 5f 74 65 73 74 20 37 2e 24 74  xecsql_test 7.$t
2390: 65 72 6d 2e 31 20 7b 53 45 4c 45 43 54 20 2a 20  erm.1 {SELECT * 
23a0: 46 52 4f 4d 20 74 78 63 20 57 48 45 52 45 20 74  FROM txc WHERE t
23b0: 65 72 6d 3d 24 74 65 72 6d 7d 20 24 72 65 73 63  erm=$term} $resc
23c0: 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .  do_execsql_te
23d0: 73 74 20 37 2e 24 74 65 72 6d 2e 32 20 7b 53 45  st 7.$term.2 {SE
23e0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 78 72 20  LECT * FROM txr 
23f0: 57 48 45 52 45 20 74 65 72 6d 3d 24 74 65 72 6d  WHERE term=$term
2400: 7d 20 24 72 65 73 72 0a 7d 0a 0a 64 6f 5f 65 78  } $resr.}..do_ex
2410: 65 63 73 71 6c 5f 74 65 73 74 20 37 2e 31 20 7b  ecsql_test 7.1 {
2420: 0a 20 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  .  CREATE TABLE 
2430: 74 78 72 5f 63 20 41 53 20 53 45 4c 45 43 54 20  txr_c AS SELECT 
2440: 2a 20 46 52 4f 4d 20 74 78 72 3b 0a 20 20 43 52  * FROM txr;.  CR
2450: 45 41 54 45 20 54 41 42 4c 45 20 74 78 63 5f 63  EATE TABLE txc_c
2460: 20 41 53 20 53 45 4c 45 43 54 20 2a 20 46 52 4f   AS SELECT * FRO
2470: 4d 20 74 78 63 3b 0a 7d 0a 0a 23 20 54 65 73 74  M txc;.}..# Test
2480: 20 72 61 6e 67 65 20 71 75 65 72 69 65 73 20 6f   range queries o
2490: 6e 20 74 68 65 20 66 74 73 35 76 6f 63 61 62 20  n the fts5vocab 
24a0: 74 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 61  tables created a
24b0: 62 6f 76 65 2e 0a 23 0a 66 6f 72 65 61 63 68 20  bove..#.foreach 
24c0: 7b 74 6e 20 61 20 62 7d 20 7b 0a 20 20 31 20 20  {tn a b} {.  1  
24d0: 20 61 20 20 20 6a 6a 6a 0a 20 20 32 20 20 20 62   a   jjj.  2   b
24e0: 62 20 20 6a 0a 20 20 33 20 20 20 63 63 63 20 64  b  j.  3   ccc d
24f0: 64 64 0a 20 20 34 20 20 20 64 64 20 20 78 79 7a  dd.  4   dd  xyz
2500: 0a 20 20 35 20 20 20 78 7a 79 20 64 64 0a 20 20  .  5   xzy dd.  
2510: 36 20 20 20 68 20 20 20 68 68 0a 7d 20 7b 0a 20  6   h   hh.} {. 
2520: 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74   do_execsql_test
2530: 20 37 2e 32 2e 24 74 6e 2e 31 20 7b 0a 20 20 20   7.2.$tn.1 {.   
2540: 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74   SELECT * FROM t
2550: 78 72 20 57 48 45 52 45 20 74 65 72 6d 3e 3d 24  xr WHERE term>=$
2560: 61 0a 20 20 7d 20 5b 64 62 20 65 76 61 6c 20 7b  a.  } [db eval {
2570: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 78  SELECT * FROM tx
2580: 72 5f 63 20 57 48 45 52 45 20 74 65 72 6d 3e 3d  r_c WHERE term>=
2590: 24 61 7d 5d 0a 20 20 64 6f 5f 65 78 65 63 73 71  $a}].  do_execsq
25a0: 6c 5f 74 65 73 74 20 37 2e 32 2e 24 74 6e 2e 32  l_test 7.2.$tn.2
25b0: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
25c0: 46 52 4f 4d 20 74 78 72 20 57 48 45 52 45 20 74  FROM txr WHERE t
25d0: 65 72 6d 3c 3d 24 62 0a 20 20 7d 20 5b 64 62 20  erm<=$b.  } [db 
25e0: 65 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46  eval {SELECT * F
25f0: 52 4f 4d 20 74 78 72 5f 63 20 57 48 45 52 45 20  ROM txr_c WHERE 
2600: 74 65 72 6d 20 3c 3d 24 62 7d 5d 0a 20 20 64 6f  term <=$b}].  do
2610: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 37 2e  _execsql_test 7.
2620: 32 2e 24 74 6e 2e 33 20 7b 0a 20 20 20 20 53 45  2.$tn.3 {.    SE
2630: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 78 72 20  LECT * FROM txr 
2640: 57 48 45 52 45 20 74 65 72 6d 3e 3d 24 61 20 41  WHERE term>=$a A
2650: 4e 44 20 74 65 72 6d 3c 3d 24 62 0a 20 20 7d 20  ND term<=$b.  } 
2660: 5b 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54  [db eval {SELECT
2670: 20 2a 20 46 52 4f 4d 20 74 78 72 5f 63 20 57 48   * FROM txr_c WH
2680: 45 52 45 20 74 65 72 6d 3e 3d 24 61 20 41 4e 44  ERE term>=$a AND
2690: 20 74 65 72 6d 20 3c 3d 24 62 7d 5d 0a 0a 20 20   term <=$b}]..  
26a0: 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20  do_execsql_test 
26b0: 37 2e 32 2e 24 74 6e 2e 34 20 7b 0a 20 20 20 20  7.2.$tn.4 {.    
26c0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 78  SELECT * FROM tx
26d0: 63 20 57 48 45 52 45 20 74 65 72 6d 3e 3d 24 61  c WHERE term>=$a
26e0: 0a 20 20 7d 20 5b 64 62 20 65 76 61 6c 20 7b 53  .  } [db eval {S
26f0: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 78 63  ELECT * FROM txc
2700: 5f 63 20 57 48 45 52 45 20 74 65 72 6d 3e 3d 24  _c WHERE term>=$
2710: 61 7d 5d 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c  a}].  do_execsql
2720: 5f 74 65 73 74 20 37 2e 32 2e 24 74 6e 2e 35 20  _test 7.2.$tn.5 
2730: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
2740: 52 4f 4d 20 74 78 63 20 57 48 45 52 45 20 74 65  ROM txc WHERE te
2750: 72 6d 3c 3d 24 62 0a 20 20 7d 20 5b 64 62 20 65  rm<=$b.  } [db e
2760: 76 61 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52  val {SELECT * FR
2770: 4f 4d 20 74 78 63 5f 63 20 57 48 45 52 45 20 74  OM txc_c WHERE t
2780: 65 72 6d 20 3c 3d 24 62 7d 5d 0a 20 20 64 6f 5f  erm <=$b}].  do_
2790: 65 78 65 63 73 71 6c 5f 74 65 73 74 20 37 2e 32  execsql_test 7.2
27a0: 2e 24 74 6e 2e 36 20 7b 0a 20 20 20 20 53 45 4c  .$tn.6 {.    SEL
27b0: 45 43 54 20 2a 20 46 52 4f 4d 20 74 78 63 20 57  ECT * FROM txc W
27c0: 48 45 52 45 20 74 65 72 6d 3e 3d 24 61 20 41 4e  HERE term>=$a AN
27d0: 44 20 74 65 72 6d 3c 3d 24 62 0a 20 20 7d 20 5b  D term<=$b.  } [
27e0: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
27f0: 2a 20 46 52 4f 4d 20 74 78 63 5f 63 20 57 48 45  * FROM txc_c WHE
2800: 52 45 20 74 65 72 6d 3e 3d 24 61 20 41 4e 44 20  RE term>=$a AND 
2810: 74 65 72 6d 20 3c 3d 24 62 7d 5d 0a 0a 20 20 64  term <=$b}]..  d
2820: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 37  o_execsql_test 7
2830: 2e 32 2e 24 74 6e 2e 37 20 7b 0a 20 20 20 20 53  .2.$tn.7 {.    S
2840: 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 78 72  ELECT * FROM txr
2850: 20 57 48 45 52 45 20 74 65 72 6d 3e 24 61 0a 20   WHERE term>$a. 
2860: 20 7d 20 5b 64 62 20 65 76 61 6c 20 7b 53 45 4c   } [db eval {SEL
2870: 45 43 54 20 2a 20 46 52 4f 4d 20 74 78 72 5f 63  ECT * FROM txr_c
2880: 20 57 48 45 52 45 20 74 65 72 6d 3e 24 61 7d 5d   WHERE term>$a}]
2890: 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65  .  do_execsql_te
28a0: 73 74 20 37 2e 32 2e 24 74 6e 2e 38 20 7b 0a 20  st 7.2.$tn.8 {. 
28b0: 20 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d     SELECT * FROM
28c0: 20 74 78 72 20 57 48 45 52 45 20 74 65 72 6d 3c   txr WHERE term<
28d0: 24 62 0a 20 20 7d 20 5b 64 62 20 65 76 61 6c 20  $b.  } [db eval 
28e0: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
28f0: 78 72 5f 63 20 57 48 45 52 45 20 74 65 72 6d 3c  xr_c WHERE term<
2900: 24 62 7d 5d 0a 20 20 64 6f 5f 65 78 65 63 73 71  $b}].  do_execsq
2910: 6c 5f 74 65 73 74 20 37 2e 32 2e 24 74 6e 2e 39  l_test 7.2.$tn.9
2920: 20 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20   {.    SELECT * 
2930: 46 52 4f 4d 20 74 78 72 20 57 48 45 52 45 20 74  FROM txr WHERE t
2940: 65 72 6d 3e 24 61 20 41 4e 44 20 74 65 72 6d 3c  erm>$a AND term<
2950: 24 62 0a 20 20 7d 20 5b 64 62 20 65 76 61 6c 20  $b.  } [db eval 
2960: 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74  {SELECT * FROM t
2970: 78 72 5f 63 20 57 48 45 52 45 20 74 65 72 6d 3e  xr_c WHERE term>
2980: 24 61 20 41 4e 44 20 74 65 72 6d 20 3c 24 62 7d  $a AND term <$b}
2990: 5d 0a 0a 20 20 64 6f 5f 65 78 65 63 73 71 6c 5f  ]..  do_execsql_
29a0: 74 65 73 74 20 37 2e 32 2e 24 74 6e 2e 31 30 20  test 7.2.$tn.10 
29b0: 7b 0a 20 20 20 20 53 45 4c 45 43 54 20 2a 20 46  {.    SELECT * F
29c0: 52 4f 4d 20 74 78 63 20 57 48 45 52 45 20 74 65  ROM txc WHERE te
29d0: 72 6d 3e 24 61 0a 20 20 7d 20 5b 64 62 20 65 76  rm>$a.  } [db ev
29e0: 61 6c 20 7b 53 45 4c 45 43 54 20 2a 20 46 52 4f  al {SELECT * FRO
29f0: 4d 20 74 78 63 5f 63 20 57 48 45 52 45 20 74 65  M txc_c WHERE te
2a00: 72 6d 3e 24 61 7d 5d 0a 20 20 64 6f 5f 65 78 65  rm>$a}].  do_exe
2a10: 63 73 71 6c 5f 74 65 73 74 20 37 2e 32 2e 24 74  csql_test 7.2.$t
2a20: 6e 2e 31 31 20 7b 0a 20 20 20 20 53 45 4c 45 43  n.11 {.    SELEC
2a30: 54 20 2a 20 46 52 4f 4d 20 74 78 63 20 57 48 45  T * FROM txc WHE
2a40: 52 45 20 74 65 72 6d 3c 24 62 0a 20 20 7d 20 5b  RE term<$b.  } [
2a50: 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54 20  db eval {SELECT 
2a60: 2a 20 46 52 4f 4d 20 74 78 63 5f 63 20 57 48 45  * FROM txc_c WHE
2a70: 52 45 20 74 65 72 6d 3c 24 62 7d 5d 0a 20 20 64  RE term<$b}].  d
2a80: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 37  o_execsql_test 7
2a90: 2e 32 2e 24 74 6e 2e 31 32 20 7b 0a 20 20 20 20  .2.$tn.12 {.    
2aa0: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 74 78  SELECT * FROM tx
2ab0: 63 20 57 48 45 52 45 20 74 65 72 6d 3e 24 61 20  c WHERE term>$a 
2ac0: 41 4e 44 20 74 65 72 6d 3c 24 62 0a 20 20 7d 20  AND term<$b.  } 
2ad0: 5b 64 62 20 65 76 61 6c 20 7b 53 45 4c 45 43 54  [db eval {SELECT
2ae0: 20 2a 20 46 52 4f 4d 20 74 78 63 5f 63 20 57 48   * FROM txc_c WH
2af0: 45 52 45 20 74 65 72 6d 3e 24 61 20 41 4e 44 20  ERE term>$a AND 
2b00: 74 65 72 6d 20 3c 24 62 7d 5d 0a 7d 0a 0a 64 6f  term <$b}].}..do
2b10: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 37 2e  _execsql_test 7.
2b20: 33 2e 31 20 7b 0a 20 20 53 45 4c 45 43 54 20 63  3.1 {.  SELECT c
2b30: 6f 75 6e 74 28 2a 29 20 46 52 4f 4d 20 74 78 72  ount(*) FROM txr
2b40: 2c 20 74 78 72 5f 63 20 57 48 45 52 45 20 74 78  , txr_c WHERE tx
2b50: 72 2e 74 65 72 6d 20 3d 20 74 78 72 5f 63 2e 74  r.term = txr_c.t
2b60: 65 72 6d 3b 0a 7d 20 7b 33 30 7d 0a 0a 69 66 20  erm;.} {30}..if 
2b70: 7b 21 5b 64 65 74 61 69 6c 5f 69 73 5f 6e 6f 6e  {![detail_is_non
2b80: 65 5d 7d 20 7b 0a 20 20 64 6f 5f 65 78 65 63 73  e]} {.  do_execs
2b90: 71 6c 5f 74 65 73 74 20 37 2e 33 2e 32 20 7b 0a  ql_test 7.3.2 {.
2ba0: 20 20 20 20 53 45 4c 45 43 54 20 63 6f 75 6e 74      SELECT count
2bb0: 28 2a 29 20 46 52 4f 4d 20 74 78 63 2c 20 74 78  (*) FROM txc, tx
2bc0: 63 5f 63 0a 20 20 20 20 20 20 57 48 45 52 45 20  c_c.      WHERE 
2bd0: 74 78 63 2e 74 65 72 6d 20 3d 20 74 78 63 5f 63  txc.term = txc_c
2be0: 2e 74 65 72 6d 20 41 4e 44 20 74 78 63 2e 63 6f  .term AND txc.co
2bf0: 6c 3d 74 78 63 5f 63 2e 63 6f 6c 3b 0a 20 20 7d  l=txc_c.col;.  }
2c00: 20 7b 35 37 7d 0a 7d 0a 0a 7d 0a 0a 23 2d 2d 2d   {57}.}..}..#---
2c10: 2d 2d 2d 2d 2d 2d 2d 2d 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 0a 23 20 54 65 73 74 20 74 68  ------.# Test th
2c60: 65 20 66 74 73 35 76 6f 63 61 62 20 74 61 62 6c  e fts5vocab tabl
2c70: 65 73 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 61  es response to a
2c80: 20 73 70 65 63 69 66 69 63 20 74 79 70 65 73 20   specific types 
2c90: 6f 66 20 63 6f 72 72 75 70 74 69 6f 6e 3a 0a 23  of corruption:.#
2ca0: 20 77 68 65 72 65 20 74 68 65 20 66 74 73 35 20   where the fts5 
2cb0: 69 6e 64 65 78 20 63 6f 6e 74 61 69 6e 73 20 68  index contains h
2cc0: 69 74 73 20 66 6f 72 20 63 6f 6c 75 6d 6e 73 20  its for columns 
2cd0: 74 68 61 74 20 64 6f 20 6e 6f 74 20 65 78 69 73  that do not exis
2ce0: 74 2e 0a 23 0a 64 6f 5f 65 78 65 63 73 71 6c 5f  t..#.do_execsql_
2cf0: 74 65 73 74 20 38 2e 30 20 7b 0a 20 20 43 52 45  test 8.0 {.  CRE
2d00: 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c  ATE VIRTUAL TABL
2d10: 45 20 78 31 20 55 53 49 4e 47 20 66 74 73 35 28  E x1 USING fts5(
2d20: 61 2c 20 62 2c 20 63 2c 20 64 65 74 61 69 6c 3d  a, b, c, detail=
2d30: 25 44 45 54 41 49 4c 25 29 3b 0a 20 20 49 4e 53  %DETAIL%);.  INS
2d40: 45 52 54 20 49 4e 54 4f 20 78 31 20 56 41 4c 55  ERT INTO x1 VALU
2d50: 45 53 28 27 61 20 62 20 63 27 2c 20 27 64 20 65  ES('a b c', 'd e
2d60: 20 66 27 2c 20 27 67 20 68 20 69 27 29 3b 0a 20   f', 'g h i');. 
2d70: 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 78 31 20   INSERT INTO x1 
2d80: 56 41 4c 55 45 53 28 27 67 20 68 20 69 27 2c 20  VALUES('g h i', 
2d90: 27 61 20 62 20 63 27 2c 20 27 64 20 65 20 66 27  'a b c', 'd e f'
2da0: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
2db0: 20 78 31 20 56 41 4c 55 45 53 28 27 64 20 65 20   x1 VALUES('d e 
2dc0: 66 27 2c 20 27 67 20 68 20 69 27 2c 20 27 61 20  f', 'g h i', 'a 
2dd0: 62 20 63 27 29 3b 0a 20 20 43 52 45 41 54 45 20  b c');.  CREATE 
2de0: 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20 78 31  VIRTUAL TABLE x1
2df0: 5f 72 20 55 53 49 4e 47 20 66 74 73 35 76 6f 63  _r USING fts5voc
2e00: 61 62 28 78 31 2c 20 72 6f 77 29 3b 0a 20 20 43  ab(x1, row);.  C
2e10: 52 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41  REATE VIRTUAL TA
2e20: 42 4c 45 20 78 31 5f 63 20 55 53 49 4e 47 20 66  BLE x1_c USING f
2e30: 74 73 35 76 6f 63 61 62 28 78 31 2c 20 63 6f 6c  ts5vocab(x1, col
2e40: 29 3b 0a 7d 0a 0a 73 65 74 20 72 65 73 72 20 5b  );.}..set resr [
2e50: 73 74 61 72 5f 66 72 6f 6d 5f 72 6f 77 20 7b 61  star_from_row {a
2e60: 20 33 20 33 20 62 20 33 20 33 20 63 20 33 20 33   3 3 b 3 3 c 3 3
2e70: 20 64 20 33 20 33 20 65 20 33 20 33 20 66 20 33   d 3 3 e 3 3 f 3
2e80: 20 33 20 67 20 33 20 33 20 68 20 33 20 33 20 69   3 g 3 3 h 3 3 i
2e90: 20 33 20 33 7d 5d 0a 73 65 74 20 72 65 73 63 20   3 3}].set resc 
2ea0: 5b 73 74 61 72 5f 66 72 6f 6d 5f 63 6f 6c 20 7b  [star_from_col {
2eb0: 0a 20 20 61 20 61 20 31 20 31 20 61 20 62 20 31  .  a a 1 1 a b 1
2ec0: 20 31 20 61 20 63 20 31 20 31 20 62 20 61 20 31   1 a c 1 1 b a 1
2ed0: 20 31 20 0a 20 20 62 20 62 20 31 20 31 20 62 20   1 .  b b 1 1 b 
2ee0: 63 20 31 20 31 20 63 20 61 20 31 20 31 20 63 20  c 1 1 c a 1 1 c 
2ef0: 62 20 31 20 31 20 0a 20 20 63 20 63 20 31 20 31  b 1 1 .  c c 1 1
2f00: 20 64 20 61 20 31 20 31 20 64 20 62 20 31 20 31   d a 1 1 d b 1 1
2f10: 20 64 20 63 20 31 20 31 0a 20 20 65 20 61 20 31   d c 1 1.  e a 1
2f20: 20 31 20 65 20 62 20 31 20 31 20 65 20 63 20 31   1 e b 1 1 e c 1
2f30: 20 31 20 66 20 61 20 31 20 31 20 0a 20 20 66 20   1 f a 1 1 .  f 
2f40: 62 20 31 20 31 20 66 20 63 20 31 20 31 20 67 20  b 1 1 f c 1 1 g 
2f50: 61 20 31 20 31 20 67 20 62 20 31 20 31 20 0a 20  a 1 1 g b 1 1 . 
2f60: 20 67 20 63 20 31 20 31 20 68 20 61 20 31 20 31   g c 1 1 h a 1 1
2f70: 20 68 20 62 20 31 20 31 20 68 20 63 20 31 20 31   h b 1 1 h c 1 1
2f80: 20 0a 20 20 69 20 61 20 31 20 31 20 69 20 62 20   .  i a 1 1 i b 
2f90: 31 20 31 20 69 20 63 20 31 20 31 0a 7d 5d 0a 69  1 1 i c 1 1.}].i
2fa0: 66 20 7b 5b 64 65 74 61 69 6c 5f 69 73 5f 6e 6f  f {[detail_is_no
2fb0: 6e 65 5d 7d 20 7b 20 73 65 74 20 72 65 73 63 20  ne]} { set resc 
2fc0: 5b 72 6f 77 5f 74 6f 5f 63 6f 6c 20 24 72 65 73  [row_to_col $res
2fd0: 72 5d 20 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c  r] }..do_execsql
2fe0: 5f 74 65 73 74 20 38 2e 31 2e 31 20 7b 20 53 45  _test 8.1.1 { SE
2ff0: 4c 45 43 54 20 2a 20 46 52 4f 4d 20 78 31 5f 72  LECT * FROM x1_r
3000: 3b 20 7d 20 24 72 65 73 72 0a 64 6f 5f 65 78 65  ; } $resr.do_exe
3010: 63 73 71 6c 5f 74 65 73 74 20 38 2e 31 2e 32 20  csql_test 8.1.2 
3020: 7b 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20  { SELECT * FROM 
3030: 78 31 5f 63 20 7d 20 24 72 65 73 63 0a 0a 64 6f  x1_c } $resc..do
3040: 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 38 2e  _execsql_test 8.
3050: 32 20 7b 0a 20 20 50 52 41 47 4d 41 20 77 72 69  2 {.  PRAGMA wri
3060: 74 61 62 6c 65 5f 73 63 68 65 6d 61 20 3d 20 31  table_schema = 1
3070: 3b 0a 20 20 55 50 44 41 54 45 20 73 71 6c 69 74  ;.  UPDATE sqlit
3080: 65 5f 6d 61 73 74 65 72 20 0a 20 20 53 45 54 20  e_master .  SET 
3090: 73 71 6c 20 3d 20 27 43 52 45 41 54 45 20 56 49  sql = 'CREATE VI
30a0: 52 54 55 41 4c 20 54 41 42 4c 45 20 78 31 20 55  RTUAL TABLE x1 U
30b0: 53 49 4e 47 20 66 74 73 35 28 61 2c 20 64 65 74  SING fts5(a, det
30c0: 61 69 6c 3d 25 44 45 54 41 49 4c 25 29 27 0a 20  ail=%DETAIL%)'. 
30d0: 20 57 48 45 52 45 20 6e 61 6d 65 20 3d 20 27 78   WHERE name = 'x
30e0: 31 27 3b 0a 7d 0a 64 62 20 63 6c 6f 73 65 0a 73  1';.}.db close.s
30f0: 71 6c 69 74 65 33 20 64 62 20 74 65 73 74 2e 64  qlite3 db test.d
3100: 62 0a 73 71 6c 69 74 65 33 5f 66 74 73 35 5f 6d  b.sqlite3_fts5_m
3110: 61 79 5f 62 65 5f 63 6f 72 72 75 70 74 20 31 0a  ay_be_corrupt 1.
3120: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
3130: 20 38 2e 32 2e 31 20 7b 20 53 45 4c 45 43 54 20   8.2.1 { SELECT 
3140: 2a 20 46 52 4f 4d 20 78 31 5f 72 20 7d 20 24 72  * FROM x1_r } $r
3150: 65 73 72 0a 0a 69 66 20 7b 5b 64 65 74 61 69 6c  esr..if {[detail
3160: 5f 69 73 5f 6e 6f 6e 65 5d 7d 20 7b 0a 20 20 64  _is_none]} {.  d
3170: 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74 20 38  o_execsql_test 8
3180: 2e 32 2e 32 20 7b 20 53 45 4c 45 43 54 20 2a 20  .2.2 { SELECT * 
3190: 46 52 4f 4d 20 78 31 5f 63 20 7d 20 24 72 65 73  FROM x1_c } $res
31a0: 63 0a 7d 20 65 6c 73 65 20 7b 0a 20 20 64 6f 5f  c.} else {.  do_
31b0: 63 61 74 63 68 73 71 6c 5f 74 65 73 74 20 38 2e  catchsql_test 8.
31c0: 32 2e 32 20 7b 20 0a 20 20 20 20 53 45 4c 45 43  2.2 { .    SELEC
31d0: 54 20 2a 20 46 52 4f 4d 20 78 31 5f 63 20 0a 20  T * FROM x1_c . 
31e0: 20 7d 20 7b 31 20 7b 64 61 74 61 62 61 73 65 20   } {1 {database 
31f0: 64 69 73 6b 20 69 6d 61 67 65 20 69 73 20 6d 61  disk image is ma
3200: 6c 66 6f 72 6d 65 64 7d 7d 0a 7d 0a 0a 73 71 6c  lformed}}.}..sql
3210: 69 74 65 33 5f 66 74 73 35 5f 6d 61 79 5f 62 65  ite3_fts5_may_be
3220: 5f 63 6f 72 72 75 70 74 20 30 0a 7d 0a 0a 23 2d  _corrupt 0.}..#-
3230: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3270: 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 54 65 73 74 20  --------.# Test 
3280: 74 68 61 74 20 62 6f 74 68 20 22 4f 52 44 45 52  that both "ORDER
3290: 20 42 59 20 74 65 72 6d 22 20 61 6e 64 20 22 4f   BY term" and "O
32a0: 52 44 45 52 20 42 59 20 74 65 72 6d 20 44 45 53  RDER BY term DES
32b0: 43 22 20 77 6f 72 6b 2e 0a 23 0a 72 65 73 65 74  C" work..#.reset
32c0: 5f 64 62 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74  _db.do_execsql_t
32d0: 65 73 74 20 39 2e 31 20 7b 0a 20 20 43 52 45 41  est 9.1 {.  CREA
32e0: 54 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45  TE VIRTUAL TABLE
32f0: 20 78 31 20 55 53 49 4e 47 20 66 74 73 35 28 78   x1 USING fts5(x
3300: 29 3b 0a 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  );.  INSERT INTO
3310: 20 78 31 20 56 41 4c 55 45 53 28 27 64 65 66 20   x1 VALUES('def 
3320: 41 42 43 20 67 68 69 27 29 3b 0a 20 20 49 4e 53  ABC ghi');.  INS
3330: 45 52 54 20 49 4e 54 4f 20 78 31 20 56 41 4c 55  ERT INTO x1 VALU
3340: 45 53 28 27 44 45 46 20 61 62 63 20 47 48 49 27  ES('DEF abc GHI'
3350: 29 3b 0a 7d 0a 0a 64 6f 5f 65 78 65 63 73 71 6c  );.}..do_execsql
3360: 5f 74 65 73 74 20 39 2e 32 20 7b 0a 20 20 43 52  _test 9.2 {.  CR
3370: 45 41 54 45 20 56 49 52 54 55 41 4c 20 54 41 42  EATE VIRTUAL TAB
3380: 4c 45 20 72 72 72 20 55 53 49 4e 47 20 66 74 73  LE rrr USING fts
3390: 35 76 6f 63 61 62 28 78 31 2c 20 72 6f 77 29 3b  5vocab(x1, row);
33a0: 0a 20 20 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d  .  SELECT * FROM
33b0: 20 72 72 72 0a 7d 20 7b 0a 20 20 61 62 63 20 32   rrr.} {.  abc 2
33c0: 20 32 20 64 65 66 20 32 20 32 20 67 68 69 20 32   2 def 2 2 ghi 2
33d0: 20 32 0a 7d 0a 64 6f 5f 65 78 65 63 73 71 6c 5f   2.}.do_execsql_
33e0: 74 65 73 74 20 39 2e 33 20 7b 0a 20 20 53 45 4c  test 9.3 {.  SEL
33f0: 45 43 54 20 2a 20 46 52 4f 4d 20 72 72 72 20 4f  ECT * FROM rrr O
3400: 52 44 45 52 20 42 59 20 74 65 72 6d 20 41 53 43  RDER BY term ASC
3410: 0a 7d 20 7b 0a 20 20 61 62 63 20 32 20 32 20 64  .} {.  abc 2 2 d
3420: 65 66 20 32 20 32 20 67 68 69 20 32 20 32 0a 7d  ef 2 2 ghi 2 2.}
3430: 0a 64 6f 5f 65 78 65 63 73 71 6c 5f 74 65 73 74  .do_execsql_test
3440: 20 39 2e 34 20 7b 0a 20 20 53 45 4c 45 43 54 20   9.4 {.  SELECT 
3450: 2a 20 46 52 4f 4d 20 72 72 72 20 4f 52 44 45 52  * FROM rrr ORDER
3460: 20 42 59 20 74 65 72 6d 20 44 45 53 43 0a 7d 20   BY term DESC.} 
3470: 7b 0a 20 20 67 68 69 20 32 20 32 20 64 65 66 20  {.  ghi 2 2 def 
3480: 32 20 32 20 61 62 63 20 32 20 32 20 0a 7d 0a 64  2 2 abc 2 2 .}.d
3490: 6f 5f 74 65 73 74 20 39 2e 35 20 7b 0a 20 20 73  o_test 9.5 {.  s
34a0: 65 74 20 65 32 20 5b 64 62 20 65 76 61 6c 20 7b  et e2 [db eval {
34b0: 20 45 58 50 4c 41 49 4e 20 53 45 4c 45 43 54 20   EXPLAIN SELECT 
34c0: 2a 20 46 52 4f 4d 20 72 72 72 20 4f 52 44 45 52  * FROM rrr ORDER
34d0: 20 42 59 20 74 65 72 6d 20 41 53 43 20 7d 5d 0a   BY term ASC }].
34e0: 20 20 65 78 70 72 20 5b 6c 73 65 61 72 63 68 20    expr [lsearch 
34f0: 24 65 32 20 53 6f 72 74 65 72 53 6f 72 74 5d 3c  $e2 SorterSort]<
3500: 30 0a 7d 20 31 0a 64 6f 5f 74 65 73 74 20 39 2e  0.} 1.do_test 9.
3510: 36 20 7b 0a 20 20 73 65 74 20 65 32 20 5b 64 62  6 {.  set e2 [db
3520: 20 65 76 61 6c 20 7b 20 45 58 50 4c 41 49 4e 20   eval { EXPLAIN 
3530: 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 72 72  SELECT * FROM rr
3540: 72 20 4f 52 44 45 52 20 42 59 20 74 65 72 6d 20  r ORDER BY term 
3550: 44 45 53 43 20 7d 5d 0a 20 20 65 78 70 72 20 5b  DESC }].  expr [
3560: 6c 73 65 61 72 63 68 20 24 65 32 20 53 6f 72 74  lsearch $e2 Sort
3570: 65 72 53 6f 72 74 5d 3c 30 0a 7d 20 30 0a 0a 0a  erSort]<0.} 0...
3580: 0a 66 69 6e 69 73 68 5f 74 65 73 74 0a 0a        .finish_test..