insert: use query form, return trackid and timestamp; timestamp: without TZ
This commit is contained in:
parent
6c36fdc72d
commit
bee8d6d75e
3 changed files with 21 additions and 9 deletions
|
@ -7,7 +7,7 @@
|
||||||
(:export #:*db-config*
|
(:export #:*db-config*
|
||||||
#:make-engine #:make-storage
|
#:make-engine #:make-storage
|
||||||
#:db-options #:db-params #:qualified-table-name
|
#:db-options #:db-params #:qualified-table-name
|
||||||
#:do-sql #:drop-table
|
#:do-sql #:query #:drop-table
|
||||||
#:schema))
|
#:schema))
|
||||||
|
|
||||||
(in-package :scopes/storage)
|
(in-package :scopes/storage)
|
||||||
|
@ -54,9 +54,16 @@
|
||||||
(intern (format nil "~a.~a" schema (symbol-name tn)))
|
(intern (format nil "~a.~a" schema (symbol-name tn)))
|
||||||
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)
|
(defun do-sql (st spec)
|
||||||
(multiple-value-bind (sql args) (sxql:yield spec)
|
(multiple-value-bind (sql args) (sxql:yield spec)
|
||||||
(print sql)
|
;(print sql)
|
||||||
(dbi:do-sql (conn st) sql args)))
|
(dbi:do-sql (conn st) sql args)))
|
||||||
|
|
||||||
(defun drop-table (st tn)
|
(defun drop-table (st tn)
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
(defpackage :scopes/storage/tracking
|
(defpackage :scopes/storage/tracking
|
||||||
(:use :common-lisp)
|
(:use :common-lisp)
|
||||||
(:local-nicknames (:storage :scopes/storage))
|
(:local-nicknames (:storage :scopes/storage))
|
||||||
(:export #:track #:head #:head-proplist #:time-stamp #:data
|
(:export #:track #:trackid #:head #:head-proplist #:time-stamp #:data
|
||||||
#:container
|
#:container
|
||||||
#:make-item
|
#:make-item
|
||||||
#:insert
|
#:insert
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
(in-package :scopes/storage/tracking)
|
(in-package :scopes/storage/tracking)
|
||||||
|
|
||||||
(defclass track ()
|
(defclass track ()
|
||||||
((trackid :initform nil)
|
((trackid :accessor trackid :initform nil)
|
||||||
(head :accessor head :initarg :head)
|
(head :accessor head :initarg :head)
|
||||||
(time-stamp :accessor time-stamp :initform nil)
|
(time-stamp :accessor time-stamp :initform nil)
|
||||||
(data :accessor data :initform nil)
|
(data :accessor data :initform nil)
|
||||||
|
@ -49,10 +49,14 @@
|
||||||
(defun insert (track)
|
(defun insert (track)
|
||||||
(let* ((cont (container track))
|
(let* ((cont (container track))
|
||||||
(st (storage cont))
|
(st (storage cont))
|
||||||
(table (storage:qualified-table-name st (table-name cont))))
|
(table (storage:qualified-table-name st (table-name cont)))
|
||||||
(storage:do-sql st
|
(res (car (storage:query st
|
||||||
(sxql:insert-into table
|
(sxql:insert-into table
|
||||||
(apply #'sxql:make-clause ':set= (proplist track))))))
|
(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)
|
(defun create-table (cont)
|
||||||
(let*
|
(let*
|
||||||
|
@ -71,7 +75,7 @@
|
||||||
(nconc
|
(nconc
|
||||||
`((trackid :type ,id-type :primary-key t :not-null t))
|
`((trackid :type ,id-type :primary-key t :not-null t))
|
||||||
hf-def
|
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 |'{}'|)))))
|
(data :type ,json-type :not-null t :default |'{}'|)))))
|
||||||
(create-indexes st table tn (indexes cont))))
|
(create-indexes st table tn (indexes cont))))
|
||||||
|
|
||||||
|
|
|
@ -47,4 +47,5 @@
|
||||||
(== (tracking:head-proplist tr) '(:username "john" :taskid "t01"))
|
(== (tracking:head-proplist tr) '(:username "john" :taskid "t01"))
|
||||||
(== (tracking:data tr) nil)
|
(== (tracking:data tr) nil)
|
||||||
(tracking:insert tr)
|
(tracking:insert tr)
|
||||||
|
(== (tracking:trackid tr) 1)
|
||||||
))
|
))
|
||||||
|
|
Loading…
Add table
Reference in a new issue