changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate lisp/lib/obj/db.lisp

changeset 698: 96958d3eb5b0
parent: 97dd03beda03
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
373
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
1
 ;;; lib/obj/db/proto.lisp --- Database Protocol
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
2
 
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
3
 ;;
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
4
 
387
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
5
 ;;; Commentary:
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
6
 
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
7
 ;; This set of 
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
8
 
373
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
9
 ;;; Code:
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
10
 (in-package :obj/db)
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
11
 
387
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
12
 ;;; Vars
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
13
 (declaim (sb-kernel:type-specifier *default-database-type* *default-database-collection-type*))
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
14
 (defparameter *default-database-type* 'vector)
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
15
 (defparameter *default-database-collection-type* 'list)
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
16
 
373
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
17
 ;;; Database
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
18
 (defgeneric db (self)
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
19
   (:documentation "Return the Database associated with SELF."))
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
20
 
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
21
 (defclass database ()
624
97dd03beda03 rocksdb updates in coordination with infra/scripts/org-graph-db-init.lisp
Richard Westhaver <ellis@rwest.io>
parents: 482
diff changeset
22
   ((db :initform nil :initarg :db :accessor db)))
373
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
23
 
387
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
24
 (defclass database-collection () ())
373
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
25
 
387
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
26
 ;; TODO 2024-05-30: maybe make into a macro?
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
27
 (defgeneric make-db (engine &rest initargs &key &allow-other-keys)
482
686748796f08 progress on Q
Richard Westhaver <ellis@rwest.io>
parents: 479
diff changeset
28
   (:documentation "Dispatch initializer for databases. An ENGINE must be supplied, which is
686748796f08 progress on Q
Richard Westhaver <ellis@rwest.io>
parents: 479
diff changeset
29
 usually a key such as :ROCKSDB or :SQLITE."))
373
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
30
 
387
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
31
 (defgeneric connect-db (db &key &allow-other-keys)
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
32
   (:documentation "Connect the database DB."))
373
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
33
 
479
ff3b057402d1 light cleanup
Richard Westhaver <ellis@rwest.io>
parents: 387
diff changeset
34
 (defgeneric query-db (db query &key &allow-other-keys)
387
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
35
   (:documentation "Execute QUERY against DB."))
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
36
 
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
37
 (defgeneric db-get (db key &key &allow-other-keys)
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
38
   (:documentation "Return the value associated with KEY from DB."))
373
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
39
 
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
40
 (defgeneric (setf db-get) (db key val &key &allow-other-keys))
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
41
 
387
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
42
 (defgeneric close-db (db &key &allow-other-keys)
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
43
   (:documentation "Close the database DB."))
373
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
44
 
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
45
 (defgeneric open-db (self))
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
46
 
387
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
47
 (defgeneric destroy-db (self)
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
48
   (:documentation "Destroy all traces of a database, deleting any on-disk data and shutting down
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
49
 in-memory objects."))
373
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
50
 
387
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
51
 (defgeneric find-db (dbs name &key &allow-other-keys)
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
52
   (:documentation "Return the db by NAME, from a collection of databases DBS."))
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
53
 
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
54
 (defgeneric insert-db (dbs name &key &allow-other-keys)
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
55
   (:documentation "Inserts a database by NAME into the database-collection DBS."))
373
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
56
 
624
97dd03beda03 rocksdb updates in coordination with infra/scripts/org-graph-db-init.lisp
Richard Westhaver <ellis@rwest.io>
parents: 482
diff changeset
57
 (defgeneric db-open-p (self)
97dd03beda03 rocksdb updates in coordination with infra/scripts/org-graph-db-init.lisp
Richard Westhaver <ellis@rwest.io>
parents: 482
diff changeset
58
   (:documentation "Return T when database SELF is open.")
97dd03beda03 rocksdb updates in coordination with infra/scripts/org-graph-db-init.lisp
Richard Westhaver <ellis@rwest.io>
parents: 482
diff changeset
59
   (:method ((self t)) nil)
97dd03beda03 rocksdb updates in coordination with infra/scripts/org-graph-db-init.lisp
Richard Westhaver <ellis@rwest.io>
parents: 482
diff changeset
60
   (:method ((self database)) (when (db self) t)))
97dd03beda03 rocksdb updates in coordination with infra/scripts/org-graph-db-init.lisp
Richard Westhaver <ellis@rwest.io>
parents: 482
diff changeset
61
 
97dd03beda03 rocksdb updates in coordination with infra/scripts/org-graph-db-init.lisp
Richard Westhaver <ellis@rwest.io>
parents: 482
diff changeset
62
 (defgeneric db-closed-p (self)
97dd03beda03 rocksdb updates in coordination with infra/scripts/org-graph-db-init.lisp
Richard Westhaver <ellis@rwest.io>
parents: 482
diff changeset
63
   (:documentation "Return T when database SELF is closed.")
97dd03beda03 rocksdb updates in coordination with infra/scripts/org-graph-db-init.lisp
Richard Westhaver <ellis@rwest.io>
parents: 482
diff changeset
64
   (:method ((self t)) t)
97dd03beda03 rocksdb updates in coordination with infra/scripts/org-graph-db-init.lisp
Richard Westhaver <ellis@rwest.io>
parents: 482
diff changeset
65
   (:method ((self database)) (unless (db self) t)))
97dd03beda03 rocksdb updates in coordination with infra/scripts/org-graph-db-init.lisp
Richard Westhaver <ellis@rwest.io>
parents: 482
diff changeset
66
 
373
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
67
 ;;; Common
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
68
 (defun slot-val (instance slot-name)
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
69
   (if (and instance
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
70
            (slot-boundp instance slot-name))
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
71
       (slot-value instance slot-name)))
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
72
 
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
73
 (defgeneric get-val (object element &optional data-type)
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
74
   (:documentation "Returns the value in a object based on the supplied element name and possible
387
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
75
 type hints.")
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
76
   (:method (object element &optional data-type)
373
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
77
   (when object
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
78
     (typecase (or data-type object)
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
79
       (hash-table
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
80
        (gethash element object))
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
81
       (standard-object
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
82
        (slot-val object element))
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
83
       (t
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
84
        (if data-type
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
85
            (cond 
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
86
              ((equal 'alist data-type)
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
87
               (second (assoc element object :test #'equal)))
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
88
              ((equal 'plist data-type)
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
89
               (get object element))
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
90
              (t
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
91
               (error "Does not handle this type of object. Implement your own get-val method.")))
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
92
            (if (listp object)
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
93
                (second (assoc element object :test #'equal))
387
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
94
                (error "Does not handle this type of object. Implement your own get-val method."))))))))
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
95
     
373
9eb2c112aa16 refactor db stuff
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
96
 
387
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
97
 (defgeneric (setf get-val) (new-value object element &optional data-type)
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
98
   (:documentation "Set the value in a object based on the supplied element name and possible type
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
99
 hints.")
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
100
   (:method (new-value object element &optional data-type)
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
101
     (typecase (or data-type object)
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
102
       (hash-table (setf (gethash element object) new-value))
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
103
       (standard-object (setf (slot-value object element) new-value))
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
104
       (t
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
105
        (if data-type
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
106
            (cond ((equal 'alist data-type)
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
107
                   (replace object (list (list element new-value))))
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
108
                  ((equal 'plist data-type)
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
109
                   ;;TODO: Implement this properly.
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
110
                   (get object element ))
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
111
                  (t
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
112
                   (error "Does not handle this type of object. Implement your own get-val method.")))
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
113
            (if (listp object)
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
114
                (replace object (list (list element new-value)))
8252ee515756 db and readtables
Richard Westhaver <ellis@rwest.io>
parents: 373
diff changeset
115
                (error "Does not handle this type of object. Implement your own get-val method.")))))))