more refactorings: get rid of global *db-engine*, starting with methods on db-engine and storage
This commit is contained in:
parent
d7eaac4294
commit
c832ba70f3
3 changed files with 14 additions and 18 deletions
|
@ -4,15 +4,13 @@
|
|||
|
||||
(defpackage :scopes/storage
|
||||
(:use :common-lisp)
|
||||
(:export #:*db-config* #:*db-engine*
|
||||
(:export #:*db-config*
|
||||
#:make-engine #:make-storage #:db-params
|
||||
#:db
|
||||
#:drop-table))
|
||||
#:do-sql #:drop-table))
|
||||
|
||||
(in-package :scopes/storage)
|
||||
|
||||
(defparameter *db-config* nil)
|
||||
(defparameter *db-engine* nil)
|
||||
|
||||
(defvar *backends*
|
||||
'(:dbi dbi-make-engine))
|
||||
|
@ -27,32 +25,30 @@
|
|||
(config :initarg :config)))
|
||||
|
||||
(defun make-engine ()
|
||||
(let* ((config *db-config*)
|
||||
(backend (getf config :backend))
|
||||
(factory (getf *backends* backend)))
|
||||
(print backend)
|
||||
(print factory)
|
||||
(print (type-of factory))
|
||||
(funcall factory config)))
|
||||
(let ((backend (getf *db-config* :backend)))
|
||||
(funcall (getf *backends* backend) *db-config*)))
|
||||
|
||||
(defclass storage ()
|
||||
((engine :initarg :engine)
|
||||
(db :reader db)
|
||||
(schema)))
|
||||
|
||||
(defun make-storage ()
|
||||
(let ((st (make-instance 'storage :engine *db-engine*))
|
||||
(db (funcall (slot-value *db-engine* 'connect))))
|
||||
(defun make-storage (engine)
|
||||
(let ((st (make-instance 'storage :engine engine))
|
||||
(db (funcall (slot-value engine 'connect))))
|
||||
(setf (slot-value st 'db) db)
|
||||
st))
|
||||
|
||||
(defun db-params (st)
|
||||
(slot-value (slot-value st 'engine) 'params))
|
||||
|
||||
(defun do-sql (st sql)
|
||||
(dbi:do-sql (db st) sql))
|
||||
|
||||
(defun drop-table (st tn)
|
||||
(let ((sql (sxql:yield (sxql:drop-table tn :if-exists t))))
|
||||
(print sql)
|
||||
(dbi:do-sql (db st) sql)))
|
||||
(do-sql st sql)))
|
||||
|
||||
;;; backend-/driver-specific stuff
|
||||
|
||||
|
|
|
@ -37,4 +37,4 @@
|
|||
`((timestamp :type timestamptz :not-null t :default current_timestamp)
|
||||
(data :type ,json-type)))))))
|
||||
(print sql)
|
||||
(dbi:do-sql (storage:db st) sql)))
|
||||
(storage:do-sql st sql)))
|
||||
|
|
|
@ -30,8 +30,8 @@
|
|||
(run)))
|
||||
|
||||
(defun run ()
|
||||
(let* ((storage:*db-engine* (storage:make-engine))
|
||||
(st (storage:make-storage))
|
||||
(let* ((engine (storage:make-engine))
|
||||
(st (storage:make-storage engine))
|
||||
(t:*tst* (t:test-suite)))
|
||||
(test-track st)
|
||||
(t:show-result)))
|
||||
|
|
Loading…
Add table
Reference in a new issue