| Index: third_party/sqlite/sqlite-src-3100200/ext/fts5/tool/showfts5.tcl
|
| diff --git a/third_party/sqlite/sqlite-src-3100200/ext/fts5/tool/showfts5.tcl b/third_party/sqlite/sqlite-src-3100200/ext/fts5/tool/showfts5.tcl
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..75ac0f1c8f809dca172b1130b3a0452cc2c4d127
|
| --- /dev/null
|
| +++ b/third_party/sqlite/sqlite-src-3100200/ext/fts5/tool/showfts5.tcl
|
| @@ -0,0 +1,97 @@
|
| +
|
| +
|
| +
|
| +#-------------------------------------------------------------------------
|
| +# Process command line arguments.
|
| +#
|
| +proc usage {} {
|
| + puts stderr "usage: $::argv0 ?OPTIONS? database table"
|
| + puts stderr ""
|
| + puts stderr " -nterm (count number of terms in each segment)"
|
| + puts stderr " -segments (output segment contents)"
|
| + puts stderr ""
|
| + exit 1
|
| +}
|
| +
|
| +set O(nterm) 0
|
| +set O(segments) 0
|
| +
|
| +if {[llength $argv]<2} usage
|
| +foreach a [lrange $argv 0 end-2] {
|
| + switch -- $a {
|
| + -nterm {
|
| + set O(nterm) 1
|
| + }
|
| +
|
| + -segments {
|
| + set O(segments) 1
|
| + }
|
| +
|
| + default {
|
| + usage
|
| + }
|
| + }
|
| +}
|
| +
|
| +set database [lindex $argv end-1]
|
| +set tbl [lindex $argv end]
|
| +
|
| +
|
| +#-------------------------------------------------------------------------
|
| +# Count the number of terms in each segment of fts5 table $tbl. Store the
|
| +# counts in the array variable in the parent context named by parameter
|
| +# $arrayname, indexed by segment-id. Example:
|
| +#
|
| +# count_terms fts_tbl A
|
| +# foreach {k v} [array get A] { puts "segid=$k nTerm=$v" }
|
| +#
|
| +proc count_terms {tbl arrayname} {
|
| + upvar A $arrayname
|
| + array unset A
|
| + db eval "SELECT fts5_decode(rowid, block) AS d FROM ${tbl}_data" {
|
| + set desc [lindex $d 0]
|
| + if {[regexp {^segid=([0-9]*)} $desc -> id]} {
|
| + foreach i [lrange $d 1 end] {
|
| + if {[string match {term=*} $i]} { incr A($id) }
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +
|
| +#-------------------------------------------------------------------------
|
| +# Start of main program.
|
| +#
|
| +sqlite3 db $database
|
| +catch { load_static_extension db fts5 }
|
| +
|
| +if {$O(nterm)} { count_terms $tbl A }
|
| +
|
| +db eval "SELECT fts5_decode(rowid, block) AS d FROM ${tbl}_data WHERE id=10" {
|
| + foreach lvl [lrange $d 1 end] {
|
| + puts [lrange $lvl 0 2]
|
| +
|
| + foreach seg [lrange $lvl 3 end] {
|
| + if {$::O(nterm)} {
|
| + regexp {^id=([0-9]*)} $seg -> id
|
| + set nTerm 0
|
| + catch { set nTerm $A($id) }
|
| + puts [format " % -28s nTerm=%d" $seg $nTerm]
|
| + } else {
|
| + puts [format " % -28s" $seg]
|
| + }
|
| + }
|
| + }
|
| +}
|
| +
|
| +if {$O(segments)} {
|
| + puts ""
|
| + db eval "SELECT fts5_decode(rowid, block) AS d FROM ${tbl}_data WHERE id>10" {
|
| + puts $d
|
| + }
|
| +}
|
| +
|
| +
|
| +
|
| +
|
| +
|
|
|