Use doclist-indexes with "ORDER BY rowid ASC" fts5 queries as well.

FossilOrigin-Name: d028ba6589f3122b635474c2683c0f93d5bc6c7c
This commit is contained in:
dan
2014-08-05 19:00:22 +00:00
parent 9a67058a63
commit d5997d80cb
6 changed files with 260 additions and 170 deletions
+2 -1
View File
@@ -148,6 +148,7 @@ do_execsql_test 6.2 {
#-------------------------------------------------------------------------
#
reset_db
expr srand(0)
do_execsql_test 7.0 {
CREATE VIRTUAL TABLE t1 USING fts5(x,y,z);
INSERT INTO t1(t1) VALUES('pgsz=32');
@@ -173,7 +174,7 @@ proc dump_structure {} {
for {set i 1} {$i <= 10} {incr i} {
do_test 7.$i {
for {set j 0} {$j < 100} {incr j} {
for {set j 0} {$j < 10} {incr j} {
set x [doc]
set y [doc]
set z [doc]
+4
View File
@@ -364,6 +364,10 @@ foreach {tn expr tclexpr} {
#-------------------------------------------------------------------------
#
do_execsql_test 6.integrity {
INSERT INTO xx(xx) VALUES('integrity-check');
}
#db eval {SELECT rowid, fts5_decode(rowid, block) aS r FROM xx_data} {puts $r}
foreach {bAsc sql} {
0 {SELECT rowid FROM xx WHERE xx MATCH $expr}
1 {SELECT rowid FROM xx WHERE xx MATCH $expr ORDER BY rowid ASC}
+20 -10
View File
@@ -53,6 +53,12 @@ proc reads {} {
db one {SELECT t1 FROM t1 WHERE t1 MATCH '*reads'}
}
proc execsql_reads {sql} {
set nRead [reads]
execsql $sql
expr [reads] - $nRead
}
do_test 1.4 {
set nRead [reads]
execsql { SELECT rowid FROM t1 WHERE t1 MATCH 'x' }
@@ -60,6 +66,14 @@ do_test 1.4 {
expr $nReadX>1000
} {1}
do_test 1.5 {
set fwd [execsql_reads {SELECT rowid FROM t1 WHERE t1 MATCH 'x' }]
set bwd [execsql_reads {
SELECT rowid FROM t1 WHERE t1 MATCH 'x' ORDER BY 1 ASC
}]
expr {$bwd < $fwd + 10}
} {1}
foreach {tn q res} "
1 { SELECT rowid FROM t1 WHERE t1 MATCH 'w + x' } [list $W]
2 { SELECT rowid FROM t1 WHERE t1 MATCH 'x + w' } [list $W]
@@ -67,22 +81,18 @@ foreach {tn q res} "
4 { SELECT rowid FROM t1 WHERE t1 MATCH 'y AND x' } [list $Y]
" {
do_test 1.5.$tn.1 {
set nRead [reads]
execsql $q
set n [expr [reads] - $nRead]
do_test 1.6.$tn.1 {
set n [execsql_reads $q]
expr {$n < ($nReadX / 10)}
} {1}
do_test 1.5.$tn.2 {
set nRead [reads]
execsql "$q ORDER BY rowid ASC"
set n [expr [reads] - $nRead]
do_test 1.6.$tn.2 {
set n [execsql_reads "$q ORDER BY rowid ASC"]
expr {$n < ($nReadX / 10)}
} {1}
do_execsql_test 1.5.$tn.3 $q [lsort -int -decr $res]
do_execsql_test 1.5.$tn.4 "$q ORDER BY rowid ASC" [lsort -int -incr $res]
do_execsql_test 1.6.$tn.3 $q [lsort -int -decr $res]
do_execsql_test 1.6.$tn.4 "$q ORDER BY rowid ASC" [lsort -int -incr $res]
}
#db eval {SELECT rowid, fts5_decode(rowid, block) aS r FROM t1_data} {puts $r}