lib/sekka/jisyo-db.nnd in sekka-0.9.1 vs lib/sekka/jisyo-db.nnd in sekka-0.9.2

- old
+ new

@@ -32,15 +32,18 @@ ;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;; ;;; $Id: ;;; (use srfi-1) +(require "progressbar") (require "sekka/kvs") +(require "sekka/sekkaversion") (use sekka.util) -(define masterid "MASTER") -(define workid "WORK") +(define masterid "MASTER") +(define workid "WORK") +(define versionid "SEKKA::VERSION") (define alphabet-string "abcdefghijklmnopqrstuvwxyz>@;#") (define alphabet-lower-list (to-list (alphabet-string.split ""))) (define alphabet-upper-list (to-list (. (sekka-upcase alphabet-string) split ""))) (define alphabet-pairs (append-map @@ -175,10 +178,11 @@ (let1 kvs (Kvs.new (get-kvs-type)) (kvs.open filename) (kvs.clear) (create-keylist kvs f) (setup-ready-made-keylist kvs keylist) + (kvs.put! versionid SekkaVersion.version) (kvs.close))) (define (dump-sekka-jisyo-f f filename) (let1 kvs (Kvs.new (get-kvs-type)) @@ -188,12 +192,46 @@ (f.puts (+ key "\t" (kvs.get key)))) (kvs.keys.sort)) (kvs.close))) -(define (openSekkaJisyo dictSource cacheSource) - (when (not (rxmatch #/tch$/ dictSource)) - (set-kvs-type 'memcache)) + +(define (restore-sekka-jisyo-f f filename-or-hostname) + (define (file-length f) + (let1 total 0 + (for-each + (lambda (x) + (set! total (+ 1 total))) + f) + (f.rewind) + total)) + + (define (restore f kvs progress) + (let loop ([line (f.readline.chomp)]) + (let* ( + [key-value + (to-list (line.split #/[\t]+/))] + [key (first key-value)] + [value (if (> 2 (length key-value)) + "" + (second key-value))]) + (kvs.put! key value) + (progress.inc)) + (when (not (f.eof)) + (loop (f.readline.chomp))))) + + + (let1 total (file-length f) + (let ([kvs (Kvs.new (get-kvs-type))] + [progress (ProgressBar.new "Restore" total STDERR)]) + (kvs.open filename-or-hostname) + (kvs.clear) + (restore f kvs progress) + (kvs.close)))) + + +(define (openSekkaJisyo dictType dictSource cacheSource) + (set-kvs-type dictType) (let1 kvs (Kvs.new (get-kvs-type)) (kvs.open #?=dictSource) (let1 cachesv (if cacheSource (let1 obj (Kvs.new 'memcache) (obj.open cacheSource)