1.1--- a/lisp/lib/rdb/raw.lisp Tue Apr 09 22:09:52 2024 -0400
1.2+++ b/lisp/lib/rdb/raw.lisp Wed Apr 10 22:09:23 2024 -0400
1.3@@ -17,7 +17,9 @@
1.4 (lambda (o) (rocksdb-options-set-create-if-missing o 1))))
1.5
1.6 (defun get-stats-raw (opt htype)
1.7- (rocksdb-options-statistics-get-histogram-data opt htype (rocksdb-statistics-histogram-data-create)))
1.8+ (with-alien ((hist (* rocksdb-statistics-histogram-data) (rocksdb-statistics-histogram-data-create)))
1.9+ (rocksdb-options-statistics-get-histogram-data opt htype hist)
1.10+ (deref hist)))
1.11
1.12 ;;; DB
1.13 (defun open-db-raw (db-path &optional (opts (default-rocksdb-options)))
1.14@@ -35,17 +37,6 @@
1.15 (rocksdb-destroy-db opt (namestring (uiop:ensure-directory-pathname path)) err)
1.16 (rocksdb-options-destroy opt)))
1.17
1.18-;; (with-open-db-raw (db "/tmp/tmp-db") (print db))
1.19-;; (destroy-db-raw "/tmp/with-db-raw")
1.20-
1.21-(defmacro with-open-db-raw ((db-var db-path &optional (opt (default-rocksdb-options))) &body body)
1.22- `(let ((,db-var (open-db-raw ,db-path ,opt)))
1.23- (unwind-protect (progn ,@body)
1.24- (rocksdb-close ,db-var)
1.25- (with-errptr (err 'rocksdb-error)
1.26- ;; (rocksdb-destroy-db ,opt ,db-path err) ;; when :destroy only
1.27- (rocksdb-options-destroy ,opt)))))
1.28-
1.29 (defun get-property-raw (db str)
1.30 (rocksdb-property-value db (make-alien-string str)))
1.31
1.32@@ -87,24 +78,24 @@
1.33 (defun get-kv-raw (db key &optional (opt (rocksdb-readoptions-create)))
1.34 (let ((klen (length key)))
1.35 (with-errptr (err 'get-kv-error (list :db db :key key))
1.36- (with-alien ((vlen (* size-t) (make-alien size-t 0))
1.37+ (with-alien ((vlen size-t)
1.38 (k (* unsigned-char) (make-alien unsigned-char klen)))
1.39 (setfa k key)
1.40 (let* ((val (rocksdb-get db
1.41 opt
1.42 k klen
1.43- vlen
1.44+ (addr vlen)
1.45 err)))
1.46 ;; helps if we know the vlen beforehand, would need a custom
1.47 ;; C-side function probably.
1.48- (let ((v (make-array (deref vlen) :element-type 'unsigned-byte)))
1.49- (clone-octets-from-alien val v (deref vlen))
1.50- v))))))
1.51+ (let ((v (make-array vlen :element-type 'octet)))
1.52+ (clone-octets-from-alien val v vlen)
1.53+ (coerce v 'octet-vector)))))))
1.54
1.55 (defun get-kv-str-raw (db key &optional (opt (rocksdb-readoptions-create)))
1.56- (let ((k (string-to-octets key :null-terminate nil)))
1.57+ (let ((k (string-to-octets key)))
1.58 (let ((v (get-kv-raw db k opt)))
1.59- (when v (concatenate 'string (map 'vector #'code-char v))))))
1.60+ (when v (octets-to-string v)))))
1.61
1.62 ;;; Column Family
1.63 (defun create-cf-raw (db name &optional (opt (rocksdb-options-create)))
1.64@@ -161,6 +152,9 @@
1.65 (defun create-iter-raw (db &optional (opt (rocksdb-readoptions-create)))
1.66 (rocksdb-create-iterator db opt))
1.67
1.68+(defun create-cf-iter-raw (db cf &optional (opt (rocksdb-readoptions-create)))
1.69+ (rocksdb-create-iterator-cf db opt cf))
1.70+
1.71 (defun destroy-iter-raw (iter)
1.72 (rocksdb-iter-destroy iter))
1.73
1.74@@ -188,11 +182,6 @@
1.75 (when-let ((v (iter-val-raw iter)))
1.76 (octets-to-string v)))
1.77
1.78-(defmacro with-iter-raw ((iter-var db &optional (opt (rocksdb-readoptions-create))) &body body)
1.79- `(let ((,iter-var (create-iter-raw ,db ,opt)))
1.80- (unwind-protect (progn ,@body)
1.81- (destroy-iter-raw ,iter-var))))
1.82-
1.83 ;;; Backup Engine
1.84 (defun open-backup-engine-raw (be-path &optional (opts (rocksdb-options-create)))
1.85 (with-errptr (err 'open-backup-engine-error (list :db be-path))
1.86@@ -216,12 +205,6 @@
1.87 (with-errptr (err 'rocksdb-error)
1.88 (rocksdb-backup-engine-restore-db-from-backup be db-path backup-path opt backup-id err)))
1.89
1.90-(defmacro with-open-backup-engine-raw ((be-var be-path &optional (opt (rocksdb-options-create)))
1.91- &body body)
1.92- `(let ((,be-var (open-backup-engine-raw ,be-path ,opt)))
1.93- (unwind-protect (progn ,@body)
1.94- (rocksdb-backup-engine-close ,be-var))))
1.95-
1.96 ;;; Snapshot
1.97 (defun create-snapshot-raw (db)
1.98 (rocksdb-create-snapshot db))