| Index: third_party/sqlite/src/ext/fts5/test/fts5ah.test
|
| diff --git a/third_party/sqlite/src/ext/fts5/test/fts5ah.test b/third_party/sqlite/src/ext/fts5/test/fts5ah.test
|
| index 6d7e39f79302bafd94ef68cc8aacc3cbee6998d0..b7beb5655b21e6bea925571815a64b953992b925 100644
|
| --- a/third_party/sqlite/src/ext/fts5/test/fts5ah.test
|
| +++ b/third_party/sqlite/src/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}
|
|
|
|
|