| Index: third_party/sqlite/sqlite-src-3100200/ext/fts5/tool/fts5txt2db.tcl
|
| diff --git a/third_party/sqlite/sqlite-src-3100200/ext/fts5/tool/fts5txt2db.tcl b/third_party/sqlite/sqlite-src-3100200/ext/fts5/tool/fts5txt2db.tcl
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c22c5dae7270b7803ac5178cf9448b8030ec396d
|
| --- /dev/null
|
| +++ b/third_party/sqlite/sqlite-src-3100200/ext/fts5/tool/fts5txt2db.tcl
|
| @@ -0,0 +1,120 @@
|
| +
|
| +
|
| +proc usage {} {
|
| + puts stderr "$::argv0 ?OPTIONS? DATABASE FILE1..."
|
| + puts stderr ""
|
| + puts stderr "Options are"
|
| + puts stderr " -fts5"
|
| + puts stderr " -fts4"
|
| + puts stderr " -colsize <list of column sizes>"
|
| + puts stderr {
|
| +This script is designed to create fts4/5 tables with more than one column.
|
| +The -colsize option should be set to a Tcl list of integer values, one for
|
| +each column in the table. Each value is the number of tokens that will be
|
| +inserted into the column value for each row. For example, setting the -colsize
|
| +option to "5 10" creates an FTS table with 2 columns, with roughly 5 and 10
|
| +tokens per row in each, respectively.
|
| +
|
| +Each "FILE" argument should be a text file. The contents of these text files is
|
| +split on whitespace characters to form a list of tokens. The first N1 tokens
|
| +are used for the first column of the first row, where N1 is the first element
|
| +of the -colsize list. The next N2 are used for the second column of the first
|
| +row, and so on. Rows are added to the table until the entire list of tokens
|
| +is exhausted.
|
| +}
|
| + exit -1
|
| +}
|
| +
|
| +set O(aColSize) [list 10 10 10]
|
| +set O(tblname) t1
|
| +set O(fts) fts5
|
| +
|
| +
|
| +set options_with_values {-colsize}
|
| +
|
| +for {set i 0} {$i < [llength $argv]} {incr i} {
|
| + set opt [lindex $argv $i]
|
| + if {[string range $opt 0 0]!="-"} break
|
| +
|
| + if {[lsearch $options_with_values $opt]>=0} {
|
| + incr i
|
| + if {$i==[llength $argv]} usage
|
| + set val [lindex $argv $i]
|
| + }
|
| +
|
| + switch -- $opt {
|
| + -colsize {
|
| + set O(aColSize) $val
|
| + }
|
| +
|
| + -fts4 {
|
| + set O(fts) fts4
|
| + }
|
| +
|
| + -fts5 {
|
| + set O(fts) fts5
|
| + }
|
| + }
|
| +}
|
| +
|
| +if {$i > [llength $argv]-2} usage
|
| +set O(db) [lindex $argv $i]
|
| +set O(files) [lrange $argv [expr $i+1] end]
|
| +
|
| +sqlite3 db $O(db)
|
| +
|
| +# Create the FTS table in the db. Return a list of the table columns.
|
| +#
|
| +proc create_table {} {
|
| + global O
|
| + set cols [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]
|
| +
|
| + set nCol [llength $O(aColSize)]
|
| + set cols [lrange $cols 0 [expr $nCol-1]]
|
| +
|
| + set sql "CREATE VIRTUAL TABLE IF NOT EXISTS $O(tblname) USING $O(fts) ("
|
| + append sql [join $cols ,]
|
| + append sql ");"
|
| +
|
| + db eval $sql
|
| + return $cols
|
| +}
|
| +
|
| +# Return a list of tokens from the named file.
|
| +#
|
| +proc readfile {file} {
|
| + set fd [open $file]
|
| + set data [read $fd]
|
| + close $fd
|
| + split $data
|
| +}
|
| +
|
| +
|
| +# Load all the data into a big list of tokens.
|
| +#
|
| +set tokens [list]
|
| +foreach f $O(files) {
|
| + set tokens [concat $tokens [readfile $f]]
|
| +}
|
| +
|
| +set N [llength $tokens]
|
| +set i 0
|
| +set cols [create_table]
|
| +set sql "INSERT INTO $O(tblname) VALUES(\$[lindex $cols 0]"
|
| +foreach c [lrange $cols 1 end] {
|
| + append sql ", \$A($c)"
|
| +}
|
| +append sql ")"
|
| +
|
| +db eval BEGIN
|
| + while {$i < $N} {
|
| + foreach c $cols s $O(aColSize) {
|
| + set A($c) [lrange $tokens $i [expr $i+$s-1]]
|
| + incr i $s
|
| + }
|
| + db eval $sql
|
| + }
|
| +db eval COMMIT
|
| +
|
| +
|
| +
|
|
|