diff --git a/storage/storage.lisp b/storage/storage.lisp index 55b69b7..a1decbb 100644 --- a/storage/storage.lisp +++ b/storage/storage.lisp @@ -11,6 +11,7 @@ #:*db-config* #:make-engine #:make-storage #:engine #:timestamp-to-sql + #:storage #:setup #:params #:db-options #:db-params #:qualified-table-name #:do-sql #:query #:drop-table #:schema @@ -36,8 +37,8 @@ '(:postgres db-engine-pg)) (defvar *db-params* - '(:sqlite3 (:id-type integer :json-type json :ts-sql #'identity) - :postgres (:id-type bigserial :json-type jsonb :ts-sql #'ts-string))) + '(:sqlite3 (:id-type integer :json-type json :ts-sql identity) + :postgres (:id-type bigserial :json-type jsonb :ts-sql ts-string))) (defclass db-engine () ((connect :initarg :connect) @@ -61,9 +62,24 @@ ((engine :reader engine :initarg :engine) (connect :reader connect :initarg :connect) (params :reader params :initarg :params) - (conn :reader conn) + (conn :accessor conn) (schema :accessor schema))) +(defun setup (cfg) + (let* ((conf (db-config cfg)) + (db-type (getf conf :db-type)) + (conn-args (getf conf :connect-args)) + (connect #'(lambda () + (apply #'dbi:connect-cached db-type conn-args))) + (st (make-instance 'storage + :params (getf *db-params* db-type) + :connect connect)) + (ctx (make-instance 'context + :config cfg :name (config:name cfg) :storage st))) + (setf (conn st) (funcall connect)) + (setf (schema st) (getf (getf conf :options) :schema)) + ctx)) + (defun make-storage (engine) (let ((st (make-instance 'storage :engine engine)) (conn (funcall (slot-value engine 'connect)))) diff --git a/storage/tracking.lisp b/storage/tracking.lisp index 569c019..bca7ed4 100644 --- a/storage/tracking.lisp +++ b/storage/tracking.lisp @@ -25,7 +25,7 @@ (storage:engine (storage (container tr)))) (defun timestamp-to-sql (tr ts) - (funcall (getf (params (storage (container tr))) :ts-sql) ts)) + (funcall (getf (storage:params (storage (container tr))) :ts-sql) ts)) (defclass container () ((item-factory :initform #'(lambda (cont head) @@ -53,8 +53,8 @@ (let ((vl (head-plist track))) (with-slots ((trid trackid) (ts time-stamp) data) track (if trid (setf (getf vl :trackid) trid)) - (if ts (setf (getf vl :timestamp) - (storage:timestamp-to-sql (engine track) ts))) + (if ts (setf (getf vl :timestamp) (timestamp-to-sql track ts))) + ;(storage:timestamp-to-sql (engine track) ts))) (if data (setf (getf vl :data) (jzon:stringify data)))) vl)) @@ -95,7 +95,7 @@ (tn (table-name cont)) (table (storage:qualified-table-name st tn)) (head-fields (head-fields cont)) - (params (storage:db-params st)) + (params (storage:params st)) (id-type (getf params :id-type)) (json-type (getf params :json-type)) (hf-def (mapcar #'(lambda (x) diff --git a/test/config-postgres.lisp b/test/config-postgres.lisp index 6bdd9b6..f2ac650 100644 --- a/test/config-postgres.lisp +++ b/test/config-postgres.lisp @@ -17,5 +17,5 @@ (config:root) -(config:add :storage :class 'storage:config :setup #'core:default-setup +(config:add :storage :class 'storage:config :setup #'storage:setup :db-config db-config-postgres) diff --git a/test/config-sqlite.lisp b/test/config-sqlite.lisp index 717cd61..4a32277 100644 --- a/test/config-sqlite.lisp +++ b/test/config-sqlite.lisp @@ -13,5 +13,5 @@ (config:root) -(config:add :storage :class 'storage:config :setup #'core:default-setup +(config:add :storage :class 'storage:config :setup #'storage:setup :db-config db-config-sqlite) diff --git a/test/test-storage.lisp b/test/test-storage.lisp index 75469f3..5636eda 100644 --- a/test/test-storage.lisp +++ b/test/test-storage.lisp @@ -31,15 +31,18 @@ (defun run () (core:setup-services) - (let* ((cfg (core:config (core:find-service :storage))) - (engine (storage:make-engine cfg)) - (st (storage:make-storage engine))) - (setf (storage:schema st) (getf (storage:db-options st) :schema)) - (test-track st) + (let* ((ctx (core:find-service :storage)) + (cfg (core:config ctx))) + ;(engine (storage:make-engine cfg)) + ;(st (storage:make-storage engine))) + ;(setf (storage:schema st) (getf (storage:db-options st) :schema)) + (test-track ctx) (t:show-result))) -(deftest test-track (st) - (let (cont tr tr2 (data (make-hash-table))) +(deftest test-track (ctx) + (let ((st (storage:storage ctx)) + (data (make-hash-table)) + cont tr tr2) (setf cont (make-instance 'tracking:container :storage st)) (defparameter cl-user::*cont cont) (storage:drop-table st :tracks)