storage: working again after eliminiating engine / keep everything in context->storage
This commit is contained in:
parent
a7f449d8e6
commit
91dd8978ed
5 changed files with 35 additions and 16 deletions
|
@ -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))))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue