;;; 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)))