diff --git a/storage/storage.lisp b/storage/storage.lisp index 197e0f0..fa28173 100644 --- a/storage/storage.lisp +++ b/storage/storage.lisp @@ -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 diff --git a/storage/tracking.lisp b/storage/tracking.lisp index e705211..97bbd6d 100644 --- a/storage/tracking.lisp +++ b/storage/tracking.lisp @@ -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))) diff --git a/test/test-storage.lisp b/test/test-storage.lisp index 1c8dddb..788af66 100644 --- a/test/test-storage.lisp +++ b/test/test-storage.lisp @@ -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)))