cl-scopes/storage/storage.lisp

46 lines
1.1 KiB
Common Lisp

;;; cl-scopes/storage/storage.lisp
;;;; Common layer for SQL storage functionality.
(defpackage :scopes/storage
(:use :common-lisp)
(:export #:*db-config* #:*db-engine*
#:make-engine #:make-storage #:db-params
#:drop-table))
(in-package :scopes/storage)
(defparameter *db-config* nil)
(defparameter *db-engine* nil)
(defclass db-engine ()
((params :initarg :params)
(config :initarg :config)))
(defun make-engine ()
(make-engine-db (getf *db-config* :db-type) *db-config*))
(defclass storage ()
((engine :initarg :engine)
(db)
(schema)))
(defun make-storage ()
(make-instance 'storage :engine *db-engine*))
(defun db-params (st)
(slot-value (slot-value st 'engine) 'params))
(defun drop-table (st tn)
st
(print (sxql:yield
(sxql:drop-table tn :if-exists t))))
;; db-driver-specific stuff
(defun make-engine-db (db-type config)
(let ((params
(case db-type
(:sqlite3 '(:id-type integer :json-type json))
(:postgres '(:id-type bigserial :json-type jsonb)))))
(make-instance 'db-engine :params params :config config)))