changelog shortlog graph tags branches changeset file revisions annotate raw help

Mercurial > core / lisp/lib/rdb/sst.lisp

revision 292: 00d1c8afcdbb
parent 226: 956fe7929a7c
child 293: e2e5c4831389
     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))