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

Side by Side 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 unified diff | Download patch
OLDNEW
(Empty)
1
2
3 proc usage {} {
4 puts stderr "$::argv0 ?OPTIONS? DATABASE FILE1..."
5 puts stderr ""
6 puts stderr "Options are"
7 puts stderr " -fts5"
8 puts stderr " -fts4"
9 puts stderr " -colsize <list of column sizes>"
10 puts stderr {
11 This script is designed to create fts4/5 tables with more than one column.
12 The -colsize option should be set to a Tcl list of integer values, one for
13 each column in the table. Each value is the number of tokens that will be
14 inserted into the column value for each row. For example, setting the -colsize
15 option to "5 10" creates an FTS table with 2 columns, with roughly 5 and 10
16 tokens per row in each, respectively.
17
18 Each "FILE" argument should be a text file. The contents of these text files is
19 split on whitespace characters to form a list of tokens. The first N1 tokens
20 are used for the first column of the first row, where N1 is the first element
21 of the -colsize list. The next N2 are used for the second column of the first
22 row, and so on. Rows are added to the table until the entire list of tokens
23 is exhausted.
24 }
25 exit -1
26 }
27
28 set O(aColSize) [list 10 10 10]
29 set O(tblname) t1
30 set O(fts) fts5
31
32
33 set options_with_values {-colsize}
34
35 for {set i 0} {$i < [llength $argv]} {incr i} {
36 set opt [lindex $argv $i]
37 if {[string range $opt 0 0]!="-"} break
38
39 if {[lsearch $options_with_values $opt]>=0} {
40 incr i
41 if {$i==[llength $argv]} usage
42 set val [lindex $argv $i]
43 }
44
45 switch -- $opt {
46 -colsize {
47 set O(aColSize) $val
48 }
49
50 -fts4 {
51 set O(fts) fts4
52 }
53
54 -fts5 {
55 set O(fts) fts5
56 }
57 }
58 }
59
60 if {$i > [llength $argv]-2} usage
61 set O(db) [lindex $argv $i]
62 set O(files) [lrange $argv [expr $i+1] end]
63
64 sqlite3 db $O(db)
65
66 # Create the FTS table in the db. Return a list of the table columns.
67 #
68 proc create_table {} {
69 global O
70 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]
71
72 set nCol [llength $O(aColSize)]
73 set cols [lrange $cols 0 [expr $nCol-1]]
74
75 set sql "CREATE VIRTUAL TABLE IF NOT EXISTS $O(tblname) USING $O(fts) ("
76 append sql [join $cols ,]
77 append sql ");"
78
79 db eval $sql
80 return $cols
81 }
82
83 # Return a list of tokens from the named file.
84 #
85 proc readfile {file} {
86 set fd [open $file]
87 set data [read $fd]
88 close $fd
89 split $data
90 }
91
92
93 # Load all the data into a big list of tokens.
94 #
95 set tokens [list]
96 foreach f $O(files) {
97 set tokens [concat $tokens [readfile $f]]
98 }
99
100 set N [llength $tokens]
101 set i 0
102 set cols [create_table]
103 set sql "INSERT INTO $O(tblname) VALUES(\$[lindex $cols 0]"
104 foreach c [lrange $cols 1 end] {
105 append sql ", \$A($c)"
106 }
107 append sql ")"
108
109 db eval BEGIN
110 while {$i < $N} {
111 foreach c $cols s $O(aColSize) {
112 set A($c) [lrange $tokens $i [expr $i+$s-1]]
113 incr i $s
114 }
115 db eval $sql
116 }
117 db eval COMMIT
118
119
120
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698