diff --git a/storage/storage.lisp b/storage/storage.lisp index cdec34c..ed1161e 100644 --- a/storage/storage.lisp +++ b/storage/storage.lisp @@ -7,7 +7,7 @@ (:export #:*db-config* #:make-engine #:make-storage #:db-options #:db-params #:qualified-table-name - #:do-sql #:drop-table + #:do-sql #:query #:drop-table #:schema)) (in-package :scopes/storage) @@ -54,9 +54,16 @@ (intern (format nil "~a.~a" schema (symbol-name tn))) tn))) +(defun query (st spec) + (multiple-value-bind (sql args) (sxql:yield spec) + ;(print sql) + (let* ((qp (dbi:prepare (conn st) sql)) + (qx (dbi:execute qp args))) + (dbi:fetch-all qx)))) + (defun do-sql (st spec) (multiple-value-bind (sql args) (sxql:yield spec) - (print sql) + ;(print sql) (dbi:do-sql (conn st) sql args))) (defun drop-table (st tn) diff --git a/storage/tracking.lisp b/storage/tracking.lisp index 9100635..4765b85 100644 --- a/storage/tracking.lisp +++ b/storage/tracking.lisp @@ -5,7 +5,7 @@ (defpackage :scopes/storage/tracking (:use :common-lisp) (:local-nicknames (:storage :scopes/storage)) - (:export #:track #:head #:head-proplist #:time-stamp #:data + (:export #:track #:trackid #:head #:head-proplist #:time-stamp #:data #:container #:make-item #:insert @@ -14,7 +14,7 @@ (in-package :scopes/storage/tracking) (defclass track () - ((trackid :initform nil) + ((trackid :accessor trackid :initform nil) (head :accessor head :initarg :head) (time-stamp :accessor time-stamp :initform nil) (data :accessor data :initform nil) @@ -49,10 +49,14 @@ (defun insert (track) (let* ((cont (container track)) (st (storage cont)) - (table (storage:qualified-table-name st (table-name cont)))) - (storage:do-sql st - (sxql:insert-into table - (apply #'sxql:make-clause ':set= (proplist track)))))) + (table (storage:qualified-table-name st (table-name cont))) + (res (car (storage:query st + (sxql:insert-into table + (apply #'sxql:make-clause ':set= (proplist track)) + (sxql:returning :trackid :timestamp)))))) + (setf (trackid track) (cadr res)) + (setf (time-stamp track) (cadddr res)) + track)) (defun create-table (cont) (let* @@ -71,7 +75,7 @@ (nconc `((trackid :type ,id-type :primary-key t :not-null t)) hf-def - `((timestamp :type timestamptz :not-null t :default current_timestamp) + `((timestamp :type timestamp :not-null t :default current_timestamp) (data :type ,json-type :not-null t :default |'{}'|))))) (create-indexes st table tn (indexes cont)))) diff --git a/test/test-storage.lisp b/test/test-storage.lisp index 82e66f4..d96b94f 100644 --- a/test/test-storage.lisp +++ b/test/test-storage.lisp @@ -47,4 +47,5 @@ (== (tracking:head-proplist tr) '(:username "john" :taskid "t01")) (== (tracking:data tr) nil) (tracking:insert tr) + (== (tracking:trackid tr) 1) ))