modernc.org/cc@v1.0.1/v2/testdata/_sqlite/ext/fts5/tool/loadfts5.tcl (about)

     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