From 5af10196912b7aae7a848fd06b54405d738d128b Mon Sep 17 00:00:00 2001
From: dan <dan@noemail.net>
Date: Mon, 4 Jan 2016 16:19:51 +0000
Subject: [PATCH] Update more fts5 tests to run in detail=none and
 detail=column modes as well as the default detail=full.

FossilOrigin-Name: 3fcf3b1e24483b2cd1c1710f053ed8403e09106d
---
 ext/fts5/test/fts5ag.test |  21 +++++---
 ext/fts5/test/fts5ah.test |  46 +++++++++++-----
 ext/fts5/test/fts5ai.test |   5 +-
 ext/fts5/test/fts5ak.test | 107 ++++++++++++++++++++------------------
 ext/fts5/test/fts5al.test |  59 ++++++++++++---------
 manifest                  |  20 +++----
 manifest.uuid             |   2 +-
 7 files changed, 152 insertions(+), 108 deletions(-)

diff --git a/ext/fts5/test/fts5ag.test b/ext/fts5/test/fts5ag.test
index 42a588f56c..de126a25f0 100644
--- a/ext/fts5/test/fts5ag.test
+++ b/ext/fts5/test/fts5ag.test
@@ -33,8 +33,10 @@ ifcapable !fts5 {
 #      ... WHERE fts MATCH ? ORDER BY rank [ASC|DESC]
 #
 
+foreach_detail_mode $testprefix {
+
 do_execsql_test 1.0 {
-  CREATE VIRTUAL TABLE t1 USING fts5(x, y, z);
+  CREATE VIRTUAL TABLE t1 USING fts5(x, y, z, detail=%DETAIL%);
 }
 
 do_test 1.1 {
@@ -119,19 +121,24 @@ foreach {tn expr} {
   2.3 c
   2.4 d
 
-  2.5 {"m m"}
-  2.6 {e + s}
-
   3.0 {a AND b}
   3.1 {a OR b}
   3.2 {b OR c AND d}
-  3.3 {NEAR(c d)}
 } {
   do_fts5ag_test $tn $expr
-
-  if {[set_test_counter errors]} break
 }
 
+if {[detail_is_full]} {
+  foreach {tn expr} {
+    4.1 {"m m"}
+    4.2 {e + s}
+    4.3 {NEAR(c d)}
+  } {
+    do_fts5ag_test $tn $expr
+  }
+}
+
+} ;# foreach_detail_mode
 
 
 finish_test
diff --git a/ext/fts5/test/fts5ah.test b/ext/fts5/test/fts5ah.test
index 6d7e39f793..b7beb5655b 100644
--- a/ext/fts5/test/fts5ah.test
+++ b/ext/fts5/test/fts5ah.test
@@ -21,12 +21,16 @@ ifcapable !fts5 {
   return
 }
 
+foreach_detail_mode $testprefix {
+
 #-------------------------------------------------------------------------
 # This file contains tests for very large doclists.
 #
 
+set Y [list]
+set W [list]
 do_test 1.0 {
-  execsql { CREATE VIRTUAL TABLE t1 USING fts5(a) }
+  execsql { CREATE VIRTUAL TABLE t1 USING fts5(a, detail=%DETAIL%) }
   execsql { INSERT INTO t1(t1, rank) VALUES('pgsz', 128) }
   set v {w w w w w w w w w w w w w w w w w w w w}
   execsql { INSERT INTO t1(rowid, a) VALUES(0, $v) }
@@ -70,7 +74,12 @@ do_test 1.4 {
   set nRead [reads]
   execsql { SELECT rowid FROM t1 WHERE t1 MATCH 'x' }
   set nReadX [expr [reads] - $nRead]
-  expr $nReadX>1000
+  #puts -nonewline "(nReadX=$nReadX)"
+  if {[detail_is_full]} { set expect 1000 }
+  if {[detail_is_col]}  { set expect 250 }
+  if {[detail_is_none]} { set expect 80 }
+
+  expr $nReadX>$expect
 } {1}
 
 do_test 1.5 {
@@ -87,17 +96,22 @@ foreach {tn q res} "
   3 { SELECT rowid FROM t1 WHERE t1 MATCH 'x AND w' }  [list $W]
   4 { SELECT rowid FROM t1 WHERE t1 MATCH 'y AND x' }  [list $Y]
 " {
+  if {[detail_is_full]==0 && ($tn==1 || $tn==2)} continue
+
+  if {[detail_is_full]} { set ratio 8 }
+  if {[detail_is_col]}  { set ratio 4 }
+  if {[detail_is_none]} { set ratio 2 }
 
   do_test 1.6.$tn.1 {
     set n [execsql_reads $q]
     #puts -nonewline "(n=$n nReadX=$nReadX)"
-    expr {$n < ($nReadX / 8)}
+    expr {$n < ($nReadX / $ratio)}
   } {1}
 
   do_test 1.6.$tn.2 {
     set n [execsql_reads "$q ORDER BY rowid DESC"]
     #puts -nonewline "(n=$n nReadX=$nReadX)"
-    expr {$n < ($nReadX / 8)}
+    expr {$n < ($nReadX / $ratio)}
   } {1}
 
   do_execsql_test 1.6.$tn.3 $q [lsort -int -incr $res]
@@ -109,21 +123,26 @@ foreach {tn q res} "
 # number of pages loaded from disk.
 #
 foreach {tn fraction tail cnt} {
-  1 0.6 {rowid > 5000} 5000
-  2 0.2 {rowid > 9000} 1000
-  3 0.2 {rowid < 1000}  999
-  4 0.2 {rowid BETWEEN 4000 AND 5000}  1001
-  5 0.6 {rowid >= 5000} 5001
-  6 0.2 {rowid >= 9000} 1001
-  7 0.2 {rowid <= 1000} 1000
-  8 0.6 {rowid > '5000'} 5000
-  9 0.2 {rowid > '9000'} 1000
+  1  0.6 {rowid > 5000} 5000
+  2  0.2 {rowid > 9000} 1000
+  3  0.2 {rowid < 1000}  999
+  4  0.2 {rowid BETWEEN 4000 AND 5000}  1001
+  5  0.6 {rowid >= 5000} 5001
+  6  0.2 {rowid >= 9000} 1001
+  7  0.2 {rowid <= 1000} 1000
+  8  0.6 {rowid > '5000'} 5000
+  9  0.2 {rowid > '9000'} 1000
   10 0.1 {rowid = 444} 1
 } {
   set q "SELECT rowid FROM t1 WHERE t1 MATCH 'x' AND $tail"
   set n [execsql_reads $q]
   set ret [llength [execsql $q]]
 
+  # Because the position lists for 'x' are quite long in this db, the 
+  # advantage is a bit smaller in detail=none mode. Update $fraction to 
+  # reflect this.
+  if {[detail_is_none] && $fraction<0.5} { set fraction [expr $fraction*2] }
+
   do_test "1.7.$tn.asc.(n=$n ret=$ret)" {
     expr {$n < ($fraction*$nReadX) && $ret==$cnt}
   } {1}
@@ -143,6 +162,7 @@ do_execsql_test 1.8.2 {
   SELECT count(*) FROM t1 WHERE t1 MATCH 'x' AND rowid < 'text';
 } {10000}
 
+} ;# foreach_detail_mode
 
 #db eval {SELECT rowid, fts5_decode(rowid, block) aS r FROM t1_data} {puts $r}
 
diff --git a/ext/fts5/test/fts5ai.test b/ext/fts5/test/fts5ai.test
index 63c46fd042..e32c806c46 100644
--- a/ext/fts5/test/fts5ai.test
+++ b/ext/fts5/test/fts5ai.test
@@ -23,8 +23,10 @@ ifcapable !fts5 {
   return
 }
 
+foreach_detail_mode $testprefix {
+
 do_execsql_test 1.0 {
-  CREATE VIRTUAL TABLE t1 USING fts5(a);
+  CREATE VIRTUAL TABLE t1 USING fts5(a, detail=%DETAIL%);
 } {}
 
 do_execsql_test 1.1 {
@@ -49,6 +51,7 @@ do_execsql_test 1.1 {
 do_execsql_test 1.2 {
   INSERT INTO t1(t1) VALUES('integrity-check');
 }
+}
 
 
 finish_test
diff --git a/ext/fts5/test/fts5ak.test b/ext/fts5/test/fts5ak.test
index 4eb28324c9..0f699a601f 100644
--- a/ext/fts5/test/fts5ak.test
+++ b/ext/fts5/test/fts5ak.test
@@ -23,8 +23,10 @@ ifcapable !fts5 {
   return
 }
 
+foreach_detail_mode $testprefix {
+
 do_execsql_test 1.1 {
-  CREATE VIRTUAL TABLE ft1 USING fts5(x);
+  CREATE VIRTUAL TABLE ft1 USING fts5(x, detail=%DETAIL%);
   INSERT INTO ft1 VALUES('i d d a g i b g d d');
   INSERT INTO ft1 VALUES('h d b j c c g a c a');
   INSERT INTO ft1 VALUES('e j a e f h b f h h');
@@ -35,6 +37,9 @@ do_execsql_test 1.1 {
   INSERT INTO ft1 VALUES('i c c f a d g h j e');
   INSERT INTO ft1 VALUES('i d i g c d c h b f');
   INSERT INTO ft1 VALUES('g d a e h a b c f j');
+
+  CREATE VIRTUAL TABLE ft2 USING fts5(x, detail=%DETAIL%);
+  INSERT INTO ft2 VALUES('a b c d e f g h i j');
 }
 
 do_execsql_test 1.2 {
@@ -49,19 +54,6 @@ do_execsql_test 1.2 {
 }
 
 do_execsql_test 1.3 {
-  SELECT highlight(ft1, 0, '[', ']') FROM ft1 WHERE ft1 MATCH 'h + d';
-} {
-  {[h d] b j c c g a c a}
-  {j f [h d] g h i b d f} 
-}
-
-do_execsql_test 1.4 {
-  SELECT highlight(ft1, 0, '[', ']') FROM ft1 WHERE ft1 MATCH 'd + d';
-} {
-  {i [d d] a g i b g [d d]}
-}
-
-do_execsql_test 1.5 {
   SELECT highlight(ft1, 0, '[', ']') FROM ft1 WHERE ft1 MATCH 'e e e'
 } {
   {[e] j a [e] f h b f h h}
@@ -72,57 +64,71 @@ do_execsql_test 1.5 {
   {g d a [e] h a b c f j}
 }
 
-do_execsql_test 1.6 {
-  SELECT highlight(ft1, 0, '[', ']') FROM ft1 WHERE ft1 MATCH 'd + d d + d';
-} {
-  {i [d d] a g i b g [d d]}
-}
-
-do_execsql_test 2.1 {
-  CREATE VIRTUAL TABLE ft2 USING fts5(x);
-  INSERT INTO ft2 VALUES('a b c d e f g h i j');
-}
-
-do_execsql_test 2.2 {
-  SELECT highlight(ft2, 0, '[', ']') FROM ft2 WHERE ft2 MATCH 'b+c+d c+d+e'
-} {{a [b c d e] f g h i j}}
-
-do_execsql_test 2.3 {
-  SELECT highlight(ft2, 0, '[', ']') FROM ft2 WHERE ft2 MATCH 'b+c+d e+f+g'
-} {
-  {a [b c d] [e f g] h i j}
-}
-
-do_execsql_test 2.4 {
-  SELECT highlight(ft2, 0, '[', ']') FROM ft2 WHERE ft2 MATCH 'b+c+d c'
-} {
-  {a [b c d] e f g h i j}
-}
-
-do_execsql_test 2.5 {
-  SELECT highlight(ft2, 0, '[', ']') FROM ft2 WHERE ft2 MATCH 'b+c c+d+e'
-} {
-  {a [b c d e] f g h i j}
-}
-
-do_execsql_test 2.6.1 {
+do_execsql_test 1.4 {
   SELECT highlight(ft2, 0, '[', ']') FROM ft2 WHERE ft2 MATCH 'f d'
 } {
   {a b c [d] e [f] g h i j}
 }
 
-do_execsql_test 2.6.2 {
+do_execsql_test 1.5 {
   SELECT highlight(ft2, 0, '[', ']') FROM ft2 WHERE ft2 MATCH 'd f'
 } {
   {a b c [d] e [f] g h i j}
 }
 
+#-------------------------------------------------------------------------
+# Tests below this point require detail=full.
+#-------------------------------------------------------------------------
+if {[detail_is_full]==0} continue
+
+
+do_execsql_test 2.1 {
+  SELECT highlight(ft1, 0, '[', ']') FROM ft1 WHERE ft1 MATCH 'h + d';
+} {
+  {[h d] b j c c g a c a}
+  {j f [h d] g h i b d f} 
+}
+
+do_execsql_test 2.2 {
+  SELECT highlight(ft1, 0, '[', ']') FROM ft1 WHERE ft1 MATCH 'd + d';
+} {
+  {i [d d] a g i b g [d d]}
+}
+
+do_execsql_test 2.3 {
+  SELECT highlight(ft1, 0, '[', ']') FROM ft1 WHERE ft1 MATCH 'd + d d + d';
+} {
+  {i [d d] a g i b g [d d]}
+}
+
+do_execsql_test 2.4 {
+  SELECT highlight(ft2, 0, '[', ']') FROM ft2 WHERE ft2 MATCH 'b+c+d c+d+e'
+} {{a [b c d e] f g h i j}}
+
+do_execsql_test 2.5 {
+  SELECT highlight(ft2, 0, '[', ']') FROM ft2 WHERE ft2 MATCH 'b+c+d e+f+g'
+} {
+  {a [b c d] [e f g] h i j}
+}
+
+do_execsql_test 2.6 {
+  SELECT highlight(ft2, 0, '[', ']') FROM ft2 WHERE ft2 MATCH 'b+c+d c'
+} {
+  {a [b c d] e f g h i j}
+}
+
+do_execsql_test 2.7 {
+  SELECT highlight(ft2, 0, '[', ']') FROM ft2 WHERE ft2 MATCH 'b+c c+d+e'
+} {
+  {a [b c d e] f g h i j}
+}
+
 #-------------------------------------------------------------------------
 # The example from the docs.
 #
 do_execsql_test 3.1 {
   -- Assuming this:
-  CREATE VIRTUAL TABLE ft USING fts5(a);
+  CREATE VIRTUAL TABLE ft USING fts5(a, detail=%DETAIL%);
   INSERT INTO ft VALUES('a b c x c d e');
   INSERT INTO ft VALUES('a b c c d e');
   INSERT INTO ft VALUES('a b c d e');
@@ -138,6 +144,7 @@ do_execsql_test 3.1 {
   {[a b c d e]}
 }
 
+}
 
 finish_test
 
diff --git a/ext/fts5/test/fts5al.test b/ext/fts5/test/fts5al.test
index b8f8c6ebcd..c0dd2117dd 100644
--- a/ext/fts5/test/fts5al.test
+++ b/ext/fts5/test/fts5al.test
@@ -23,8 +23,10 @@ ifcapable !fts5 {
   return
 }
 
+foreach_detail_mode $testprefix {
+
 do_execsql_test 1.1 {
-  CREATE VIRTUAL TABLE ft1 USING fts5(x);
+  CREATE VIRTUAL TABLE ft1 USING fts5(x, detail=%DETAIL%);
   SELECT * FROM ft1_config;
 } {version 4}
 
@@ -83,7 +85,7 @@ foreach {tn defn} {
 #
 
 do_execsql_test 3.1 {
-  CREATE VIRTUAL TABLE t1 USING fts5(x);
+  CREATE VIRTUAL TABLE t1 USING fts5(x, detail=%DETAIL%);
   INSERT INTO t1 VALUES('q w e r t y');
   INSERT INTO t1 VALUES('y t r e w q');
 }
@@ -122,11 +124,13 @@ do_execsql_test 3.4.1 {
   {{0 0 5}} 
 }
 
-do_execsql_test 3.4.2 {
-  SELECT insttest(t1) FROM t1 WHERE t1 MATCH 'r+e OR w'
-} {
-  {{1 0 1}}
-  {{0 0 2} {1 0 4}} 
+if {[detail_is_full]} {
+  do_execsql_test 3.4.2 {
+    SELECT insttest(t1) FROM t1 WHERE t1 MATCH 'r+e OR w'
+  } {
+    {{1 0 1}}
+    {{0 0 2} {1 0 4}} 
+  }
 }
 
 proc coltest {cmd} {
@@ -149,7 +153,7 @@ do_execsql_test 3.5.1 {
 #
 
 do_execsql_test 4.0 {
-  CREATE VIRTUAL TABLE t2 USING fts5(a, b);
+  CREATE VIRTUAL TABLE t2 USING fts5(a, b, detail=%DETAIL%);
   INSERT INTO t2 VALUES('a s h g s b j m r h', 's b p a d b b a o e');
   INSERT INTO t2 VALUES('r h n t a g r d d i', 'l d n j r c f t o q');
   INSERT INTO t2 VALUES('q k n i k c a a e m', 'c h n j p g s c i t');
@@ -218,24 +222,26 @@ proc rowidplus {cmd ival} {
 }
 sqlite3_fts5_create_function db rowidplus rowidplus
 
-do_execsql_test 4.2.1 {
-  INSERT INTO t2(t2, rank) VALUES('rank', 'rowidplus(100) ');
-  SELECT rowid, rank FROM t2 WHERE t2 MATCH 'o + q + g'
-} {
-  10 110
-}
-do_execsql_test 4.2.2 {
-  INSERT INTO t2(t2, rank) VALUES('rank', 'rowidplus(111) ');
-  SELECT rowid, rank FROM t2 WHERE t2 MATCH 'o + q + g'
-} {
-  10 121
-}
+if {[detail_is_full]} {
+  do_execsql_test 4.2.1 {
+    INSERT INTO t2(t2, rank) VALUES('rank', 'rowidplus(100) ');
+    SELECT rowid, rank FROM t2 WHERE t2 MATCH 'o + q + g'
+  } {
+    10 110
+  }
+  do_execsql_test 4.2.2 {
+    INSERT INTO t2(t2, rank) VALUES('rank', 'rowidplus(111) ');
+    SELECT rowid, rank FROM t2 WHERE t2 MATCH 'o + q + g'
+  } {
+    10 121
+  }
 
-do_execsql_test 4.2.3 {
-  SELECT rowid, rank FROM t2 
-  WHERE t2 MATCH 'o + q + g' AND rank MATCH 'rowidplus(112)'
-} {
-  10 122
+  do_execsql_test 4.2.3 {
+    SELECT rowid, rank FROM t2 
+      WHERE t2 MATCH 'o + q + g' AND rank MATCH 'rowidplus(112)'
+  } {
+    10 122
+  }
 }
 
 proc rowidmod {cmd imod} { 
@@ -243,7 +249,7 @@ proc rowidmod {cmd imod} {
 }
 sqlite3_fts5_create_function db rowidmod rowidmod
 do_execsql_test 4.3.1 {
-  CREATE VIRTUAL TABLE t3 USING fts5(x);
+  CREATE VIRTUAL TABLE t3 USING fts5(x, detail=%DETAIL%);
   INSERT INTO t3 VALUES('a one');
   INSERT INTO t3 VALUES('a two');
   INSERT INTO t3 VALUES('a three');
@@ -287,6 +293,7 @@ do_catchsql_test 4.4.4 {
   SELECT *, rank FROM t3 WHERE t3 MATCH 'a' AND rank MATCH NULL
 } {1 {parse error in rank function: }}
 
+} ;# foreach_detail_mode
 
 
 finish_test
diff --git a/manifest b/manifest
index ce2b5eb30f..ff5d797e2d 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Changes\sto\srun\smany\sfts5\stests\swith\sdetail=none\sand\sdetail=col\stables\sas\swell\sas\sthe\sdefault\sdetail=full.\sAlso\sfixes\sfor\sthe\sbugs\suncovered\sby\srunning\ssaid\stests.
-D 2016-01-02T19:01:56.026
+C Update\smore\sfts5\stests\sto\srun\sin\sdetail=none\sand\sdetail=column\smodes\sas\swell\sas\sthe\sdefault\sdetail=full.
+D 2016-01-04T16:19:51.421
 F Makefile.in 28bcd6149e050dff35d4dcfd97e890cd387a499d
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 5fff077fcc46de7714ed6eebb6159a4c00eab751
@@ -121,12 +121,12 @@ F ext/fts5/test/fts5ac.test 9a3c5eb052a5e8c871d56d3d0f144e5fdcf075c2
 F ext/fts5/test/fts5ad.test 049f7511a79c155d2d8dfd2ddcfeb640c50ad0dc
 F ext/fts5/test/fts5ae.test 612dcb51f4069226791ff14c17dbfb3138c56f20
 F ext/fts5/test/fts5af.test be858a96b1f5de66ba6d64f0021bd8b2408e126c
-F ext/fts5/test/fts5ag.test ec3e119b728196620a31507ef503c455a7a73505
-F ext/fts5/test/fts5ah.test e592c4978622dbc4de552cd0f9395df60ac5d54c
-F ext/fts5/test/fts5ai.test f20e53bbf0c55bc596f1fd47f2740dae028b8f37
+F ext/fts5/test/fts5ag.test 27180de76c03036be75ee80b93d8c5f540014071
+F ext/fts5/test/fts5ah.test dfb7897711dbcda1dacb038aec310daca139fcf5
+F ext/fts5/test/fts5ai.test 3909d0b949b2afcaae4d5795cd79153da75381df
 F ext/fts5/test/fts5aj.test 05b569f5c16ea3098fb1984eec5cf50dbdaae5d8
-F ext/fts5/test/fts5ak.test 7b8c5df96df599293f920b7e5521ebc79f647592
-F ext/fts5/test/fts5al.test a1b7b6393376bc2adc216527a28f5ae5594069df
+F ext/fts5/test/fts5ak.test fb26389985407826f6076bb9f382c67d3db6b5d9
+F ext/fts5/test/fts5al.test 18c277f5986df0a3d9071dfd7128afeb16fe9d5d
 F ext/fts5/test/fts5alter.test 6022c61467a82aa11c70822ccad22b328dcf0d04
 F ext/fts5/test/fts5auto.test 2a6241673657b340427f521528f7809ddaa02a9e
 F ext/fts5/test/fts5aux.test 8c687c948cc98e9a94be014df7d518acc1b3b74f
@@ -1407,7 +1407,7 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P 3a1df69e58e5830da1dff158eedbe3817743f58f
-R 584d5f1c8b7a15ac2eae2ab1ffe71c4a
+P 6322a1d984e7946735bace8a069ef24b31754b3b
+R 32e8694f89e6ec744ed1fb193a76a532
 U dan
-Z cff9ad15204445a84003e93595871343
+Z 780f62d5b61ae786fb811bd6c42602f7
diff --git a/manifest.uuid b/manifest.uuid
index 4a0bbbdcd0..3f2a04cfe4 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-6322a1d984e7946735bace8a069ef24b31754b3b
\ No newline at end of file
+3fcf3b1e24483b2cd1c1710f053ed8403e09106d
\ No newline at end of file