Fix fts5_index.c to use doclist-indexes when possible. Only some cases work so far.

FossilOrigin-Name: 90b82d3ef613b2915e0e280dc1d2e5a2b617d59c
This commit is contained in:
dan
2014-08-04 20:07:40 +00:00
parent 9af0705e84
commit 9a67058a63
5 changed files with 452 additions and 136 deletions
+1 -2
View File
@@ -50,7 +50,7 @@ do_execsql_test 2.1 {
do_execsql_test 2.2 {
SELECT fts5_decode(id, block) FROM t1_data WHERE id==10
} {
{{structure idx=0} {lvl=0 nMerge=0 {id=27723 h=1 leaves=1..1}}}
{(structure idx=0) {lvl=0 nMerge=0 {id=27723 h=1 leaves=1..1}}}
}
do_execsql_test 2.3 {
INSERT INTO t1(t1) VALUES('integrity-check');
@@ -182,7 +182,6 @@ for {set i 1} {$i <= 10} {incr i} {
}
execsql { INSERT INTO t1(t1) VALUES('integrity-check'); }
} {}
if {[set_test_counter errors]} exit
}
#-------------------------------------------------------------------------
+29 -8
View File
@@ -55,16 +55,37 @@ proc reads {} {
do_test 1.4 {
set nRead [reads]
db eval { SELECT rowid FROM t1 WHERE t1 MATCH 'x' }
set a [expr [reads] - $nRead]
} {}
execsql { SELECT rowid FROM t1 WHERE t1 MATCH 'x' }
set nReadX [expr [reads] - $nRead]
expr $nReadX>1000
} {1}
do_test 1.5 {
set nRead [reads]
db eval { SELECT rowid FROM t1 WHERE t1 MATCH 'x + w' }
set a [expr [reads] - $nRead]
} {}
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]
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]
" {
do_test 1.5.$tn.1 {
set nRead [reads]
execsql $q
set n [expr [reads] - $nRead]
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]
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]
}
#db eval {SELECT rowid, fts5_decode(rowid, block) aS r FROM t1_data} {puts $r}
finish_test