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