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 puts stderr " -detail MODE (detail mode for fts5 tables)" |
| 53 exit 1 |
| 54 } |
| 55 |
| 56 set O(vtab) fts5 |
| 57 set O(tok) "" |
| 58 set O(limit) 0 |
| 59 set O(delete) 0 |
| 60 set O(automerge) -1 |
| 61 set O(crisismerge) -1 |
| 62 set O(prefix) "" |
| 63 set O(trans) 0 |
| 64 set O(hashsize) -1 |
| 65 set O(detail) full |
| 66 |
| 67 if {[llength $argv]<2} usage |
| 68 set nOpt [expr {[llength $argv]-2}] |
| 69 for {set i 0} {$i < $nOpt} {incr i} { |
| 70 set arg [lindex $argv $i] |
| 71 switch -- [lindex $argv $i] { |
| 72 -fts4 { |
| 73 set O(vtab) fts4 |
| 74 } |
| 75 |
| 76 -fts5 { |
| 77 set O(vtab) fts5 |
| 78 } |
| 79 |
| 80 -porter { |
| 81 set O(tok) ", tokenize=porter" |
| 82 } |
| 83 |
| 84 -delete { |
| 85 set O(delete) 1 |
| 86 } |
| 87 |
| 88 -limit { |
| 89 if { [incr i]>=$nOpt } usage |
| 90 set O(limit) [lindex $argv $i] |
| 91 } |
| 92 |
| 93 -trans { |
| 94 if { [incr i]>=$nOpt } usage |
| 95 set O(trans) [lindex $argv $i] |
| 96 } |
| 97 |
| 98 -automerge { |
| 99 if { [incr i]>=$nOpt } usage |
| 100 set O(automerge) [lindex $argv $i] |
| 101 } |
| 102 |
| 103 -crisismerge { |
| 104 if { [incr i]>=$nOpt } usage |
| 105 set O(crisismerge) [lindex $argv $i] |
| 106 } |
| 107 |
| 108 -prefix { |
| 109 if { [incr i]>=$nOpt } usage |
| 110 set O(prefix) [lindex $argv $i] |
| 111 } |
| 112 |
| 113 -hashsize { |
| 114 if { [incr i]>=$nOpt } usage |
| 115 set O(hashsize) [lindex $argv $i] |
| 116 } |
| 117 |
| 118 -detail { |
| 119 if { [incr i]>=$nOpt } usage |
| 120 set O(detail) [lindex $argv $i] |
| 121 } |
| 122 |
| 123 default { |
| 124 usage |
| 125 } |
| 126 } |
| 127 } |
| 128 |
| 129 set dbfile [lindex $argv end-1] |
| 130 if {$O(delete)} { file delete -force $dbfile } |
| 131 sqlite3 db $dbfile |
| 132 catch { load_static_extension db fts5 } |
| 133 db func loadfile loadfile |
| 134 db eval "PRAGMA page_size=4096" |
| 135 |
| 136 db eval BEGIN |
| 137 set pref "" |
| 138 if {$O(prefix)!=""} { set pref ", prefix='$O(prefix)'" } |
| 139 if {$O(vtab)=="fts5"} { |
| 140 append pref ", detail=$O(detail)" |
| 141 } |
| 142 catch { |
| 143 db eval "CREATE VIRTUAL TABLE t1 USING $O(vtab) (path, content$O(tok)$pref)" |
| 144 db eval "INSERT INTO t1(t1, rank) VALUES('pgsz', 4050);" |
| 145 } |
| 146 |
| 147 if {$O(hashsize)>=0} { |
| 148 catch { |
| 149 db eval "INSERT INTO t1(t1, rank) VALUES('hashsize', $O(hashsize));" |
| 150 } |
| 151 } |
| 152 |
| 153 |
| 154 if {$O(automerge)>=0} { |
| 155 if {$O(vtab) == "fts5"} { |
| 156 db eval { INSERT INTO t1(t1, rank) VALUES('automerge', $O(automerge)) } |
| 157 } else { |
| 158 db eval { INSERT INTO t1(t1) VALUES('automerge=' || $O(automerge)) } |
| 159 } |
| 160 } |
| 161 if {$O(crisismerge)>=0} { |
| 162 if {$O(vtab) == "fts5"} { |
| 163 db eval {INSERT INTO t1(t1, rank) VALUES('crisismerge', $O(crisismerge))} |
| 164 } else { |
| 165 } |
| 166 } |
| 167 load_hierachy [lindex $argv end] |
| 168 db eval COMMIT |
| 169 puts "" |
| 170 |
| 171 |
| 172 |
OLD | NEW |