1.1--- a/lisp/ffi/rocksdb/macs.lisp Wed Sep 25 21:39:39 2024 -0400
1.2+++ b/lisp/ffi/rocksdb/macs.lisp Thu Sep 26 21:16:45 2024 -0400
1.3@@ -18,6 +18,37 @@
1.4 (deftype rocksdb-logger-function ()
1.5 '(function (unsigned-byte string) (values)))
1.6
1.7+;;; Options
1.8+(defmacro with-latest-options (db-path (db-opts-var cf-names-var cf-opts-var) &body body)
1.9+ ;; TODO 2024-09-26: ignore unknown?
1.10+ (with-gensyms (db-opts cf-names cf-opts)
1.11+ `(with-alien ((,db-opts (* rocksdb-options))
1.12+ (,cf-names (* c-string))
1.13+ (,cf-opts (* (* rocksdb-options)))
1.14+ (ncols size-t)
1.15+ (errptr rocksdb-errptr))
1.16+ (rocksdb-load-latest-options
1.17+ ,db-path
1.18+ (rocksdb-create-default-env)
1.19+ t
1.20+ (rocksdb-cache-create-lru 1080)
1.21+ (addr ,db-opts)
1.22+ (addr ncols)
1.23+ (addr ,cf-names)
1.24+ (addr ,cf-opts)
1.25+ errptr)
1.26+ (let ((,db-opts-var ,db-opts)
1.27+ (,cf-names-var (coerce
1.28+ (loop for i below ncols
1.29+ collect (deref ,cf-names i))
1.30+ 'vector))
1.31+ (,cf-opts-var (coerce
1.32+ (loop for i below ncols
1.33+ collect (deref ,cf-opts i))
1.34+ 'vector)))
1.35+ (unwind-protect ,@body
1.36+ (rocksdb-load-latest-options-destroy ,db-opts ,cf-names ,cf-opts ncols))))))
1.37+
1.38 ;;; Merge Ops
1.39 (defmacro define-full-merge-op (name &body body)
1.40 `(define-alien-callable ,name (* t)