changeset 567: |
32995daa9a07 |
parent: |
42bc1432f217
|
child: |
35bb0d5ec95e |
author: |
Richard Westhaver <ellis@rwest.io> |
date: |
Mon, 29 Jul 2024 20:55:09 -0400 |
permissions: |
-rw-r--r-- |
description: |
skel and cli updates |
1 ;;; rdb.lisp --- RocksDB client 4 (uiop:define-package :bin/rdb 5 (:use :cl :rdb :std :cli/clap :log :clap) 9 (rocksdb:load-rocksdb t) 10 (defopt rdb-help (print-help *cli*)) 11 (defopt rdb-version (print-version *cli*)) 12 (defopt rdb-log-level (when *arg* (setq *log-level* :debug))) 14 (defopt rdb-target-db (setq *rdb* (create-db (or *arg* "rdb") :open nil))) 16 ;; (defopt rdb-config (init-rdb-user-config (parse-file-opt *arg*))) 19 (set-opt *rdb* :error-if-exists t) 21 (println (rdb-name *rdb*))) 24 (let ((db-path (cli-opt-val (car (find-opts *cli* "db"))))) 25 (if (and (null db-path) (zerop *argc*)) 26 (mapc (lambda (x) (println (format nil "~a ~a" (car x) (cdr x)))) 27 (hash-table-alist (backfill-opts (default-rdb-opts) :full t))) 28 (with-db (db (create-db db-path :open t)) 29 (println (hash-table-alist (backfill-opts db))) 30 (with-iter (it (create-iter db)) 31 (iter-seek-to-first it) 32 (loop while (iter-valid-p it) 35 (sb-ext:octets-to-string (iter-key it) :external-format '(:ascii :replacement #\_)) 38 finally (rocksdb::rocksdb-iter-destroy %it))))))) 42 (rdb-error "missing args: KEY VAL") 45 (insert-key db (pop *args*) (pop *args*))))) 49 (rdb-error "missing arg: KEY") 52 (when-let ((val (get-key db (car *args*)))) 61 (let ((val (make-array 32 :element-type 'octet))) 62 (dotimes (i (if (zerop *argc*) 1000 (parse-integer (car *args*)))) 64 (let ((seed (random 32))) 66 (setf (aref val ii) (random 256)))) 69 (sb-ext:string-to-octets (string (gensym "foo"))) 76 :description "A simple helper for RocksDB." 77 :opts ((:name "level" :global t :description "set the log level" :thunk rdb-log-level) 78 (:name "help" :global t :description "print help" :thunk rdb-help) 79 (:name "version" :global t :description "print version" :thunk rdb-version) 80 (:name "db" :global t :description "target db" :thunk rdb-target-db :kind dir)) 81 :cmds ((:name new :thunk rdb-new) 82 (:name show :thunk rdb-show) 83 (:name set :thunk rdb-set) 84 (:name get :thunk rdb-get) 85 (:name fuzz :thunk rdb-fuzz) 86 (:name destroy :thunk rdb-destroy))) 89 (let ((*log-level* :info)) 90 (with-slots (opts cmds args) *cli* 91 ;; FIXME 2024-05-07: needs to be triggered explicitly - need to support 92 ;; running global opt thunks even when no arg present - macro key 93 (if (active-cmds *cli*) 94 (prog2 (do-opt (car (find-opts *cli* "db"))) 97 (print-help *cli*)))))