OLD | NEW |
| (Empty) |
1 | |
2 | |
3 proc loadfile {f} { | |
4 set fd [open $f] | |
5 set data [read $fd] | |
6 close $fd | |
7 return $data | |
8 } | |
9 | |
10 set ::nRow 0 | |
11 set ::nRowPerDot 1000 | |
12 | |
13 proc load_hierachy {dir} { | |
14 foreach f [glob -nocomplain -dir $dir *] { | |
15 if {$::O(limit) && $::nRow>=$::O(limit)} break | |
16 if {[file isdir $f]} { | |
17 load_hierachy $f | |
18 } else { | |
19 db eval { INSERT INTO t1 VALUES($f, loadfile($f)) } | |
20 incr ::nRow | |
21 | |
22 if {$::O(trans) && ($::nRow % $::O(trans))==0} { | |
23 db eval { COMMIT } | |
24 db eval { INSERT INTO t1(t1) VALUES('integrity-check') } | |
25 db eval { BEGIN } | |
26 } | |
27 | |
28 if {($::nRow % $::nRowPerDot)==0} { | |
29 puts -nonewline . | |
30 if {($::nRow % (65*$::nRowPerDot))==0} { puts "" } | |
31 flush stdout | |
32 } | |
33 | |
34 } | |
35 } | |
36 } | |
37 | |
38 proc usage {} { | |
39 puts stderr "Usage: $::argv0 ?SWITCHES? DATABASE PATH" | |
40 puts stderr "" | |
41 puts stderr "Switches are:" | |
42 puts stderr " -fts4 (use fts4 instead of fts5)" | |
43 puts stderr " -fts5 (use fts5)" | |
44 puts stderr " -porter (use porter tokenizer)" | |
45 puts stderr " -delete (delete the database file before starting)" | |
46 puts stderr " -limit N (load no more than N documents)" | |
47 puts stderr " -automerge N (set the automerge parameter to N)" | |
48 puts stderr " -crisismerge N (set the crisismerge parameter to N)" | |
49 puts stderr " -prefix PREFIX (comma separated prefix= argument)" | |
50 puts stderr " -trans N (commit after N inserts - 0 == never)" | |
51 puts stderr " -hashsize N (set the fts5 hashsize parameter to N)" | |
52 exit 1 | |
53 } | |
54 | |
55 set O(vtab) fts5 | |
56 set O(tok) "" | |
57 set O(limit) 0 | |
58 set O(delete) 0 | |
59 set O(automerge) -1 | |
60 set O(crisismerge) -1 | |
61 set O(prefix) "" | |
62 set O(trans) 0 | |
63 set O(hashsize) -1 | |
64 | |
65 if {[llength $argv]<2} usage | |
66 set nOpt [expr {[llength $argv]-2}] | |
67 for {set i 0} {$i < $nOpt} {incr i} { | |
68 set arg [lindex $argv $i] | |
69 switch -- [lindex $argv $i] { | |
70 -fts4 { | |
71 set O(vtab) fts4 | |
72 } | |
73 | |
74 -fts5 { | |
75 set O(vtab) fts5 | |
76 } | |
77 | |
78 -porter { | |
79 set O(tok) ", tokenize=porter" | |
80 } | |
81 | |
82 -delete { | |
83 set O(delete) 1 | |
84 } | |
85 | |
86 -limit { | |
87 if { [incr i]>=$nOpt } usage | |
88 set O(limit) [lindex $argv $i] | |
89 } | |
90 | |
91 -trans { | |
92 if { [incr i]>=$nOpt } usage | |
93 set O(trans) [lindex $argv $i] | |
94 } | |
95 | |
96 -automerge { | |
97 if { [incr i]>=$nOpt } usage | |
98 set O(automerge) [lindex $argv $i] | |
99 } | |
100 | |
101 -crisismerge { | |
102 if { [incr i]>=$nOpt } usage | |
103 set O(crisismerge) [lindex $argv $i] | |
104 } | |
105 | |
106 -prefix { | |
107 if { [incr i]>=$nOpt } usage | |
108 set O(prefix) [lindex $argv $i] | |
109 } | |
110 | |
111 -hashsize { | |
112 if { [incr i]>=$nOpt } usage | |
113 set O(hashsize) [lindex $argv $i] | |
114 } | |
115 | |
116 default { | |
117 usage | |
118 } | |
119 } | |
120 } | |
121 | |
122 set dbfile [lindex $argv end-1] | |
123 if {$O(delete)} { file delete -force $dbfile } | |
124 sqlite3 db $dbfile | |
125 catch { load_static_extension db fts5 } | |
126 db func loadfile loadfile | |
127 db eval "PRAGMA page_size=4096" | |
128 | |
129 db eval BEGIN | |
130 set pref "" | |
131 if {$O(prefix)!=""} { set pref ", prefix='$O(prefix)'" } | |
132 catch { | |
133 db eval "CREATE VIRTUAL TABLE t1 USING $O(vtab) (path, content$O(tok)$pref)" | |
134 db eval "INSERT INTO t1(t1, rank) VALUES('pgsz', 4050);" | |
135 } | |
136 | |
137 if {$O(hashsize)>=0} { | |
138 catch { | |
139 db eval "INSERT INTO t1(t1, rank) VALUES('hashsize', $O(hashsize));" | |
140 } | |
141 } | |
142 | |
143 | |
144 if {$O(automerge)>=0} { | |
145 if {$O(vtab) == "fts5"} { | |
146 db eval { INSERT INTO t1(t1, rank) VALUES('automerge', $O(automerge)) } | |
147 } else { | |
148 db eval { INSERT INTO t1(t1) VALUES('automerge=' || $O(automerge)) } | |
149 } | |
150 } | |
151 if {$O(crisismerge)>=0} { | |
152 if {$O(vtab) == "fts5"} { | |
153 db eval {INSERT INTO t1(t1, rank) VALUES('crisismerge', $O(crisismerge))} | |
154 } else { | |
155 } | |
156 } | |
157 load_hierachy [lindex $argv end] | |
158 db eval COMMIT | |
159 puts "" | |
160 | |
161 | |
162 | |
OLD | NEW |