| Index: third_party/sqlite/src/test/fts3_common.tcl
|
| diff --git a/third_party/sqlite/src/test/fts3_common.tcl b/third_party/sqlite/src/test/fts3_common.tcl
|
| index 4d4ae38bae798223e3400bd1931467cdf531dc94..2ed1f70bf626bee9781bdba5393c3a004227c841 100644
|
| --- a/third_party/sqlite/src/test/fts3_common.tcl
|
| +++ b/third_party/sqlite/src/test/fts3_common.tcl
|
| @@ -15,6 +15,129 @@
|
| #
|
|
|
| #-------------------------------------------------------------------------
|
| +# INSTRUCTIONS
|
| +#
|
| +# The following commands are available:
|
| +#
|
| +# fts3_build_db_1 N
|
| +# Using database handle [db] create an FTS4 table named t1 and populate
|
| +# it with N rows of data. N must be less than 10,000. Refer to the
|
| +# header comments above the proc implementation below for details.
|
| +#
|
| +# fts3_build_db_2 N
|
| +# Using database handle [db] create an FTS4 table named t2 and populate
|
| +# it with N rows of data. N must be less than 100,000. Refer to the
|
| +# header comments above the proc implementation below for details.
|
| +#
|
| +# fts3_integrity_check TBL
|
| +# TBL must be an FTS table in the database currently opened by handle
|
| +# [db]. This proc loads and tokenizes all documents within the table,
|
| +# then checks that the current contents of the FTS index matches the
|
| +# results.
|
| +#
|
| +# fts3_terms TBL WHERE
|
| +# Todo.
|
| +#
|
| +# fts3_doclist TBL TERM WHERE
|
| +# Todo.
|
| +#
|
| +#
|
| +#
|
| +
|
| +#-------------------------------------------------------------------------
|
| +# USAGE: fts3_build_db_1 SWITCHES N
|
| +#
|
| +# Build a sample FTS table in the database opened by database connection
|
| +# [db]. The name of the new table is "t1".
|
| +#
|
| +proc fts3_build_db_1 {args} {
|
| +
|
| + set default(-module) fts4
|
| +
|
| + set nArg [llength $args]
|
| + if {($nArg%2)==0} {
|
| + error "wrong # args: should be \"fts3_build_db_1 ?switches? n\""
|
| + }
|
| +
|
| + set n [lindex $args [expr $nArg-1]]
|
| + array set opts [array get default]
|
| + array set opts [lrange $args 0 [expr $nArg-2]]
|
| + foreach k [array names opts] {
|
| + if {0==[info exists default($k)]} { error "unknown option: $k" }
|
| + }
|
| +
|
| + if {$n > 10000} {error "n must be <= 10000"}
|
| + db eval "CREATE VIRTUAL TABLE t1 USING $opts(-module) (x, y)"
|
| +
|
| + set xwords [list zero one two three four five six seven eight nine ten]
|
| + set ywords [list alpha beta gamma delta epsilon zeta eta theta iota kappa]
|
| +
|
| + for {set i 0} {$i < $n} {incr i} {
|
| + set x ""
|
| + set y ""
|
| +
|
| + set x [list]
|
| + lappend x [lindex $xwords [expr ($i / 1000) % 10]]
|
| + lappend x [lindex $xwords [expr ($i / 100) % 10]]
|
| + lappend x [lindex $xwords [expr ($i / 10) % 10]]
|
| + lappend x [lindex $xwords [expr ($i / 1) % 10]]
|
| +
|
| + set y [list]
|
| + lappend y [lindex $ywords [expr ($i / 1000) % 10]]
|
| + lappend y [lindex $ywords [expr ($i / 100) % 10]]
|
| + lappend y [lindex $ywords [expr ($i / 10) % 10]]
|
| + lappend y [lindex $ywords [expr ($i / 1) % 10]]
|
| +
|
| + db eval { INSERT INTO t1(docid, x, y) VALUES($i, $x, $y) }
|
| + }
|
| +}
|
| +
|
| +#-------------------------------------------------------------------------
|
| +# USAGE: fts3_build_db_2 N ARGS
|
| +#
|
| +# Build a sample FTS table in the database opened by database connection
|
| +# [db]. The name of the new table is "t2".
|
| +#
|
| +proc fts3_build_db_2 {args} {
|
| +
|
| + set default(-module) fts4
|
| + set default(-extra) ""
|
| +
|
| + set nArg [llength $args]
|
| + if {($nArg%2)==0} {
|
| + error "wrong # args: should be \"fts3_build_db_1 ?switches? n\""
|
| + }
|
| +
|
| + set n [lindex $args [expr $nArg-1]]
|
| + array set opts [array get default]
|
| + array set opts [lrange $args 0 [expr $nArg-2]]
|
| + foreach k [array names opts] {
|
| + if {0==[info exists default($k)]} { error "unknown option: $k" }
|
| + }
|
| +
|
| + if {$n > 100000} {error "n must be <= 100000"}
|
| +
|
| + set sql "CREATE VIRTUAL TABLE t2 USING $opts(-module) (content"
|
| + if {$opts(-extra) != ""} {
|
| + append sql ", " $opts(-extra)
|
| + }
|
| + append sql ")"
|
| + db eval $sql
|
| +
|
| + set chars [list a b c d e f g h i j k l m n o p q r s t u v w x y z ""]
|
| +
|
| + for {set i 0} {$i < $n} {incr i} {
|
| + set word ""
|
| + set nChar [llength $chars]
|
| + append word [lindex $chars [expr {($i / 1) % $nChar}]]
|
| + append word [lindex $chars [expr {($i / $nChar) % $nChar}]]
|
| + append word [lindex $chars [expr {($i / ($nChar*$nChar)) % $nChar}]]
|
| +
|
| + db eval { INSERT INTO t2(docid, content) VALUES($i, $word) }
|
| + }
|
| +}
|
| +
|
| +#-------------------------------------------------------------------------
|
| # USAGE: fts3_integrity_check TBL
|
| #
|
| # This proc is used to verify that the full-text index is consistent with
|
| @@ -46,6 +169,7 @@ proc fts3_integrity_check {tbl} {
|
| fts3_read2 $tbl 1 A
|
|
|
| foreach zTerm [array names A] {
|
| + #puts $zTerm
|
| foreach doclist $A($zTerm) {
|
| set docid 0
|
| while {[string length $doclist]>0} {
|
| @@ -97,7 +221,7 @@ proc fts3_integrity_check {tbl} {
|
| set es "Error at docid=$iDoc col=$iCol pos=$pos. Index is missing"
|
| lappend errors $es
|
| } else {
|
| - if {$C($iDoc,$iCol,$pos) != "$term"} {
|
| + if {[string compare $C($iDoc,$iCol,$pos) $term]} {
|
| set es "Error at docid=$iDoc col=$iCol pos=$pos. Index "
|
| append es "has \"$C($iDoc,$iCol,$pos)\", document has \"$term\""
|
| lappend errors $es
|
| @@ -233,7 +357,8 @@ proc fts3_readleaf {blob} {
|
|
|
| set zTerm [string range $zPrev 0 [expr $nPrefix-1]]
|
| append zTerm [gobble_string blob $nSuffix]
|
| - set doclist [gobble_string blob [gobble_varint blob]]
|
| + set nDoclist [gobble_varint blob]
|
| + set doclist [gobble_string blob $nDoclist]
|
|
|
| lappend terms $zTerm $doclist
|
| set zPrev $zTerm
|
| @@ -249,7 +374,9 @@ proc fts3_read2 {tbl where varname} {
|
| FROM ${tbl}_segdir WHERE $where
|
| ORDER BY level ASC, idx DESC
|
| " {
|
| - if {$start_block == 0} {
|
| + set c 0
|
| + binary scan $root c c
|
| + if {$c==0} {
|
| foreach {t d} [fts3_readleaf $root] { lappend a($t) $d }
|
| } else {
|
| db eval " SELECT block
|
| @@ -258,7 +385,6 @@ proc fts3_read2 {tbl where varname} {
|
| ORDER BY blockid
|
| " {
|
| foreach {t d} [fts3_readleaf $block] { lappend a($t) $d }
|
| -
|
| }
|
| }
|
| }
|
|
|