changeset 439: | ea4f008ad13f |
parent: | 8a312fa72406 |
child: | b9c64be96888 |
author: | Richard Westhaver <ellis@rwest.io> |
date: | Wed, 12 Jun 2024 17:34:07 -0400 |
permissions: | -rw-r--r-- |
description: | packy work, added json-trailing-whitespace-p variable for json readers |
308 | 1 | ;;; rdb.lisp --- RocksDB client |
2 | ||
3 | ;;; Code: |
|
4 | (uiop:define-package :bin/rdb |
|
439
ea4f008ad13f
packy work, added json-trailing-whitespace-p variable for json readers
Richard Westhaver <ellis@rwest.io>
parents:
427
diff
changeset
|
5 | (:use :cl :rdb :std :cli/clap :log) |
308 | 6 | (:export :main)) |
7 | ||
8 | (in-package :bin/rdb) |
|
9 | (rocksdb:load-rocksdb t) |
|
10 | (defopt rdb-help (print-help $cli)) |
|
11 | (defopt rdb-version (print-version $cli)) |
|
309
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
12 | (defopt rdb-log-level (when $val (setq *log-level* :debug))) |
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
13 | (defvar *rdb*) |
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
14 | (defopt rdb-target-db (setq *rdb* (create-db (or $val "rdb") :open nil))) |
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
15 | |
308 | 16 | ;; (defopt rdb-config (init-rdb-user-config (parse-file-opt $val))) |
17 | ||
310 | 18 | (defcmd rdb-new |
309
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
19 | (set-opt *rdb* :error-if-exists t) |
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
20 | (open-db *rdb*) |
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
21 | (println (rdb-name *rdb*))) |
308 | 22 | |
310 | 23 | (defcmd rdb-show |
439
ea4f008ad13f
packy work, added json-trailing-whitespace-p variable for json readers
Richard Westhaver <ellis@rwest.io>
parents:
427
diff
changeset
|
24 | (let ((db-path (cli-opt-val (car (find-opts $cli "db"))))) |
310 | 25 | (if (and (null db-path) (zerop $argc)) |
309
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
26 | (mapc (lambda (x) (println (format nil "~a ~a" (car x) (cdr x)))) |
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
27 | (hash-table-alist (backfill-opts (default-rdb-opts) :full t))) |
310 | 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) |
|
33 | do (progn |
|
34 | (format t "~A : ~A~%" |
|
35 | (sb-ext:octets-to-string (iter-key it) :external-format '(:ascii :replacement #\_)) |
|
36 | (iter-val it)) |
|
37 | (iter-next it)) |
|
38 | finally (rocksdb::rocksdb-iter-destroy %it))))))) |
|
309
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
39 | |
310 | 40 | (defcmd rdb-set |
309
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
41 | (if (> 2 $argc) |
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
42 | (rdb-error "missing args: KEY VAL") |
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
43 | (with-db (db *rdb*) |
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
44 | (open-db db) |
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
45 | (insert-key db (pop $args) (pop $args))))) |
308 | 46 | |
310 | 47 | (defcmd rdb-get |
48 | (if (> 1 $argc) |
|
49 | (rdb-error "missing arg: KEY") |
|
50 | (with-db (db *rdb*) |
|
51 | (open-db db) |
|
52 | (when-let ((val (get-key db (car $args)))) |
|
53 | (println val))))) |
|
54 | ||
55 | (defcmd rdb-destroy |
|
56 | (destroy-db *rdb*)) |
|
57 | ||
58 | (defcmd rdb-fuzz |
|
59 | (with-db (db *rdb*) |
|
60 | (open-db db) |
|
61 | (let ((val (make-array 32 :element-type 'octet))) |
|
62 | (dotimes (i (if (zerop $argc) 1000 (parse-integer (car $args)))) |
|
63 | (nreversef val) |
|
64 | (let ((seed (random 32))) |
|
65 | (dotimes (ii seed) |
|
66 | (setf (aref val ii) (random 256)))) |
|
67 | (nreversef val) |
|
68 | (put-key db |
|
69 | (sb-ext:string-to-octets (string (gensym "foo"))) |
|
70 | val))))) |
|
71 | ||
308 | 72 | (define-cli $cli |
73 | :name "rdb" |
|
74 | :version "0.1.0" |
|
310 | 75 | :thunk rdb-show |
76 | :description "A simple helper for RocksDB." |
|
308 | 77 | :opts (make-opts |
309
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
78 | (:name "level" :global t :description "set the log level" :thunk rdb-log-level) |
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
79 | (:name "help" :global t :description "print help" :thunk rdb-help) |
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
80 | (:name "version" :global t :description "print version" :thunk rdb-version) |
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
81 | (:name "db" :global t :description "target db" :thunk rdb-target-db :kind dir)) |
308 | 82 | :cmds (make-cmds |
310 | 83 | (:name new :thunk rdb-new) |
84 | (:name show :thunk rdb-show) |
|
85 | (:name set :thunk rdb-set) |
|
86 | (:name get :thunk rdb-get) |
|
87 | (:name fuzz :thunk rdb-fuzz) |
|
88 | (:name destroy :thunk rdb-destroy))) |
|
308 | 89 | |
90 | (defmain () |
|
309
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
91 | (let ((*log-level* :info)) |
94d358919982
refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents:
308
diff
changeset
|
92 | (with-cli (opts cmds args) $cli |
310 | 93 | ;; FIXME 2024-05-07: needs to be triggered explicitly - need to support |
94 | ;; running global opt thunks even when no arg present - macro key |
|
95 | (if (active-cmds $cli) |
|
439
ea4f008ad13f
packy work, added json-trailing-whitespace-p variable for json readers
Richard Westhaver <ellis@rwest.io>
parents:
427
diff
changeset
|
96 | (prog2 (do-opt (car (find-opts $cli "db"))) |
310 | 97 | (do-cmd $cli) |
98 | (close-db *rdb*)) |
|
99 | (print-help $cli))))) |