more refactorings: get rid of global *db-engine*, starting with methods on db-engine and storage

This commit is contained in:
Helmut Merz 2024-05-12 19:27:11 +02:00
parent d7eaac4294
commit c832ba70f3
3 changed files with 14 additions and 18 deletions

View file

@ -4,15 +4,13 @@
(defpackage :scopes/storage (defpackage :scopes/storage
(:use :common-lisp) (:use :common-lisp)
(:export #:*db-config* #:*db-engine* (:export #:*db-config*
#:make-engine #:make-storage #:db-params #:make-engine #:make-storage #:db-params
#:db #:do-sql #:drop-table))
#:drop-table))
(in-package :scopes/storage) (in-package :scopes/storage)
(defparameter *db-config* nil) (defparameter *db-config* nil)
(defparameter *db-engine* nil)
(defvar *backends* (defvar *backends*
'(:dbi dbi-make-engine)) '(:dbi dbi-make-engine))
@ -27,32 +25,30 @@
(config :initarg :config))) (config :initarg :config)))
(defun make-engine () (defun make-engine ()
(let* ((config *db-config*) (let ((backend (getf *db-config* :backend)))
(backend (getf config :backend)) (funcall (getf *backends* backend) *db-config*)))
(factory (getf *backends* backend)))
(print backend)
(print factory)
(print (type-of factory))
(funcall factory config)))
(defclass storage () (defclass storage ()
((engine :initarg :engine) ((engine :initarg :engine)
(db :reader db) (db :reader db)
(schema))) (schema)))
(defun make-storage () (defun make-storage (engine)
(let ((st (make-instance 'storage :engine *db-engine*)) (let ((st (make-instance 'storage :engine engine))
(db (funcall (slot-value *db-engine* 'connect)))) (db (funcall (slot-value engine 'connect))))
(setf (slot-value st 'db) db) (setf (slot-value st 'db) db)
st)) st))
(defun db-params (st) (defun db-params (st)
(slot-value (slot-value st 'engine) 'params)) (slot-value (slot-value st 'engine) 'params))
(defun do-sql (st sql)
(dbi:do-sql (db st) sql))
(defun drop-table (st tn) (defun drop-table (st tn)
(let ((sql (sxql:yield (sxql:drop-table tn :if-exists t)))) (let ((sql (sxql:yield (sxql:drop-table tn :if-exists t))))
(print sql) (print sql)
(dbi:do-sql (db st) sql))) (do-sql st sql)))
;;; backend-/driver-specific stuff ;;; backend-/driver-specific stuff

View file

@ -37,4 +37,4 @@
`((timestamp :type timestamptz :not-null t :default current_timestamp) `((timestamp :type timestamptz :not-null t :default current_timestamp)
(data :type ,json-type))))))) (data :type ,json-type)))))))
(print sql) (print sql)
(dbi:do-sql (storage:db st) sql))) (storage:do-sql st sql)))

View file

@ -30,8 +30,8 @@
(run))) (run)))
(defun run () (defun run ()
(let* ((storage:*db-engine* (storage:make-engine)) (let* ((engine (storage:make-engine))
(st (storage:make-storage)) (st (storage:make-storage engine))
(t:*tst* (t:test-suite))) (t:*tst* (t:test-suite)))
(test-track st) (test-track st)
(t:show-result))) (t:show-result)))