Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(320)

Unified Diff: third_party/sqlite/sqlite-src-3100200/ext/fts5/tool/fts5txt2db.tcl

Issue 1610543003: [sql] Import reference version of SQLite 3.10.2. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
+
+
+

Powered by Google App Engine
This is Rietveld 408576698