2015-01-17 17:48:10 +00:00
|
|
|
|
|
|
|
|
|
|
|
proc loadfile {f} {
|
|
|
|
set fd [open $f]
|
|
|
|
set data [read $fd]
|
|
|
|
close $fd
|
|
|
|
return $data
|
|
|
|
}
|
|
|
|
|
|
|
|
set ::nRow 0
|
|
|
|
proc load_hierachy {dir} {
|
|
|
|
foreach f [glob -nocomplain -dir $dir *] {
|
|
|
|
if {$::O(limit) && $::nRow>=$::O(limit)} break
|
|
|
|
if {[file isdir $f]} {
|
|
|
|
load_hierachy $f
|
|
|
|
} else {
|
|
|
|
db eval { INSERT INTO t1 VALUES($f, loadfile($f)) }
|
|
|
|
incr ::nRow
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
proc usage {} {
|
|
|
|
puts stderr "Usage: $::argv0 ?SWITCHES? DATABASE PATH"
|
|
|
|
puts stderr ""
|
|
|
|
puts stderr "Switches are:"
|
2015-01-17 20:01:52 +00:00
|
|
|
puts stderr " -fts4 (use fts4 instead of fts5)"
|
|
|
|
puts stderr " -fts5 (use fts5)"
|
|
|
|
puts stderr " -porter (use porter tokenizer)"
|
|
|
|
puts stderr " -limit N (load no more than N documents)"
|
|
|
|
puts stderr " -automerge N (set the automerge parameter to N)"
|
2015-01-17 17:48:10 +00:00
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
2015-01-17 20:01:52 +00:00
|
|
|
set O(vtab) fts5
|
|
|
|
set O(tok) ""
|
|
|
|
set O(limit) 0
|
|
|
|
set O(automerge) -1
|
2015-01-17 17:48:10 +00:00
|
|
|
|
|
|
|
if {[llength $argv]<2} usage
|
2015-01-17 20:01:52 +00:00
|
|
|
set nOpt [expr {[llength $argv]-2}]
|
|
|
|
for {set i 0} {$i < $nOpt} {incr i} {
|
2015-01-17 17:48:10 +00:00
|
|
|
set arg [lindex $argv $i]
|
|
|
|
switch -- [lindex $argv $i] {
|
|
|
|
-fts4 {
|
|
|
|
set O(vtab) fts4
|
|
|
|
}
|
|
|
|
|
|
|
|
-fts5 {
|
|
|
|
set O(vtab) fts5
|
|
|
|
}
|
|
|
|
|
|
|
|
-porter {
|
|
|
|
set O(tok) ", tokenize=porter"
|
|
|
|
}
|
|
|
|
|
|
|
|
-limit {
|
2015-01-17 20:01:52 +00:00
|
|
|
if { [incr i]>=$nOpt } usage
|
2015-01-17 17:48:10 +00:00
|
|
|
set O(limit) [lindex $argv $i]
|
|
|
|
}
|
2015-01-17 20:01:52 +00:00
|
|
|
|
|
|
|
-automerge {
|
|
|
|
if { [incr i]>=$nOpt } usage
|
|
|
|
set O(automerge) [lindex $argv $i]
|
|
|
|
}
|
2015-01-17 17:48:10 +00:00
|
|
|
|
|
|
|
default {
|
|
|
|
usage
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
sqlite3 db [lindex $argv end-1]
|
|
|
|
db func loadfile loadfile
|
|
|
|
|
|
|
|
db transaction {
|
|
|
|
db eval "CREATE VIRTUAL TABLE t1 USING $O(vtab) (path, content$O(tok))"
|
2015-01-17 20:01:52 +00:00
|
|
|
if {$O(automerge)>=0} {
|
|
|
|
if {$O(vtab) == "fts5"} {
|
|
|
|
db eval { INSERT INTO t1(t1, rank) VALUES('automerge', $O(automerge)) }
|
|
|
|
} else {
|
|
|
|
db eval { INSERT INTO t1(t1) VALUES('automerge=' || $O(automerge)) }
|
|
|
|
}
|
|
|
|
}
|
2015-01-17 17:48:10 +00:00
|
|
|
load_hierachy [lindex $argv end]
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|