1.1--- a/lisp/lib/rdb/sst.lisp Mon Apr 22 23:14:47 2024 -0400
1.2+++ b/lisp/lib/rdb/sst.lisp Tue Apr 23 17:46:12 2024 -0400
1.3@@ -4,10 +4,65 @@
1.4 ;; sorted. An SST-FILE can be generated independently of a database
1.5 ;; and ingested on-demand.
1.6
1.7+;;; Commentary:
1.8+
1.9+;; This file defines the high-level SST-FILE-WRITER object which
1.10+;; implements the relevant protocols for generating SST Files on the
1.11+;; fly. To 'read' an SST file you should ingest it into an open
1.12+;; database
1.13+
1.14 ;;; Code:
1.15 (in-package :rdb)
1.16
1.17-(defstruct sst-file ())
1.18+(defstruct (sst-file-writer (:constructor %make-sst-file-writer (sap)))
1.19+ (sap nil :type (or null alien)))
1.20+
1.21+(defun make-sst-file-writer (&optional sap)
1.22+ (%make-sst-file-writer
1.23+ (or sap
1.24+ (create-sst-writer-raw))))
1.25+
1.26+(defun sst-file-size (writer)
1.27+ (declare (sst-file-writer writer))
1.28+ (sst-file-size-raw (sst-file-writer-sap writer)))
1.29+
1.30+(defun open-sst (writer path)
1.31+ (declare (sst-file-writer writer))
1.32+ (open-sst-writer-raw (sst-file-writer-sap writer) path))
1.33+
1.34+(defun finish-sst (writer)
1.35+ (declare (sst-file-writer writer))
1.36+ (finish-sst-writer-raw (sst-file-writer-sap writer)))
1.37
1.38-(defclass sst-stream (sb-gray:fundamental-binary-input-stream)
1.39- ())
1.40+(defun destroy-sst (writer)
1.41+ (declare (sst-file-writer writer))
1.42+ (with-slots (sap) writer
1.43+ (unless (null sap)
1.44+ (destroy-sst-writer-raw sap)
1.45+ (setf sap nil))))
1.46+
1.47+(defmethod print-object ((self sst-file-writer) stream)
1.48+ (print-unreadable-object (self stream :type t :identity t)
1.49+ (format stream ":size ~A" (when (sst-file-writer-sap self) (sst-file-size self)))))
1.50+
1.51+(defmethod put-key ((self sst-file-writer) key val)
1.52+ (sst-put-raw (sst-file-writer-sap self) key val))
1.53+
1.54+(defmethod put-key ((self sst-file-writer) (key simple-string) (val simple-string))
1.55+ (sst-put-str-raw (sst-file-writer-sap self) key val))
1.56+
1.57+(defmethod put-kv ((self sst-file-writer) (kv rdb-kv))
1.58+ (sst-put-raw (sst-file-writer-sap self)
1.59+ (rdb-key kv) (rdb-val kv)))
1.60+
1.61+(defmethod delete-key ((self sst-file-writer) key &key)
1.62+ (sst-delete-raw (sst-file-writer-sap self) key))
1.63+
1.64+(defmethod delete-key-ts ((self sst-file-writer) key ts)
1.65+ (sst-delete-ts-raw (sst-file-writer-sap self) key ts))
1.66+
1.67+(defmethod delete-key-range ((self sst-file-writer) start end &key)
1.68+ (sst-delete-range-raw (sst-file-writer-sap self) start end))
1.69+
1.70+(defmethod put-key-ts ((self sst-file-writer) key val ts)
1.71+ (sst-put-ts-raw (sst-file-writer-sap self) key val ts))