insert: use query form, return trackid and timestamp; timestamp: without TZ

This commit is contained in:
Helmut Merz 2024-05-16 08:27:22 +02:00
parent 6c36fdc72d
commit bee8d6d75e
3 changed files with 21 additions and 9 deletions

View file

@ -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)

View file

@ -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))))

View file

@ -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)
)) ))